20165201 实验三敏捷开发与XP实践
敏捷开发与XP实践-1
实验目的与要求:
-
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));
}
}
实验内容及结果截图:
-
Code->Reformate Code
-
重新格式化之后
-
我发现
Code->Surround with...
功能很好用,例如我们想改变自己代码的部分逻辑结构,加个if语句,直接用这个功能就好了,先选择范围
-
再点
Code->Surround with...
-
选要添加的语句~
-
结果如下
敏捷开发与XP实践-2
实验目的与要求:
-
在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
-
提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。
实验内容及结果截图:
- 搭档的
Complex
代码
import java.lang.*;
public class Complex {
// 定义属性并生成getter,setter
public void setRealpart(double R){
RealPart=R;
}
public double getRealpart(){
return RealPart;
}
public void setImagePart(double I){
ImagePart=I;
}
public double getImagePart(){
return ImagePart;
}
double RealPart;
double ImagePart;
// 定义构造函数
public Complex(double R,double I){
RealPart=R;
ImagePart=I;
}
//Override Object
public boolean equals(Complex obj){
if(this.getRealpart()==obj.getRealpart() && this.getImagePart()==obj.getImagePart())
return true;
else
return false;
}
public String toString(){
return RealPart+"+"+ImagePart+"i";
}
// 定义公有方法:加减乘除
public Complex ComplexAdd(Complex a){
return new Complex(this.RealPart+a.RealPart,this.ImagePart+a.ImagePart);
}
public Complex ComplexSub(Complex a){
return new Complex(this.RealPart-a.RealPart,this.ImagePart-a.ImagePart);
}
public Complex ComplexMulti(Complex a){
return new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,
this.RealPart*a.ImagePart+this.ImagePart*a.RealPart);
}
public Complex ComplexDiv(Complex a){
double x=this.RealPart;
double y=this.ImagePart;
double m=a.RealPart;
double n=a.ImagePart;
return new Complex((x*m+y*n)/(m*m+n*n),(y*m-x*n)/(m*m+n*n));
}
}
-
加入不少于三个JUnit单元测试用例,并且测试成功
我加入了@Test public void testAdd_2(){ assertEquals("5.0+0.0i",p3.ComplexAdd(p4).toString()); System.out.println(p3.ComplexAdd(p4)); } @Test public void testSub_2(){ assertEquals("-1.0+2.0i",p3.ComplexSub(p4).toString()); System.out.println(p3.ComplexSub(p4)); } @Test public void testMut_2(){ assertEquals("7.0+1.0i",p3.ComplexMulti(p4).toString()); System.out.println(p3.ComplexMulti(p4)); } @Test public void testDiv_2(){ assertEquals("0.5+0.5i",p3.ComplexDiv(p4).toString()); System.out.println(p3.ComplexDiv(p4)); }
-
全部代码如下
import junit.framework.TestCase;
import org.junit.Test;
public class ComplexTest extends TestCase {
Complex p1=new Complex(1,1);
Complex p2=new Complex(1,-1);
Complex p3=new Complex(2,1);
Complex p4=new Complex(3,-1);
@Test
public void testAdd(){
assertEquals("2.0+0.0i",p1.ComplexAdd(p2).toString());
System.out.println(p1.ComplexAdd(p2));
}
@Test
public void testSub(){
assertEquals("0.0+2.0i",p1.ComplexSub(p2).toString());
System.out.println(p1.ComplexSub(p2));
}
@Test
public void testMut(){
assertEquals("2.0+0.0i",p1.ComplexMulti(p2).toString());
System.out.println(p1.ComplexSub(p2));
}
@Test
public void testDiv(){
assertEquals("0.0+1.0i",p1.ComplexDiv(p2).toString());
System.out.println(p1.ComplexDiv(p2));
}
@Test
public void testAdd_2(){
assertEquals("5.0+0.0i",p3.ComplexAdd(p4).toString());
System.out.println(p3.ComplexAdd(p4));
}
@Test
public void testSub_2(){
assertEquals("-1.0+2.0i",p3.ComplexSub(p4).toString());
System.out.println(p3.ComplexSub(p4));
}
@Test
public void testMut_2(){
assertEquals("7.0+1.0i",p3.ComplexMulti(p4).toString());
System.out.println(p3.ComplexMulti(p4));
}
@Test
public void testDiv_2(){
assertEquals("0.5+0.5i",p3.ComplexDiv(p4).toString());
System.out.println(p3.ComplexDiv(p4));
}
}
- 提交搭档项目git log的截图,包含上面git commit的信息
敏捷开发与XP实践-3
实验目的与要求:
-
http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
-
完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
实验内容及结果截图:
- 搭档的代码如下:
import java.sql.*;
public class shm {
public static void main(String args[]) {
Connection con = null;
Statement sql;
ResultSet rs;
float di = 50.0f;
float gao = 50.0f;
String country_low = "A";
String country_high = "B";
try {
/* 加载JDBC_mysql驱动 */
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
}
String uri = "jdbc:mysql://localhost:3306/world?useSSL=true";
String user = "root";
String password = "";
try {
con = DriverManager.getConnection(uri, user, password); //连接代码
} catch (SQLException e) {
}
try {
sql = con.createStatement();
rs = sql.executeQuery("SELECT * FROM country"); //查询mess表
while (rs.next()) {
String name = rs.getString(2);
float LifeExpectancy = rs.getFloat(8);
if (LifeExpectancy < di && LifeExpectancy>0) {
di = LifeExpectancy;
country_low = name;
}
if (LifeExpectancy > gao) {
gao = LifeExpectancy;
country_high = name;
}
}
con.close();
}
catch (SQLException e) {
System.out.println(e);
}
System.out.printf("平均寿命最长的国家为: %s", country_high);
System.out.printf("平均寿命最短的国家为: %s\\n", country_low);
}
}
- 重构成功的截图如下:
(我重构了类名shm
->Life
;变量名float di = 50.0f; float gao = 50.0f;
->float low = 50.0f; float high = 50.0f;
;并规范了注释)
敏捷开发与XP实践-4
实验目的与要求:
-
参考 http://www.cnblogs.com/rocedu/p/6683948.html,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
-
提交学习成果码云链接和代表性成果截图,要有学号水印。
实验内容及结果截图:
运行java Skey_DES,在当前目录下将生成文件key1.dat,其中包含的密钥可以用于使用Triple-DES算法的加密和解密
先创建文件输出流对象,在其参数中指定文件名,如keykb1.dat。然后执行文件输出流的write( )方法将第2步中得到的字节数组中的内容写入文件
加密结果是字节数组,对其可作各种处理,如在网上传递、保存在文件中等。我们将其保存在文件Senc.dat中
先获取密文和秘钥,最后将明文生成字符串加以显示
- 我们的代表性成果截图(RSA算法)
实验过程中的问题
这次的实验我们遇到了两个难题,重构代码的时候,我们自己写的代码本身就不够规范,给结对伙伴改代码就比较费劲,今后还要多加规范地练习;其次是对DES和RSA密码算法不够熟悉,密码学的课当时还没讲到,所以理解起来很晦涩难懂。
实验体会与总结
我深刻地体会到了结对学习的好处,那就是两个人能够及时互相找出并改正错误,一个班那么多人,不可能等老师帮着一个一个找,而结对形式恰恰弥补了这一点和搭档的合作很愉快
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 5 | 8.3% |
设计 | 10 | 16.6% |
代码实现 | 20 | 33.3% |
测试 | 20 | 33.3% |
分析总结 | 5 | 8.3% |