软件工程(2018)第三次作业

一、题目

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、题目要求

  从语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖五个覆盖标准中任选择一个标准测试用例,并用自动测试工具对程序进行测试,并将测试结果和自动测试分析结果截图附到博客中。


二、解题

1、解题思路

  此次作业编程我采用了c++编程,首先定义一个变量S来记录当前子段的和,定义变量Maxi和变量Maxj来记录和最大的子段的下标范围,定义变量Sum记录最大子段和,子段从第一个数开始,判断是否为负数,若是负数跳过,若不是负数,再比较S与Sum的大小,若S大于Sum,则将S的值赋给Sum,循环遍历全部整数,求得最大子段和。流程图如下:

2、测试

  (1)语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。
  (2)本次作业测试用例采用判定/条件覆盖,由于对Java测试工具使用不熟练,多以本次测试的测试工具选择用codeblocks配置Googletest进行单元测试,测试结果如下:

由上图可以看出我用了三个测试用例,满足判定/条件覆盖,并且测试结果完全正确。


三、小结

  本次作业题目较简单,但是由于我对Java语言的学习不到位,对Java测试工具的使用不熟练,所以选择用C++语言进行编程,并且使用codeblocks测试工具进行测试,所以深深感受到多掌握一门编程语言的重要性。

Codig代码链接:https://coding.net/u/yunshuinu/p/123/git/blob/master/1.cpp?public=true

原文地址:https://www.cnblogs.com/yunshuinv/p/8681956.html