结对作业2:单元测试

(201421123002 翁珊;201421123006 黄月梅;201421123007 徐晓珊) 

题目要求:

  1. 结对编程实现上述功能,同样的,在程序正式开发之前,请先预估下PSP每个环节的消耗时间(分钟),并在过程中统计实际耗时(分钟),最后提交PSP表格。依然注意,这个主要是给你们自己看的,不必造假数据。
  2. 继续两人结对协作,把编码规范、领航员和驾驶员角色互换做到位。
  3. 单元测试: 有单元测试保证,有代码覆盖率。

需求分析:

1.把计算模块提取出来,单独创建一个类。

  计算模块单独成类(CalcFunction)

 1 public class CalcFunction {
 2     static int count=0,count1=0;
 3     public static String add(Fraction a, Fraction b) //加法 参考分数间加减乘除 用四个变量表示两个分数的分子分母
 4     {
 5         int i, j, k, s, m, n, p;
 6         i = a.getNumerator();// 分子
 7         j = a.getDenominator();// 分母
 8         k = b.getNumerator();
 9         s = b.getDenominator();
10         m = i * s + j * k;
11         n = s * j;
12         p = Calc.getGCD(m, n);
13         return Calc.Reduction(m / p, n / p);
14 
15     }
16 
17     public static String div(Fraction a, Fraction b)//除法  设置生成的随机数不为0,则不存在除数为0的情况
18 
19     {
20         int i, j, k, s, m, n, p;
21         i = a.getNumerator();// 分子
22         j = a.getDenominator();// 分母
23         k = b.getNumerator();
24         s = b.getDenominator();
25         m = s * i;
26         n = j * k;
27         p = Calc.getGCD(m, n);
28         return Calc.Reduction(m / p, n / p);
29     }
30 
31     public static String sub(Fraction a, Fraction b)//减法
32 
33     {
34         int i, j, k, s, m, n, p;
35         i = a.getNumerator();// 分子
36         j = a.getDenominator();// 分母
37         k = b.getNumerator();
38         s = b.getDenominator();
39         m = i * s - j * k; 
40         n = j * s;
41         p = Calc.getGCD(m, n);
42         return Calc.Reduction(m / p, n / p);
43     }
44 
45     public static String mul(Fraction a, Fraction b)//乘法
46 
47     {
48         int i, j, k, s, m, n, p;
49         i = a.getNumerator();// 分子
50         j = a.getDenominator();// 分母
51         k = b.getNumerator();
52         s = b.getDenominator();
53         m = i * k;
54         n = j * s;
55         p = Calc.getGCD(m, n);
56         return Calc.Reduction(m / p, n / p);
57     }
58     
59 }

2.针对提取出来的计算类的接口函数做单元测试。

单元测试代码如下:

 1     @Test
 2     public void testAdd() {
 3          Fraction a = new Fraction(2,3,"2/3");
 4          Fraction b = new Fraction(1,3,"1/3");
 5   
 6          assertEquals(CalcFunction.add(a,b), "1"); 
 7     }
 8 
 9     @Test
10     public void testDiv() {
11            Fraction a = new Fraction(2,3,"2/3");
12            Fraction b = new Fraction(1,3,"1/3");
13  
14            assertEquals(CalcFunction.div(a,b), "2");
15     }
16 
17     @Test
18     public void testSub() {
19           Fraction a = new Fraction(2,3,"2/3");
20           Fraction b = new Fraction(1,3,"1/3");
21 
22           assertEquals(CalcFunction.sub(a,b), "1/3");
23     }
24 
25     @Test
26     public void testMul() {
27           Fraction a = new Fraction(2,3,"2/3");
28           Fraction b = new Fraction(1,3,"1/3");
29 
30           assertEquals(CalcFunction.mul(a,b), "2/9");
31     }

计算模块测试结果如下:

其他测试(CalcTest):

 1     @Before
 2     public void setUp() throws Exception {
 3     }
 4 
 5     @After
 6     public void tearDown() throws Exception {
 7     }
 8 
 9     @Test
10     public void testGetGCD() {
11         assertEquals(Calc.getGCD(10, 5), 5);
12     }
13 
14     @Test
15     public void testReduction() {
16         assertEquals(Calc.Reduction(9, 5), "9/5");
17     }

测试结果如下:

代码覆盖率:

 测试中遇到的问题及解决:

    因为要求利用助教提供的空壳进行代码填充,所以对于代码模块的分割做的不是很好。后来将一些像gui模块编写这样在这次作业中没有用到的模块删除。对于除零错误,由于刚开始我们就设置了被除数不能出现=0的情况,就没有考虑。运算符也是刚开始就设置了只有单个字符生成。

小结与感受:通过测试,是否有效发现了程序计算模块的问题,并给予改进?

    通过单元测试可以知道方法的某些地方出错了,需要在方法定义的地方进行相应的修改。就像刚开始进行四则运算的测试时一开始测试失败了,随后找到原因在相应方法的源代码上进行处理和修改,就可以测试成功了。再加上分了模块后,发现代码错误的时候找错更容易,可以更好的进行修改。

隔周看之前的代码:

(1)良好的设计

    如果刚开始就能有良好的设计思想,做好模块划分和有单元测试的想法,现在的代码就不会那么乱,不能很好的进行模块划分和测试。

(2)编码规范

    代码规范的重要性不言而喻,能让大家看到类名函数名就能知道函数的用途是什么,这也是很重要的。这样不仅自己,包括别的用户也可以进行较为轻松的阅读。

(3)必要的注释  

    因为刚开始的代码编写比较简单,所以忽略了注释,导致现在再看之前的代码较为吃力,但是因为方法的命名是根据其代表的意义的,所以还是能够大致理解,但是警示了我们今后写代码要有一些基本的注释。  

git克隆助教的框架:

 

 git上交截图:

☞☞☞ 撮coding链接(所有代码在src里)

 https://coding.net/u/xxs24/p/pairwork2/git

结对照片:

PSP表格:

PSP2.1

Personal Software Process Stages

Estimated Time(hour)

Actual Time (hour)

Planning

计划

0.5

0.5

· Estimate

估计这个任务需要多少时间

10

12

Development

开发

5

6

· Analysis

需求分析 (包括学习新技术)

1

1.5

· Design Spec

生成设计文档

1

1

· Design Review

设计复审

1.5

2

· Coding Standard

代码规范

0.5

0.5

· Design

具体设计

2

2

· Coding

具体编码

4

4.5

· Code Review

代码复审

0.5

0.5

· Test

测试(自我测试,修改代码,提交修改)

0.5

1

Reporting

报告

0.5

0.5

·

测试报告

1/6

1/6

·

计算工作量

1/6

0.5

·

并提出过程改进计划

0.25

0.25

原文地址:https://www.cnblogs.com/xxs24/p/6628709.html