2017-2018-2 20165312 實驗三《敏捷開發與XP實踐》實驗報告

2017-2018-2 20165312 實驗三《敏捷開發與XP實踐》實驗報告

1、實驗內容

1.XP基礎

極限編程(Extreme Programming,XP)是一種全新而快捷的軟件開發方法。XP團隊使用現場客戶、特殊計劃方法和持續測試來提供快速的反饋和全面的交流:html

  • XP是以開發符合客戶須要的軟件爲目標而產生的一種方法論
  • XP是一種以實踐爲基礎的軟件工程過程和思想
  • XP認爲代碼質量的重要程度超出人們通常所認爲的程度
  • XP特別適合於小型的有責任心的、自覺自勵的團隊開發需求不肯定或者迅速變化的軟件

XP軟件開發的基石是XP的活動,包括:編碼、測試、傾聽、設計。java

2.XP核心實踐
3.相關工具

2、在IDEA中使用工具格式化代碼

實驗內容:安裝alibaba 插件,解決代碼中的規範問題。在IDEA中使用工具把下面代碼從新格式化,再研究一下Code菜單,找出一項讓本身感受最好用的功能。提交截圖,加上本身學號水印。git

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

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

  • Settings ->Plugins -> Browse repositories...安裝alibaba
  • 在項目名稱上單擊右鍵,在彈出菜單上選擇編碼規約掃描

  • 不規範的地方,有中文提示而且定位到了行,alibaba把問題分爲block/critical/major三個等級。根據報錯提示,進行了修改。

  • Code->Rename重寫方法
  • Code->Comment with Line Comment 此行改爲註釋
  • Code->Comment with Block Comment此行添加註釋,這也是我比較喜歡的一個快捷鍵了(Ctrl+Shift+)

3、下載搭檔代碼並添加測試用例

實驗內容:在碼雲上把本身的學習搭檔加入本身的項目中,確認搭檔的項目加入本身後,下載搭檔實驗二的Complex代碼,加入很多於三個JUnit單元測試用例。編程

  • 首先在碼雲中將個人搭檔加入了個人項目
  • mkdir 5312Anna新建文件夾以方便區分git clone 搭檔碼雲連接鏈接到搭檔碼雲,這樣就能夠暢快尋找搭檔代碼了
  • 下載搭檔Com.java,編寫ComTest.java
import junit.framework.TestCase;
import org.junit.Test;
public class ComTest extends TestCase {
    Com c1 = new Com(1,1);
    Com c2 = new Com(0,-1);
    Com c3 = new Com(-1,1);
    @Test
    public void testgetRealPart() throws Exception {
        assertEquals(1.1, new Com().setA(1.1));
        assertEquals(0.-1, new Com().setA(0.-1));
        assertEquals(-1.1, new Com().setA(-1.1));
    }
    @Test
    public void testgetImagePart() throws Exception {
        assertEquals(1.1, new Com().setB(1.1));
        assertEquals(0.-1, new Com().setB(0.-1));
        assertEquals(-1.1, new Com().setB(-1.1));
    }
    @Test
    public void testComAdd() throws Exception {
        assertEquals("1.0", c1.ComAdd(c2).toString());
        assertEquals("0.0+2.0i", c1.ComAdd(c3).toString());
        assertEquals("-1.0", c2.ComAdd(c3).toString());
    }
    @Test
    public void testComSub() throws Exception {
        assertEquals("-1.0 -2.0i", c1.ComMinus(c2).toString());
        assertEquals("-2.0", c1.ComMinus(c3).toString());
        assertEquals("-1.0+2.0i", c2.ComMinus(c3).toString());
    }
}

  • git push
  • git log ComTest.java

4、下載搭檔代碼並進行重構

經常使用使用方法:安全

  • refactor->Rename給類、包、方法、變量更名字
  • refactor->Encapsulate Field封裝
  • Source->Generate toString()toString()方法
  • refactor->Extract Method提煉出重複的代碼

重構後代碼網絡

class studentdark {
    private int num;
    private String name;
    private int java;

    public int getNum() {
        return num;
    }
    @Override
    public String toString() {
        return "studentdark{" +
                "num=" + num +
                ", name='" + name + '\'' +
                ", java=" + java +
                '}';
    }
    public void setNum(int num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getJava() {
        return java;
    }

    public void setJava(int java) {
        this.java = java;
    }
}
public class studentdarkTest {

