软件工程第三次作业

软件工程第三次作业

所选题目

我所选择的题目为求最大连续子数组和。写博客不是写教程,所以我只给出了一些关键部分的截图。

使用的算法

使用了Kadane算法,这个算法的时间复杂度为O(n),对于解决这种问题十分有效。我使用C++进行了实现。

代码如下

# include <iostream>
using namespace std;

class Maxsub
{
public:
	Maxsub();
	Maxsub(int * p,int position);
	~Maxsub();
	int max_sub();
private:
	int * arr;
	int positon;
	int max(int fir, int sec);
};

Maxsub::Maxsub()
{
}

//position is the length of the array.
Maxsub::Maxsub(int * p, int position)
{
	Maxsub::arr = p;
	Maxsub::positon = --position;
}

Maxsub::~Maxsub()
{
}

int Maxsub::max_sub()
{
	int max_pre = Maxsub::arr[0];
	int max = Maxsub::arr[0];
	for (int i = 1; i <= positon; i++)
	{
		max_pre = Maxsub::max(Maxsub::arr[i],(Maxsub::arr[i]+max_pre));
		max = Maxsub::max(max_pre,max);
	}
	return max;
}

int Maxsub::max(int fir, int sec)
{
	return (fir > sec) ? fir : sec;
}

推送到远程仓库

通过git推送到远程仓库,仓库地址为仓库地址链接,在homework3文件夹下。
提交截图

设计测试用例

我准备使用判定/条件覆盖标准,进行测试。

判定/条件覆盖:是设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。

首先分析算法,算法中重复使用了两个数中取最大值这个方法,因此每一次循环,就是进行了两次判断。所以可以据此进行设计,我准备使用四组测试用例,这样就可以达到判定/条件覆盖的标准。

这四组数据,覆盖了4条分支路径,并且同时满足了条件覆盖的标准。

测试数据编号 要输入的数组 预期结果
1 -5,10,20,-5 30
2 10, 5 ,-5 ,5 15
3 10, 5 , -5 ,10 20
4 10,-15 ,6 ,10 16

自动单元测试结果

测试部分的代码如下

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

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{		
	TEST_CLASS(UnitTest1)
	{
	public:
		
		TEST_METHOD(TestMethod1)
		{
			// TODO: 在此输入测试代码
			int ara1[4] = {-5,10,20,-5};
			int ara2[4] = { 10,-15 ,6 ,10 };
			int ara3[4] = { 10, 5 , -5 ,10 };
			int ara4[4] = { 10, 5 ,-5 ,5 };
			Maxsub mymaxsub1(ara1, 4);
			Maxsub mymaxsub2(ara2, 4);
			Maxsub mymaxsub3(ara3, 4);
			Maxsub mymaxsub4(ara4, 4);
			Assert::AreEqual(mymaxsub1.max_sub(), 30);
			Assert::AreEqual(mymaxsub2.max_sub(), 16);
			Assert::AreEqual(mymaxsub3.max_sub(), 20);
			Assert::AreEqual(mymaxsub4.max_sub(), 15);
		}

	};
}

测试结果如下

代码覆盖率测试
单元测试

posted @ 2019-04-18 23:39  左键已坏  阅读(156)  评论(0编辑  收藏  举报