一、题目选择
最大连续子数组和(最大子段和)
问题: 给定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。引用自《百度百科》
二、代码
代码是在组长的帮助下完成的(自己实在是对JAVA一无所知)
package com.edu.sau;
public class max
{
public int maxArray(int count,int[] array)
{
int[] b = new int[count];
int max;
b[0]=array[0];
max=b[0];
for(int i=1;i<count; i++)
{
if(b[i-1]>0)
b[i]=b[i-1]+array[i];
else
b[i]=array[i];
if(b[i]>max)
max=b[i];
}
if(max<0)
max=0;
return max;
}
}
三、覆盖标准的选择及设计测试用例
1.五种逻辑覆盖测试方法
1)语句覆盖:设计足够多的测试用例,使得被测试程序中的每条可执行语句至少被执行一次。
2)判定覆盖:设计足够多的测试用例,使得被测试程序中的每个判断的“真”、“假”分支至少被执行一次。
3)条件覆盖:设计足够多的测试用例,使得被测试程序中的每个判断语句中的每个逻辑条件的可能值至少被满足一次。
4)判定-条件覆盖:设计足够多的测试用例,使得被测试程序中的每个判断本身的判定结果(真假)至少满足一次,同时,每个逻辑条件的可能值也至少被满足一次。
5)条件组合覆盖:设计足够多的测试用例,使得被测试程序中的每个判断的所有可能条件取值的组合至少被满足一次。
2.程序流程图
在此我仅做了主要两次条件分支的流程图
3.设计测试用例
我选择的是条件组合覆盖,共可能出现四种可能
- b[i-1]>0,b[i]>max {1,3,5,7,9,11}
- b[i-1]<0,b[i]>max {-1,-3,-5,-7,-9,-11}
- b[i-1]>0,b[i]<max {1,-1,1,-1,1,-1}
- b[i-1]<0,b[i]<max {-1,2,-3,4,-5,6}
四、利用自动单元测试工具进行测试
五、程序运行结果
其中第一个为老师所给测试用例
总结
这次的作业算的上是第一次真正考验我的,首先自己对JAVA语言并不熟悉,导致在写代码的时候遇到了一些困难,另外就是对自动单元测试工具的使用还是很生涩的,不过在我们组长尉安瑞同学的帮助下,我还是按时完成了作业。通过这次作业让我认识到了自己的不足之处,在接下来的时间里,我要勤加练习,争取做到下次作业可以由自己独立完成。