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语句中必须使用大括号,即使只有一行代码

    • 规范结果:

码云链接

参考资料

posted @ 2019-05-02 22:14  20175322周弋鸿  阅读(386)  评论(0编辑  收藏  举报