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

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

1、實驗步驟及內容

軟件工程是把系統的、有序的、可量化的方法應用到軟件的開發、運營和維護上的過程。軟件工程包括下列領域:軟件需求分析、軟件設計、軟件構建、軟件測試和軟件維護。軟件工程一般是開發流程與開發工具的組合,而敏捷和極限編程就是開發方法的一部分。
敏捷開發java

  • 敏捷開發是一種以人爲核心、迭代、按部就班的開發方法。
    極限編程(XP)
  • 極限編程是一種全新而快捷的軟件開發方法,其包括溝通、簡單、反饋、勇氣這幾項準則;編碼、測試、傾聽、設計這幾項活動;編碼標準,結對編程,代碼集體全部,測試,重構等12項實踐。
    本次實驗中咱們對編碼標準,結對編程,代碼集體全部,測試,重構這幾項實踐進行練習。

(一)編碼標準——使用阿里的編碼標準並藉助阿里開放的IDE檢測插件對代碼進行規範。

在這一步驟中咱們主要須要安裝阿里的格式插件並使用插件以及IDEA中的Code工具對代碼進行規範並格式化。
一、在IDEA中安裝Alibaba Java Code Guide lines並重啓IDEA。
二、打開一個項目用於代碼規範,這裏我使用的是之前測試數據庫鏈接的MessageDAODemo等類。
三、右鍵點擊src,選擇編碼規約掃描便可在下面的窗口中查看是否符合規範,如不符合能夠查看不符合的具體位置以及相應問題。

四、找到定位到的行,根據中文提示將問題解決,這裏的MessageDAO因爲特殊狀況能夠不使用駝峯規則。

五、新建一個CodeStandard類,並使用IDEA中的Code->Reformate Code對代碼進行格式化,在Code工具中還能夠進行插入、重寫方法以及添加註釋等一系列格式化的操做。
git

(二)結對編程,代碼集體全部,測試——瞭解結對編程,並在碼雲上把本身的學習搭檔加入本身的項目中,下載搭檔實驗二的Complex代碼,加入很多於三個JUnit單元測試用例。

結對編程在作「小學四則運算題目」這一項目時已經體會過了。在結對編程模式下,一對程序員肩並肩、平等地、互補地進行開發工做,兩人分別充當駕駛員以及領航員的角色。而代碼集體全部咱們是經過git實現的,經過git咱們不只可讓全部人項目參與人都能修改代碼,還能夠對舊版本進行修改,並在新版本出問題時及時找到能實現部分功能的舊版本。實驗二中咱們已經對測試驅動的程序開發有所瞭解,在本次實驗中須要使用junit添加單元測試用例,並對之前的代碼進行測試。
一、在碼雲中的倉庫界面中點擊管理->添加管理員,並將連接發送給搭檔,將搭檔添加爲管理員,搭檔也須要按一樣的操做將我添加爲管理員。
二、成爲搭檔倉庫的管理員後,在搭檔的倉庫中添加公鑰,並將搭檔的倉庫克隆。
三、找到Complex代碼,在倉庫中新建一個文件夾並添加Complex代碼以及本身的測試類ComplexTest
四、使用junit進行測試,編寫測試用例,直到全部實際值都與預期值相符,具體步驟請見實驗二的報告。

五、將添加內容經過git上傳到搭檔的倉庫中,並使用git log命令查看上傳記錄。
程序員

(三)重構——使用阿里的插件進行代碼規約掃描,並使用IDEA的refactor菜單對代碼進行重構

重構,就是在不改變軟件外部行爲的基礎上,改變軟件內部的結構,使其更加易於閱讀、易於維護和易於變動。而IDEA的重構菜單能使咱們的修改更加便捷。
一、這裏我選用的是搭檔的Complex類,按照上一部分的過程對代碼進行規約掃描,發現有變量的命名不符合駝峯規則,因而使用refactor菜單中的rename選項變量進行批量的改變名字。


二、還存在有類沒有添加建立者的信息,點擊圖示位置,在窗口的右側能夠一鍵添加建立者的信息。


三、窗口顯示還須要使用javadoc規範,因而在所需更改行將註釋改成/**內容**/格式

算法

(四)以結對的方式完成Java密碼學相關內容的學習,結合重構,git,代碼標準。

