一、实验内容与步骤

1.安装、使用alibaba 插件规范代码

  • 在IDEA的setting中找到plugins并搜索alibaba,点击install进行安装

  • 重启IDEA后,在代码中右击点击编码规约扫描就可以使用了

    对老师给的示例代码进行扫描后的结果如下:



    规范后的代码如下:
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));}
}
}

2.任务一:使用工具(Code->Reformate Code)格式化代码,并了解code菜单的功能

  • 使用工具(Code->Reformate Code)格式化代码

    • code中选择Reformate Code格式化代码

  • code菜单中的功能
    • Override Methods(ctrl+O):重载基本类的方法

    • Surround With(Ctrl+Alt+T):使用if-else、for、while等语句包装代码段(这是我觉得最好用的功能之一)

    • Comment with Line Comment(Ctrl+/):将本行变成注释

3.任务二:下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例

  • 搭档的Complex代码如下:
import java.lang.Integer;
import java.util.Objects; public class Complex {
//定义属性并生成getter,setter
double RealPart;
double ImagePart;
public double getRealPart(){
return RealPart;
}
public double getImagePart(){
return ImagePart;
} //定义构造函数
public Complex(){
RealPart = 0;
ImagePart = 1;
}
public Complex(double R,double I){
RealPart = R;
ImagePart = I;
} //Override Object
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(!(obj instanceof Complex)) {
return false;
}
Complex complex = (Complex) obj;
if(complex.RealPart != ((Complex) obj).RealPart) {
return false;
}
if(complex.ImagePart != ((Complex) obj).ImagePart) {
return false;
}
return true;
}
public String toString(){
String s = new String();
if (ImagePart > 0){
s = getRealPart() + "+" + getImagePart() + "i";
}
if (ImagePart == 0){
s = getRealPart() + "";
}
if(ImagePart < 0){
s = getRealPart() + "" + getImagePart() + "i";
}
if(RealPart == 0){
s = getImagePart() + "i";
}
if (RealPart==0&&ImagePart==0){
s="0";
}
return s;
}
//定义公有方法:加减乘除
Complex ComplexAdd(Complex a){
return new Complex(RealPart + a.RealPart,ImagePart + a.ImagePart);
}
Complex ComplexSub(Complex a){
return new Complex(RealPart - a.RealPart,ImagePart - a.ImagePart);
}
Complex ComplexMulti(Complex a){
return new Complex(RealPart*a.RealPart-ImagePart*a.ImagePart,RealPart*a.ImagePart + ImagePart*a.RealPart);
}
Complex ComplexDiv(Complex a) {
return new Complex((RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart), (ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart));
}
}
  • 要测试的类getRealgetImaginarytoStringequalscomplexAdd、complexSub、complexMulti、complexDiv```

  • 测试代码如下:

import junit.framework.TestCase;

public class Complex_pTest extends TestCase {
Complex_p a=new Complex_p(2,3);
Complex_p b=new Complex_p(0,1);
Complex_p c=new Complex_p(-1,-2);
public void testGetReal() {
assertEquals(2.0,a.getReal());
assertEquals(0.0,b.getReal());
assertEquals(-1.0,c.getReal());
} public void testGetImaginary() {
assertEquals(3.0,a.getImaginary());
assertEquals(1.0,b.getImaginary());
assertEquals(-2.0,c.getImaginary());
} public void testToString1() {
assertEquals("2.0+3.0i",a.toString());
assertEquals("1.0i",b.toString());
assertEquals("-1.0-2.0i",c.toString());
}
public void testComplexAdd() {
assertEquals("2.0+4.0i",a.ComplexAdd(b).toString());
assertEquals("1.0+1.0i",a.ComplexAdd(c).toString());
assertEquals("-1.0-1.0i",b.ComplexAdd(c).toString());
} public void testComplexSub() {
assertEquals("2.0+2.0i",a.ComplexSub(b).toString());
assertEquals("1.0+3.0i",b.ComplexSub(c).toString());
assertEquals("-3.0-5.0i",c.ComplexSub(a).toString());
} public void testComplexMulti() {
assertEquals("-3.0+2.0i",a.ComplexMulti(b).toString());
assertEquals("4.0-7.0i",a.ComplexMulti(c).toString());
assertEquals("2.0-1.0i",b.ComplexMulti(c).toString());
} public void testComplexDiv() {
assertEquals("-1.4-4.0i",a.ComplexDiv(c).toString());
assertEquals("-0.2-1.0i",b.ComplexDiv(c).toString());
}
}

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

4.任务三:重构

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

  • 修改软件的四种动机:

    • 增加新功能;
    • 原有功能有BUG;
    • 改善原有程序的结构;
    • 优化原有系统的性能 。
  • 需要重构的地方:

    • 代码重复;
    • 方法过长;
    • 参数列过长;
    • 条件逻辑过度复杂;
    • 分支语句
  • 一个完整的重构流程应包括

    • 从版本控制系统代码库中Check out code
    • 读懂代码(包括测试代码)
    • 发现bad smell
    • Refactoring
    • 运行所有的Unit Tests
    • 往代码库中Check in code
  • 重构1:添加作者和日期

  • 重构2:对类中的变量和方法进行封装

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

  • 修改后的代码

/*
* @author dwt
* @date 2019/5/3
*/
import java.lang.Integer;
import java.util.Objects; public class Complex {
//定义属性并生成getter,setter
private double RealPart;
private double ImagePart;
public double getRealPart(){
return RealPart;
}
public double getImagePart(){
return ImagePart;
} //定义构造函数
public Complex(){
RealPart = 0;
ImagePart = 1;
}
public Complex(double R,double I){
RealPart = R;
ImagePart = I;
} @Override
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(!(obj instanceof Complex)) {
return false;
}
Complex complex = (Complex) obj;
if(complex.RealPart != ((Complex) obj).RealPart) {
return false;
}
if(complex.ImagePart != ((Complex) obj).ImagePart) {
return false;
}
return true;
}
@Override
public String toString(){
String s = new String();
if (ImagePart > 0){
s = getRealPart() + "+" + getImagePart() + "i";
}
if (ImagePart == 0){
s = getRealPart() + "";
}
if(ImagePart < 0){
s = getRealPart() + "" + getImagePart() + "i";
}
if(RealPart == 0){
s = getImagePart() + "i";
}
if (RealPart==0&&ImagePart==0){
s="0";
}
return s;
}
//定义公有方法:加减乘除
Complex complexAdd(Complex a){
return new Complex(RealPart + a.RealPart,ImagePart + a.ImagePart);
}
Complex complexSub(Complex a){
return new Complex(RealPart - a.RealPart,ImagePart - a.ImagePart);
}
Complex complexMulti(Complex a){
return new Complex(RealPart*a.RealPart-ImagePart*a.ImagePart,RealPart*a.ImagePart + ImagePart*a.RealPart);
}
Complex complexDiv(Complex a) {
return new Complex((RealPart * a.ImagePart + ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart), (ImagePart * a.ImagePart + RealPart * a.RealPart) / (a.RealPart * a.RealPart + a.RealPart * a.RealPart));
}
}

4.任务四:Java密码学相关内容的学习

二、代码托管

我的码云链接

搭档的码云链接

三、参考资料

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

2018-2019-2 20175215 实验三《敏捷开发与XP实践》实验报告的更多相关文章

  1. 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...

  2. 20175212童皓桢 实验三敏捷开发与XP实践实验报告

    20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某 ...

  3. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  4. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  5. 20165308实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  6. 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  7. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  8. # 20155224 实验三 敏捷开发与XP实践 实验报告

    20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  9. 20155226 实验三 敏捷开发与XP实践 实验报告

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  10. 20155311 实验三 敏捷开发与XP实践 实验报告

    20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

随机推荐

  1. svn的一些使用技巧

    新项目的目录结构说明: 代码分三部分 1.01_Trunk(开发主干) 2.02_Branches(开发分支) 3.03_Tags(提交代码区) 文档区 请注意SVN的路径是区分大小写的! 与VSS的 ...

  2. Js的原型和原型链讲解

    原型:每个对象都会在其内部初始化一个属性,就是prototype 原型链:当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype中去找,这个prototype中会有 ...

  3. js之数据类型(对象类型——构造器对象——数组1)

    数组是值的有序集合,每个值叫做一个元素,而每一个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的,数组元素可以是任意类型且同一个数组中不同元素也可能有不同的类型.数组的 ...

  4. vue.js项目开发实战笔记001——准备工作

    1,Vue.js 是一套构建用户界面的渐进式框架. 2,Vue.js 是由尤雨溪开发出的,最早发布于2014年2月. 3,引用vue.js地址一CDN: <script src="ht ...

  5. powershell查看版本信息

    在终端输入$PSVersionTable

  6. C#中构建多线程应用程序[转]

    原文:http://blog.sina.com.cn/s/blog_4e61c4290100ndyl.html C#中构建多线程应用程序[转] (2011-01-04 21:29:29) 转载▼ 标签 ...

  7. 如何在cmd命令行中运行Java程序

    cmd运行java 有萌新问我怎么用cmd运行Java,他运行报错了,怎么办?如图是他的执行过程: 他说就这一个类,里面包含了main方法怎么会没有加载主类呢. 其实很简单,因为你执行的时候并不能直接 ...

  8. SDU&PDU

    SDU(service Data Unit):服务数据单元,又叫业务数据单元,是指定层的用户服务的数据集,传送到接收方的时候同一协议层时数据没有发生变化,即业务部分,然后发给下层之后,下层将其封装在P ...

  9. tp5将查询数据返回为对象转为数组

    use think\Model; collection()->toArray(); $result = collection(model("Menu")->order( ...

  10. git生成公钥public key并添加SSH key。git乌龟gerrit下推送git【server sent :publickey】

    一.key 码云链接:http://git.mydoc.io/?t=180845#text_180845 博客链接: 方式一:https://blog.csdn.net/xb12369/article ...