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

實驗內容

  • P基礎
  • XP核心實踐
  • 相關工具

實驗步驟

(一)敏捷開發與XP
  • 軟件開發:即將軟件需求分析、軟件設計、軟件構建、軟件測試和軟件維護這些相關技術和過程統一到一個體系中
  • 敏捷開發:是一種以人爲核心、迭代、按部就班的開發方法。
  • 敏捷流程:是一系列價值觀和方法論的集合。
  • XP軟件開發(極限編程):包括編碼、測試、傾聽、設計
(二)編碼標準
  • 編程標準包含:具備說明性的名字、清晰的表達式、直截了當的控制流、可讀的代碼和註釋,以及在追求這些內容時一致地使用某些規則和慣用法的重要性。
  • 代碼標準
    • 要體現各自的含義
    • 包、類、變量用名詞
    • 方法名用動賓
    • 包名所有小寫,如:io,awt
    • 類名第一個字母要大寫,如:HelloWorldApp
    • 變量名第一個字母要小寫,如:userName
    • 方法名第一個字母要小寫:setName
    • ...
  • 實驗任務:安裝alibaba插件,解決代碼中的規範問題,並在IDEA中使用工具Code->Reformate Code把代碼從新格式化,再研究一下Code菜單。
  • IDEA中的插件,經過Jetbrains官方倉庫安裝:打開Settings ->Plugins -> Browse repositories...在搜索框輸入alibaba便可看到Alibaba Java Code Guidelines插件,點擊Install進行安裝,而後重啓IDEA生效
  • 實驗截圖
    image
  • Code菜單功能
    • Override Methods:重載方法/新建方法
    • Implement Methods:執行方法
    • Generate:建立類裏面任何字段的gettersetter方法
    • Surround with:將某條語句被if、for等等封裝語句括起
    • Move Statement Down/up:將語句下移到後一模塊以後
    • Move line down:調換語句順序
    • Comment with Line/Block Comment:兩種註釋
    • Reformat Code:將代碼按標準格式縮進
    • ...
(三)結對編程
  • 兩個角色:
    • 駕駛員(Driver)是控制鍵盤輸入的人。
    • 領航員(Navigator)起到領航、提醒的做用。
  • 實驗任務:在碼雲上把本身的學習搭檔加入本身的項目中,確認搭檔的項目加入本身後,下載搭檔實驗二的Complex代碼,加入很多於三個JUnit單元測試用例,測試成功後git add .git commit -m "本身學號 添加內容"git push
  • 將本身的搭檔加入本身的項目
    • 打開本身的碼雲項目
    • 點擊管理->項目成員管理->添加項目成員->邀請組織成員
    • 打開虛擬機新建一個文件,打開終端轉到新建文件下
    • 輸入git clone 搭檔碼雲連接
    • 轉到要添加代碼的搭檔目錄下進行vim 類名.java
  • 實驗截圖
    image
    image
(四)重構
  • 重構(Refactor):即在不改變軟件外部行爲的基礎上,改變軟件內部的結構,使其更加易於閱讀、易於維護和易於變動。
  • 重構動機
    • 增長新功能
    • 原有功能有BUG
    • 改善原有程序的結構
    • 優化原有系統的性能
  • 能夠在哪些方面對代碼進行重構:
    • 重命名:對類,接口,方法,屬性等重命名,以使得更易理解
    • 抽取代碼:將方法內的一段代碼抽取爲另外一個方法,以使得該段代碼能夠被其餘方法調用,這是重構中很重要很經常使用的,此舉能夠極大的精煉代碼,減小方法的代碼行數
    • 封裝字段:將類的某個字段轉換成屬性,能夠更加合理的控制字段的訪問
    • 抽取接口:將類的某些屬性,方法抽取組成個接口,該類自動實現該接口
    • 提高方法內的局部變量爲方法的參數:這主要是在寫代碼的過程當中會使用到
    • 刪除參數:將方法的一個或多個參數刪掉
    • 重排參數:將方法的參數順序從新排列
  • Refactor菜單各功能
    image
  • 實驗任務:下載搭檔的代碼,至少進行三項重構,提交重構後代碼的截圖
  • 實驗截圖:
    image
