第三次软工作业——实现最大字段和算法并进行判定条件覆盖
第三次软工作业
- 实现最大子段和的算法并进行条件组合覆盖测试
(一)什么是最大子段和?
我自己的理解:
一个数组可以若干个子数组,包含自身。每一个字数组都有一个数组元素之和,求这些和之间的最大值。
最朴素的思想就是通过三重循环计算出每个子数组的和,并取最大值。但这种方法会带来很高的复杂度。现在“最大字段和”作为一个经典算法一般用动态规划思想解决,复杂度可以降低到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.实现判定条件覆盖测试
什么是判定条件覆盖测试?
- 判定条件覆盖是设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。缺点是忽略了条件的组合情况。
- 例如:一个判定包括两个条件如下
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
第三次软工作业——实现最大字段和算法并进行判定条件覆盖相关推荐
- 软工作业 5:词频统计——增强功能
一.基本信息 1.1 编译环境.项目名称.作者 1 #编译环境:python3.6 2 #项目名称:软工作业5-词频统计-增强功能 3 #作者:1613072055 潘博 4 # 1613072056 ...
- 第一次软工作业(构建之法)
第一次软工作业(构建之法) 关于构建之法的若干个问题 1.第一章32页,原文:"有人认为,"中文编程",是解决程序员编程效率的一个秘密武器,请问它是一个"银弹& ...
- 第一次软工作业(数独)
第一次软工作业(数独) 1.该项目的github地址: https://github.com/514DNA/sudoku 2.各个模块耗费的时间: PSP2.1 Personal Software P ...
- 第一次软工作业展示——潘学
第一次软工作业完成啦! 回首这个作业的完成过程,我是很有收获.这个作业有几个难点:1.在给定目录下读取TXT文件的内容:2.从读到的内容中分析出单词:3.统计单词的出现频率并输出. 我之前只学习过C和 ...
- 2019/3/14 软工作业
自我介绍 2017xxxxx1066:我是骆树仁:我的爱好是揉白泽球: 我的码云个人主页是:https://gitee.com/sturdast/events 我的第一个项目地址是:https://g ...
- 【软工作业思考】关于软工的一些概念性理解暨第一次阅读作业
概述 项目 内容 本次作业所属课程 2019BUAA软件工程 周二班 本次作业要求 第1次个人作业 当然,比这个更重要百倍的还是实实在在的思考,这也是标题如此命名的原因 我在本课程的目标 在原有实践经 ...
- 软工作业阅读计算机前辈的随笔有感
荣誉是时间的女儿. -- 阿兰. --记第一次随笔有感. 我为什么选择计算机? 一直到高考志愿报考前,我都没认真去思考过我未来的职业,我甚至都没有构想过我的未来,在我的印象中,我应该就考上个大学,毕业 ...
- 软工作业No.3--团队作业:甜美女孩出击!
队名:甜美女孩 队员包括: 姓名 学号 身份 曾祎祺 3216005211 队长 邓画月 3216005212 队员 何颖琪 3216005213 队员 梁沛诗 3216005214 队员 梁子君 3 ...
- 201621123053 张雨阳软工作业2
1.码云项目地址 https://gitee.com/milan_kaka/2018_soft_work/tree/master 2.PSP表格 PSP2.1 个人开发流程 预估耗费时间(分钟) 实际 ...
最新文章
- canvas刮奖效果
- node.js异步式IO与事件式编程
- Mac M1版电脑安装ps、pr
- 《你不知道的JavaScript》学习佛系梳理
- 入职两个月的总结和反思
- Juniper JNCIS-ER jn0-350 148Q
- mediapipe示例运行
- 三十天博客计划之《引言》
- 同步通信 VS 异步通信
- NOMS管和PMOS管的区别
- 暑期python培训价格
- 中国FW贝尔探头市场现状研究分析与发展前景预测报告(2022)
- echarts图例颜色与地图底色
- DeepLearning-500-questions
- 袖珍电子书打先锋,魔灯(Moodle)服务器做后盾
- CAD日照分析之如何创建日照模型?
- 微信小程序 保存图片到相册
- AutoLeaders控制组——51单片机学习笔记(定时器、串口通信)
- 2022智能制造世界与中国十大科技进展内容小结
- 【OR】YALMIP uncertain
热门文章
- RabbitMQ(三)发布确认
- MySQL多表查询和事务安全
- python模块讲解_python模块详解 | filecmp
- C语言程序设计输入x求函数y,C语言程序设计实践(OJ)-初识函数
- 从运维域看 Serverless 真的就是万能银弹吗?
- 阿里 双11 同款流控降级组件 Sentinel Go 正式 GA,助力云原生服务稳稳稳
- Postman工具之参数化
- linux阿波罗配置文件放在哪,Apollo阿波罗配置中心
- 5加载stm32 keil_「keil」嵌入式STM32开发环境之Keil5的安装(附资源) - 金橙教程网
- 打印首选项设置无效_文档打印小技巧分享--请收藏