2018-2019-2 20175235 实验三《敏捷开发与XP实践》实验报告

一、实验报告封面

课程:Java程序设计 班级:1752 姓名:泽仁拉措 学号:20175235

指导教师:娄嘉鹏 实验日期:2019年4月30日

实验时间: 。 实验序号:实验三

实验名称:敏捷开发与XP实践

二、实验内容

  1. XP基础

  2. XP核心实践

  3. 相关工具

三、实验要求

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

  1. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

四、实验步骤

1.①代码规范

下载插件:通过Jetbrains官方仓库安装:打开Setting->Plugins->搜索框输入alibaba->下载即可

②编码规约扫描:在文件上点击右键找到即可

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

2.编码标准

①Java中的一般的命名规则有
要体现各自的含义
包、类、变量用名词
方法名用动宾
包名全部小写,如:io,awt
类名第一个字母要大写,如:HelloWorldApp
变量名第一个字母要小写,如:userName
方法名第一个字母要小写:setName
②.作业1:把下面代码重新格式化,再研究一下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));
}
}

③·Ctrl+/或Ctrl+Shift+/`添加注释

Ctrl+O重载基本类

④.Java中的一般的命名规则有:

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

3.敏捷开发与XP

在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息
①搭档的代码:

public class Complex {
    private double RealPart;//复数的实部
    private double ImagePart;//复数的虚部
    public Complex() {}
    public Complex(double a, double b) {
        setRealPart(a);
        setImagePart(b);
    }
    public void setRealPart(double a) {
        RealPart = a;
    }
    public void setImagePart(double b) {
        ImagePart = b;
    }
    public double getRealPart() {//返回复数的实部
        return RealPart;
    }
    public double getImagePart() {
        return ImagePart;
    }
    Complex ComplexAdd(Complex a) {//(a+bi)+(c+di)=(a+c)+(b+d)i
        Complex complex = new Complex();
        complex.RealPart = this.RealPart + a.RealPart;
        complex.ImagePart = this.ImagePart + a.ImagePart;
        return complex;
    }
    Complex ComplexSub(Complex a) {//(a+bi)-(c+di)=(a-c)+(b-d)i
        Complex complex=new Complex();
        complex.RealPart=this.RealPart-a.RealPart;
        complex.ImagePart=this.ImagePart-a.ImagePart;
        return complex;
    }
    Complex ComplexMulti(Complex a) {//(a+bi)*(c+di)=(ac-bd)+(ad+bc)i
        Complex complex =new Complex();
        complex.RealPart=this.RealPart*a.RealPart-this.ImagePart*a.ImagePart;
        complex.ImagePart=this.RealPart*a.ImagePart+this.ImagePart*a.RealPart;
        return complex;
    }
    Complex ComplexDiv(Complex a) {//(a+bi)/(c+di)=(a+bi)(c-di)/(c^2+d^2)
        Complex complex=new Complex();
        complex.RealPart=(this.RealPart*a.ImagePart+this.ImagePart*a.RealPart)/(a.ImagePart*a.ImagePart+a.RealPart*a.RealPart);
        complex.ImagePart=(this.ImagePart*a.ImagePart+this.RealPart*a.RealPart)/(a.ImagePart*a.ImagePart+a.RealPart*a.RealPart);
        return complex;
    }
    public String toString() {
        if (ImagePart==0) {
            String str = String.valueOf(RealPart);
            return str;
        }
        else if (RealPart==0) {
            String str = String.valueOf(ImagePart)+"i";
            return  str;
        }
        else {
            if (ImagePart>0) {
                String str = String.valueOf(RealPart) + "+" + String.valueOf(ImagePart) + "i";
                return str;
            }
            else {
                String str = String.valueOf(RealPart) + String.valueOf(ImagePart) + "i";
                return str;
            }
        }
    }
}

要测试的类有ComplexAddComplexSubComplexMultiComplexDiv
②测试代码如下

③然后将测试代码传到搭档的码云里,git log如下:

4.重构

①要求:参考http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
②实验步骤
重构的概念:
重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。如何保证不改变软件外部行为?重构后的代码要能通过单元测试。如何使其更加易于阅读、易于维护和易于变更 ?设计模式给出了重构的目标。

我们要修改软件,万变不离其宗,无非就是四种动机:
增加新功能;
原有功能有BUG;
改善原有程序的结构;
优化原有系统的性能 。

第一种和第二种动机,都是源于客户的功能需求,而第四种是源于客户的非功能需求。软件的外部质量,其衡量的标准就是客户对软件功能需求与非功能需求的满意度。它涉及到一个企业、一个软件的信誉度与生命力,因此为所有软件企业所高度重视。要提高软件内部质量,毫无疑问就是软件修改的第三个动机:改善原有程序的结构。它的价值是隐性的,并不体现在某一次或两次开发中,而是逐渐体现在日后长期维护的软件过程中。

而一个完整的重构流程包括:
从版本控制系统代码库中Check out code
读懂代码(包括测试代码)
发现bad smell
efactoring
运行所有的Unit Tests
往代码库中Check in code

下面就是下载搭档的代码,至少进行三项重构:

搭档的代码:

重构1:重写toString时的@override标志

重构2:添加作者和日期

重构3:规范方法名(首字母小写)

规范后的代码

5.我的码云链接:

https://gitee.com/drpkgj/Besti.Java/blob/master/TEST/ComplexTest.java

6.参考 http://www.cnblogs.com/rocedu/p/6683948.html,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。

密码学: 主要是研究保密通信和信息保密的学科, 包括信息保密传输和信息加密存储等。

①实验结果截图:

五.实验总结:

这次实验的大部分都是依靠实验二所学,重新复习实验二部分操作,刚在Windows上git才发现自己Windows既然没安装git,平时都用虚拟机,然后连忙又下载git。学习到了结对编程的有效工作率。

posted @ 2019-04-30 09:23  20175235  阅读(135)  评论(0编辑  收藏  举报