一.项目源码。
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的效果,本次项目的规模相比于上一次大了不少。所以结队编程的好处也就是提高了编码和效率,减轻了工作量;也能够更好地了解他人的想法和思路,对于自己做程序开发也是有很大的积极作用,而且当自己一个人遇到困难的时候,很容易轻易放弃。两个人一起编程,就会感觉不到编程的枯燥与乏味,反而是很轻松,能彼此讨论自己想法的过程。