第三次软工作业

  • 实现最大子段和的算法并进行条件组合覆盖测试

(一)什么是最大子段和?

我自己的理解:
一个数组可以若干个子数组,包含自身。每一个字数组都有一个数组元素之和,求这些和之间的最大值。

最朴素的思想就是通过三重循环计算出每个子数组的和,并取最大值。但这种方法会带来很高的复杂度。现在“最大字段和”作为一个经典算法一般用动态规划思想解决,复杂度可以降低到O(n)。详细思想可以看这里。

(二)具体实现

  • A.实现功能代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Max_sum
{public class Program{public static void Main(){}public static int Func_Test(int len, int[] a){ \\b代表以当前数组元素为重点的最大值,sum代表整个过程中的最大值int sum = 0, b = 0;       for (int i = 0; i < len; i++){if (b > 0)   \\如果当前累加和大于0{b += a[i];}else        {b = a[i];}if (b > sum) \\如果当前累加和大于前面的最大值,最大值需要更新{sum = b;}}return sum;}}
}

  • B.实现判定条件覆盖测试
  1. 什么是判定条件覆盖测试?

    • 判定条件覆盖是设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。缺点是忽略了条件的组合情况。
    • 例如:一个判定包括两个条件如下
      y>1 && z=0
        一组符合判定/条件覆盖的用例需要满足下面
        1.使得判定为真
        2.使得判定为假
        3.使得y>1
        4.使得y<=1
        5.使得z=0
        6.使得z!=0

2.具体设计
在A步骤中的代码中我们可以看到,一共有两个判定条件,所以需要四组测试样例分别测试

  • ① b < 0 && b > sum 比如{-1 , 1 , 2 , 3} , 它的结果应该是6;
    注:在运行到第2个元素的时候,b = 1 , sum = 0 ,满足 b < 0 && b > sum

  • ② b < 0 && b ≤ sum 比如{-1 , 1 , 2 , 3} , 它的结果应该是6;
    注:在运行到第1个元素的时候,b = -1 , sum = 0 ,满足 b < 0 && b ≤ sum

  • ③ b ≥ 0 && b > sum 比如 {1 , 2 , 3 ,4} , 他的结果应该是10
    注: 在运行到第1个元素的时候,b = 1 , sum = 0 ,满足 b ≥ 0 && b > sum

  • ④ b ≥ 0 && b ≤ sum 比如 {0 , 0 , 0 , 0} , 他的结果应该是0
    注: 在运行到第1个元素的时候,b = 0 , sum = 0 ,满足 b ≥ 0 && b ≤ sum

通过以上思路写出下面的测试代码

using System;
using Max_sum;
using Microsoft.VisualStudio.TestTools.UnitTesting;namespace Max_sum_test
{[TestClass]public class UnitTest1{[TestMethod]public void TestMethod1(){int len = 4;int[] a = new int []{-1,1,2,3};Assert.AreEqual(6 ,Program.Func_Test(len , a));}[TestMethod]public void TestMethod2(){int len = 4;int[] a = new int[] { -1, 1, 2, 3 };Assert.AreEqual(6, Program.Func_Test(len, a));}[TestMethod]public void TestMothod3(){int len = 4;int[] a = new int[] { 1, 2, 3, 4 };Assert.AreEqual(10, Program.Func_Test(len, a));}[TestMethod]public void TestMothod4(){int len = 4;int[] a = new int[] { 0, 0, 0, 0};Assert.AreEqual(0, Program.Func_Test(len, a));}}}

测试全部通过,算法正确

图一

(三)总结

1.在这次作业中,走了一点弯路,刚开始把问题想复杂了,总是想着“面向对象编程”= =,写了很多无用代码。其实这个作业就是写一个功能函数并对其进行测试。
2.帮助自己更加熟悉IDE的操作,我觉得对往后的作业有很大的帮助。
3.在选择控制台程序时需要选择console(.net framework), 否则在运行测试代码的时候会报错 。
4.分清Assert.equal() 和 Assert.AreEqual() 的区别,后者返回一个bool型变量,在测试中我们应该选择它。

(四)外链

我的github

转载于:https://www.cnblogs.com/Justdocument/p/8661354.html

