一.项目源码。
Github地址:https://github.com/lucky6991/SoftWareTest/tree/master/SoftWareTest3
二.项目报告。
1.需求分析:
(1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不 计分,20道题测试结束后给出测试总分;
(2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下:
(3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;
(4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:
(5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;
(6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间。
(7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体。
2.软件设计:
(1)设计流程图:
(2)设计类图
1> ReadFile类是读取所有文件,将生成的算式全部读出来,以栈的形式放入数组内;
2> Fraction类是关于分数的计算,分为真分数和假分数;
3> Calculate类是百内整数的加减乘除运算;
4> Textview就是显示最终运算结果,以及显示分数,计时等功能。
(3)核心代码:
1>读取生成的文件:
2>分数的运算:
public int getNumerator() { return c; } public int getDinominator() { return d; } public void selfTrim() { int maxCommon=commonDivisor(c,d); //求出两个数的最大公约数。 c=c/maxCommon; //分式为最简。 d=d/maxCommon; //整理正负号。 if((c>0&&d<0)||(c<0&&d<0)) { c=-c; d=-d; } } public String toString() //重写tostring(). { if(c==0||d==1) //分母为1 直接输出分子. { return Integer.toString(c); } return Integer.toString(c)+"/"+Integer.toString(d); //输出c/d. } //----- plus public Fraction minus(Fraction f2) { int newNumerator=c*f2.getDinominator()-d*f2.getNumerator(); int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); } //---- minus public Fraction plus(Fraction f2) { int newNumerator=c*f2.getDinominator()+d*f2.getNumerator(); int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); } //----- mutiply public Fraction multiply(Fraction f2) //两个分数相乘。 { int newNumerator=c*f2.getNumerator(); int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); } //----- divide public Fraction divide(Fraction f2) { if(f2.getNumerator()==0) { System.out.println("0不能做除数!"); System.exit(0); } Fraction result=new Fraction(c,d); return result.multiply(new Fraction(f2.getDinominator(),f2.getNumerator())); } //计算2个数的最大公约数。按绝对值计算。
(4)运行结果:
测试结果统计:
(5)本次设计的PSP:
PSP2.1 | 任务内容 | 计划共完成需要的时间(天) | 实际完成需要的时间(天) |
Planning | 计划 | 9 | 14 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 0.5 | 1.5 |
Development | 开发 | 9 | 10.5 |
Analysis | 需求分析 (包括学习新技术) | 1 | 0.5 |
Design Spec | 生成设计文档 | 0.5 | 0.5 |
Design Review | 设计复审 (和同事审核设计文档) | 0.5 | 0.5 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 0.5 | 0.5 |
Design | 具体设计 | 1 | 1 |
Coding | 具体编码 | 4 | 6 |
Code Review | 代码复审 | 1 | 1 |
Test | 测试(自我测试,修改代码,提交修改) | 0.5 | 0.5 |
Reporting | 报告 | 1.5 | 1.25 |
Test Report | · 测试报告 | 0.5 | 0.5 |
Size Measurement | 计算工作量 | 0.5 | 0.25 |
Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 0.5 | 0.5 |
(6)请使用汉堡评价法给你的小伙伴一些点评。
我的小伙伴很认真,对待每一件事都有一个积极的态度,能很积极主动的和我交流意见,提出他的想法与观点,在本次项目开发中他主要负责计算器和分数统计,能够很认真的做开发,对我设计界面开发和计时器的设计提出了很多建议,我俩做了充分的交流和研究,最终分析利弊,用更完善的方式完成了这次的作业,我们互相删减代码中的冗余部分;和他合作我感觉到很越快,我们的合作很成功,我也期待下次和他继续合作开发项目。在此过程中我们也遇到很多问题,但是我们都没有推卸责任,而是积极探讨、一起解决,解决问题后两个人就特别激动。
(7)结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。
通过本次项目,我体会到结对编程真的能够带来1+1>2的效果,本次项目的规模相比于上一次大了不少。所以结队编程的好处也就是提高了编码和效率,减轻了工作量;也能够更好地了解他人的想法和思路,对于自己做程序开发也是有很大的积极作用,而且当自己一个人遇到困难的时候,很容易轻易放弃。两个人一起编程,就会感觉不到编程的枯燥与乏味,反而是很轻松,能彼此讨论自己想法的过程。