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

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

實驗內容

任務一

參考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安裝alibaba 插件,解決代碼中的規範問題。
在IDEA中使用工具(Code->Reformate Code)把下面代碼從新格式化,再研究一下Code菜單,找出一項讓本身感受最好用的功能。提交截圖,加上本身學號水印。html

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));
    }
}

編碼標準

編程標準包含:具備說明性的名字、清晰的表達式、直截了當的控制流、可讀的代碼和註釋,以及在追求這些內容時一致地使用某些規則和慣用法的重要性。java

Java中的通常的命名規則:

要體現各自的含義
包、類、變量用名詞
方法名用動賓
包名所有小寫,如:io,awt
類名第一個字母要大寫,如:HelloWorldApp
變量名第一個字母要小寫,如:userName
方法名第一個字母要小寫:setNamegit

實驗步驟

1.打開IDEA,在Settings → Plugins → Browse repositories...中的搜索框輸入alibaba
看到Alibaba Java Code Guidelines插件,點擊Install進行安裝,而後重啓IDE生效
程序員

2.新建類:CodeStandard.java,輸入題目給出的代碼
使用工具 Code → Reformate Code ,按提示修改並格式化代碼
算法

3.瞭解Code菜單功能
幾個比較經常使用的功能總結以下:編程

  • Override Methods(Ctrl+O):重載基本類的方法;
  • Implement Methods(Ctrl+I):完成當前類 implements 的(或者抽象基本類的)接口的方法;
  • Generate(Alt+Insert):建立類裏面任何字段的 getter 與 setter 方法;
  • Surround With(Ctrl+Alt+T):使用if-else、try-catch、do-while等包裝代碼段;
  • Insert Live Template(Ctrl-J):執行一些記不起來的 Live Template 縮寫;
  • Comment with Line Comment(Ctrl+斜槓)/Comment with Block Comment(Ctrl+Shift+斜槓):用 Ctrl+斜槓 與 Ctrl-Shift-/ 來註釋(或反註釋)代碼行與代碼塊。 用- Ctrl+斜槓單行註釋標記(「 //… 」)來註釋(或反註釋)當前行或者選擇地代碼塊。而 Ctrl+Shift+斜槓則能夠用塊註釋標記(「 /* */」)把所選塊包圍起來。要反註釋一個代碼塊就在塊中任何一個地方按 Ctrl+Shift+斜槓 便可;
  • Reformat Code(Ctrl+Alt+L):將代碼按標準格式縮進;

2、敏捷開發與XP
結對編程是XP中的重要實踐。在結對編程模式下,一對程序員肩並肩、平等地、互補地進行開發工做。他們並排坐在一臺電腦前,面對同一個顯示器,使用同一個鍵盤、同一個鼠標一塊兒工做。他們一塊兒分析,一塊兒設計,一塊兒寫測試用例,一塊兒編碼,一塊兒作單元測試,一塊兒作集成測試,一塊兒寫文檔等。安全

任務二

碼雲上把本身的學習搭檔加入本身的項目中,確認搭檔的項目加入本身後,下載搭檔實驗二的Complex代碼,加入很多於三個JUnit單元測試用例,測試成功後git add .; git commit -m "本身學號 添加內容";git push;網絡

提交搭檔項目git log的截圖,包含上面git commit的信息,並加上本身的學號水印信息。app

實驗步驟

1.下載Complex代碼加入單元測試用例
Complex代碼:框架

public class Complex {
    // 定義屬性並生成getter,setter
    double RealPart;
    double ImagePart;

    // 定義構造函數
    public Complex(double R, double I) {
        this.RealPart = R;
        this.ImagePart = I;
    }

    ;

    public Complex() {
    }

    ;

    //Override Object
    /*public boolean equals(Object obj){

    }

    public String toString();
    //Override Object
    public boolean equals(Object obj)
    public String toString()*/


}
class FourOperations{
    // 定義公有方法:加減乘除
    //Complex a = new Complex();
    // Complex b = new Complex();

    Complex ComplexAdd(Complex a,Complex b){
        Complex answer=new Complex();
        answer.RealPart=a.RealPart+b.RealPart;
        answer.ImagePart=a.ImagePart+b.ImagePart;
        return answer;
    }
    Complex ComplexSub(Complex a,Complex b){
        Complex answer=new Complex();
        answer.RealPart=a.RealPart-b.RealPart;
        answer.ImagePart=a.ImagePart-b.ImagePart;
        return answer;
    }
    Complex ComplexMulti(Complex a,Complex b){
        Complex answer=new Complex();
        answer.RealPart=(a.RealPart*b.RealPart)-(a.ImagePart*b.ImagePart);
        answer.ImagePart=(a.RealPart*b.ImagePart)+(a.ImagePart*b.RealPart);
        return answer;
    }
    Complex ComplexDiv(Complex a,Complex b){
        Complex answer=new Complex();
        double fenmu = b.RealPart*b.RealPart+b.ImagePart+b.ImagePart;
        answer.RealPart=(a.RealPart*b.RealPart+a.ImagePart*b.ImagePart)/fenmu;
        answer.ImagePart=(a.ImagePart*b.RealPart-a.RealPart*b.ImagePart)/fenmu;
        return answer;
    }
}

單元測試代碼

import org.junit.Test;

import static org.junit.Assert.*;

public class ComplexTest {
    @Test
    public void testComplexAdd() throws Exception {
        assertEquals(5,2+3);
        System.out.println();
    }
    @Test
    public void testComplexSub() throws Exception {
        assertEquals(6,9 - 3);
    }
    @Test
    public void testComplexMulti() throws Exception {
        assertEquals(6,2 * 3);
    }
    @Test
    public void testComplexDiv() throws Exception {
        assertEquals(2,6 / 3);
    }
}

2.截圖以下

任務三:

完成重構內容的練習,下載搭檔的代碼,至少進行三項重構,提交重構後代碼的截圖,加上本身的學號水印。提交搭檔的碼雲項目連接。

重構(Refactor),就是在不改變軟件外部行爲的基礎上,改變軟件內部的結構,使其更加易於閱讀、易於維護和易於變動 。
目的:

增長新功能;
原有功能有BUG;
改善原有程序的結構;
優化原有系統的性能 。

實驗截圖:

修改後的代碼:

任務四:

1.參考《Java 密碼學算法》,以結對的方式完成Java密碼學相關內容的學習,結合重構,git,代碼標準。
2.提交學習成果碼雲連接和表明性成果截圖,要有學號水印。
Java安全體系結構總共分爲4個部分:

JCA( Java Cryptography Architecture, Java加密體系結構):JCA提供基本的加密框架, 如證書、 數字簽名、消息摘要和密鑰對產生器。
JCE( Java Cryptography Extension, Java加密擴展包):JCE在JCA的基礎上做了擴展, 提供了各類加密算法、 消息摘要算法和密鑰管理等功能。JCE的實現主要在javax.crypto包( 及其子包) 中
JSSE( Java Secure Sockets Extension, Java安全套接字擴展包):JSSE提供了基於SSL( Secure Sockets Layer,安全套接字層) 的加密功能。 在網絡的傳輸過程當中, 信息會通過多個主機(頗有可能其中一臺就被竊聽) , 最終傳送給接收者, 這是不安全的。這種確保網絡通訊安全的服務就是由JSSE來提供的。
JAAS( Java Authentication and Authentication Service, Java鑑別與安全服務):JAAS提供了在Java平臺上進行用戶身份鑑別的功能。

大體瞭解了MD5算法須要用到的方法框架後,編寫了僞代碼:

/**

僞代碼:
MD5算法:把一個任意長度的字節串變換成必定長的十六進制數字串
具體步驟:(1)生成MessageDigest對象
(2)傳入須要計算的字符串
(3)計算消息摘要
(4)處理計算結果
/

產品代碼:

import java.security.MessageDigest;

public class DigestPass{
public static String md5Encode(String inStr) throws Exception {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return "";
}

byte[] byteArray = inStr.getBytes("UTF-8");
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
    int val = ((int) md5Bytes[i]) & 0xff;
    if (val < 16) {
        hexValue.append("0");
    }
    hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
}

測試代碼]:

public static void main(String args[]) throws Exception {
String str = new String("amigoxiexiexingxing");
System.out.println("原始:" + str);
System.out.println("MD5後:" + md5Encode(str));
}

實驗體會與總結

1.版本控制的好處 (1)版本控制提供項目級的 undo(撤銷)功能:沒有什麼事情是終結版本,任何錯誤必須很容易回滾。 (2)版本控制容許多人在同一代碼上工做,只要遵照必定的控制原則就行。 (3)版本控制系統保存了過去所做的修改的歷史記錄。 (4)版本控制系統支持在主線上開發的同時發佈多個軟件版本。 (5)版本控制也是項目級的時間機器,你能夠選擇任何一個時間, 精確地查看項目在當時的狀況。 2.重構(Refactor):就是在不改變軟件外部行爲的基礎上,改變軟件內部的結構,使其更加易於閱讀、易於維護和易於變動。 修改方法是:用鼠標單擊要改的名字,選擇Eclipse中菜單中的Refactor->Rename...

相關文章
相關標籤/搜索