zoukankan      html  css  js  c++  java
  • 软件工程第三次作业

    软件工程第三次作业

     

    一.题目选择

      题目(1):最大连续子数组和(最大子段和)

    1. 问题:给定n个整数(可能为负数)组成的序列a1,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 
      例如,当(a1,a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。
     

    二.环境的选择

      选用eclipse的junit单元测试工具

     

    三.程序编写

    • 程序源码 
       1 package maxsum;
       2 
       3 import java.util.Scanner;
       4 
       5 public class maxsum {
       6     public static int maxSubArray(int N,int a[]){
       7         int sum=0,mins=0,ans=0;
       8         for (int i = 1;i <= N; i++){
       9             sum += a[i];
      10             if (sum - mins > ans)
      11                 ans = sum - mins;
      12             if (mins > sum)
      13                 mins = sum;
      14         }
      15         return ans;
      16     }
      17     public static void main(String[] args){
      18         Scanner sc = new Scanner(System.in);
      19         int N=sc.nextInt();
      20         int[] a = new int[100];
      21         for(int i=0;i<N;i++) {
      22              a[i] = sc.nextInt();
      23          }
      24         sc.close();
      25         int sum = maxSubArray(N,a);
      26         System.out.print(sum);
      27     } 
      28 }
    • github代码链接
     

    四.几种覆盖方法的比较与选择

     

    1>几种覆盖的比较

    1. 语句覆盖 
        在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次。 
      • 优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
      • 缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句(即可执行语句),但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。
    2. 判定覆盖 
        设计若干测试用例,运行被侧程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。判定覆 盖又称为分支覆盖。 
      • 优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
      • 缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
    3. 条件覆盖 
        选择足够的测试用例,使得运行这些测试用例后,要使每个判断中每个条件的可能取值至少满足一次,但未必能覆盖全部分支。 
      • 优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。
      • 缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
    4. 判定/条件覆盖 
        设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。 
      • 优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。
      • 缺点:忽略了条件的组合情况。
    5. 条件组合覆盖 
        选择足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然,满足“条件组合覆盖”的测试用例是一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”的。 
      • 优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。
      • 缺点:线性地增加了测试用例的数量。
     

    2>选择覆盖方法

    • 程序分析

    • 路径分析:

                     

    • 测试结果:
               覆盖所有路径,且结果正确。

     

    五.自动测试

    1. junit自动测试类
       1 package maxsum;
       2 
       3 import static org.junit.Assert.*;
       4 
       5 import java.util.Arrays;
       6 import java.util.Collection;
       7 
       8 import org.junit.Test;
       9 import org.junit.runner.RunWith;
      10 import org.junit.runners.Parameterized;
      11 import org.junit.runners.Parameterized.Parameters;
      12 @RunWith(Parameterized.class)
      13 public class MaxSumTest {
      14      private int excepted;
      15      private int[] array;
      16      public MaxSumTest(int excepted,int[] array){
      17             this.excepted = excepted;
      18             this.array = array;
      19         }
      20         /** 
      21          * 3.由@Parameterized.Parameters修饰一个 
      22          * public static Collection xxx() 
      23          */ 
      24      @Parameters
      25       public static Collection data() { 
      26             return Arrays.asList(new Object[][] {  
      27                 { 9, new int[]{-1,3,4,-8,9}},  
      28                 { 7, new int[]{-2,5,-6,3,4}}, 
      29                 { 0,  new int[]{-1,-2,-3,-4,-5}},  
      30                 { 12,  new int[]{-1,6,-7,3,4,5,-6}}  
      31             });  
      32         }  
      33 
      34     @Test
      35     public void testMaxSubArray() {
      36         assertEquals(this.excepted, maxsum.maxSubArray(this.array.length-1, this.array));
      37     }
      38 
      39 }
    2. 测试结果

    转载于:https://www.cnblogs.com/GJIN/p/8688694.html

  • 相关阅读:
    request内置对象(上)1
    康拓展开-----两个排列的位置之差
    判断一个数的质因子个数
    学生信息管理系统----(顺序表)
    学生信息管理系统----(链表)
    二分图的最大匹配--匈牙利算法
    hdu-1285拓扑排序
    文件的压缩与解压
    树莓派安装QT(全部库包括)
    Win10 + CLion + 树莓派 + QT 远程开发调用Python
  • 原文地址:https://www.cnblogs.com/twodog/p/12137194.html
Copyright © 2011-2022 走看看