博客信息 沈阳航空航天大学计算机学院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的更多相关文章

  1. Software Engineering: 3. Project planning

    recourse: "Software Engineering", Ian Sommerville Keywords for this chapter: planning sche ...

  2. 第二篇——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 ...

  3. Software Engineering: 2. Project management

    resources:"Software Engineering" Ian Sommerville For most projects, important goals are: D ...

  4. Software Engineering: 1. Introduction

    Resource: Ian, Sommerville, Software Engineering 1. Professional software development 1.1 Software e ...

  5. SENG201 (Software Engineering I) Project

    SENG201 (Software Engineering I) ProjectSpace ExplorerFor project admin queries:For project help, hi ...

  6. 个人阅读作业2—《No Silver Bullet: Essence and Accidents of Software Engineering》读后感

    在进行了一次结对编程.一次团队编程和一次个人编程项目后,读了<No Silver Bullet: Essence and Accidents of Software Engineering> ...

  7. Software Engineering at Google

    Google的Fergus Henderson在Software Engineering at Google中介绍了Google的软件工程实践. 软件开发 源码仓库 单一源代码仓库,除了核心配置和安全 ...

  8.  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 ...

  9. 10. Software, Software Engineering, water fall (瀑布模型),Code Complete等名词的来源

    ①.Software-软件”一词是20世纪60年代才出现的,软件Software——1958年由贝尔实验室的著名统计学家John Tukey 提出软件与硬件一起构成完整的计算机系统,它们是相互依存,缺 ...

  10. SEMAT[软件工程方法和理论 Software Engineering Method and Theory]

    Agile software development Agile software development is a group of software development methods bas ...

随机推荐

  1. springcloud(五) - 网关gateway

    功能介绍 springcloud gateway提供一种以路由的方式,基于Filter链的方式提供网关的基本功能.如安全.监控.限流. 网关:将不同协议的网络段连接到一起的设备,外网进入内网的入口,对 ...

  2. yolov5查看训练日志图片和直方图(包括稀疏训练bn直方图)

    0.D:\code\codePy\yolov5-6.1\runs\train\exp25文件夹下有 events.out.tfevents.1675823043.DESKTOP-ACC9FL4.521 ...

  3. 用H5 Canvas绘制一个仪表盘笔记

    前端有许多做数据可视化的图表插件,但有时候UI设计的图可能用现成的js插件无法定制或者比较麻烦(还不如自己造轮子来的快). 下面记录下用H5 canvas设计一个仪表盘代码: <!DOCTYPE ...

  4. elasticsearch组件

    elasticsearch组件 Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据. 它被用作全文检索.结构化搜索.分析以及这三个功能的组合 E ...

  5. k8s心得

    k8s的 Service 记录了发布后服务的基本信息,如 ip,端口

  6. macOS Big Sur 设置JAVA_HOME

    默认JAVA_HOME指向的是: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 这个不是我们自己安装的jdk,另外本 ...

  7. Python——01.环境及安装

    Python介绍 -- Python是解释型,面向对象的语言,程序结构简洁,清晰 -- Python解释器分类: CPython(官方解释器):用C语言编写的Python解释器 PyPy:用Pytho ...

  8. Flink写入Redis集群 重写flink-connector-redis包,解决Cluster无法输入密码问题

    起因:使用flink的时候难免和redis打交道,相信大家都使用过flink-connector-redis来处理,但是当我想要使用RedisSink写入集群时,发现居然不支持使用密码,于是有了这篇笔 ...

  9. nacos原理

    配置中心原理 1.Nacos 客户端使用长轮询请求客户端变更数据,并且设置30s超时,当配置发生变化响应会立即返回,否则一直等到29.5s之后再返回响应. 2.客户端的请求到达服务端后,服务端将该请求 ...

  10. paramiko 文件传输失败 Sftp put 方法 踩坑点

    转载自https://www.cnblogs.com/zhangchen5/p/16064335.html 1. 找不到文件报错 Traceback (most recent call last): ...