软件工程第二次作业

软件工程第二次作业

博客信息
沈阳航空航天大学计算机学院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。


二. 代码与代码运行结果

代码如下

#include <iostream>
using namespace std;

int main()
{
    int n,i,a[10],sum1=0,sum2=0,mod=0;
    cout << "请输入数组数量"<<endl;
    cin >> n;
    cout << "请输入数组" << endl;
    for (i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    for (i = 0; i < n; i++)
    {
        sum1 = sum1 + a[i];
        if (sum1 < 0)
        {
            sum1 = 0;
        }
        if (sum1 > sum2)
        {
            sum2 = sum1;
        }
    }
    cout << "最大子段和为" << endl;
    cout << sum2;
    return 0;
}

github链接code

运行结果如下

三. 单元测试工具

编译软件采用VS2019中自带的测试工具
代码如下

#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest2
{
	TEST_CLASS(UnitTest2)
	{
	public:
		
		TEST_METHOD(TestMethod1)
		{
		}
	};
}

四. 判定条件覆盖

判定/条件覆盖:选择足够多的测试用例,使程序中每个判定的"真"和"假"至少执行一次,并且每个判定的每个条件取得各种可能的结果。
画出上述程序的流程图,如下所示。

根据流程图设计测试样例。
判定一(i=n)
判定二(sum1>sum2,sum1<=sum2)
i处于累加的状态,可以不用考虑,所以判定一不用考虑真假
采用两个测试案例交替进行的(-2,6,-5,8,-7,9)和空输入
测试代码如下

#include "CppUnitTest.h"


using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{
    TEST_CLASS(UnitTest1)
    {
    public:
        TEST_METHOD(TestMethod1)
        {
            int n = 6, i, sum1 = 0, sum2 = 0, mod = 0;
            int a[6] = { -2,6,-5,8,-7,9 };
            for (i = 0; i < n; i++)
            {
                sum1 = sum1 + a[i];
                if (sum1 < 0)
                {
                    sum1 = 0;
                }
                if (sum1 > sum2)
                {
                    sum2 = sum1;
                }
            }
        }
        TEST_METHOD(TestMethod2)
        {
            int n = 0, i, sum1 = 0, sum2 = 0, mod = 0;
            for (i = 0; i < n; i++)
            {
                sum1 = sum1;
                if (sum1 < 0)
                {
                    sum1 = 0;
                }
                if (sum1 > sum2)
                {
                    sum2 = sum1;
                }
            }
        }
        
    };
}

单元测试结果如下图所示

测试结果正确

五. 工作记录

项目
记录结果
日期
2020/4/2
开始时间
17:30
结束时间
18:10
编码行数
25
错误数量
0

六. 心得

这次作业的代码并不是很难主要是在于写博客用markdown的操作比较复杂,学会了如何插入图片与如何让他居中,还有如何制作表格,表格居中也很复杂,我用的是html写的,写的有点难受,也让我学会了新的东西。代码倒是不怎么难,主要是单元测试与如何判定条件覆盖这是以前没有学过的,都是现学的,也顺便了解了这到底是干什么的,让我收获了许多。

posted @ 2020-04-03 19:42  你会不会觉得我很菜  阅读(162)  评论(0编辑  收藏  举报