结对编程2——单元测试
码市:https://git.coding.net/pyj76566/Homework.git
组员:201421123085 童毅南
201421123086 潘益靖
上一周大家为四则运算程序设计了2-3个新功能,本次在隔了一周之后,我们循序渐进地进阶。本次目标:
- 将计算模块提取出来,单独创建一个类;
- 将分数元素提取出来,单独创建一个类;
- 测试计算模块中的加减乘除;
- 测试分数元素模块中值的意义,以及测试两个分数是否等效等等;
a、需求分析:单元测试能够让我们写的代码更加健全,能够让程序能够不用牵一发而动全身,大大
的改善了后期的维护花费的工作量。我们把四则运算提取出来做单元测试
--加法运算--
首先我们提取的是加法,在calc.add(String str)中调用了Calculator中的加法,在和我们算出的答案用JUNIT中的asserEquals方法比较答案是否一致。
而且对式子的正确性进行判断
--减法运算--
与加法相同,在calc.sub(String str)中调用了Calculator中的减法,在和我们算出的答案用JUNIT中的asserEquals方法比较答案是否一致。
而且对式子的正确性进行判断
--乘法运算--
乘法我们测试了有的功能,都能执行过
--除法运算--
不仅四则运算,我们还额外测试了一些功能,有关分数的例如:
--判断一个数是否是分数--(对于分母为0的数,我们采用的是分子为1,分母为Integer.MAX_VALUE)
其中我们用到了assertFalse()方法
用法:assertFalse(boolean condition);
condition:如果condition结果为false,则通过测试.
图中我们可以看出缺少分母的数判断是否为分数的结果是false所以是通过了,同理缺少分子,不是数字,分母为零,分子为零,分数误输入为“O”(字母O)结果都是false
--计算分子分母的最大公约数--
当我们故意输入一个错的最大公约数,自然是通过不了。
--判断两个分数是否相等--
主要适用于测试两个分数是否相等的功能,这个方法用于比较系统算出的答案和用户输入的答案书否相等。
--代码覆盖率--
计算模块的:
分数模块的:
--小结与感受--
之前的代码我们已经做到了至少是好一些的规划,每每要用到一个新方法时候,都不在这个方法里面直接写,而是重新写一个目标方法,单元测试我觉得很有意义,能够让我写代码时候能够把一个方法写到尽量完美无缺,减少了以后的修改量,还是得代码,条理清晰,一看到就能知道功能,不用再从头开始想,这段代码的意义。
d. 在隔了一周之后再看之前的代码,是否更能体会到下面这些东西
(1) 良好的设计
测试过程中的提取模块的难易程度,就可以部分看出这个程序的模块化程度,当你把所有代码都集中在一个方法中时,大大加大了测试难度,往往还得重构。 好麻烦啊! (⊙﹏⊙)b感觉我对这个四则运算生成的设计跟别人不一样。我是随机生成两个分数类,然后固定两个分数,再随机生成运算符,最后生成一个式子字符串;而别人的是随机字符串,再把这个字符串中的元素捞出来(式子正确),给对应分数类赋值,对应运算符再说;所以我的测试类中就没有输入类似"1++2"的可能,而更多测试的是分数类的合理性和分数之间的运算和判断正确。因为我把它限制死了。相比来说,我这种扩展难度大,随机生成简单;
(2) 编码规范
讲到编码规范,就不得不讲到我的变量命名,真的是太烂了。一个好的命名应该能让别人大致判断出这个变量的作用和类型。不仅如此,每次编点程序,命名都有点小纠结,偶尔还要想一会儿。这种东西只能说多练吧,或者也可以多看看别人是怎么写的。至于那些适当的缩进嘛,对于eclipse来说,只不过Ctrl+Shift+F,就可以对齐了。
(3) 必要的注释
注释真的很重要,过了一段时间看这些自己写过的还真的有点东西很陌生,这时候注释就很重要了。如果没有这些注解,回忆这些方法还真需要一些时间。怎么讲呢?注释不仅对自己有用,其实更多的也可以给别人看。特别在看了JRE中的一些代码之后,会发现很多代码其实是很短的,但是他们写的注释比代码更多,这样可以生成文档让别人查询。
结队照片
PSP(Personal Software Process)表格
PSP2.1 | Personal Software Process Stages | Time (%) Senior Student | Time (%) |
Planning | 计划 | ||
· Estimate | 估计这个任务需要多少时间 | 6h | 7h |
Development | 开发 | ||
· Analysis | 需求分析 (包括学习新技术) | 0.5h | 0.5h |
· Design Spec | 生成设计文档 | 0 | 0 |
· Design Review | 设计复审 | 0 | 0 |
· Coding Standard | 代码规范 | 0.1h | 0.2h |
· Design | 具体设计 | ||
· Coding | 具体编码 | 1h | 1.2h |
· Code Review | 代码复审 | 0.5h | 0.6h |
· Test | 测试(自我测试,修改代码,提交修改) | 2h | 2h |
Reporting | 报告 | 2h | 2.6h |
·Test Report | 测试报告 | 0 | 0 |
· Size Measurement | 计算工作量 | ||
·Postmortem & Process Improvement Plan | 并提出过程改进计划 |