20175325 《JAVA程序设计》实验三《敏捷开发与XP实践》实验报告
一、实验报告封面
课程:Java程序设计 班级:1753班 姓名:石淦铭 学号:20175325 成绩:
指导教师:娄嘉鹏 实验日期:2019年5月2日
实验时间:13:45 - 17:25
实验序号:实验三 实验名称:敏捷开发与XP实践
实验内容:
1.XP基础
2.XP核心实践
3.相关工具
二、实验内容及步骤:
(一)、实验一
1、题目:
- 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
- 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba 插件,解决代码中的规范问题。
- 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下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));
}
}
2、解答:
-
使用工具(
Code->Reformate Code
)把上面代码重新格式化,实验截图:
-
code菜单:
Move Line/statement Down/Up
:将某行表达式向下/向上移动一行generate
可以自动创建类里面任何字段的getter
与setter
方法Reformat Code
:格式化代码suround with
:代码块环绕comment with line/block comment
:将选中区域变成注释show reformat file dialog
:格式自动对齐Optimize imports
:去除不必要的imports
Insert Live Template
:插入Live Template
的缩写
- 感觉好用的功能:Move Line/statement Down/Up(将某行、表达式向下/向上移动一行)
(二)、实验二
1、题目:
- 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
- 提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。
2、解答:
- 搭档的实验二Complex代码:
public class Complex {
// 定义属性并生成getter,setter
double RealPart;
double ImagePart;
// 定义构造函数
public Complex(){
RealPart = 0;
ImagePart = 1;
}
public Complex(double R,double I){
ImagePart = I;
RealPart = R;
}
//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 string = "";
if (ImagePart > 0)
string = RealPart + "+" + ImagePart + "i";
if (ImagePart == 0)
string = RealPart + "";
if (ImagePart < 0)
string = RealPart + " " + ImagePart + "i";
return string;
}
// 定义公有方法:加减乘除
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);
}
Complex ComplexDiv(Complex a) {
if(a.RealPart==0||a.ImagePart==0) {
System.out.println("被减数不能为0");
return new Complex();
}
double d = Math.sqrt(a.RealPart*a.RealPart)+Math.sqrt(a.ImagePart*a.ImagePart);
return new Complex((RealPart*a.RealPart+ImagePart*a.ImagePart)/d,Math.round((RealPart*a.ImagePart-ImagePart*a.RealPart)/d));
}
}
- 进行的JUnit单元测试代码如下:
import junit.framework.TestCase;
import org.junit.Test;
public class ComplexTest extends TestCase {
Complex a=new Complex(1,2);
Complex b=new Complex(-2,-1);
Complex c=new Complex(4,-2);
Complex d=new Complex(4,-2);
@Test
public void testAdd(){
assertEquals(new Complex(-1,1),a.ComplexAdd(b));
assertEquals(new Complex(5,0),a.ComplexAdd(c));
}
@Test
public void testSub(){
assertEquals(new Complex(3,3),a.ComplexSub(b));
assertEquals(new Complex(-3,4),a.ComplexSub(c));
}
@Test
public void testMulti(){
assertEquals(new Complex(0,-5),a.ComplexMulti(b));
assertEquals(new Complex(8,6),a.ComplexMulti(c));
}
@Test
public void testDiv(){
assertEquals(new Complex(0,0.5),a.ComplexDiv(c));
assertEquals(new Complex(-0.3,-0.4),b.ComplexDiv(c));
}
}
- 测试成功截图:
(三)、实验三
1、题目:
- 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
- 完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接
2、解答
- 重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
- 一个完整的重构流程包括:
- 从版本控制系统代码库中
Check out code
- 读懂代码(包括测试代码)
- 发现
bad smell
Refactoring
- 运行所有的
Unit Tests
- 往代码库中
Check in code
- 从版本控制系统代码库中
- 完成重构后的代码截图:
(四)、实验四
1、题目:
- 参考 http://www.cnblogs.com/rocedu/p/6683948.html,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
- 提交学习成果码云链接和代表性成果截图,要有学号水印。
2、解答:
- 密码学: 主要是研究保密通信和信息保密的学科, 包括信息保密传输和信息加密存储等。
- Java密码学算法:
- 体验加解密--凯撒密码
- Java对称加密--DES算法
- Java非对称加密--RSA算法
- 使用密钥协定创建共享密钥
- Java摘要算法- MD5
- Java混合密码系统
- 实验结果截图:
三、实验感想:
通过这次实验,体会到了结对编程的魅力,学习了重构代码,也理解了代码的规范性以及可读性的重要意义,规范的代码能使我们对代码内容一目了然。
四、PSP:
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 10 | 10% |
设计 | 15 | 15% |
代码实现 | 40 | 40% |
测试 | 20 | 20% |
分析结果 | 15 | 15% |