使用Java的JCE能夠很方便的實現加密和解密,在本次實驗中咱們使用Java來實現使用凱撒密碼、對稱密碼、非對稱密碼對字符串進行加密,以及使用密鑰協定建立密鑰並使用Java計算指定字符串的消息摘要。
一、凱撒密碼數據庫

  • 凱撒密碼的加密過程可記爲以下一個變換:c≡m+k mod n (其中n爲基本字符個數)
  • 解密過程可表示爲:m≡c+k mod n (其中n爲基本字符個數)
    實驗代碼運行結果如圖:

二、對稱密碼-DES算法
(一)加密編程

  • (1)獲取密鑰生成器
  • (2)初始化密鑰生成器
  • (3)生成密鑰
  • (4)經過對象序列化方式將密鑰保存在文件中
  • (5)獲取密鑰
  • (6)建立密碼器(Cipher對象)
  • (7)初始化密碼器
  • (8)獲取等待加密的明文
  • (9)執行加密
  • (10)處理加密結果
    運行結果如圖:

    (二)解密
    解密時須要使用以字節保存在文件中的密鑰
  • (1)獲取密文
  • (2)獲取密鑰
  • (3)建立密碼器(Cipher對象)
  • (4)初始化密碼器
  • (5)執行解密
    運行結果如圖:

三、非對稱密碼-RSA算法
RSA算法是使用整數進行加密運算的,在RSA公鑰中包含了兩個信息:公鑰對應的整數e和用於取模的整數n。對於明文數字m,計算密文的公式是:me mod n。在RSA私鑰中包含了兩個信息:私鑰對應的整數d和用於取模的整數n。其中的n和加密時的n徹底相同。對於密文數字c,計算明文的公式是:cd mod n數組

(一)生成雙鑰ide

  • (1)建立密鑰對生成器
  • (2)初始化密鑰生成器
  • (3)生成密鑰對
  • (4)獲取公鑰和私鑰
    (二)使用公鑰進行加密
  • (1)獲取公鑰
  • (2)獲取公鑰的參數(e, n)
  • (3)獲取明文整數(m)
  • (4)執行計算
    步驟一二的運行結果如圖:

    (三)使用私鑰進行解密
  • (1)讀取密文
  • (2)獲取私鑰
  • (3)獲取私鑰的參數(d, n)
  • (4)執行計算
  • (5)計算明文整型數對應的字符串
    運行結果如圖:

四、使用密鑰協定建立共享密鑰
密鑰協定能夠用來交換對稱密鑰,執行密鑰協定的標準算法是DH算法,經過共享密鑰能夠實現祕密傳送大量數據。工具

  • (1)建立DH公鑰和私鑰
  • (2)建立共享密鑰
  • (3)讀取本身的DH私鑰和對方的DH公鑰
  • (4)建立密鑰協定對象
  • (5)初始化密鑰協定對象
  • (6)執行密鑰協定
  • (7)生成共享信息
    運行結果如圖:

五、Java摘要算法單元測試

  • (1)生成MessageDigest對象
  • (2)傳入須要計算的字符串
  • (3)計算消息摘要
  • (4)處理計算結果
    運行結果以下:

    git log以下:

2、實驗時遇到的問題:

  • 問題1:在使用阿里插件時註釋不符合標準,但不知如何更改。
  • 問題1解決方法:反覆嘗試屢次後發現須要在類前添加/**註釋*/ 的內容。
  • 問題2:在建立共享密鑰部分進行運行時命令行出現java.lang.ArrayIndexOutOfBoundsException的錯誤。
  • 問題2解決方法:發現是運行時少輸入了參數,args[]數組只有一位,發生了數組下標溢出。

3、實驗感想

本次實驗的部份內容好比結對、git的使用、測試已經在前面練習過了,所以沒有遇到太大的問題,而重構和編碼標準使我使我知道如何寫出跟易讀的代碼,並對不合格代碼進行更高效的檢測和修改。而Java與密碼學部分使我有更簡單快捷的方法實現各類密碼算法,Java的各類API十分的便捷,能夠節省不少編寫算法的時間。 附上PSP時間: | 步驟 | 耗時 | 百分比 | | -- | -- | -- | | 需求分析 | 20 | 16% | | 設計 | 15 | 12% | | 代碼實現 | 35 | 28% | | 測試 | 45 | 36% | | 分析總結 | 10 | 8% |

相關文章
相關標籤/搜索