zoukankan      html  css  js  c++  java
  • 2018-2019-20175322 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告

    2018-2019-20175322 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告

    实验内容

    • 1.XP基础
    • 2.XP核心实践
    • 3.相关工具

    实验要求

    • 1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
    • 2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
      1. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

    实验步骤

    (一)编码标准

    • Java中的一般的命名规则有:

      • 要体现各自的含义
      • 包、类、变量用名词
      • 方法名用动宾
      • 包名全部小写,如:io,awt
      • 类名第一个字母要大写,如:HelloWorldApp
      • 变量名第一个字母要小写,如:userName
      • 方法名第一个字母要小写:setName
      • ...
    • 安装alibaba插件

      • 打开Settings ->Plugins

      • 在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDE生效,安装完成后如图:

      • 在项目名称上单击右键,在弹出菜单上选择编码规约扫描,出现下图内容:

      • 不规范的地方,有中文提示并且定位到了行,alibaba把问题分为block/critical/major三个等级,有些规则可以一键修复

    • 代码问题:

      • 在if/else/for/while/do语句中必须使用大括号,即使只有一行代码,避免使用if(conditions)statement;
      • 所有的覆写方法,必须加@Override注解
      • Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals
      • 方法名,参数名,成员变量,局部变量都统一使用lowerCamelCase,必须遵循驼峰形式
      • 不允许任何魔法值(即未经定义的常量)直接出现在代码中
      • 所有的类都必须添加创建者信息
      • 方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释。注意与代码对齐
      • 类、类属性、类方法的注释必须使用javadoc规范,使用/**内容/格式,不得使用//xxx方式和/xxx*/方式
      • 类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO / DAO
    • 规范后的代码:

    /**
     * CodeStandard
     * @author zyh20175322
     * @date 2019/5/2
     */
    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());
            int n = 20;
            if (buffer.capacity() < n){
                buffer.append("1234567");
            }
    
            for (int i = 0; i < buffer.length(); i++){
                System.out.println(buffer.charAt(i));
            }
    
        }
    }
    
     - 规范后显示`No suspicious code found. 1 files processed in File...`表明未发现可疑代码,规范成功
    

    • code菜单
      • 重写覆盖方法(Override Methods):Ctrl + O

      • 实现接口方法(Implements Methods):Ctrl + I

      • Gengrate:Alt + Insert

      • Surround With:Ctrl+Alt+T

      • 智能选择并实现(SmartType):Ctrl + Shift + 空格

      • 循环往上选择单词(Cyclic Expand Word):Alt + /

      • 循环往下选择单词 (Cyclic Expand Word) Alt + Shift + /

      • 方法展开 ( Expand) Ctrl + 加号

      • 方法折叠 (Collapse)Ctrl + 减号

      • 全部方法展开( Expand All )Ctrl + Shift + 加号

      • 全部方法折叠 ( Collapse All ) Ctrl + Shift + 减号

      • 展开Java doc注释 ( Expand doc comments )

      • 折叠Java doc注释 ( Collapse doc comments )

      • 行注释 (Comment with Line Comment )Ctrl + /

      • 块注释 ( Comment with Block Comment ) Ctrl + Shift + /

      • 格式化代码 (Reformat Code ) Ctrl + Alt + L

      • 弹出格式化弹框 ( Show Reformat File Dialog ) Ctrl + Alt + Shift + L

      • 重新整理代码 (Rearrange Code)

    (二)Git中添加添加仓库成员及测试代码

    • 要求:
      • 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
      • 提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息
    • 步骤:
      • 打开码云,进入仓库,点击管理 -> 添加仓库成员 -> 邀请用户

      • 效果:

      • 搭档的Complex代码:

    public class Complex {    //a + bi
        private double a;
        private double b;
    
        public Complex(){                      //构造方法,置0
            this.a = 0;
            this.b = 0;
        }
    
        public Complex(double a, double b) {  //构造方法,初始化一个复数
            this.a = a;
            this.b = b;
        }
    
        public  double getA(){                  //获取实部
            return this.a;
        }
        public double getB(){                  //获取虚部
            return this.b;
        }
    
        public double setA(double a){         //设置实部
            this.a = a;
            return a;
        }
        public double setB(double b){         //设置虚部
            this.b = b;
            return b;
        }
    
        Complex ComplexAdd(Complex c){//复数相加
            double a = c.getA();
            double b = c.getB();
            double newA = a + this.a;
            double newB = b + this.b;
            Complex Result = new Complex(newA,newB);
            return Result;
        }
    
        Complex ComplexMinus(Complex c){//复数相减
            double a = c.getA();
            double b = c.getB();
            double newA = a - this.a;
            double newB = b - this.b;
            Complex Result = new Complex(newA,newB);
            return Result;
        }
    
        Complex ComplexMulti(Complex c){//复数相乘
            double a = c.getA();
            double b = c.getB();
            double newA = a * this.a;
            double newB = b * this.b;
            Complex Result = new Complex(newA,newB);
            return Result;
        }
    
        Complex ComplexDiv(Complex c){//复数相乘
            double a = c.getA();
            double b = c.getB();
            double newA = a / this.a;
            double newB = b / this.b;
            Complex Result = new Complex(newA,newB);
            return Result;
        }
    
        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;
        }
    }
    
     - 搭档测试代码:
    
    import junit.framework.TestCase;
    import org.junit.Test;
    import static org.junit.Assert.*;
    
    public class ComplexTest extends TestCase {
        Complex c1 = new Complex(0, 3);
        Complex c2 = new Complex(-1, -1);
        Complex c3 = new Complex(2,1);
        @Test
        public void testgetRealPart() throws Exception {
            assertEquals(-1.0, new Complex().setA(-1.0));
            assertEquals(5.0, new Complex().setA(5.0));
            assertEquals(0.0, new Complex().setA(0.0));
        }
        @Test
        public void testgetImagePart() throws Exception {
            assertEquals(-1.0, new Complex().setB(-1.0));
            assertEquals(5.0, new Complex().setB(5.0));
            assertEquals(0.0, new Complex().setB(0.0));
        }
        @Test
        public void testComplexAdd() throws Exception {
            assertEquals("-1.0+2.0i", c1.ComplexAdd(c2).toString());
            assertEquals("2.0+4.0i", c1.ComplexAdd(c3).toString());
            assertEquals("1.0", c2.ComplexAdd(c3).toString());
        }
        @Test
        public void testComplexSub() throws Exception {
            assertEquals("-1.0 -4.0i", c1.ComplexMinus(c2).toString());
            assertEquals("2.0 -2.0i", c1.ComplexMinus(c3).toString());
            assertEquals("3.0+2.0i", c2.ComplexMinus(c3).toString());
        }
        @Test
        public void testComplexMulti() throws Exception {
            assertEquals("-0.0 -3.0i", c1.ComplexMulti(c2).toString());
            assertEquals("0.0+3.0i", c1.ComplexMulti(c3).toString());
            assertEquals("-2.0 -1.0i", c2.ComplexMulti(c3).toString());
        }
        @Test
        public void testComplexComplexDiv() throws Exception {
            assertEquals("-0.0 -3.0i", c2.ComplexDiv(c1).toString());
            assertEquals("-0.0 -3.0i", c2.ComplexDiv(c1).toString());
            assertEquals("-2.0 -1.0i", c2.ComplexDiv(c3).toString());
        }
    }
    
     - 测试结果:
    

    (三)重构

    • 要求:完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接
    • 步骤:
      • 添加创建者信息

      • 给覆写方法加上@Override注解

      • 方法名,参数名,成员变量,局部变量都统一使用lowerCamelCase,遵从驼峰形式

      • 在if/else/for/while/do语句中必须使用大括号,即使只有一行代码

      • 规范结果:

    码云链接

    参考资料

  • 相关阅读:
    HTML转换成word文档
    泛型的导入导出的公用方法
    封装的分页jq
    用泛型做的分页类
    EntityFramework小知识
    泛型连接数据库
    在博客园看的一些小技巧
    渗透之路基础 -- SQL注入
    第一篇博客就这么开始了?!稍微介绍一下。
    正则基础用法
  • 原文地址:https://www.cnblogs.com/zyh5322/p/10803626.html
Copyright © 2011-2022 走看看