软件工程第三作业


##**1. 题目** ###**GITHUB代码地址:**   **GITHUB代码地址:**   **最大连续子数组和(最大子段和) 问题描述: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。**
##**2. 程序设计及代码编辑**

2.1程序设计

  程序的主要方程为Sum = (Sum + array[i]) > (array[i]) ? (Sum + array[i]) : (array[i]);
  最大和要么是前面所求最大和加下一项,要么是下一项。具体程序流程图如下:

2.2代码编辑

int GetSum(int* array, int num)
{
	if (array == NULL) return 0;
	int i;
	int Max{ array[0] };
	int Sum{ array[0] };
	for (i = 1; i < num; i++)
	{
		Sum = (Sum + array[i]) > (array[i]) ? (Sum + array[i]) : (array[i]);
		if (Sum > Max)
		{
			Max = Sum;
		}
	}
	if (Max < 0)
	{
		Max = 0;
	}
	return Max;
}

3. 测试分析及结果

  本次测试,我采用的是条件组合测试。本次测试中涉及到的条件选择共有四个,一共有九种组合方式。

3.1测试分析

  条件选择的可能性组合的二叉图如下:

3.2测试案例设计

  针对上面的九种条件组合,对应的设计案例如下:

array==NULL? sum取值 sum>max? max<0? 测试用例 结果
array==NULL {} 0
array!=NULL sum=(sum+array[[i]) sum>max max>0 6
array!=NULL sum=(sum+array[[i]) sum>max max<0 不存在
array!=NULL sum=(sum+array[[i]) sum<max max>0 6
array!=NULL sum=(sum+array[[i]) sum<max max<0 不存在
array!=NULL sum= array[[i]) sum>max max>0 8
array!=NULL sum= array[[i]) sum>max max<0 0
array!=NULL sum= array[[i]) sum<max max>0 不存在
array!=NULL sum= array[[i]) sum<max max<0 0

  测试代码如下:

TEST_METHOD(TestMethod1)	//array==NULL
		{
			int *array = {};
			int num = sizeof(array) / sizeof(array[0]);
			int Max = GetSum(array, num);
			Assert::AreEqual(Max, 0);
		}
		TEST_METHOD(TestMethod2)	//(sum=sum+array)&&(sum>max)&&(max>0)
		{
			int array[] = { 2,2,2 };
			int num = sizeof(array) / sizeof(array[0]);
			int Max = GetSum(array, num);
			Assert::AreEqual(Max, 6);
		}
		TEST_METHOD(TestMethod3)	//(sum=sum+array)&&(sum<max)&&(max>0)
		{
			int array[] = { 5,-2,3 };
			int num = sizeof(array) / sizeof(array[0]);
			int Max = GetSum(array, num);
			Assert::AreEqual(Max, 6);
		}
		TEST_METHOD(TestMethod4)	//(sum=array)&&(sum>max)&&(max>0)
		{
			int array[] = { -2,5,3 };
			int num = sizeof(array) / sizeof(array[0]);
			int Max = GetSum(array, num);
			Assert::AreEqual(Max, 8);
		}
		TEST_METHOD(TestMethod5)	//(sum=array)&&(sum>max)&&(max<0)
		{
			int array[] = { -2,-1,-3 };
			int num = sizeof(array) / sizeof(array[0]);
			int Max = GetSum(array, num);
			Assert::AreEqual(Max, 0);
		}
		TEST_METHOD(TestMethod6)	//(sum=array)&&(sum<max)&&(max<0)
		{
			int array[] = { -2,-3,-5 };
			int num = sizeof(array) / sizeof(array[0]);
			int Max = GetSum(array, num);
			Assert::AreEqual(Max, 0);
		}

3.3测试结果

  测试时用例全部通过,结果如下:


##**3.总结**   **本次作业,学到了简单的个人项目的开发,也更加熟悉了单元测试,能够对不同类型的条件进行单元测试,收获满满。   每一次作业都会有新的收获,我也会在学习的道路上一直走下去,屏幕前的你,也要加油啊! **

posted on 2019-04-15 18:11  第五-fifth  阅读(187)  评论(1)    收藏  举报

导航