SYBlog

导航

软件工程第三次作业

题目选择

题目(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。

样例代码:Coding.net

根据题目,代码如下


package com.edu.sau;
/**
 * 
 * @author HuangShuYe
 * @version 1.0
 *
 */
public class myArray {
	public static void main(String[] args)
	{
		int result = maxSubSum(new int[] {1,2,3,4,5,6});
		System.out.printf("%d",result);
	}
	/**
	 * 
	 * @param list 数组
	 * @return 最大字段和
	 */
    public static int maxSubSum(int[] list)
    {
        int n = list.length;
        int currSum = 0;
        int maxSum = 0;
        for (int i = 0; i < n; i++)
        {
        	currSum+= list[i];
            if (currSum > maxSum ) 
            {
            	maxSum = currSum;
            }
            if (currSum < 0) 
            {
            	currSum = 0;
            }
        }
        return maxSum;
    }
}


选择测试方法、设计测试用例

流程图如下


本次使用选择条件组合覆盖的测试方法
有流程图可知共有两个判断条件,所以有2^2=4种组合,舍弃不可能的情况共有三种:
 1.currSum>maxSum,currSum>=0
 2.currSum<=maxSum,currSum<0
 3.currSum<=maxSum,currSum>=0

因此设计测试用例如下:

利用自动测试工具对程序进行测试

测试代码如下

package com.edu.test;

import static org.junit.Assert.*;


import org.junit.Before;
import org.junit.Test;

import com.edu.sau.myArray;
/**
 * 
 * @author HuangShuYe
 *
 */
public class myArrayTest {

	@Test
	public void testMaxSubSum() 
	{
		assertEquals(10, myArray.maxSubSum(new int[] {1,2,3,4}));
	}
	@Test
	public void testMaxSubSum1() 
	{
		assertEquals(6, myArray.maxSubSum(new int[] {-11,1,2,3}));
	}
	@Test
	public void testMaxSubSum2() 
	{
		assertEquals(7, myArray.maxSubSum(new int[] {3,-1,2,3}));
	}

}

测试运行结果


如图所示,按照上图中的三个条件组合覆盖测试用例依次测试,测试全部通过。

posted on 2018-04-01 19:10  SYBlog  阅读(201)  评论(0编辑  收藏  举报