software engineering homework 2
| 博客信息 | 沈阳航空航天大学计算机学院2020软件工程作业 |
|---|---|
| 作业要求 | https://edu.cnblogs.com/campus/sau/Computer1701-1705/homework/10583 |
| 课程目标 | 熟悉一个“高质量”软件的开发过程 |
| 作业目标 | 单元测试练习 |
利用JUnit5进行单元测试练习
1.题目要求:
问题: 给定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。
-- 引用自《百度百科》
2程序实现:
由于最近在自学Java,所以决心练习一下使用Java语言完成此次任务。本题为一个经典的求最大子列和问题,在学习数据结构课程时曾经练习过,不过有些遗忘,重新复习一下后最终写出了程序:
(1)演示:
(2)算法流程图:
3判定/条件覆盖
(1)由算法流程图可以看出来条件路径大致分为4条:
(a)a
(b)b-c-f
(c)b-c-d-g
(d)b-c-d-h
(2)此外判定可划分为:
(a1)i<sum (a2)i=sum
(b1)ThisSum>MaxSum (b2)ThisSum<=MaxSum
(c1) ThisSum<0 (c2)ThisSum>=0
而且由于程序中含有循环,其实一个测试用例即可满足判定/条件测试的要求,但这里为了更清晰表示,选了3个测试用例:
| 测试用例 | 覆盖路径 | 判定范围 | 预期结果 |
|---|---|---|---|
| [1,2,3,4,5] | b-c-f/a | a1 a2 b1 c2 | 15 |
| [-1,-2,-3,-5] | b-c-d-g/a | a1 a2 b2 c1 | 0 |
| [2,-1,-1] | b-c-d-h/b-c-f/a | a1 a2 b1 b2 c2 | 2 |
| (3)利用Eclipse中JUnit5工具实现单元测试 |
测试代码:
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class MaxSubseqSumTest {
private MaxSubseqSum test=new MaxSubseqSum(8);
public void InitSub(int n,int[] a)
{
test.set(n);
test.clear();
for(int k:a)
{
test.add(k);
}
}
@Test
void testCalculate_1() {
int[]a= {1,2,3,4,5};
InitSub(5, a);
assertEquals(15,test.Calculate());
}
@Test
void testCalculate_2()
{
int[]a= {-1,-2,-3,-5};
InitSub(4, a);
assertEquals(0,test.Calculate());
}
@Test
void testCalculate_3()
{
int[]a= {2,-1,-1};
InitSub(3, a);
assertEquals(2,test.Calculate());
}
}
测试结果图:
代码地址:点我,点我!!
附:PSP工作记录表:
| 项目 | 记录结果 |
|---|---|
| 日期 | 2020-4-5 |
| 开始时间 | 15:00 |
| 结束时间 | 21:00 |
| 编码行数 | 57 |
| 错误数量 | 0 |
software engineering homework 2的更多相关文章
- Software Engineering: 3. Project planning
recourse: "Software Engineering", Ian Sommerville Keywords for this chapter: planning sche ...
- 第二篇——The communication during software engineering.
I've learned a lot in my software engineering class about how a program comes out.That's also a esse ...
- Software Engineering: 2. Project management
resources:"Software Engineering" Ian Sommerville For most projects, important goals are: D ...
- Software Engineering: 1. Introduction
Resource: Ian, Sommerville, Software Engineering 1. Professional software development 1.1 Software e ...
- SENG201 (Software Engineering I) Project
SENG201 (Software Engineering I) ProjectSpace ExplorerFor project admin queries:For project help, hi ...
- 个人阅读作业2—《No Silver Bullet: Essence and Accidents of Software Engineering》读后感
在进行了一次结对编程.一次团队编程和一次个人编程项目后,读了<No Silver Bullet: Essence and Accidents of Software Engineering> ...
- Software Engineering at Google
Google的Fergus Henderson在Software Engineering at Google中介绍了Google的软件工程实践. 软件开发 源码仓库 单一源代码仓库,除了核心配置和安全 ...
- Go is more about software engineering than programming language research.
https://talks.golang.org/2012/splash.article Go at Google: Language Design in the Service of Softwar ...
- 10. Software, Software Engineering, water fall (瀑布模型),Code Complete等名词的来源
①.Software-软件”一词是20世纪60年代才出现的,软件Software——1958年由贝尔实验室的著名统计学家John Tukey 提出软件与硬件一起构成完整的计算机系统,它们是相互依存,缺 ...
- SEMAT[软件工程方法和理论 Software Engineering Method and Theory]
Agile software development Agile software development is a group of software development methods bas ...
随机推荐
- KiCad,一款开源的PCB设计软件
Kicad,一款开源的PCB设计软件 1.偷偷摸摸久矣 还记得是大二的实践课,用Protel99se设计一款PCB,把电路图转印到铜板上并腐蚀出来,然后钻孔.焊接,那时候的软件是真难用,后面自学了Al ...
- 尝试window10系统下使用appuim获取ios元素
一般来说搞iOS手机的APP自动化需通过Mac电脑,但当前APP出图自动化测试平台是基于windows系统环境开发.如果因iOS APP需要再重新搭建Mac的开发及测试环境,会很大程度上浪费资源,增加 ...
- centos5.7 x64,安装java17,提示 glibc 版本低
安装java17,网站下载tar版本. 解压后,配置/etc/profile 的java_home,和path, 运行java -version 和 javac -version 提升缺少GLIB ...
- docker tomcat 环境构建
docker build -t repos_local/centos-jdk7-tomcat7:0.0.1 . -t 设置tag名称, 命名规则registry/image:tag . 表示使用当前目 ...
- 记录一次vue的报错
1.主要代码 <div class="hello-ezuikit-js" v-for="(item,index) in list"> <div ...
- 【Python】Python 技巧集锦(长期更新)
[Basic] 『List Comprehensions』 『Python 中 map(), filter(), reduce() 和 zip() 函数的用法』 『Python 中关于下划线 '_' ...
- 【Quartus系列】实验一: 3-8译码器(原理图输⼊设计)
实验一: 3-8译码器(原理图输⼊设计) ⼀:实验⽬的 1. 了解3-8译码器的电路原理,掌握组合逻辑电路的设计⽅法 2. 掌握QuartusII软件原理图输⼊设计的流程 ⼆:实验内容 2.1设计输⼊ ...
- HTML弹窗设计二
<!DOCTYPE html><html> <head> <title>模态框弹出层.html</title> <meta http- ...
- Mysql 非幂等性
幂等性就是指:一个幂等操作任其执行多次所产生的影响均与一次执行的影响相同. -- 幂等性在分布式高并发中很常见,如不能重复点赞.电商订单库存数要一致等. MySQL解决非幂等性常用方法: 1.乐观锁 ...
- Redis如何找出并快速删除亿级指定前缀的key
背景 由于Redis的单线程服务模式,命令keys *会阻塞正常的业务请求,不建议使用keys * pattern的方法进行查询,可能会使服务器卡顿而出现事故.如何获取指定的 key? 可以采用Red ...