(201421123002 翁珊;201421123006 黄月梅;201421123007 徐晓珊)
题目要求:
1.结对编程实现上述功能,同样的,在程序正式开发之前,请先预估下PSP每个环节的消耗时间(分钟),并在过程中统计实际耗时(分钟),最后提交PSP表格。依然注意,这个主要是给你们自己看的,不必造假数据。
2.继续两人结对协作,把编码规范、领航员和驾驶员角色互换做到位。
3.单元测试: 有单元测试保证,有代码覆盖率。
需求分析:
1.把计算模块提取出来,单独创建一个类。
package jiedui;
import java.util.ArrayList;
public class CalcFunction {
static int count=0,count1=0;
public static String add(Fraction a, Fraction b) //加法 参考分数间加减乘除 用四个变量表示两个分数的分子分母
{
int i, j, k, s, m, n, p;
i = a.getNumerator();// 分子
j = a.getDenominator();// 分母
k = b.getNumerator();
s = b.getDenominator();
m = i * s + j * k;
n = s * j;
p = Calc.getGCD(m, n);
return Calc.Reduction(m / p, n / p);
}
public static String div(Fraction a, Fraction b)//除法 设置生成的随机数不为0,则不存在除数为0的情况
{
int i, j, k, s, m, n, p;
i = a.getNumerator();// 分子
j = a.getDenominator();// 分母
k = b.getNumerator();
s = b.getDenominator();
m = s * i;
n = j * k;
p = Calc.getGCD(m, n);
return Calc.Reduction(m / p, n / p);
}
public static String sub(Fraction a, Fraction b)//减法
{
int i, j, k, s, m, n, p;
i = a.getNumerator();// 分子
j = a.getDenominator();// 分母
k = b.getNumerator();
s = b.getDenominator();
m = i * s - j * k;
n = j * s;
p = Calc.getGCD(m, n);
return Calc.Reduction(m / p, n / p);
}
public static String mul(Fraction a, Fraction b)//乘法
{
int i, j, k, s, m, n, p;
i = a.getNumerator();// 分子
j = a.getDenominator();// 分母
k = b.getNumerator();
s = b.getDenominator();
m = i * k;
n = j * s;
p = Calc.getGCD(m, n);
return Calc.Reduction(m / p, n / p);
}
}
然后针对提取出来的计算类的接口函数做单元测试。
我要做的:
那么,勤快的你已经迫不及待的想要自己上手来测一把:
1.通过单元测试代码,测试加法是否能正确工作;
@Test
public void testAdd() {
Fraction a = new Fraction(2,3,"2/3");
Fraction b = new Fraction(1,3,"1/3");
assertEquals(CalcFunction.add(a,b), "1");
}
2.通过单元测试代码,测试加减乘除功能。
@Test
public void testAdd() {
Fraction a = new Fraction(2,3,"2/3");
Fraction b = new Fraction(1,3,"1/3");
assertEquals(CalcFunction.add(a,b), "1");
}
@Test
public void testDiv() {
Fraction a = new Fraction(2,3,"2/3");
Fraction b = new Fraction(1,3,"1/3");
assertEquals(CalcFunction.div(a,b), "2");
}
@Test
public void testSub() {
Fraction a = new Fraction(2,3,"2/3");
Fraction b = new Fraction(1,3,"1/3");
assertEquals(CalcFunction.sub(a,b), "1/3");
}
@Test
public void testMul() {
Fraction a = new Fraction(2,3,"2/3");
Fraction b = new Fraction(1,3,"1/3");
assertEquals(CalcFunction.mul(a,b), "2/9");
}
3.通过单元测试代码,测试计算类对于各种参数的支持:
a. 输入是有错误的,例如 “1 ++ 2”,
由于第一次实验已经限定只能输入一个字符,故该情况不会出现
4.代码覆盖率
设计测试框架, 模拟测试数据:
1.描述测试过程中遇到的问题以及解决的方案。
由于第一次代码写的很不规范,很难提取fraction类,导致测试时无法实现对除数是0的情况的测试
2.小结与感受:通过测试,是否有效发现了程序计算模块的问题,并给予改进?
代码覆盖率不好,程序应进一步改进。之前代码的功能只是考虑到最基本功能的实现和极少部分的异常捕获,对于输入异常考虑的还不是很全面。
博文规范
在隔了一周之后再看之前的代码,是否更能体会到下面这些东西
(1) 良好的设计
没有事先规划好模块的功能,导致代码覆盖率差,代码比较杂乱。
(2) 编码规范
由于是结对编程,一些变量名的规范是很有必要的,这样队友才看得懂你在写什么,便于团队协作。
(3) 必要的注释
由于之前注释很少,隔了一周看代码都有点费力了,可见注释是很有必要的,有助对代码的理解。
一些批注图片:
git克隆助教的框架:
git上交截图:
coding链接:https://git.coding.net/Amber9611/jiedui2-sizeyunsuan.git
结对照片: