单元测试
201421123098 胡丹丹 201421123118 张中结
代码地址:https://git.coding.net/zzj201421123118/together-2.git
一、需求分析
1.整数四则运算测试
2.分数四则运算测试
3.求最大公约数测试
二、测试环境
项目基于eclipse开发,然后使用用自带JUNIT4进行测试,eclemma实现代码覆盖率统计。
三、测试用例
1.整数四则运算测试
@Test
public void testAdd() {
Calculate cal = new Calculate();
String result = cal.add(10, 32768);
String expected="32778";
assertEquals(expected, result);
}
@Test
public void testSub() {
Calculate cal = new Calculate();
String result = cal.sub(6,3);
String expected="3";
assertEquals(expected, result);
}
@Test
public void testMul() {
Calculate cal = new Calculate();
String result = cal.mul(6,3);
String expected="18";
assertEquals(expected, result);
}
@Test
public void testDiv() {
Calculate cal = new Calculate();
String result = cal.div(5,2);
String expected="5/2";
assertEquals(expected, result);
}
2.真分数四则运算测试
@Test
public void testScoreAdd() {
//fail("Not yet implemented");
Calculate cal = new Calculate();
String result = cal.ScoreAdd(6,5,1,5);
String expected="7/5";
assertEquals(expected, result);
}
@Test
public void testScoreSub() {
Calculate cal = new Calculate();
String result = cal.ScoreSub(4,5,1,5);
String expected="3/5";
assertEquals(expected, result);
}
@Test
public void testScoreMul() {
Calculate cal = new Calculate();
String result = cal.ScoreMul(4,5,1,5);
String expected="4/25";
assertEquals(expected, result);
}
@Test
public void testScoreDiv() {
Calculate cal = new Calculate();
String result = cal.ScoreDiv(4,5,1,2);
String expected="8/5";
assertEquals(expected, result);
}
}
3.求最大公约数测试
@Test
public void testReduce(){
Calculate cal = new Calculate();
int result = cal.reduce(40,20);
int expected=20;
assertEquals(expected, result);
}
4.运行结果
5.覆盖率
6.测试中遇到的问题
进行分数四则运算测试时出现了错误,我们在确保测试代码没有问题完全正确的情况下,肯定是Calculate类中分数运算的方法出错了,仔细检查终于发现了错误,分数运算中的返回值弄错了
public String ScoreAdd(int x,int y,int q,int w){
strz = "+";
int temp1 = x * w + q * y;
int temp2 = y * w;
int temp3 = reduce(temp1, temp2);
temp1 = temp1 / temp3;
temp2 = temp2 / temp3;
sumScore = String.valueOf(temp1) + '/' + String.valueOf(temp2);
sumStr = (String.valueOf(temp4) + '/' + String.valueOf(temp5)) + strz
+ (String.valueOf(temp7) + '/' + String.valueOf(temp8));
t = 1;
return sumStr;
}
以上展示的是错误代码,错误的地方在 return sumStr;这样返回的其实是整个算式的字符串,自然与预料结果不同。应该改成return sumScore;返回运算结果的字符串。
7.结对照片
背景是一样的,这是一起约图书馆时拍的,身边没有其他人,就我给他拍,他给我拍。
PSP展示
PSP2.1 | Personal Software Process Stages | Time (%) Senior Student(/hour) | Time (%)(/hour) |
· Planning | 计划 | 2 | 2.5 |
· Estimate | 估计这个任务需要多少时间 | 0.5 | 0.5 |
· Analysis | 需求分析 (包括学习新技术) | 1 | 1 |
· Coding Standard | 代码规范 | 0.5 | 0.5 |
· Design | 具体设计 | 1.5 | 2 |
· Coding | 具体编码 | 20 | 24 |
· Test | 测试(自我测试,修改代码,提交修改) | 1 | 1 |
Reporting | 报告 | 1 | 1 |
小结
有了上次合作的经验,这次合作没那么尴尬了,但有一个问题就是,eclipse直接提交会覆盖掉前面的提交记录,前面提交的记录都已经被覆盖了,队友的代码提交记录被我的覆盖掉了,我也很无奈啊,然后下次提交信息时,统一版本的书写格式。通过这次结对作业,学习Jnuit4测试Java代码,学习使用eclemma实现代码覆盖率统计,收获还是挺大的。还有上次我们也有去尝试把计算功能模块化,但是没有成功,这次回头再去做,感觉简单了许多,有一种恍然大悟的感觉,可能编程也是需要灵感的吧……哈哈哈
PS:问在隔了一周之后再看之前的代码,是否更能体会到下面这些东西?
(1) 良好的设计
(2) 编码规范
(3) 必要的注释
答:上次的四则运算GUI只写了一个类,所有的功能都集中在一个类里,这样很容易牵一发而动全身,这次单元测试有去把计算功能独立出来作为一个类,也算设计上有了一个改善,功能独立,错误也容易找出来,运用也更方便,从这点来说,我确实体会到了良好设计的重要性。代码规范,之前可能不太注意,经过这几次编程,自我感觉代码越来越规范了。至于注释,能够方便他人理解,给代码更好的可读性,也是一种程序员与其他人交流的一种途径。
评价下伙伴:
先来一片面包:队友还是很虚心听取我的想法的,能相互讨论从而得出更加正确的做法。这种能听取他人想法的行为是值得我去学习的。
在把肉放上:有时候会想着希望能做得更好点,提出的建议想法都很不错,但是由于编程能力有限,还是选择了简便易行的方式。
再来一片面包: 想要做好不是一个人的事,有时候两个人可能都比较懒惰,做得比较慢,比较拖沓。两个人应该改变方式,应该互相督促,而不是你拖我也拖。