zoukankan      html  css  js  c++  java
  • 软件工程网络15结对编程作业

    一、结对成员信息

    学号 姓名 博客链接 码云地址
    201521123044 吴敏烽 https://www.cnblogs.com/Min21/ https://gitee.com/min21/events
    201521123061 倪兢飞 https://home.cnblogs.com/u/JMUNJF/ https://gitee.com/nikoudoublefly/events

    源代码地址:https://coding.net/u/lhl1212/p/work2/git
    原题目要求:http://www.cnblogs.com/happyzm/p/6472120.html

    二、功能改进与扩展

    1、检查大部分主要类之间的关系,画出类图

    2、浏览所有代码考虑代码质量和测试覆盖率

    • 源代码质量和测试覆盖率


    • 当前设计的一个弱点,通过重构,确保在这个地方已有测试覆盖并保证重构没有改变已有的功能

      • 1、当前的代码的分数多项式的加减法结果是有问题的。
      • 2、当前代码不能实现乘方
      • 3、当前代码不能实现开根号
    • 修改代码后,检查代码覆盖,看单元测试是否需要修改?测试用例是否需要增加?


    3、代码重构和增加功能。

    \分数多项式的加减法修改
    		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("\/");
                	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
                	{
                		result =simplefraction(((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{
                		throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
                	}
                }
                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{
            	   throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
               } 
                
            }
            
            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("\/");
                	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
                	{
                		result =simplefraction(((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{
                		throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
                	}
                }
                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{
            	   throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
               }
            }
    
    • 结果展示
    \实现乘方
    private void power(String s) {  //乘方
    			String[] str=s.split("[\^]");
    			int n=Integer.parseInt(str[1]);
    			if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
    			{  
    				String[] str1=str[0].split("\/");
    				if(Integer.parseInt(str1[1]) != 0)//分母不为零
    				{
    					
    					int Fz=Integer.parseInt(str1[0]);
    					int Fm=Integer.parseInt(str1[1]);
    					int FzResult=1;
    					int FmResult=1;
    			
    					for(int i=0;i<n;i++){
    						FzResult=FzResult*Fz;
    						FmResult=FmResult*Fm;
    					}
    					result=simplefraction(FzResult,FmResult);
    					
    				}else{
    					throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
    	           }
    					
    		}
    			 else{//整数
    	     	       if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
    	                {	  
    	     	    	  int x=Integer.parseInt(str[0]);
    	     	    	  int IntResult=(int)Math.pow(x, n);
    	     	    	  result=Integer.toString(IntResult);
    	     	    }        	
    	            
    	           else{
    	        	   throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
    	           } 
          }	
    			
    
    • 结果展示:
    \实现数的开根号
    private void sqrt(String s) {
            	String[] str=s.split("[√]");
            	int Num=Integer.parseInt(str[1]);
            	int n=1;//倍数
            	int x;
            	if(Num%4==0){
            		while(Num%4==0){
            			n=n*4;
            			Num=Num/4;
            			
            		x=(int) Math.sqrt(n);
            		System.out.println(x+"√"+Num);
            	}
            }
    }
    
    • 结果展示:

    三、结对照骗

    三、小结

    • 1、这次博客作业主要是针对结对编程与重构,结对编程的过程就是两个人互相提高,互相学习的过程;
    • 2、对于结对编程有了新的认识,之前编程课设大都都是一个人在做,很多时候被小问题绊倒,分析半天都弄不出来,再者就是一个人的分析问题是有局限性的,往往需要的就是思路,那么,通过这次结对过程,我感觉编程轻松多了,对于方案各抒己见。
    • 3、结对还有一大好处就是,两个人一起思考问题,查阅资料,拓展了思路,两个人对于问题看待角度不同,所以会更容易去实现一些功能。

    四、提供此次结对作业的PSP

    PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟)
    Planning 计划 15 12
    Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 8 9
    Development 开发 150 198
    Analysis 需求分析 (包括学习新技术) 6 20
    Design Spec 生成设计文档 0 0
    Design Review 设计复审 8 15
    Coding Standard 代码规范 3 4
    Design 具体设计 10 10
    Coding 具体编码 36 20
    Code Review 代码复审 15 11
    Test 测试(自我测试,修改代码,提交修改) 15 20
    Reporting 报告 20 25
    . 测试报告 6 5
    · 计算工作量 10 6
    · 并提出过程改进计划 10 15
  • 相关阅读:
    NFS服务简单配置
    TCP/IP网络
    python文件问题
    明明apple id 密码 是对的,登陆 iTunes还总提示密码错误
    台式电脑怎么使用iPhone热点进行上网
    Svn总是提示输入账号密码
    unity的相关技巧
    正则表达式标记
    NGUI用UIGrid加载Item会有部分空出来的解决办法
    win10 硬盘占用率经常100%的可能有用的解决方案
  • 原文地址:https://www.cnblogs.com/Min21/p/8646844.html
Copyright © 2011-2022 走看看