码迷,mamicode.com
首页 > 其他好文 > 详细

软工第三次个人作业

时间:2018-03-31 00:51:46      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:算法   逻辑   组成   包括   自动   最大子段和   ret   表示   编程   

一、题目的选择。

我选择的是第一题,题目要求如下:
给定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。
引用自《百度百科》

二、问题的分析。

1. 算法。

输入一组数,用curSum保存当前和,用maxSum保存当前和的最大值。并将curSum与maxSum都赋初值0。若curSum大于maxSum,则将curSum的值赋给maxSum。若最后curSum小于0,则返回0,否则返回当前和的最大值maxSum。

2. 核心代码。

public class MaxNum {
            public static int maxSum(int[] array){  
            int maxSum = 0; 
            for(int i=0;i<array.length;i++){
                for(int j = i ; j < array.length;j++){  
                     int curSum = 0;  
                    for (int k = i; k <= j; k++){  
                        curSum += array[k];  
                        if(curSum > maxSum){  
                            maxSum = curSum;  
                        }  
                    }  
                } 
            }
            if (maxSum < 0) {
                return 0;
            }
            else {
                return maxSum;
            }
        }  

3. 流程图。

技术分享图片

4.验证题目中的用例。

技术分享图片

三、单元测试。,

1. 覆盖方法。

(1)语句覆盖:选择合适用例,所有语句被执行一次。

语句覆盖又称行覆盖,段覆盖,基本块覆盖,这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。这里说的是"可执行语句",因此就不会包括像C++的头文件声明,代码注释,空行,等等。非常好理解,只统计能够执行的代码被执行了多少行。需要注意的是,单独一行的花括号{} 也常常被统计进去。语句覆盖常常被人指责为"最弱的覆盖",它只管覆盖代码中的执行语句,却不考虑各种分支的组合等等。假如只要求达到语句覆盖,那么换来的确实测试效果不明显,很难更多地发现代码中的问题。

(2)判定覆盖:每个判定至少取一次真、一次假。

判定覆盖是设计足够多的测试用例,使得程序中的每一个判断至少获得一次"真"和一次"假",即使得程序流程图中的每一个真假分支至少被执行一次。

(3)条件覆盖:每个条件的各种可能结果至少满足一次。

条件覆盖是电脑编程术语,是逻辑覆盖的一种。它指的是设计足够多的测试用例,使得被测试程序中的每个逻辑条件的可能值至少被满足一次。

(4)判定条件覆盖:同时满足判断覆盖和条件覆盖。

判定条件覆盖是设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。缺点是忽略了条件的组合情况。

(5)条件组合覆盖:所有组合情况都要覆盖一次。

在白盒测试法中,选择足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然,满足"条件组合覆盖"的测试用例是一定满足"判定覆盖"、"条件覆盖"和"判定/条件覆盖"的。

2. 我选择判定/条件覆盖。

覆盖情况应执行路径:

技术分享图片

3. 选择用例:

(1)测试用例1:(-1,-7,-9,-15,-20)
(2)测试用例2:(1,3,5,7,9)
(3)测试用例3:(-2,9,4,5,-3)
(4)测试用例4:(-7,1,-3,12,-5)

四、结果展示。

1. 自动测试截图。

(1)测试用例1。

技术分享图片
(2)测试用例2。

技术分享图片
(3)测试用例3。

技术分享图片
(4)测试用例4。

技术分享图片

2.单元测试代码。

    @Test
    public void test1() {
        int number = 5;
        int a[] = {-1,-7,-9,-15,-20};
        assertEquals(0, MaxNum.maxSum(a));
    }
    @Test
    public void test2() {
        int number = 5;
        int a[] = {1,3,5,7,9};
        assertEquals(25, MaxNum.maxSum(a));
    }
    @Test
    public void test3() {
        int number = 5;
        int a[] = {-2,9,4,5,-3};
        assertEquals(18, MaxNum.maxSum(a));
    }
    @Test
        public void test4() {
            int number = 5;
            int a[] = {-7,1,-3,12,-5};
            assertEquals(12, MaxNum.maxSum(a));
    }

3. 单元测试截图。

技术分享图片

4.结果分析。

(1). Runs:总共有4个测试方法,已经运行了4个;
(2). Errors:抛出异常的测试方法的个数是0;
(3). Failures:表示失败的测试方法的个数是0;
(4). 打钩:表示通过测试方法,测试结果完全正确。

五、代码链接。

葵花点穴手

六、总结。

本次作业是前两次作业的一个综合,难度相比前两次作业稍高,由于不熟练,所以在找测试用例方面花费了不少时间,也意识到自身的不足,以后还要继续努力。

软工第三次个人作业

标签:算法   逻辑   组成   包括   自动   最大子段和   ret   表示   编程   

原文地址:https://www.cnblogs.com/heyanqiao/p/8672353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!