结对编程2——单元测试

项目代码


 

陈麟凤 201421123015 && 张志杰 201421123019 &&黄海鸿 201421123020


需求分析:

将计算模块分离出来形成一个单独的类,针对自己采用的编程语言采用相应的方法

测试相应的加减乘除功能和除0异常等

设计测试框架, 模拟测试数据:

  • 加减乘除功能
  • 除0错误

 


加减乘除功能:

CalcFunction cf = new CalcFunction();
        //test add
        cf.s="1+2";
        cf.calc();
        assertEquals("3", cf.result);
        cf.s="1/5+7/8";
        cf.calc();
        assertEquals("43/40", cf.result);
        cf.s="10000+10000";
        cf.calc();
        assertEquals("20000", cf.result);
        cf.s="7/8+3/5";
        cf.calc();
        assertEquals("59/40", cf.result);
        
        //test sub
        cf.s="5-7";
        cf.calc();
        assertEquals("-2", cf.result);
        cf.s="1/7-8/9";
        cf.calc();
        assertEquals("-47/63", cf.result);
        cf.s="34-7";
        cf.calc();
        assertEquals("27", cf.result);
        cf.s="1/5-4/9";
        cf.calc();
        assertEquals("-11/45", cf.result);
        
        //test mul
        cf.s="5*7";
        cf.calc();
        assertEquals("35", cf.result);
        cf.s="1/7*8/9";
        cf.calc();
        assertEquals("8/63", cf.result);
        cf.s="34*7";
        cf.calc();
        assertEquals("238", cf.result);
        cf.s="1/5*4/9";
        cf.calc();
        assertEquals("4/45", cf.result);
        
        //test div
        cf.s="5÷7";
        cf.calc();
        assertEquals("5/7", cf.result);
        cf.s="1/7÷8/9";
        cf.calc();
        assertEquals("9/56", cf.result);
        cf.s="34÷7";
        cf.calc();
        assertEquals("34/7", cf.result);
        cf.s="1/5÷4/9";
        cf.calc();
        assertEquals("9/20", cf.result);
        
        cf.s="2++3";
        cf.calc();
        assertEquals("操作符错误", cf.result);
        cf.s="5÷0";
        cf.calc();
        assertEquals("参数错误", cf.result);

 

 

加减乘除的功能测试通过assertequal中expected和actural值比较来判断功能的准确性

除0错误+“1++2”的处理:

 public void calc(){
        if(s.indexOf("+")>-1)
        {
            add(s);
        }
        else if(s.indexOf("-")>-1)
        {
            sub(s);
        }
        else if(s.indexOf("*")>-1)
        {
            mul(s);
        }
        else if(s.indexOf("÷")>-1)
        {
            div(s);
        }
    }
    public void add(String s){
        try{
        String[] s1=s.split("[+]");
        if(s1[0].indexOf("/")>-1 || s1[1].indexOf("/")>-1)
        {
            String[] s2=s1[0].split("[/]");
            String[] s3=s1[1].split("[/]");
            int fenzi1=Integer.parseInt(s2[0]);
            int fenmu1=Integer.parseInt(s2[1]);
            int fenzi2=Integer.parseInt(s3[0]);
            int fenmu2=Integer.parseInt(s3[1]);
            int fenzi=fenzi1*fenmu2+fenzi2*fenmu1;
            int fenmu=fenmu1*fenmu2;
            int temp=yuefen(fenzi,fenmu);
            fenzi=fenzi/temp;
            fenmu=fenmu/temp;
            result=fenzi+"/"+fenmu;
        }
        else
        {
            int num1=Integer.parseInt(s1[0]);
            int num2=Integer.parseInt(s1[1]);
            int ans=num1+num2;
            result=ans+"";
        }
        }catch(java.lang.ArithmeticException e){
            result="参数错误";
        }
        catch( java.lang.NumberFormatException o){
            result="操作符错误";
        }
        
        
    }

除0错误产生的异常捕获并将结果置为“参数错误“反馈

操作符错误产生的异常捕获后将结果置为“操作符错误”反馈

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

  • 最早是将整数与分数的计算分开的,原先的计算结果都没有错误,但是后面将分数和整数的计算合并后出现了一些乘法和除法的错误,将程序分成小模块后纠错就比较容易,直接去乘法和除法的代码那边将相应变量改对就OK了

单元测试:

 

 

 

小结与感受:

一周后在看自己程序其实印象不是很深了,感觉代码的规范是非常必要的,在一段时间后肯定会对自己的程序感到陌生,规范的代码和相应的注释就能够更快的读懂自己的逻辑,而且在结对编程中,让你的伙伴看懂你写的代码是必须的,所以代码的规范不仅要做到自己看得懂,也要让其他人看得懂。在通过模块测试里确实能够发现程序的相应问题并加以改进。

评价下伙伴:

先来一片面包:在编程是容易投入与如何实现功能而不是去设计模块,起初是将计算分成分数计算和整数计算,被队友突然问道:"为什么不将两个加起来啊,整数不就是分母为1的分数",有点醒过来了,后面就将计算整合到一起,所以队友在编程过程的建议还是相当给力的,当然前提是能看得懂彼此写的代码。

在把肉放上:在提出建议的时候最好能结合一下我的水平,提出一些和我水平相差太大的建议导致无法实现还嫌弃我。。

再来一片面包:建议要好好提,不要动不动就嫌弃我的编程水平@201421123019@201421123020

PSP:

PSP2.1

Personal Software Process Stages

Time(min) Senior Student

Time (min)

Planning

计划

5

2

Estimate

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

3

5

Development

开发

3

0

Analysis

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

3

2

·Design Spec

生成设计文档

1

0

·Design Review

设计复审

1

0

Coding Standard

代码规范

10

3

· Design

具体设计

5

5

Coding

具体编码

60

120

·Code Review

代码复审

5

30

Test

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

10

5

Reporting

报告

5

3

 

测试报告

3

1

 

计算工作量

3

5

 

并提出过程改进计划

5

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2017-03-27 11:38  chenlinfeng  阅读(210)  评论(9编辑  收藏  举报