软件工程作业三

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。

2 算法和覆盖标准的选择

  • 最大子段和有多种求法,老师作业中给的这篇博文对我完成作业有很大帮助,并且上网查找了有关最大子段和的相关知识点,了解到了动态规划法,求最大子段和是动态规划法的一个经典例子,所以我用动态规划法完成了此次作业。
  • 我选择了条件/判定覆盖为这次作业的覆盖标准。首先附上该程序的总流程图:
  • 下图为单元测试所需的改进后的核心算法部分流程图:
  • 由图可知该流程图的判定条件有:
                   n<6,n>=6;
                   b[i-1]>0,b[i-1]<=0;
                   b[i]>max,b[i]<=max。
    为满足以上条件,我选择了下表所示的两组测试数据,并且满足了条件/判定覆盖的要求:
    并且为了满足题目中“当所给的整数均为负数时定义子段和为0"这条要求,我选择了下表所示的两组数来作为测试数据,其中一组全为正,一组全为负,正数组用来作对比:

3 单元测试结果

如下图所示为所选测试数据所对应的测试结果截图:

Coding代码链接

https://git.coding.net/Pepe10502/three.git
  注:“测试之前代码”分支为我没有加单元测试时的最初的代码。“测试代码”是加入了单元测试之后的代码。并且为了方便测试,在“测试代码”里我将代码最核心的算法放在了一个定义了的函数里,但这并不会对其整体效果产生影响。

posted @ 2018-03-29 21:40  菜菜菜121  阅读(130)  评论(0编辑  收藏  举报