(五)Java密碼學算法
  • 密碼學包含密碼編碼學和密碼分析學兩個分支
    • 密碼編碼學:主要研究如何對信息進行編碼,如何實現對信息的隱蔽,是密碼學理論的基礎,也是保密系統設計的基礎。
    • 密碼分析學:主要研究加密消息的破譯或消息的僞造,是檢驗密碼體制安全性最爲直接的手段,只有經過實際密碼分析考驗的密碼體制,纔是真正可用的。
  • 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密碼學算法:
    • 體驗加解密-凱撒密碼
    • Java對稱加密-DES算法
    • Java非對稱加密-RSA算法
    • 使用密鑰協定建立共享密鑰
    • Java摘要算法- MD5
    • Java混合密碼系統
  • 實驗任務:以結對的方式完成Java密碼學相關內容的學習,結合重構,git,代碼標準。
  • 實驗代碼:
  • 凱撒密碼
/**
 * @Date 2018/4/28
 * @author wangyaojia
 */
public class Caesar{
    public static void main(String []args) throws Exception{
        String s=args[0];
        int key=Integer.parseInt(args[1]);
        String es="";
        for(int i=0;i<s.length( );i++)
        {  char c=s.charAt(i);
            // 是小寫字母
            c = getC(key, c);
            es+=c;
        }
        System.out.println(es);
    }

    private static char getC(int key, char c) {
        if(c>='a' && c<='z') {
            //移動key%26位
            c = move(key, c);
            if(c<'a') {
                //向左超界
                c = changeCplus(c);
            }
            if(c>'z') {
                //向右超界
                c = changeCminus(c);
            }
        }
        // 是大寫字母
        else if(c>='A' && c<='Z') {
            c = move(key, c);
            if(c<'A') {
                c = changeCplus(c);
            }
            if(c>'Z') {
                c = changeCminus(c);
            }
        }
        return c;
    }

    private static char changeCminus(char c) {
        c -= 26;
        return c;
    }

    private static char changeCplus(char c) {
        c += 26;
        return c;
    }

    private static char move(int key, char c) {
        c+=key%26;
        return c;
    }
}
  • 運行結果
    imagehtml

  • Java摘要算法- MD5java

import java.security.*;
/**
 * Demo class
 *
 * @author zyx
 * @date 2018/04/28
 */
public class DigestPass{
    public static void main(String[ ] args) throws Exception{
        String x = getString(args[0]);
        MessageDigest m=MessageDigest.getInstance("MD5");
        m.update(x.getBytes("UTF8"));
        byte[] s = getDigest(m);
        String result="";
        for (int i=0; i<s.length; i++){
            result+= getString(s[i]).substring(6);
        }
        System.out.println(result);
    }

    private static String getString(byte b) {
        return Integer.toHexString((0x000000ff & b) |
                0xffffff00);
    }

    private static byte[] getDigest(MessageDigest m) {
        return m.digest();
    }

    private static String getString(String arg) {
        return arg;
    }
}
  • 結果截圖
    image

實驗過程當中遇到的問題及解決

  • 在下載alibaba插件時出現
    imagegit

    解決方法:應該是網絡鏈接的問題,轉換網絡後下載成功。在查詢資料時,我找到了阿里巴巴Java開發規約IDEA插件安裝及使用,這裏提供了兩種下載方法。算法

  • 在進行團隊項目時,老師要求將搭檔能夠添加代碼到本身的項目中,咱們認爲是在本身原進行git的文件下進行git clone,結果在搭檔碼雲中出現個人碼雲文件而且打不開編程

    解決方法:需新建一個全新的文件夾,進行git clone,再轉到要添加代碼的搭檔目錄下進行vim 類名.javavim

實驗總結

  • 經過本次實驗我知道了如何進行規範、格式化代碼,如何將搭檔加入本身的碼雲項目並進行合做編寫添加代碼,如何重構以及Java密碼學相關知識。
  • 此次實驗也加深了對平時不清楚的知識點的理解,也掌握了重構等新知識點。在小夥伴的幫助下,我對代碼有了更深的解讀,團隊完成的效率更獲得提升,在以後學習的路上,要不斷學會合做,掌握更多的知識並會熟練運用!
步驟 耗時 百分比
需求分析 15分鐘 9%
設計 90分鐘 49%
代碼實現 20分鐘 10%
測試 30分鐘 16%
分析總結 30分鐘 16%
相關文章
相關標籤/搜索