结对编程2——单元测试
黄睿 201421123069 周迪 201421123089
coding.net 地址:http://git.oschina.net/hr2324/SoftEngHW
1.我们的代码要使它的利用率大大提高,所以我们要通过单元测试进一步完善代码,发现细小的错误。于是这次就用JUnit进行了简单四则运算的单元测试。
a.需求分析:(1)在上次的基础上将计算模块单独创建一个类;
(2)针对计算类做单元测试;
(3)主要做整数和真分数的加减乘除;
(4) 增量式开发,用git命令提交到coding.net地址。
b. 设计测试框架, 模拟测试数据:
(1)整数的加减乘除测试:
@Test public void testAdd() { number a=new number(156,78); number b=new number(19, 32); calculate c=new calculate(a,b); c.add(); number a1=new number(100,78); number b1=new number(10, 32); calculate c1=new calculate(a1,b1); c1.add(); } @Test public void testSub() { number a=new number(1,3); number b=new number(2,3); calculate c=new calculate(a,b); c.sub(); number a1=new number(29,47); number b1=new number(55,67); calculate c1=new calculate(a1,b1); c1.sub(); number a2=new number(66,7); number b2=new number(53,27); calculate c2=new calculate(a2,b2); c2.sub(); } @Test public void testMuti() { number a=new number(1,3); number b=new number(2,3); calculate c=new calculate(a,b); c.muti(); number a1=new number(27,43); number b1=new number(5,6); calculate c1=new calculate(a1,b1); c1.muti(); number a2=new number(66,7); number b2=new number(53,27); calculate c2=new calculate(a2,b2); c2.muti(); } @Test public void testDiv() { number a=new number(89,39); number b=new number(27,39); calculate c=new calculate(a,b); c.div(); number a1=new number(26,24); number b1=new number(5,6); calculate c1=new calculate(a1,b1); c1.div(); } }
利用JUnit看出成功与否和耗时:
(2)分数的加减乘除测试:
@Test public void testAdd() { number a=new number(77/156,78/99); number b=new number(19/33, 32/49); calculate c=new calculate(a,b); c.add(); } @Test public void testSub() { number a=new number(1/45,5/47); number b=new number(2/34,3/67); calculate c=new calculate(a,b); c.sub(); } @Test public void testMuti() { number a=new number(1/11,3/33); number b=new number(2/22,3/33); calculate c=new calculate(a,b); c.muti(); number a1=new number(27/56,43/87); number b1=new number(5/6,6/11); calculate c1=new calculate(a1,b1); c1.muti(); } @Test public void testDiv() { number a=new number(89/99,39/76); number b=new number(27/44,39/56); calculate c=new calculate(a,b); c.div(); } }
利用JUnit看出成功与否和耗时:
(3)当出现 “ 248 / 0”时:出现错误
(4)代码覆盖率:
c. 小结与感受:这次编程作业主要是学习并使用JUnit,刚开始按照老师给的链接一步一步做JUnit,但是做到有一步添加JUnit的时候一直显示not found,百度也一直无果,最后请教了同学,才得以解决,最后建立了一个项目名和码云的项目名一致,方便识别。然后将我的计算类添加了进去,再将我与之相关的类也放进去,然后加入了计算覆盖率的插件单元测试就这样完成了。然后就是说一说git,由于上次作业没有很好的领会这个步骤,所以这次就是相当于从头做git,所以这次作业用时最多的就属它了。首先我是建仓库这方,在我项目那些全部完成之后,利用命令行提交代码时,最后一步一直说我用户认证失败,在重新试过很多次之后都无法解决,然后就决定直接利用eclipse commit了,查阅百度和很多博客上相关的文章之后,终于成功了,所以还是很让人开心的一件事。出现的问题就是我在运行测试的时候,加法没办法进行真分数的运算,一直显示错误,我的代码就是原本计算类的代码,逻辑上都没有错误,然后我就将逻辑一步一步顺了一遍,用最日常的算法方式改了代码的顺序,然后问题就解决了。
d. 在隔了一周之后再看之前的代码,是否更能体会到下面这些东西:
(1) 良好的设计:这一部分在这次做了单元测试之后才明白,良好的设计就是功能的更完善,只有在设计的时候考虑到各种各样的情况,最后写出来的类或方法才能更方便被使用,而不至于单元测试的时候,对于自己想要的结果出现错误,然后又要回过头去改动原始代码。在这一部分我们没有做的很好,只是追求将老师布置的功能写出来就行了,细致的东西都没有注意到,导致很多应该有错误的地方显示不出来。
(2) 编码规范:这一部分我觉得我们做的还可以,因为老师在最初就说了对于变量的取名,所以我们一开始对于变量都是取它相应的英文名或简写,所以即使时间再久,也不会布置这些变量代表什么。
(3) 必要的注释:这部分也是深有体会,比如求最大公约数、最小公倍数等等,这样标记下来就不用再看一遍代码是在干什么了,只是有时候可能会忘记对代码的注释,还要多多习惯,养成良好的习惯。
2.描述结对的过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。
(1)结对过程:
在之前代码的基础上,我们利用JUnit进行了单元测试。虽然我们做的测试功能没有非常完善,但慢慢的进步也是可以感觉到的。这次作业中,我们合作的很完美,当一个在编程时,另外一个就查询接下来会用到的相关资料,节省了很多时间,也慢慢适应了这种合作方式。
(2)结对照片:
3.PSP:
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 计划 | ||
· Estimate | 估计这个任务需要多少时间 | 10h | 8h |
Development | 开发 | 8h | 7h |
· Analysis | 需求分析 (包括学习新技术) | 3h | 5h |
· Design Spec | 生成设计文档 | ||
· Design Review | 设计复审 | ||
· Coding Standard | 代码规范 | 4h | 3h |
· Design | 具体设计 | ||
· Coding | 具体编码 | 10h | 8h |
· Code Review | 代码复审 | 5h | 4h |
· Test | 测试(自我测试,修改代码,提交修改) | 8h | 6h |
Reporting | 报告 | 2h | 2h |
· | 测试报告 | 5h | 4h |
· | 计算工作量 | 5h | 4h |
· | 并提出过程改进计划 |