结对作业2:单元测试
(201421123002 翁珊;201421123006 黄月梅;201421123007 徐晓珊)
题目要求:
- 结对编程实现上述功能,同样的,在程序正式开发之前,请先预估下PSP每个环节的消耗时间(分钟),并在过程中统计实际耗时(分钟),最后提交PSP表格。依然注意,这个主要是给你们自己看的,不必造假数据。
- 继续两人结对协作,把编码规范、领航员和驾驶员角色互换做到位。
- 单元测试: 有单元测试保证,有代码覆盖率。
需求分析:
1.把计算模块提取出来,单独创建一个类。
计算模块单独成类(CalcFunction)
1 public class CalcFunction { 2 static int count=0,count1=0; 3 public static String add(Fraction a, Fraction b) //加法 参考分数间加减乘除 用四个变量表示两个分数的分子分母 4 { 5 int i, j, k, s, m, n, p; 6 i = a.getNumerator();// 分子 7 j = a.getDenominator();// 分母 8 k = b.getNumerator(); 9 s = b.getDenominator(); 10 m = i * s + j * k; 11 n = s * j; 12 p = Calc.getGCD(m, n); 13 return Calc.Reduction(m / p, n / p); 14 15 } 16 17 public static String div(Fraction a, Fraction b)//除法 设置生成的随机数不为0,则不存在除数为0的情况 18 19 { 20 int i, j, k, s, m, n, p; 21 i = a.getNumerator();// 分子 22 j = a.getDenominator();// 分母 23 k = b.getNumerator(); 24 s = b.getDenominator(); 25 m = s * i; 26 n = j * k; 27 p = Calc.getGCD(m, n); 28 return Calc.Reduction(m / p, n / p); 29 } 30 31 public static String sub(Fraction a, Fraction b)//减法 32 33 { 34 int i, j, k, s, m, n, p; 35 i = a.getNumerator();// 分子 36 j = a.getDenominator();// 分母 37 k = b.getNumerator(); 38 s = b.getDenominator(); 39 m = i * s - j * k; 40 n = j * s; 41 p = Calc.getGCD(m, n); 42 return Calc.Reduction(m / p, n / p); 43 } 44 45 public static String mul(Fraction a, Fraction b)//乘法 46 47 { 48 int i, j, k, s, m, n, p; 49 i = a.getNumerator();// 分子 50 j = a.getDenominator();// 分母 51 k = b.getNumerator(); 52 s = b.getDenominator(); 53 m = i * k; 54 n = j * s; 55 p = Calc.getGCD(m, n); 56 return Calc.Reduction(m / p, n / p); 57 } 58 59 }
2.针对提取出来的计算类的接口函数做单元测试。
单元测试代码如下:
1 @Test 2 public void testAdd() { 3 Fraction a = new Fraction(2,3,"2/3"); 4 Fraction b = new Fraction(1,3,"1/3"); 5 6 assertEquals(CalcFunction.add(a,b), "1"); 7 } 8 9 @Test 10 public void testDiv() { 11 Fraction a = new Fraction(2,3,"2/3"); 12 Fraction b = new Fraction(1,3,"1/3"); 13 14 assertEquals(CalcFunction.div(a,b), "2"); 15 } 16 17 @Test 18 public void testSub() { 19 Fraction a = new Fraction(2,3,"2/3"); 20 Fraction b = new Fraction(1,3,"1/3"); 21 22 assertEquals(CalcFunction.sub(a,b), "1/3"); 23 } 24 25 @Test 26 public void testMul() { 27 Fraction a = new Fraction(2,3,"2/3"); 28 Fraction b = new Fraction(1,3,"1/3"); 29 30 assertEquals(CalcFunction.mul(a,b), "2/9"); 31 }
计算模块测试结果如下:
其他测试(CalcTest):
1 @Before 2 public void setUp() throws Exception { 3 } 4 5 @After 6 public void tearDown() throws Exception { 7 } 8 9 @Test 10 public void testGetGCD() { 11 assertEquals(Calc.getGCD(10, 5), 5); 12 } 13 14 @Test 15 public void testReduction() { 16 assertEquals(Calc.Reduction(9, 5), "9/5"); 17 }
测试结果如下:
代码覆盖率:
测试中遇到的问题及解决:
因为要求利用助教提供的空壳进行代码填充,所以对于代码模块的分割做的不是很好。后来将一些像gui模块编写这样在这次作业中没有用到的模块删除。对于除零错误,由于刚开始我们就设置了被除数不能出现=0的情况,就没有考虑。运算符也是刚开始就设置了只有单个字符生成。
小结与感受:通过测试,是否有效发现了程序计算模块的问题,并给予改进?
通过单元测试可以知道方法的某些地方出错了,需要在方法定义的地方进行相应的修改。就像刚开始进行四则运算的测试时一开始测试失败了,随后找到原因在相应方法的源代码上进行处理和修改,就可以测试成功了。再加上分了模块后,发现代码错误的时候找错更容易,可以更好的进行修改。
隔周看之前的代码:
(1)良好的设计
如果刚开始就能有良好的设计思想,做好模块划分和有单元测试的想法,现在的代码就不会那么乱,不能很好的进行模块划分和测试。
(2)编码规范
代码规范的重要性不言而喻,能让大家看到类名函数名就能知道函数的用途是什么,这也是很重要的。这样不仅自己,包括别的用户也可以进行较为轻松的阅读。
(3)必要的注释
因为刚开始的代码编写比较简单,所以忽略了注释,导致现在再看之前的代码较为吃力,但是因为方法的命名是根据其代表的意义的,所以还是能够大致理解,但是警示了我们今后写代码要有一些基本的注释。
git克隆助教的框架:
git上交截图:
☞☞☞ 撮coding链接(所有代码在src里)
https://coding.net/u/xxs24/p/pairwork2/git
结对照片:
PSP表格:
PSP2.1 |
Personal Software Process Stages |
Estimated Time(hour) |
Actual Time (hour) |
Planning |
计划 |
0.5 |
0.5 |
· Estimate |
估计这个任务需要多少时间 |
10 |
12 |
Development |
开发 |
5 |
6 |
· Analysis |
需求分析 (包括学习新技术) |
1 |
1.5 |
· Design Spec |
生成设计文档 |
1 |
1 |
· Design Review |
设计复审 |
1.5 |
2 |
· Coding Standard |
代码规范 |
0.5 |
0.5 |
· Design |
具体设计 |
2 |
2 |
· Coding |
具体编码 |
4 |
4.5 |
· Code Review |
代码复审 |
0.5 |
0.5 |
· Test |
测试(自我测试,修改代码,提交修改) |
0.5 |
1 |
Reporting |
报告 |
0.5 |
0.5 |
· |
测试报告 |
1/6 |
1/6 |
· |
计算工作量 |
1/6 |
0.5 |
· |
并提出过程改进计划 |
0.25 |
0.25 |
转载于:https://www.cnblogs.com/xxs24/p/6628709.html
结对作业2:单元测试相关推荐
- 四则运算之结对作业报告
一.项目Coding.net原码仓库地址:https://git.coding.net/caoying/Teamwork.git 曹滢2016012102 卢琪2016011986 二 ...
- 两个小可爱的结对作业(司佳宇,雷镓)
两个小可爱滴结对作业(司佳宇,雷镓) 题目要求 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求: 能够自动生成四则运算练习题 可以定制题目数量 用户可以选择运算符 用户 ...
- 结对编程2 单元测试
单元测试 201421123098 胡丹丹 201421123118 张中结 代码地址:https://git.coding.net/zzj201421123118/together-2.git 一. ...
- 软件工程(2019)第一次结对作业
审查人以及代码信息 (1)结对人:张斯豪 (2)项目代码地址:代码地址 (3)项目代码功能:游戏 审查代码细节汇总 按照C++代码审查表审查汇总如下 功能模块名称 简单的游戏框架 审查人 高钰清 审查 ...
- 软件工程实践2017结对作业
1.结对成员 031502643 朱晓健 031502626 孙浩楷 2.需求分析 Need 每到开学的时候,各大部门就会挤满青春广场通过各种方式来招收新成员.新生顶着烈日填写完申请表交由部门筛选,部 ...
- 软件工程结对作业 四则运算界面设计
软件工程结对作业 四则运算器界面设计 康鑫 PB16060203 娄雨禛 PB16060356 项目内容链接:http://www.cnblogs.com/silent-zlv/p/8684979 ...
- 软件工程第一次作业(结对作业)
代码复审 1.问题描述 (1). 首先在同学中找一个同伴,范围不限,可以在1~5班中随意组合,建议尽量不要找同组的成员,女同学尽量找男同学结对,但是不做强制要求: (2). 从以往个人完成的项目中选择 ...
- 第6次结对作业--郑锦伟古维城
第6次结对作业 在线英语学习平台客户端原型 1.结对成员 郑锦伟 2015034643034 古维城 2015034643033 2.原型设计工具实现-Photoshop 3.需求分析 使用NABCD ...
- 软件工程实践结对作业一
这个作业属于哪个课程 <2022年福大-软件工程.实践-W班> 这个作业要求在哪里 <软件工程实践结对作业一> 这个作业的目标 <结对合作,NABCD模型,需求分析,原型 ...
- 结对作业项目报告——四则运算UI设计(UI第一组 PB16120211 章豪 PB16151063 吴宏宇)...
一.项目要求 UI要求: 这是交付给最终用户的软件,有一定的界面和必要的辅助功能.完成Windows和Linux电脑图形界面的程序,需实现以下功能: 对上述各属性参数(生成题目的数量,操作数的数量,题 ...
最新文章
- 令人郁闷的 DOCTYPE
- C语言经典例61-杨辉三角
- Floyd算法 笔记 C/C++
- SOA系列文章(二):服务设计原理:服务模式和反模式
- python天气查询系统有什么知识点_Python入门 天气查询程序
- Redis 与 key 相关的常用命令
- centos7不中断执行命令
- 从安装到部署的Cordova iOS应用开发说明
- 【Python数据分析】数据预处理1——数据清洗
- 蓝桥杯:十六进制转八进制
- 【语音识别基础】总有一天你会用到,嗯,没有公式~
- TransformerEncoder
- 国民经济行业分类 GB/T 4754-2017 最新2017版 代码整理
- JavaScript学习指南 修订版pdf
- ERP源码 跨境电商ERP源码 Java电商ERP源码
- hadoop各组件及其作用
- win7怎么跳过硬盘自检_从零开始修电脑第二期__电脑自检慢的维修
- 隐藏式超远无线充电,可隔空5~10公分正常充电。
- bzoj1677:求和
- 电路功能描述方式——数据流方式
热门文章
- 西单大悦城苹果店4s_“神秘列车”复活!金融街-西单,3号免费专线今天回归...
- python函数参数学习_python函数学习1
- python程序可以在任何安装了解释器_Python解释器新手安装教程
- ThinkPHP5访问去除/public/index.php
- jquery触发点击事件
- Qt杂记-QQuick之Android隐藏状态栏以及状态栏透明(QQuick项目)
- Qt工作笔记-对qmake的认识【两篇转载结合】
- C++工作笔记-模版中class更新为typename
- 进程管理程序java,运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析...
- 里面怎么打中文字_“标题党”英语应该怎么翻译?不要翻译成“title party”!...