1. 程式人生 > >20165201 實驗三敏捷開發與XP實踐

20165201 實驗三敏捷開發與XP實踐

加減乘 今後 mysql驅動 import 合作 catch 內容替換 功能 PE

##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,代碼標準。

  • 提交學習成果碼雲鏈接和代表性成果截圖,要有學號水印。

實驗內容及結果截圖:

  • 我們的碼雲鏈接:
    DES算法
    RSA算法

  • 我們的代表性成果截圖(DES算法)

??運行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%

20165201 實驗三敏捷開發與XP實踐