2020软件工程第二次作业
博客信息 | 沈阳航空航天大学计算机学院2020软件工程作业 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/sau/Computer1701-1705/homework/10583 |
课程目标 | 熟悉一个“高质量”软件的开发过程 |
作业目标 | 单元测试练习 |
一、编程题目:最大连续子数组和(最大子段和)
问题(1): 给定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~3章内容,尤其是第2章效能分析和第3章代码规范部分
-
回顾和复习课堂讲授的单元测试部分内容
三、代码地址
最大连续子数组和(最大子段和)
四、运行结果
五、条件组合覆盖测试用例
条件组合覆盖:设计测试用例,使得被测试程序中的每个判定中条件结果的所有可能组合至少执行一次。
5.1条件组合
A | B | C | |
---|---|---|---|
1 | i<n | curSum<=0 | curSum>maxSum |
2 | i<=n | curSum>0 | curSum<=maxSum |
5.2测试用例
组合编号 | 条件取值 | 判断取值 |
---|---|---|
1 | i<n,curSum<=0,curSum>maxSum | T1,T2,T3 |
2 | i<n,curSum<=0,curSum<=maxSum | T1,T2,F3 |
3 | i<n,curSum>0,curSum>maxSum | T1,F2,F3 |
4 | i<n,curSum>0,curSum<=maxSum | T1,F2,T3 |
5 | i>=n,-,- | F1 |
测试用例 | arr[i] | 覆盖组合 |
:----------- | :---: | :---: |
1 | -2,9,-3,10,-4,-3 | 2,3,4 |
2 | 2,0,3,-6,7,0 | 1,3,4 |
3 | 2,0,3,-6,1,0 | 2,3,4 |
4 | -3,-2,-1,-4,-5,-6 | 2 |
5 | -2,4,5,-6,0,3 | 5 |
5.3程序测试代码
#include "pch.h"
#include "CppUnitTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace UnitTest1
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
int n = 6, arr[6] = {2,0,3,-6,7,0},i;
int maxSum = 0;
int curSum = 0;
for (i = 0; i < n; i++)
{
if (curSum <= 0)
{
curSum = arr[i];
}
else
{
curSum += arr[i];
}
if (curSum > maxSum)
{
maxSum = curSum;
}
}
int real = 7;
Assert::AreEqual(maxSum, real);
}
TEST_METHOD(TestMethod2)
{
int n = 6, arr[6] = { 2,0,3,-6,1,0 }, i;
int maxSum = 0;
int curSum = 0;
for (i = 0; i < n; i++)
{
if (curSum <= 0)
{
curSum = arr[i];
}
else
{
curSum += arr[i];
}
if (curSum > maxSum)
{
maxSum = curSum;
}
}
int real = 5;
Assert::AreEqual(maxSum, real);
}
TEST_METHOD(TestMethod3)
{
int n = 6, arr[6] = { -2,9,-3,10,-4,-3 }, i;
int maxSum = 0;
int curSum = 0;
for (i = 0; i < n; i++)
{
if (curSum <= 0)
{
curSum = arr[i];
}
else
{
curSum += arr[i];
}
if (curSum > maxSum)
{
maxSum = curSum;
}
}
int real = 16;
Assert::AreEqual(maxSum, real);
}
TEST_METHOD(TestMethod4)
{
int n = 6, arr[6] = { -3,-2,-1,-4,-5,-6 }, i;
int maxSum = 0;
int curSum = 0;
for (i = 0; i < n; i++)
{
if (curSum <= 0)
{
curSum = arr[i];
}
else
{
curSum += arr[i];
}
if (curSum > maxSum)
{
maxSum = curSum;
}
}
int real = 0;
Assert::AreEqual(maxSum, real);
}
TEST_METHOD(TestMethod5)
{
int n = -5, arr[6] = { 2,0,3,-6,7,0 }, i;
int maxSum = 0;
int curSum = 0;
for (i = 0; i < n; i++)
{
if (curSum <= 0)
{
curSum = arr[i];
}
else
{
curSum += arr[i];
}
if (curSum > maxSum)
{
maxSum = curSum;
}
}
int real = 0;
Assert::AreEqual(maxSum, real);
}
};
}
六、测试结果
七、工作记录
PSPO工作记录表
项目 | 记录结果 |
---|---|
日期 | 2020年4月4日 |
开始时间 | 8:00 |
结束时间 | 10:00 |
源编码行数 | 29 |
测试代码行数 | 129 |
错误数量 | 1 |
错误1 | 用例4未通过测试 |
错误1修改时间 | 5min |