第三次软工作业——实现最大字段和算法并进行判定条件覆盖相关推荐

  1. 软工作业 5:词频统计——增强功能

    一.基本信息 1.1 编译环境.项目名称.作者 1 #编译环境:python3.6 2 #项目名称:软工作业5-词频统计-增强功能 3 #作者:1613072055 潘博 4 # 1613072056 ...

  2. 第一次软工作业(构建之法)

    第一次软工作业(构建之法) 关于构建之法的若干个问题 1.第一章32页,原文:"有人认为,"中文编程",是解决程序员编程效率的一个秘密武器,请问它是一个"银弹& ...

  3. 第一次软工作业(数独)

    第一次软工作业(数独) 1.该项目的github地址: https://github.com/514DNA/sudoku 2.各个模块耗费的时间: PSP2.1 Personal Software P ...

  4. 第一次软工作业展示——潘学

    第一次软工作业完成啦! 回首这个作业的完成过程,我是很有收获.这个作业有几个难点:1.在给定目录下读取TXT文件的内容:2.从读到的内容中分析出单词:3.统计单词的出现频率并输出. 我之前只学习过C和 ...

  5. 2019/3/14 软工作业

    自我介绍 2017xxxxx1066:我是骆树仁:我的爱好是揉白泽球: 我的码云个人主页是:https://gitee.com/sturdast/events 我的第一个项目地址是:https://g ...

  6. 【软工作业思考】关于软工的一些概念性理解暨第一次阅读作业

    概述 项目 内容 本次作业所属课程 2019BUAA软件工程 周二班 本次作业要求 第1次个人作业 当然,比这个更重要百倍的还是实实在在的思考,这也是标题如此命名的原因 我在本课程的目标 在原有实践经 ...

  7. 软工作业阅读计算机前辈的随笔有感

    荣誉是时间的女儿. -- 阿兰. --记第一次随笔有感. 我为什么选择计算机? 一直到高考志愿报考前,我都没认真去思考过我未来的职业,我甚至都没有构想过我的未来,在我的印象中,我应该就考上个大学,毕业 ...

  8. 软工作业No.3--团队作业:甜美女孩出击!

    队名:甜美女孩 队员包括: 姓名 学号 身份 曾祎祺 3216005211 队长 邓画月 3216005212 队员 何颖琪 3216005213 队员 梁沛诗 3216005214 队员 梁子君 3 ...

  9. 201621123053 张雨阳软工作业2

    1.码云项目地址 https://gitee.com/milan_kaka/2018_soft_work/tree/master 2.PSP表格 PSP2.1 个人开发流程 预估耗费时间(分钟) 实际 ...

最新文章

  1. canvas刮奖效果
  2. node.js异步式IO与事件式编程
  3. Mac M1版电脑安装ps、pr
  4. 《你不知道的JavaScript》学习佛系梳理
  5. 入职两个月的总结和反思
  6. Juniper JNCIS-ER jn0-350 148Q
  7. mediapipe示例运行
  8. 三十天博客计划之《引言》
  9. 同步通信 VS 异步通信
  10. NOMS管和PMOS管的区别
  11. 暑期python培训价格
  12. 中国FW贝尔探头市场现状研究分析与发展前景预测报告(2022)
  13. echarts图例颜色与地图底色
  14. DeepLearning-500-questions
  15. 袖珍电子书打先锋,魔灯(Moodle)服务器做后盾
  16. CAD日照分析之如何创建日照模型?
  17. 微信小程序 保存图片到相册
  18. AutoLeaders控制组——51单片机学习笔记(定时器、串口通信)
  19. 2022智能制造世界与中国十大科技进展内容小结
  20. 【OR】YALMIP uncertain

热门文章

  1. RabbitMQ(三)发布确认
  2. MySQL多表查询和事务安全
  3. python模块讲解_python模块详解 | filecmp
  4. C语言程序设计输入x求函数y,C语言程序设计实践(OJ)-初识函数
  5. 从运维域看 Serverless 真的就是万能银弹吗?
  6. 阿里 双11 同款流控降级组件 Sentinel Go 正式 GA,助力云原生服务稳稳稳
  7. Postman工具之参数化
  8. linux阿波罗配置文件放在哪,Apollo阿波罗配置中心
  9. 5加载stm32 keil_「keil」嵌入式STM32开发环境之Keil5的安装(附资源) - 金橙教程网
  10. 打印首选项设置无效_文档打印小技巧分享--请收藏