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 ...
随机推荐
- LeetCode:183.从不订购的客户
题目链接:https://leetcode-cn.com/problems/customers-who-never-order/ 题目 某网站包含两个表 Customers 表和 Orders 表.编 ...
- vue中watch深度监听
监听基本类型的都是浅度监听 watch的深度监听,监听复杂类型都是深度监听(funciton ,arrat ,object) // 监听对象 data(){ return { a:{ b:, c: } ...
- 1 .net中自定义事件的步骤
1 申明一个自定义的类并且继承事件的基类 public class ClientSocketModelConnectedEvent:EventArgs { private string param; ...
- PostgreSQL 初学常用实用命令
常用命令 psql -h ip -p port -U user -d dbName 数据库 \dt(当前数据库所有表) \l(所有数据库) \c(切换数据库) \d 表名(查看表结构) table \ ...
- Kernel boot options
There are three ways to pass options to the kernel and thus control its behavior: When building the ...
- Oracle【三表的联合查询】
,'北京','彰显大气'); ,'上海','繁华都市'); ,'广州','凸显舒适'); ,'深圳','年轻气氛'); ,'北上广深','不相信眼泪'); commit; ; ; ; ; ; 员工信息 ...
- markdown实现点击链接下载文件
今天用Markdown工具,需要实现一个点连接下载文件的功能,看起来很多简单我也没多想就直接写了,并且单个页面测试的时候也挺正常,就发布了,但是发布后使用的时候发现问题了,浏览器中直接点击链接没反应, ...
- springboot配置对jsp页面的解析支持
pom.xml文件配置依赖信息 <!--引入Spring Boot内嵌的Tomcat对JSP的解析包,不加解析不了jsp页面--> <dependency> <group ...
- less 分页显示文件内容
1.命令功能 less 是more的增强版,可以分页显示文件内容,而且less打开文件的速度要比vi,more更快.less支持搜索功能,显示行号. 2.语法格式 less option file ...
- Linux之more命令
命令解释 more命令类似与cat命令,却比cat命令强大,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作. 命令说明 more [选项] 文件.. 命令选项 -d 显示帮助 ...