學號 20175313 《實驗三 敏捷開發與XP實踐》實驗報告

1、實驗內容

(1)編碼標準

在IDEA中使用工具(Code->Reformate Code)把下面代碼從新格式化,再研究一下Code菜單,找出一項讓本身感受最好用的功能。java

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)Git的使用

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

(3)重構

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

(4)Java密碼學相關內容的學習

參考 http://www.cnblogs.com/rocedu/p/6683948.html,以結對的方式完成Java密碼學相關內容的學習,結合重構,git,代碼標準。數據結構

2、實驗步驟

(1)編碼標準

  • 沒有規範前:app

  • 單擊IDEA菜單中的Code->Reformat 或用快捷鍵Ctrl+Alt+L就能夠按IDEA規定的規範縮進。ide

  • 效果以下:工具

  • Java中的通常的命名規則有:
1.要體現各自的含義
2.包、類、變量用名詞
3.方法名用動賓
4.包名所有小寫,如:io,awt
5.類名第一個字母要大寫,如:HelloWorldApp
6.變量名第一個字母要小寫,如:userName
7.方法名第一個字母要小寫:setName

更多詳情請參見鄒欣老師寫的代碼規範與代碼複審單元測試

  • Code菜單中讓我感受最好用的功能:
    • Surround With ( 生成包圍代碼 ) Ctrl + Alt +T
    • Unwarp/Remove ( 取消代碼包圍 ) Ctrl + Shift + Delete
    • Move Statement Down ( 方法、代碼下移 ) Ctrl + Shift + 向下箭頭
    • Move Statement Up ( 方法、代碼上移 ) Ctrl + Shift + 向上箭頭

更多詳情請參見IDEA快捷鍵拆解系列(六):Code篇學習

  • 說明:由於我以前安裝過alibaba 插件,因此就沒有將其安裝過程寫入本次試驗。詳情請參見Intellj IDEA 簡易教程

(2)Git的使用以及添加Complex類測試代碼

  • 本身的學習搭檔加入本身的項目中


  • 添加搭檔的Complex類測試代碼

  • 碼雲上傳成功截圖:



(3)重構

針對編碼規約掃描提出的問題一一解決。

  • 問題1:包名應爲所有小寫字母和數字組成。
  • 解決方法:右擊包名->Refactor->Rename,進行重命名。

  • 問題2:全部的類都必須添加建立者信息

  • 解決方法:按照下面的格式,添加做者和日期。

  • 問題3:類、類屬性、類方法必須用javadoc規範

  • 解決方法:將註釋格式改完/**內容*/

  • 問題4:方法名、參數名、成員變量、局部變量沒有聽從駝峯形式

  • 解決方法:將要修改的變量單擊右鍵,Refactor->Rename,進行重命名,這樣可以批量的進行修改,不用本身一個一個的改。
  • 修改後代碼截圖:

(4)Java密碼學相關內容的學習

  • 體驗加解密-凱撒密碼
    • 加密:c≡m+k mod n
    • 解密:m≡c+k mod n


  • Java對稱加密-DES算法

    1. 獲取密鑰生成器:KeyGenerator kg=KeyGenerator.getInstance("DESede");
    2. 初始化密鑰生成器:kg.init(168);
    3. 生成密鑰:SecretKey k=kg.generateKey( );
    • 以對象保存在文件中:經過對象序列化方式將密鑰保存在文件中:FileOutputStream f=new FileOutputStream("key1.dat");
      ObjectOutputStream b=new ObjectOutputStream(f);
      b.writeObject(k);

    • 以字節保存在文件中:
      • 獲取密鑰
      • 獲取主要編碼格式
      • 保存密鑰編碼格式

    • 加密「Hello World!」

    • 對「Hello World!」生成的密文解密

  • Java非對稱加密-RSA算法

    • 加密「Hello World!」

    • 對「Hello World!」生成的密文解密

  • 使用密鑰協定建立共享密鑰
    • 建立DH公鑰和私鑰
      • A生成的公鑰和私鑰

      • B生成的公鑰和私鑰

    • 建立共享密鑰

  • Java摘要算法- MD5

3、實驗過程當中遇到的問題及其解決方法

  • 問題:對於凱撒密碼的加解密,以前作密碼學實驗的時候,本身用java實現過,對於其中的加解密,非常煩躁,由於明文是字符型加上密鑰做爲偏移量,一進行運算就會變成整數,而後還得從整數轉回字符,還要考慮是否超出26。

  • 解決方法:經過本次學習,我發現將c=c+(key%26)縮寫成c+=key%26;就能夠很好的解決這個問題。
  • 以前個人解決辦法:

4、心得體會

  • 此次實驗內容大部分我以前都解決過了,因此沒有什麼問題。
  • 就是看別人的程序有點吃力,我搭檔用的不少高級方法我都沒見過,須要常常查看幫助文檔才能勉強理解,可是也擴寬了個人視野。
  • 本次實驗,對我來講收穫最大的應該就是學會了代碼的規範,規範後的代碼看起來真的很舒服。
  • 補:學了Java Collections API和泛型以及java密碼學算法,
    真的是受益不淺。至關於複習了一遍數據結構和密碼學,雖然並無介紹算法的內核,可是讓我學會了如何使用各類加解密算法的使用。
  • 連接裏幾乎對每句代碼都有詳細的解釋,因此學起來並不難,就是內容有點多,可是看到後面就會發現其實都差很少,因此總的來講本次實驗仍是學到了很多東西。

5、碼雲連接

6、結對成員連接

7、參考資料

相關文章
相關標籤/搜索