zoukankan      html  css  js  c++  java
  • 软工网络15结对编程(201521123061倪兢飞)

    一、结对成员信息

    学号 姓名 博客链接 码云地址
    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
  • 相关阅读:
    vuex
    koa2+node+vue自启服务运行本地脚本
    重新认识js(一)
    JQuery图片左右无缝滚动
    javascript兼容性很好的省市区联动,易修改
    JQuery超级简单的TAB选项卡
    ViewState的原理分析
    JQuery图片切换特效
    asp.net验证控件详解【转】
    时间线 制作
  • 原文地址:https://www.cnblogs.com/JMUNJF/p/8646910.html
Copyright © 2011-2022 走看看