zoukankan      html  css  js  c++  java
  • 结对作业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

  • 相关阅读:
    XML及XML的解析
    单例设计模式(Singleton)的优化
    Java反射初识
    TCP协议的简单应用一
    Java中实现线程同步的三种方法
    Java集合框架Map接口
    JDK1.8新特性之Stream类初识
    Java JDK1.8新特性之四大函数式接口
    tomcat 启动报 找不到 StrutsPrepareAndExecuteFilter。。
    easyjweb ejs 2014.2.25
  • 原文地址:https://www.cnblogs.com/xxs24/p/6628709.html
Copyright © 2011-2022 走看看