一、结对成员信息
| 学号 | 姓名 | 博客链接 | 码云地址 |
|---|---|---|---|
| 201521123044 | 吴敏烽 | https://www.cnblogs.com/Min21/ | https://gitee.com/min21/events |
| 201521123061 | 倪兢飞 | https://home.cnblogs.com/u/JMUNJF/ | https://gitee.com/nikoudoublefly/events |
源代码地址:https://coding.net/u/lhl1212/p/work2/git
原题目要求:http://www.cnblogs.com/happyzm/p/6472120.html
二、功能改进与扩展
1、检查大部分主要类之间的关系,画出类图

2、浏览所有代码考虑代码质量和测试覆盖率
-
源代码质量和测试覆盖率



-
当前设计的一个弱点,通过重构,确保在这个地方已有测试覆盖并保证重构没有改变已有的功能
- 1、当前的代码的分数多项式的加减法结果是有问题的。
- 2、当前代码不能实现乘方
- 3、当前代码不能实现开根号

-
修改代码后,检查代码覆盖,看单元测试是否需要修改?测试用例是否需要增加?


3、代码重构和增加功能。
\分数多项式的加减法修改
public void add(String s)//加法
{
String[] str=s.split("[+]");
if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
{
String[] str1=str[0].split("\/");
String[] str2=str[1].split("\/");
if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
{
result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))+(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
}else{
throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
}
}
else{//整数
if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
{
result = Integer.parseInt(str[0])+Integer.parseInt(str[1])+"";
}
else{
throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
}
}
public void substract(String s)//减法
{
String[] str=s.split("[-]");
if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
{
String[] str1=str[0].split("\/");
String[] str2=str[1].split("\/");
if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
{
result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))-(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
}else{
throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
}
}
else{//整数
if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
{
result = Integer.parseInt(str[0])-Integer.parseInt(str[1])+"";
}
else{
throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
}
}
- 结果展示

\实现乘方
private void power(String s) { //乘方
String[] str=s.split("[\^]");
int n=Integer.parseInt(str[1]);
if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
{
String[] str1=str[0].split("\/");
if(Integer.parseInt(str1[1]) != 0)//分母不为零
{
int Fz=Integer.parseInt(str1[0]);
int Fm=Integer.parseInt(str1[1]);
int FzResult=1;
int FmResult=1;
for(int i=0;i<n;i++){
FzResult=FzResult*Fz;
FmResult=FmResult*Fm;
}
result=simplefraction(FzResult,FmResult);
}else{
throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
}
}
else{//整数
if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
{
int x=Integer.parseInt(str[0]);
int IntResult=(int)Math.pow(x, n);
result=Integer.toString(IntResult);
}
else{
throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
}
}
- 结果展示:

\实现数的开根号
private void sqrt(String s) {
String[] str=s.split("[√]");
int Num=Integer.parseInt(str[1]);
int n=1;//倍数
int x;
if(Num%4==0){
while(Num%4==0){
n=n*4;
Num=Num/4;
x=(int) Math.sqrt(n);
System.out.println(x+"√"+Num);
}
}
}
- 结果展示:

三、结对照骗

三、小结
- 1、这次博客作业主要是针对结对编程与重构,结对编程的过程就是两个人互相提高,互相学习的过程;
- 2、对于结对编程有了新的认识,之前编程课设大都都是一个人在做,很多时候被小问题绊倒,分析半天都弄不出来,再者就是一个人的分析问题是有局限性的,往往需要的就是思路,那么,通过这次结对过程,我感觉编程轻松多了,对于方案各抒己见。
- 3、结对还有一大好处就是,两个人一起思考问题,查阅资料,拓展了思路,两个人对于问题看待角度不同,所以会更容易去实现一些功能。
四、提供此次结对作业的PSP
| PSP2.1 | 个人开发流程 | 预估耗费时间(分钟) | 实际耗费时间(分钟) |
|---|---|---|---|
| Planning | 计划 | 15 | 12 |
| Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 8 | 9 |
| Development | 开发 | 150 | 198 |
| Analysis | 需求分析 (包括学习新技术) | 6 | 20 |
| Design Spec | 生成设计文档 | 0 | 0 |
| Design Review | 设计复审 | 8 | 15 |
| Coding Standard | 代码规范 | 3 | 4 |
| Design | 具体设计 | 10 | 10 |
| Coding | 具体编码 | 36 | 20 |
| Code Review | 代码复审 | 15 | 11 |
| Test | 测试(自我测试,修改代码,提交修改) | 15 | 20 |
| Reporting | 报告 | 20 | 25 |
| . | 测试报告 | 6 | 5 |
| · | 计算工作量 | 10 | 6 |
| · | 并提出过程改进计划 | 10 | 15 |