结对编程2——单元测试
张志杰 201421123019 && 陈麟凤 201421123015 && 黄海鸿 201421123020
需求分析:
将计算模块分离出来形成一个单独的类,针对自己采用的编程语言采用相应的方法
运算符号在程序中是单个字符生成的,所以没有考虑"++"
测试相应的加减乘除功能和除0异常等
设计测试框架, 模拟测试数据:
- 加减乘除功能
- 除0错误
加减乘除功能:
CalcFunction cf = new CalcFunction(); //test add cf.s="1+2"; cf.calc(); assertEquals("3", cf.result); cf.s="1/5+7/8"; cf.calc(); assertEquals("43/40", cf.result); cf.s="10000+10000"; cf.calc(); assertEquals("20000", cf.result); cf.s="7/8+3/5"; cf.calc(); assertEquals("59/40", cf.result); //test sub cf.s="5-7"; cf.calc(); assertEquals("-2", cf.result); cf.s="1/7-8/9"; cf.calc(); assertEquals("-47/63", cf.result); cf.s="34-7"; cf.calc(); assertEquals("27", cf.result); cf.s="1/5-4/9"; cf.calc(); assertEquals("-11/45", cf.result); //test mul cf.s="5*7"; cf.calc(); assertEquals("35", cf.result); cf.s="1/7*8/9"; cf.calc(); assertEquals("8/63", cf.result); cf.s="34*7"; cf.calc(); assertEquals("238", cf.result); cf.s="1/5*4/9"; cf.calc(); assertEquals("4/45", cf.result); //test div cf.s="5÷7"; cf.calc(); assertEquals("5/7", cf.result); cf.s="1/7÷8/9"; cf.calc(); assertEquals("9/56", cf.result); cf.s="34÷7"; cf.calc(); assertEquals("34/7", cf.result); cf.s="1/5÷4/9"; cf.calc(); assertEquals("9/20", cf.result); cf.s="2++3"; cf.calc(); assertEquals("操作符错误", cf.result); cf.s="5÷0"; cf.calc(); assertEquals("参数错误", cf.result);
加减乘除的功能测试通过assertequal中expected和actural值比较来判断功能的准确性
除0错误+“1++2”的处理:
public void calc(){ if(s.indexOf("+")>-1) { add(s); } else if(s.indexOf("-")>-1) { sub(s); } else if(s.indexOf("*")>-1) { mul(s); } else if(s.indexOf("÷")>-1) { div(s); } } public void add(String s){ try{ String[] s1=s.split("[+]"); if(s1[0].indexOf("/")>-1 || s1[1].indexOf("/")>-1) { String[] s2=s1[0].split("[/]"); String[] s3=s1[1].split("[/]"); int fenzi1=Integer.parseInt(s2[0]); int fenmu1=Integer.parseInt(s2[1]); int fenzi2=Integer.parseInt(s3[0]); int fenmu2=Integer.parseInt(s3[1]); int fenzi=fenzi1*fenmu2+fenzi2*fenmu1; int fenmu=fenmu1*fenmu2; int temp=yuefen(fenzi,fenmu); fenzi=fenzi/temp; fenmu=fenmu/temp; result=fenzi+"/"+fenmu; } else { int num1=Integer.parseInt(s1[0]); int num2=Integer.parseInt(s1[1]); int ans=num1+num2; result=ans+""; } }catch(java.lang.ArithmeticException e){ result="参数错误"; } catch( java.lang.NumberFormatException o){ result="操作符错误"; } }
除0错误产生的异常捕获并将结果置为“参数异常“反馈
测试中遇到的问题及解决:
- 最早是将整数与分数的计算分开的,原先的计算结果都没有错误,但是后面将分数和整数的计算合并后出现了一些乘法和除法的错误,将程序分成小模块后纠错就比较容易,直接去乘法和除法的代码那边将相应变量改对就OK了
单元测试:
小结与感受:
在测试过程中更加体会到了代码规范的重要性,再次使用陈麟凤同学的代码虽然印象还有但是还是有一些因为没有注释等原因还要等他来解释,所以耽误了一些时间。希望下次如果我们有再进行编程时能在一些关键点做一些必要的注释。
评价下伙伴:
先来一片面包:两位同学都是虚心听取其他人的想法的,能相互讨论从而得出更加正确的更加简便的做法,例如分数以及整数计算的一起使用。这种能听取他人想法的行为是值得我们大家一起学习的。
在把肉放上:有时候会想着希望能做得更好点,但是可能因为我们的编程功底都不高所以都做得不是很好。
再来一片面包: 想要做好不是一个人的事,有的同学可能比较懒惰,做得比较慢,比较拖沓。这是需要改进的。
PSP
Personal Software Process Stages |
Estimated Time(min) |
Actual Time (min) |
计划 |
10 |
6 |
·任务估计 |
10 |
6 |
开发 |
91 |
155 |
·需求分析 (包括学习新技术) |
10 |
8 |
·生成设计文档 |
5 |
6 |
·设计复审 |
5 |
3 |
·代码规范 |
1 |
2 |
·具体设计 |
5 |
8 |
·具体编码 |
50 |
69 |
·代码复审 |
5 |
2 |
·测试(自我测试,修改代码,提交修改) |
10 |
20 |
报告 |
30 |
24 |
·测试报告 |
15 |
18 |
·计算工作量 |
10 |
6 |