zoukankan      html  css  js  c++  java
  • 结对编程2(201421123065,201421123068)

    (王婧201421123065,陈艺菡201421123068)##

    coding.net:https://git.coding.net/xmcyh1996/UnitTest.git

    需求分析
    1.把计算模块提取出来单独创建一个类
    2.测试加减乘除功能
    3.测试计算类对于各种参数的支持

    测试框架
    项目以java语言进行开发,使用junit4进行测试

    测试数据

    1.整数的加减乘除

    2.分数的加减乘数

    3.输入是有错误的,例如 “1 ++ 2”

    4.在数值范围是 -1000 .. 1000 的时候,传进去 “10000 + 32768”(数组溢出)

    5.“ 248 / 0” (除数为0)

    6.代码覆盖率

    问题及解决
    Q:不知道如何使用junit4和生成代码覆盖率
    A:通过查阅相关资料学习
    Q:对于一些特殊情况(如数组越界、除数不为0)的解决存在困难
    A:最后用if/else排除异常

    代码展示

    CalcFunction.java部分代码

    public class CalcFunction {
        private String result;
        public void calc(String s){
            if(s.indexOf("+")>-1 && s.indexOf("+")< 2){
                add(s);
            }else if(s.indexOf("-")>-1 && s.indexOf("-")< 1){
                substract(s);
            }else if(s.indexOf("×")>-1 && s.indexOf("×")< 1){
                multiply(s);
            }else if(s.indexOf("÷")>-1 && s.indexOf("÷")< 1){
                divide(s);
            }else System.out.println("error!Not allow like 1++1!");
            System.out.println(getResult());
        }
        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("[/]");
            	result =Reduction(((Integer.parseInt(str1[0])*Integer.parseInt(str1[1]))+(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));  
            }
            else{
                result = Integer.parseInt(str[0])+Integer.parseInt(str[1])+"";        	
            }
        }
        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("[/]");
        	result =Reduction(((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{
       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 System.out.println("error!overrun!");}
    }
    public void multiply(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("[/]");
        	result =Reduction(Integer.parseInt(str1[0])*Integer.parseInt(str2[0]),Integer.parseInt(str1[1])*Integer.parseInt(str2[1]));  
        }
        else{result = Integer.parseInt(str[0])*Integer.parseInt(str[1])+"";}
    }
    public void divide(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 =Reduction(Integer.parseInt(str1[0])*Integer.parseInt(str2[1]),Integer.parseInt(str1[1])*Integer.parseInt(str2[0]));  	
        	}else System.out.println("error!Divisor cannot be zero!"); 
    
        }else{
        	if(Integer.parseInt(str[1]) != 0)
        	{
                result = Integer.parseInt(str[0])/Integer.parseInt(str[1])+"";             		
        	}else System.out.println("error!Divisor cannot be zero!");      	
        }
    }
    public String getResult()
    {
        return result;
    } 
    
    }
    

    小结与感受
    1.因为之前写的代码没有模块化,而且有些计算是在主函数内进行的所以我们在进行计算模块的提取有一些难度,加之是两个星期前的代码有些忘记自己写了什么,还好有之前有注释,我们从netbeans中将代码提取到eclipse中。
    2.之前代码的功能只是考虑到最基本功能的实现和极少部分的异常捕获,对于输入异常考虑的还不是很全面。
    3.没有考虑到用户可以对我们应用进行一个错误的反馈的功能。
    4.之前的数组等的范围都定的比较小,还没有考虑到数组溢出的问题。
    5.一加一大于二,两个人能相互监督不拉进度,相互提出问题,相互解决问题,加快进度与效率,结对编程是很好的合作方式。

    体会
    (1) 良好的设计
    对与代码的功能的模块化没有分的很明确清晰,这也是写一部分改一部分,没有事先规划好模块的弊端所在。
    (2) 编码规范
    之前的代码格式是没有什么问题,因为有代码格式一键复原。但对于代码模块化做的不是很好,搀杂在主函数里,不易于提取与修改。
    (3) 必要的注释
    时隔两周对我们自己写的代码有些小陌生了,还好之前有注释,以及队友的相互指导,能加快对之前代码的理解

    结对过程
    ①fork助教的模板
    ②对计算模块进行讨论,先实现整数的四则,再实现了分数的四则,测试,commit
    ③针对一些异常问题进行处理,测试,commit
    ④最后测试,核查

    结对照片

    PSP

    谢谢助教老师审阅,老师辛苦了:)

  • 相关阅读:
    Sbt 配置国内镜像
    spark sql 之 RDD与DataFrame互相转化
    Base64编码和解码工具
    BDB数据库操作工具化
    String、StringBuffer、StringBuilder三者的区别
    常见的数组排序方法
    drop,delete,truncate 三者的异同点
    redis 常用命令
    git shell应用
    机器学习入门之路
  • 原文地址:https://www.cnblogs.com/xmcyh1996/p/6593732.html
Copyright © 2011-2022 走看看