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

  • 相关阅读:
    VS 2008潜在强大的功能:提取EXE文件中的ICO等资源
    园友们注意:淘宝网上QQ会员 4钻 3元 等都为骗子行为
    Comet Async Process Request Handler
    WCF(Sender) to MSMQ to WCF(Receiver)
    ASP.NET Web Form GridView DetailsView Query Edit
    WCF NetTcp AsyncQueue Service
    Xml CDATA 序列化
    Sync Invoke Remoting Async Invoke
    .Net 4.0 Remoting ConcurrentQueue
    Socket Async Receive Data to LinkedList Buffer (telnet proxy server)
  • 原文地址:https://www.cnblogs.com/twodog/p/12137194.html
Copyright © 2011-2022 走看看