2017-2018-2 20165233 實驗三 敏捷開發與XP實踐

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

實驗內容

  1. XP基礎java

  2. XP核心實踐git

  3. 相關工具算法

實驗步驟

1、編碼標準

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

  • 代碼標準中很重要的一項是如何給包、類、變量、方法等標識符命名,能很好的命名可讓本身的代碼立立刻升一個檔次。Java中的通常的命名規則有:數組

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

任務一:在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));
}
}

因此咱們利用IDEA功能菜單中的Code->Reformat Code,即可實現按照IDEA的規範進行縮進。修改效果以下:網絡

在研究Code菜單的過程當中,我發現名爲Surround With的功能十分好用。它的做用是:使用if-elsetry-catchdo-while等包裝代碼段;它會將這些語句中的基本內容進行補全。好比說在我須要用try-catch語句時,忽然忘記異常的類型或者名字,此時就可使用Surround With,爲編程提升效率。app

2、敏捷開發與XP

  • 敏捷開發(Agile Development)是一種以人爲核心、迭代、按部就班的開發方法。「敏捷流程」是一系列價值觀和方法論的集合。從2001年開始,一些軟件界的專家開始倡導「敏捷」的價值觀和流程,他們確定了流行作法的價值,可是強調敏捷的作法更能帶來價值。框架

  • 咱們關注其中的編碼標準,結對編程,代碼集體全部,測試,重構等實踐。ide

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

  • 首先在碼雲中打開本身的項目,功能欄中選擇管理->開發者,就能夠邀請本身的學習搭檔加入本身的項目中,隨後對方確認邀請,即添加成功。

  • 打開IDEA在功能欄中選擇File->New->Project from Version Control,就能夠成功clone本身學習搭檔碼雲項目裏的全部代碼

  • 下載實驗二的Complex代碼後,個人學習搭檔MyComplex.java的源程序如圖:

  • 我修改的JUnit單元測試用例以下圖:

3、重構

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

  • 咱們要修改軟件,萬變不離其宗,無非就是四種動機:

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

任務三:完成重構內容的練習,下載搭檔的代碼,至少進行三項重構

我下載的搭檔代碼以下:

經過分析,代碼存在以下問題:

  • 類名不符合命名規則;
  • 程序對於用戶輸入的不一樣數據的包含狀況過少
  • 處理問題太籠統,劃分不細緻

基於以上的分析,我對搭檔的代碼進行了以下圖的重構:

練習:Java 密碼學算法

  • 咱們遇到的安全問題能夠歸結爲安全的三個屬性(CIA金三角):

    • 機密性(Confidentiality):確保數據僅能被合法的用戶訪問, 即數據不能被未受權的第三方使用。
    • 完整性(Integrity):主要確保數據只能由受權方或以受權的方式進行修改,即數據在傳輸過程當中不能被未受權方修改。
    • 可用性(Availability):主要確保全部數據僅在適當的時候能夠由受權方訪問。
  • 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平臺上進行用戶身份鑑別的功能。

任務四:以結對的方式完成Java密碼學相關內容的學習,結合重構、git、代碼標準等

咱們基於老師的博客進行了對於Java對稱加密-DES算法的學習。

在對稱加密-DES算法中一共包括四個部分:

  • 生成隨機密鑰
  • 保存了密鑰編碼後,又使用循環語句將字節數組中的內容打印出來
  • 加密
  • 解密

在理解了這個加密過程後,咱們對方法進行了一部分的重構:

我想添加解密的JUnit單元測試用例,但在進行過程當中遇到了問題。因爲密文存放在文件SEnc.dat中,須要從文件中讀入,因此在聲明一個新的字符串對象用於驗證密文解密後是否正確時,IDEA會提示沒有String方法,所以也就沒法進行斷言語句進行匹配判斷,最終以失敗了結...

總結與體會

  • 本次試驗更注重結對編程,經過互相加入開發者,即可以互相修改代碼,更加方便。兩我的均可以對雙方的代碼進行修改。
  • 在修改對方的單元測試用例時,也可以加強本身糾錯,適應多種編程形式的能力
  • 重構搭檔代碼時,能夠吸收更多經驗教訓,使本身避免出現與搭檔一樣的錯誤
  • Java密碼學算法的學習過程當中,的確很深入的感覺到學了《密碼學》卻不會使用密碼技術的問題,在老師的博客中也見到了教材中沒有接觸過的生成密鑰等之類的方法。
步驟 耗時 百分比
需求分析 10min 17.2%
設計 20min 34.5%
代碼實現 8min 13.8%
測試 15min 25.9%
分析總結 5min 8.6%
相關文章
相關標籤/搜索