黄海鸿 201421123020&& 陈麟凤 201421123015 && 张志杰 201421123019
需求分析:
将计算模块分离出来形成一个单独的类,针对自己采用的编程语言采用相应的方法
运算符号在程序中是单个字符生成的,所以没有考虑"++"
测试相应的加减乘除功能和除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错误产生的异常捕获并将结果置为“参数错误“反馈
操作符错误产生的异常捕获后将结果置为“操作符错误”反馈
测试中遇到的问题及解决:
- 最早是将整数与分数的计算分开的,原先的计算结果都没有错误,但是后面将分数和整数的计算合并后出现了一些乘法和除法的错误,将程序分成小模块后纠错就比较容易,直接去乘法和除法的代码那边将相应变量改对就解决了。
单元测试:
小结与感受:时隔一周再去看代码而且是别人的代码难免有些生疏,有些地方没有注释还要花时间去看,结对编程不是一个人的任务必要的代码注释能让伙伴更容易的看懂代码。
汉堡包式评价:
先来一片面包:在一开始的设计中麟凤原来是打算将计算分为分数计算和整数计算两部分,后来仔细一想只需要将整数看做分母为1的分数划入分数部分不就不用分两部分写了,有时候充分考虑队友的建议也很重要。
再把肉放上:在功能设计上要立足于队友和自己的水平,不要想到什么就想做什么。
再来一片面包:个人属于比较懒的那类,希望队友多多监督不要嫌弃我。
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 |