软件工程第二次作业

软件工程第二次作业

选择开发工具

这此,我决定使用c++进行开发。一来,可以复习巩固一下c++部分内容。第二,可以锻炼一下自己的c++编程能力。深入理解一下,c++的面向对象部分的精髓。

使用Visual Studio进行开发,VS作为一个强大的IDE,我们应该深入了解其功能,在团队合作中发挥出更大的效能来。熟练使用VS的快捷键,为以后敏捷开发打好基础。VS的界面如下图1.1所示。图1.1 VS界面

熟悉自动单元测试技术

测试是软甲工程和软件开发中的重要组成部分,因此自动测试技术就更为重要了。一个好的测试,充分的测试,提前发现问题,是节省开发成本、减少开发时间的重要举措。在自动化测试框架中,我使用了MS的CppUnitTestFramework框架,通过查阅相关的资料,了解了它的测试的方法。

因为社区般的VS不支持进行代码覆盖率测试,所以我下载了一个VS插件,这个插件可以很好的进行代码覆盖率的测试。我认为,开发者自己的测试,最好是使用白盒测试,因为我们最清楚内部的运行方式。所以,进行代码覆盖率测试就应该是尽量进行。

我写的一个简单的c++程序如下,这个一个简单的获取输入的三个数中的最大值和最小值的一个类。

class Myclass
{
public:
	Myclass();
	Myclass(float first, float second, float third);
	~Myclass();
	float getmaxnum();
	float getminnum();
private:
	float f_num;
	float sec_num;
	float thi_num;
};


Myclass::Myclass()
{
}

Myclass::Myclass(float first, float second, float third)
{
	Myclass::f_num = first;
	Myclass::sec_num = second;
	Myclass::thi_num = third;
}

Myclass::~Myclass()
{
}

float Myclass::getmaxnum()
{
	float temp = 0;
	temp = (f_num > sec_num) ? f_num : sec_num;
	return (temp > thi_num) ? temp : thi_num;
}

float Myclass::getminnum()
{
	float temp = 0;
	temp = (f_num > sec_num) ? sec_num : f_num;
	return (temp > thi_num) ? thi_num : temp;
}

测试框架中的代码如下所示,在下面的测试中,我测试了边界值和普通值,测试了不同的数据输入类型,力求能够测试到所有的情况。

#include "stdafx.h"
#include "CppUnitTest.h"
#include "../Project1/source.cpp"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{		
	TEST_CLASS(UnitTest1)
	{
	public:
		
		TEST_METHOD(TestMethod1)
		{
            // TODO: 在此输入测试代码
			float a = 3;
			float b = 1;
			float te1 = 1.1f;
			float te2 = 1.2f;
			Myclass test1(1,2,3);
			Myclass test2(1.1f,1.2f,1.2f);
			Myclass test3(1, 1.2f, 1.1f);
			Assert::AreEqual(a, test1.getmaxnum());
			Assert::AreEqual(b, test1.getminnum());
			Assert::AreEqual(te1, test2.getminnum());
			Assert::AreEqual(te2, test2.getmaxnum());
			Assert::AreEqual(b, test3.getminnum());
			Assert::AreEqual(te2, test3.getmaxnum());
		}
	};
}

测试的结果

测试的结果如下图2.1所示。图2.1 测试结果图

代码覆盖率测试如下图2.2所示。图2.2 代码覆盖率测试

总结

通过这次的实践,我认识到代码的测试是一项很重要的工作。而以前,因为没有相关的软件开发知识,虽然也通过其它土办法进行了相关的测试,但是软件工程,我们应该从大型工程,从工业的角度去重新思考这个问题。单元测试、回归测试,这些标准的测试方法,在软件工程中的收益完全是大于这些工作量的。

毫无疑问,软件开发中,符合规范的软件测试无疑是非常重要的!

posted @ 2019-04-13 21:58  左键已坏  阅读(223)  评论(0)    收藏  举报