    public static void main(String[] args) {
        studentdark student = new studentdark();
        student.setName("caoge");
        student.setNum(5312);
        student.setJava(94);
        System.out.println("學號爲"+ student.getNum() +",姓名爲"+ student.getName() +"java成績爲"+ student.getJava());
    }



}

5、結對編程--JAVA密碼學算法

密碼學包括密碼編碼學(Cryptography) 和密碼分析學(Cryptanalyst) 兩個分支。app

  • 密碼編碼學: 主要研究如何對信息進行編碼, 如何實現對信息的隱蔽, 是密碼學理論的基礎, 也是保密系統設計的基礎。
  • 密碼分析學: 主要研究加密消息的破譯或消息的僞造, 是檢驗密碼體制安全性最爲直接的手段, 只有經過實際密碼分析考驗的密碼體制,纔是真正可用的。

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平臺上進行用戶身份鑑別的功能。

咱們小組結合正在學習《密碼學》中的DES算法,以及認真閱讀婁老師博客 Java密碼學算法,瞭解到「DES」是目前最經常使用的對稱加密算法,但安全性較差。針對DES安全性的改進產生了能知足當前安全須要的TripleDES算法,即「DESede」。決定實現TripleDES算法,在老師範例代碼上作了調整。ide

編程思路:

(1) 獲取密鑰生成器KeyGenerator kg=KeyGenerator.getInstance("DESede");
Java中KeyGenerator類中提供了建立對稱密鑰的方法。KeyGenerator類預約義了一個靜態方法getInstance( ),方法getInstance( )的參數爲字符串類型,指定加密算法的名稱。

(2) 初始化密鑰生成器kg.init(168);該步驟通常指定密鑰的長度。咱們寫的是「DESede」,則能夠是112或168位,其中112位有效。

(3) 生成密鑰SecretKey k=kg.generateKey( );密鑰可用於之後的加密和解密。

(4) 經過對象序列化方式將密鑰保存在文件中

FileOutputStream f=new FileOutputStream("key1.dat");
ObjectOutputStream b=new ObjectOutputStream(f);
b.writeObject(k);

ObjectOutputStream類中提供的writeObject方法能夠將對象序列化,以流的方式進行處理。這裏將文件輸出流做爲參數傳遞給ObjectOutputStream類的構造器,這樣建立好的密鑰將保存在文件key1.data中。

(5) 從文件中獲取密鑰

FileInputStream f=new FileInputStream("key1.dat");
ObjectInputStream b=new ObjectInputStream(f);
Key k=(Key)b.readObject( );

(6) 建立密碼器
Cipher cp=Cipher.getInstance("DESede");
KeyGenerCipher類是一個工廠類,它不是經過new方法建立對象,而是經過其中預約義的一個靜態方法getInstance( )獲取Cipher對象。getInstance( )方法的參數是一個字符串,該字符串給出Cipher對象應該執行哪些操做。

(7) 初始化密碼器
cp.init(Cipher.ENCRYPT_MODE, k);該方法包括兩個參數,第一個參數指定密碼器準備進行加密仍是解密,若傳入Cipher.ENCRYPT_MODE則進入加密模式。第二個參數則傳入加密或解密所使用的密鑰,即第1步從文件中讀取的密鑰對象k。

(8) 獲取等待加密的明文

String s="Hello World!";
byte ptext[]=s.getBytes("UTF8");

(9) 執行加密
byte ctext[]=cp.doFinal(ptext);

(10) 處理加密結果

FileOutputStream f2=new FileOutputStream("SEnc.dat");
f2.write(ctext);

這裏將加密結果保存在文件Senc.dat中。

加密結果:

密鑰相同,解密與加密過程相似,解密結果:

6、實驗感想

再一次的結對學習讓咱們的默契度再次增長,更加有默契。將密碼學學習的內容與java相結合,更一步鍛鍊了本身的能力。

代碼連接

步驟 耗時/h 百分比
需求分析 0.5 10%
設計 1 20%
代碼實現 2 40%
測試 0.5 10%
分析總結 1 20%
相關文章
相關標籤/搜索