2018-2019-2 20175215 实验三《敏捷开发与XP实践》实验报告
一、实验内容与步骤
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));
}
}
要测试的类
getReal、getImaginary、toString、equals、complexAdd、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实践》实验报告的更多相关文章
- 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...
- 20175212童皓桢 实验三敏捷开发与XP实践实验报告
20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某 ...
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- 20165308实验三 敏捷开发与XP实践实验报告
实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...
- 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20155220 实验三 敏捷开发与XP实践 实验报告
20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- # 20155224 实验三 敏捷开发与XP实践 实验报告
20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155226 实验三 敏捷开发与XP实践 实验报告
20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155311 实验三 敏捷开发与XP实践 实验报告
20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
随机推荐
- json字符串对象
1.将字符串转为json对象:JSON.parse(); 2.json对象转字符串:JSON.stringify(); <!DOCTYPE html> <html> <h ...
- JAVA语言程序设计课后习题----第四单元解析(仅供参考)
1 本题水题,主要理解题目的意思即可,访问方法和修改方法可以通过快捷方式alt+insert选中你需要的成员变量即可 public class Person { public String name; ...
- 解决 Grep 的多次管道过滤问题
解决 Grep 的多次管道过滤问题 这是个问题,解决了 tail -f crazy.log | grep --line-buffered Hello | grep Time 解决 Grep 的多次管道 ...
- 1-win10配置 Vagrant 环境
1-win10配置 Vagrant 环境 2019.9.13 Vagrant 概述 vagrant是一个操作虚拟机的工具.是一个基于Ruby的工具,用于创建和部署虚拟化开发环境. 通过命令和配置文件来 ...
- ad 拼板
随着整个电子产业的不断发展,电子行业的很多产品都已经有完善的上下游配套企业.从一个成熟产品的方案设计,外观设计,加工制造,装配测试,包装,批发商渠道等等,这样的一条产业链在特定的环境就这样自然地生成. ...
- 一个javascript面试题
javascript面试题代码: <script type="text/javascript"> function fun(x,y){ console.log(&quo ...
- dubbo 框架
2.1 dubbo Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和 ...
- 部署jenkins+git
Jenkins简介 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能 安装并启动思路: 安装准备 ...
- 【CF786B】Legacy
题目大意:初始给定 N 个点,支持三种操作:两点之间连边:一个点与一个连续区间编号的点之间连边:一个连续区间内的点和一个点连边,求执行 N 次操作之后的单源最短路. 题解:学会了线段树优化建图. 发现 ...
- veeValidate实战
说在前面 vee-validate 版本2.0.4的学习github地址我的项目地址第一次认真的在git上写一个demo教程,喜欢的可以star一下~^o^~ (^-^) (^o^) 后续会有一个完整 ...