软件工程第二次作业
选择开发工具
这此,我决定使用c++进行开发。一来,可以复习巩固一下c++部分内容。第二,可以锻炼一下自己的c++编程能力。深入理解一下,c++的面向对象部分的精髓。
使用Visual Studio进行开发,VS作为一个强大的IDE,我们应该深入了解其功能,在团队合作中发挥出更大的效能来。熟练使用VS的快捷键,为以后敏捷开发打好基础。VS的界面如下图1.1所示。
熟悉自动单元测试技术
测试是软甲工程和软件开发中的重要组成部分,因此自动测试技术就更为重要了。一个好的测试,充分的测试,提前发现问题,是节省开发成本、减少开发时间的重要举措。在自动化测试框架中,我使用了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.2所示。
总结
通过这次的实践,我认识到代码的测试是一项很重要的工作。而以前,因为没有相关的软件开发知识,虽然也通过其它土办法进行了相关的测试,但是软件工程,我们应该从大型工程,从工业的角度去重新思考这个问题。单元测试、回归测试,这些标准的测试方法,在软件工程中的收益完全是大于这些工作量的。
毫无疑问,软件开发中,符合规范的软件测试无疑是非常重要的!