软件工程第三次作业

一、问题描述

最大连续子数组和(最大子段和)

例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。
-- 引用自《百度百科》

二、代码清单

1.代码地址

https://github.com/CountZ3/XXs-.git

2.功能函数模块

int max3(int a, int b, int c)
{
    int max = a;
    if (b > max)
        max = b;
    if (c > max)
        max = c;
    return max;
}

int maxsum( int a[], int left, int right)
{
    if (left == right)
        return a[left];

    int middle = (left + right) / 2;

    int leftmaxsum = maxsum(a, left, middle);
    int rightmaxsum = maxsum(a, middle + 1, right);
    int maxleftborderSum = 0;
    int maxrightborderSum = 0;
    int tempsum = 0;
    for (int i = middle;i >= left;i--)
    {
        tempsum += a[i];
        if (tempsum > maxleftborderSum)
            maxleftborderSum = tempsum;
    }
    tempsum = 0;
    for (int i = middle + 1;i <= right;i++)
    {
        tempsum += a[i];
        if (tempsum > maxrightborderSum)
            maxrightborderSum = tempsum;
    }

    int maxbordersum = maxrightborderSum + maxleftborderSum;
    return max3(leftmaxsum, maxbordersum, rightmaxsum);
}

三、测试

本次测试通过使用条件组合覆盖进行测试,执行足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。

1.功能函数流程图

通过流程图知,条件组合覆盖一共有4条路径,分别是ae,abf,abcg,abcd,按照条件组合的定义,共有14种可能的组合。这里设置7个测试用例,用以覆盖上述14种条件组合,如下表所示:

2.测试代码


#include "stdafx.h"
#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;
int maxsum(int a[], int left, int right);

namespace UnitTest1
{		
	TEST_CLASS(UnitTest1)
	{
	public:
		
		TEST_METHOD(TestMethod1)
		{
			int a[] = {1};
			Assert::AreEqual(1, maxsum(a, 0, 0));
			// TODO: 在此输入测试代码
		}
		TEST_METHOD(TestMethod2)
		{
			int a[] = { -2,11,-4,13,-5,2 };
			Assert::AreEqual(20, maxsum(a, 0, 5));
			// TODO: 在此输入测试代码
		}
		TEST_METHOD(TestMethod3)
		{
			int a[] = { 5,-3,2,-3,1 };
			Assert::AreEqual(5, maxsum(a, 0, 4));
			// TODO: 在此输入测试代码
		}
		TEST_METHOD(TestMethod4)
		{
			int a[] = { 3,-4,-3,-7,5 };
			Assert::AreEqual(5, maxsum(a, 0, 4));
			// TODO: 在此输入测试代码
		}
		TEST_METHOD(TestMethod5)
		{
			int a[] = { -3,2,3,-2,1 };
			Assert::AreEqual(5, maxsum(a, 0, 4));
			// TODO: 在此输入测试代码
		}
		TEST_METHOD(TestMethod6)
		{
			int a[] = { -3,-2,3,-4,9 };
			Assert::AreEqual(9, maxsum(a, 0, 4));
			// TODO: 在此输入测试代码
		}
		TEST_METHOD(TestMethod7)
		{
			int a[] = { 5,-4,-2,-3,1 };
			Assert::AreEqual(5, maxsum(a, 0, 4));
			// TODO: 在此输入测试代码
		}
	};
}

3.测试结果

posted @ 2019-04-20 23:32  XXs、  阅读(173)  评论(0编辑  收藏  举报