博客信息 | 沈阳航空航天大学计算机学院2020软件工程作业 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/sau/Computer1701-1705/homework/10583 |
课程目标 | 熟悉一个“高质量”软件的开发过程 |
作业目标 | 单元测试练习 |
问题:最大连续子数组和(最大子段和)
给定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。
要求:
(1) 要求写出可运行的完整代码提交至GitHub系统中,并将代码地址附到博客内;
(2) 请从语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖五个覆盖标准中(条件组合覆盖难度较大,鼓励尝试,但请谨慎选择),任选一个标准设计测试用例
(3) 请利用自动测试工具对程序进行测试
(4) 请将程序运行结果和自动测试分析结果截图附到博客中
思路:
首先,输入整数n,此时注意若n为负数则显示警告信息;若n为0则将最大连续子数组和内定为0;若n为正数,则将随后的n个元素写入链表。
其次,从第一个元素开始,将随后的元素逐个相加,每次相加的结果后与一个变量(max1)比较大小,保证max1为最大值。第一轮结束后将max1与另一个变量max比较大小,令max为最大值。然后从第二个元素开始,重复上一个操作;从第三个元素开始,重复上一次操作···直到最后得到最大连续子数组和。
最后,根据要求,若所有的整数均为负数,这定义字段和为0。因此将max与0比较大小,最终得到连续子数组最大值。
流程图:
代码:
查看代码请点击:求连续子数组的最大值
程序运行结果:
1.n为负数:输出错误信息
2.n为0:直接输出最大连续子数组和为0
3.n为正数且输入不全为负数:输出最大连续子数组和
4.n为正数且输入全为负数:输出0
判定/条件覆盖:
编号 | 取值 | 通过路径 |
1 | n=-1 | p1 |
2 | n=0 | p2,p3 |
3 | n=3 a[3]={-1,-2,-3} | p2,p4,p5 |
4 | n=5 a[5]={1,2,3,4,5} | p2,p4,p6 |
5 | n=-3 a[3]={1, 2, 3} | p1 |
6 | n=5 a[5]={-1,-2,-3,-4,0} | p2,p4,p6 |
测试工具:
选择Visual Studio 2019自带的测试资源管理器。
测试截图:
PSP0工作记录表:
项目 | 记录结果 |
开始日期 | 2020.4.7 |
开始时间 | 21:31 |
结束日期 | 2020.4.8 |
结束时间 | 18:23 |
编码行数 | 73 |
错误数量 | 2 |
错误1 | 没有考虑n=0的情况 |
错误1修改时间 | 1min |
错误2 | 越界报错 |
错误2修改时间 | 5min |