• 实验三


    2018-2019 20175335 丹增罗布《Java程序设计》

    实验三 《敏捷开发与XP实践》

    实验报告封面

    • 课程:Java程序设计 班级:1752班 姓名:丹增罗布学号:20175335
    • 指导教师:娄嘉鹏 实验日期:2019年4月30日
    • 实验时间:--- 实验序号:实验三
    • 实验名称:敏捷开发与XP实践
    • 实验题目
    • 实验要求
      • 完成实验三 敏捷开发与XP实践中的内容,参考Java密码学算法相关内容
      • 其中Eclipse相关的内容参考Intellj IDEA简易教程换成IDEA实现
      • 完成云班课中的检查点,也可以先完成实验报告,直接提交。注意不能只有截图,要有知识点,原理,遇到的问题和解决过程等说明。实验报告中一个检查点要有多张截图。
      • 发表实验报告博客,标题“学期(如2018-2019-2) 学号(如20175300)实验三《敏捷开发与XP实践》实验报告”

    实验步骤

    • 代码规范
      • 要求:
        • 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
        • 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba 插件,解决代码中的规范问题。
        • 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。
        public class CodeStandard {
        public static void main(String [] args){
        StringBuffer buffer = new StringBuffer();
        buffer.append('S');
        buffer.append("tringBuffer");
        System.out.println(buffer.charAt(1));
        System.out.println(buffer.capacity());
        System.out.println(buffer.indexOf("tring"));
        System.out.println("buffer = " + buffer.toString());
        if(buffer.capacity()<20)
        buffer.append("1234567");
        for(int i=0; i<buffer.length();i++)
        System.out.println(buffer.charAt(i));
        }
        }
      • IDEA中的插件,通过Jetbrains官方仓库安装:打开 Settings ->Plugins -> Marketplace在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDE生效:

      • 在项目名称上单击右键,在弹出菜单上选择编码规约扫描
      • Code菜单中选项的简单用法:
        • Override Methods:重载方法/新建方法
        • Implement Methods:执行方法
        • Generate:创建类里面任何字段的getter与setter方法
        • Surround with:将某条语句被if、for等等封装语句括起
        • Move Statement Down/up:将语句下移到后一模块之后
        • Move line down:调换语句顺序
        • Comment with Line/Block Comment:两种注释
        • Reformat Code:将代码按标准格式缩进、
        • 结对编程
        • 要求:
          • 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
          • 提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。
          • 结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。
          • 结对编程中有两个角色:
            • 驾驶员(Driver)是控制键盘输入的人。
            • 领航员(Navigator)起到领航、提醒的作用。
          • 邀请结对伙伴加入自己的仓库
            • 打开自己的码云项目
            • 点击管理->仓库成员管理->添加仓库成员->邀请用户
              •                      
                • 打开虚拟机,输入git clone 搭档码云链接
                • 转到要添加代码的搭档目录下进行atom Complex.javaatom ComplexTest.java
                   
                • Complex代码为:
                /**
                 @author Xueying Zhang 20175227
                 @date 2019/4/29 12:49.
                */
                public class Complex{
                   private double a;
                   private double b;
                
                   public Complex(double a, double b) {
                       this.a = a;
                       this.b = b;
                   }
                
                   public static double getRealPart(double a) {
                       return a;
                   }
                
                   public static double getImagePart(double b) {
                       return b;
                   }
                
                   public Complex ComplexAdd(Complex c) {
                       return new Complex(a + c.a, b + c.b);
                   }
                   public Complex ComplexSub(Complex c) {
                       return new Complex(a - c.a, b - c.b);
                   }
                   public Complex ComplexMulti(Complex c) {
                       return new Complex(a * c.a - b * c.b, a * c.b + b * c.a);
                   }
                   public Complex ComplexDiv(Complex c) {
                       return new Complex((a * c.b + b * c.a)/(c.b * c.b + c.a * c.a), (b * c.b + a * c.a)/(c.b * c.b + c.a * c.a));
                   }
                
                   public String toString() {
                       String s = " ";
                       if (b > 0) {
                           s =  a + "+" + b + "i";
                       }
                       if (b == 0) {
                           s =  a + "";
                       }
                       if (b < 0) {
                           s = a + " " + b + "i";
                       }
                       return s;
                   }
                }
                • 需要测试的方法有:getRealPartgetImagePartComplexAddComplexSubComplexMultiComplexDiv
                • 测试代码如下:
                import junit.framework.TestCase;
                import org.junit.Test;
                
                public class ComplexTest extends TestCase {
                   Complex com1=new Complex(1.0,2.0);
                   Complex com2=new Complex(0.0,1.0);
                   Complex com3=new Complex(1.0,0.0);
                   Complex com4=new Complex(-1.0,-2.0);
                
                   public void testgetRealPart()throws Exception{//测试getRealPart方法
                       assertEquals(2.7,Complex.getRealPart(2.7));
                       assertEquals(-2.7,Complex.getRealPart(-2.7));
                       assertEquals(5.0,Complex.getRealPart(5.0));
                       assertEquals(0.0,Complex.getRealPart(0.0));
                   }
                   public void testgetImagePart()throws Exception{//测试getImagePart方法
                       assertEquals(2.7,Complex.getImagePart(2.7));
                       assertEquals(-2.7,Complex.getImagePart(-2.7));
                       assertEquals(5.0,Complex.getImagePart(5.0));
                       assertEquals(0.0,Complex.getImagePart(0.0));
                   }
                   public void testComplexAdd()throws Exception{//测试ComplexAdd方法
                       assertEquals("1.0+3.0i",com1.ComplexAdd(com2).toString());
                       assertEquals("2.0+2.0i",com1.ComplexAdd(com3).toString());
                       assertEquals("1.0+1.0i",com2.ComplexAdd(com3).toString());
                       assertEquals("0.0",com1.ComplexAdd(com4).toString());
                   }
                   public void testComplexSub()throws Exception{//测试ComplexSub方法
                       assertEquals("1.0+1.0i",com1.ComplexSub(com2).toString());
                       assertEquals("0.0+2.0i",com1.ComplexSub(com3).toString());
                       assertEquals("-1.0+1.0i",com2.ComplexSub(com3).toString());
                       assertEquals("2.0+4.0i",com1.ComplexSub(com4).toString());
                   }
                   public void testComplexMulti()throws Exception{//测试ComplexMulti方法
                       assertEquals("-2.0+1.0i",com1.ComplexMulti(com2).toString());
                       assertEquals("1.0+2.0i",com1.ComplexMulti(com3).toString());
                       assertEquals("0.0+1.0i",com2.ComplexMulti(com3).toString());
                       assertEquals("3.0 -4.0i",com1.ComplexMulti(com4).toString());
                   }
                   public void testComplexDiv()throws Exception{//测试ComplexDiv方法
                       assertEquals("1.0+2.0i",com1.ComplexDiv(com2).toString());
                       assertEquals("2.0+1.0i",com1.ComplexDiv(com3).toString());
                       assertEquals("1.0",com2.ComplexDiv(com3).toString());
                       assertEquals("-0.8 -1.0i",com1.ComplexDiv(com4).toString());
                   }
                }
              • 运行示例(此处由虚拟机中atom更改为windows中IDEA编写,因为方便运用junit单元测试)如下:
              •     
              • 上传到码云上:
              • 重构
                • 要求
                  • 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
                  • 完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
                • 概念:重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
                • 前提:不改变软件外部行为;来确保重构的安全
                • 如何做到不改变软件外部行为?
                  • 重构后的代码要能通过单元测试
                • 修改软件的四种动机:
                  • 增加新功能;
                  • 原有功能有BUG;
                  • 改善原有程序的结构;
                  • 优化原有系统的性能 。
                  • 重构

                    重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。

                    我们要修改软件,万变不离其宗,无非就是四种动机:

                    • 增加新功能;
                    • 原有功能有BUG;
                    • 改善原有程序的结构;
                    • 优化原有系统的性能 。

                    需要重构的地方:
                    代码重复、方法过长、参数列过长、条件逻辑过度复杂、分支语句

                    一个完整的重构流程包括:

                    • 1.从版本控制系统代码库中Check out code
                    • 2.读懂代码(包括测试代码)
                    • 3.发现bad smell
                    • 4.Refactoring
                    • 5.运行所有的Unit Tests
                    • 6.往代码库中Check in code
                  • 在本次的实验里遇到的问题和解决方法:

                    问题:

                  • 设置创建者信息时总是出现格式错误

                  • 解决办法

                    设置一个创建者信息模板如图所示

                  • 实验总结与体会

                     通过这次实验让我再一次体会到结对学习的力量,让你很惊讶的会发现其是不只是有一条道路,结对学习让学习效率得到提高,两个人长短互补,而且督促双方学习,有效学习的时间变长。结对实验的好处是能够及时的发现自己的操作的失误及判断,避免了很多的不必要错误!最后还能够及时的改正自己的在错误  !

  • 相关阅读:
    C# 字典 Dictionary 转 JSON 格式遍历
    jquery-easyui-tree异步树
    android 开发环境搭建
    解决android sdk 无法更新
    043——VUE中组件之使用.sync修饰符与computed计算属性实现购物车原理
    laravel中数据库迁移的使用:
    002PHP文件处理——文件处理 is_dir mkdir getcwd chdir rmdir
    001PHP文件处理——文件处理disk_total_space disk_free_space basename dirname file_exists filetype
    042——VUE中组件之子组件使用$on与$emit事件触发父组件实现购物车功能
    041——VUE中组件之pros数据的多种验证机制实例详解
  • 原文地址:https://www.cnblogs.com/DLuob/p/10793718.html
Copyright © 2020-2023  润新知