软件工程第三次作业
1. 题目要求
题目:最大连续子数组和(最大子段和)
2.最大子段和概述
给定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。
3.使用动态规划求解最大子段和的问题
实际上求解最大字段和有多种方法,有兴趣的可以参考最下面的链接1查看,这里选择比较简洁的解法。
关于什么是动态规划,以及它的意义是什么?这里有一个知乎的链接,上面大佬回答很清楚,在此不多赘述。
4.流程图
.png)
5.测试分析
Coding地址:https://dev.tencent.com/u/molers233/p/maxsum
5.1 条件判定覆盖
条件判定的覆盖标准:使得判定中的每个条件获得各种可能的结果。
即满足以下条件:1.Temp>0; 2.sum<Temp;
满足以下覆盖情况:
判定一:Temp>0;Temp<=0
判定二:sum <Temp;sum>=Temp
测试用例1: (1 2 3 4 5 6) ( 21) ABDEG (Temp>0;sum<b) 结果正确。
测试用例2:(-2 -5 -6 -7 -8 -9) (0) ABCEG (Temp<0;sum<b) 结果正确。
测试用例3:(-2 -5 -6 7 -8 -9) (7) ABCDF (Temp<0;sum>b) 结果正确。
测试用例4:(6 5 4 3 2 1) (21) ABDEFG (Temp>0;sum>b) 结果正确。
结果见下图:

5.2 条件组合覆盖
覆盖标准:使条件的每种组合至少出现一次。
满足以下覆盖情况:
判定一:1.Temp>0;2.Temp<=0
判定二:3.sum <Temp ;4.sum>=Temp
| a[i] | 判定条件组合 | 路径 | 分析 |
| 2 | 1,3 | ABDEF | Temp<0;Temp=a[i]=2;sum<Temp;sum=Temp=2 |
| 0 | 1,4 | ACDF | Temp>=0;Temp=Temp+a[i]=2;sum>=Temp,sum=2 |
| 3 | 1,3 | ACDEF | Temp>0;Temp=Temp+a[i]=5;sum<Temp,sum=b=5 |
| -6 | 1,4 | ABDF | Temp>0;Temp=Temp+a[i]=-1;sum>Temp;sum=5 |
| 1 | 2,4 | ACDF | Temp<0;Temp=Temp+a[i]=1;sum>Temp;sum=5 |
| 0 | 1,4 | ACDF | Temp>0;Temp=Temp+a[i]=1;sum>Temp;sum=5 |
测试结果如上图所示
参考链接:1)最大子段和详解
3)白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)
4)条件组合覆盖
5)逻辑覆盖实例讲解
浙公网安备 33010602011771号