2020软件工程第二次作业

博客信息 沈阳航空航天大学计算机学院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。
--引用自《百度百科

三.代码

https://github.com/thedeathboom/max1

四.程序运行结果

-测试样例1:-2 11 -4 13 -5 -2 结果为:20

-测试样例2:-9 -8 -7 -8 -5 结果为:0

五.判定/条件覆盖测试

流程图如下:

六.测试代码

#include "pch.h"
#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

int Max_num(int* arr, int n)
{
    int i, temp = 0, Max = 0, sum = 0;
    for (i = 0; i < n; i++)
    {
        if (arr[i] > 0)
            temp = 1;
    }
    if (temp == 0)
        Max = 0;
    else
    {
        for (i = 0; i < n; i++)
        {
            sum += arr[i];
            if (sum < arr[i])
                sum = arr[i];
            if (Max < sum)
                Max = sum;
        }
    }
    return Max;
}
namespace UnitTest3
{
    TEST_CLASS(UnitTest3)
    {
    public:
        TEST_METHOD(TestMethod1)
        {
            int arr[] = { -2,11,-4,13,-5,-2};
            int n = 6;
            int k;
            k = Max_num(arr, n);
            Assert::AreEqual(k, 20);
        }
        TEST_METHOD(TestMethod2)
        {
            int arr[] = { -9,-8,-7,-8,-5 };
            int n = 5;
            int k;
            k = Max_num(arr, n);
            Assert::AreEqual(k, 0);
        }
        TEST_METHOD(TestMethod3)
        {
            int arr[] = { 8,-9,3,7,6,5};
            int n = 6;
            int k;
            k = Max_num(arr, n);
            Assert::AreEqual(k, 21);
        }
    };
}

七.测试结果

 

八.工作记录

项目 记录结果
日期 2020.4.9
开始时间 15:00
结束时间 17:00
代码行数 27
错误数量 2
错误1 数组循环中错误的引用了非法的位置
错误2 判断是否为全0错误

 

 

posted @ 2020-04-08 16:45  划破夜空的星  阅读(175)  评论(0编辑  收藏  举报