结对编程2——单元测试
陈麟凤 201421123015 && 张志杰 201421123019 &&黄海鸿 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了
单元测试:
小结与感受:
一周后在看自己程序其实印象不是很深了,感觉代码的规范是非常必要的,在一段时间后肯定会对自己的程序感到陌生,规范的代码和相应的注释就能够更快的读懂自己的逻辑,而且在结对编程中,让你的伙伴看懂你写的代码是必须的,所以代码的规范不仅要做到自己看得懂,也要让其他人看得懂。在通过模块测试里确实能够发现程序的相应问题并加以改进。
评价下伙伴:
先来一片面包:在编程是容易投入与如何实现功能而不是去设计模块,起初是将计算分成分数计算和整数计算,被队友突然问道:"为什么不将两个加起来啊,整数不就是分母为1的分数",有点醒过来了,后面就将计算整合到一起,所以队友在编程过程的建议还是相当给力的,当然前提是能看得懂彼此写的代码。
在把肉放上:在提出建议的时候最好能结合一下我的水平,提出一些和我水平相差太大的建议导致无法实现还嫌弃我。。
再来一片面包:建议要好好提,不要动不动就嫌弃我的编程水平@201421123019@201421123020
PSP:
PSP2.1 |
Personal Software Process Stages |
Time(min) Senior Student |
Time (min) |
Planning |
计划 |
5 |
2 |
Estimate |
估计这个任务需要多少时间 |
3 |
5 |
Development |
开发 |
3 |
0 |
Analysis |
需求分析 (包括学习新技术) |
3 |
2 |
·Design Spec |
生成设计文档 |
1 |
0 |
·Design Review |
设计复审 |
1 |
0 |
Coding Standard |
代码规范 |
10 |
3 |
· Design |
具体设计 |
5 |
5 |
Coding |
具体编码 |
60 |
120 |
·Code Review |
代码复审 |
5 |
30 |
Test |
测试(自我测试,修改代码,提交修改) |
10 |
5 |
Reporting |
报告 |
5 |
3 |
测试报告 |
3 |
1 |
|
计算工作量 |
3 |
5 |
|
并提出过程改进计划 |
5 |
0 |