1. 程式人生 > >WcPro項目(WordCount優化)

WcPro項目(WordCount優化)

read byte 修改 模塊通信 file != 階段 和源 down

一、項目GitHub地址

https://github.com/ReWr1te/WcPro

二、項目PSP表格

PSP2.1 PSP階段 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 20 20
· Estimate · 估計這個任務需要多少時間 20 20
Development 開發 870 1160
· Analysis · 需求分析 (包括學習新技術) 60 80
· Design Spec · 生成設計文檔 30 30
· Design Review · 設計復審 (和同事審核設計文檔) 30 60
· Coding Standard · 代碼規範 (為目前的開發制定合適的規範) 30 30
· Design · 具體設計 180 240
· Coding · 具體編碼 180 240
· Code Review · 代碼復審 120 120
· Test · 測試(自我測試,修改代碼,提交修改) 240 360
Reporting 報告 100 70
· Test Report · 測試報告 30 30
· Size Measurement · 計算工作量 10 10
· Postmortem & Process Improvement Plan · 事後總結, 並提出過程改進計劃 60 30
合計 990 1250

三、個人接口及其實現

本次項目基本任務部分共分為輸入控制、核心處理、輸出控制和其他(本組計劃添加GUI)組成,我所負責的部分為輸入控制。

任務需求為:對輸入進行有效性校驗,識別和處理無效輸入,並針對有效輸入,從中提取所需數據。

根據需求定義了如下接口:

外部接口負責和其他模塊通信,調用內部子接口實現功能:

// get the content in a file and return the result
public String parseCommand(String[] args) 

子接口分別完成參數處理、獲取地址、獲取文本內容以及對於文本內容是否為半角字符的判斷:

// judge the input parameters
public int paraHandling(String[] args)
// get the address
public String getAddress(String fileName) // get the content public String getContent(FileReader fr, BufferedReader br, StringBuffer sb, String address) // check half-width characters public int halfWidthChar(String content)

下面取兩個典型代碼段分析(全部代碼請參見GitHub源碼):

這是參與外部調用的接口,主函數通過調用該接口來讀取文件並獲得文件內容:
// get the content in a file and return the result
public String parseCommand(String[] args) {

    // initiate variables
    // initiate content file, each line, filename and address to store related info
    String address, content;

    // initiate file reader, buffered reader and string buffer to store file medially
    FileReader fileReader = null;
    BufferedReader bufferedReader = null;
    StringBuffer stringBuffer = null;

    // call the functions to get address and then content
    if (paraHandling(args) != 1)
        return null; // to return a void result
    else {
        address = getAddress(args[0]);
        content = getContent(fileReader, bufferedReader, stringBuffer, address);
        if (halfWidthChar(content) == 0) return null;
        else return content;
    }
}

該接口結構簡單清晰,因為代碼已經很好地封裝在了其它函數中。

在完成了必要變量的初始化之後,直接使用簡單的if結構調用內部函數就能完成相應功能。

調用內部函數的順序為:

參數判斷→獲取地址→獲取文本→半角字符判斷

下面是半角判斷的函數,通過對於字符串字節長度的比較來判斷文本內容是否全為半角字符:
// check half-width characters
public int halfWidthChar(String content) {
    if (content.getBytes().length == content.length())
        return 1;
    else {
        System.out.println("half-width characters only!");
        return 0;
    }
}

四、測試用例的設計以及測試效率的滿足

本次測試用例的設計采用黑盒測試和白盒測試相結合的方式

黑盒測試通過不同的輸入類型(包含輸入參數對應的文本文件內容類型)來測試功能的正確性;白盒測試在盡量覆蓋所有路徑(函數結構比較簡單,所有路徑大致與下列測試用例相符)的情況下對每個路徑進行參數與返回值的匹配正確性測試:

技術分享圖片

單元測試代碼舉例如下:

@Test
public void parseCommandTest0() throws Exception { // #0 zero-parameter test (black-box)
    String[] paras = {};
    System.out.println("parseCommand() Test0 started.");
    assertEquals("Failed",null, cp.parseCommand(paras));
    System.out.println("parseCommand() Test0 succeeded.");
    System.out.println("parseCommand() Test0 finished.");
}

五、測試用例的運行截圖

單個測試用例的運行截圖(代碼參照上述代碼):

技術分享圖片

所有用例的運行截圖:

技術分享圖片

可以看出,每個測試用例都通過了,意味著實際輸出與預期輸出相一致,測試用例的質量和源代碼質量都符合要求。

(所有測試用例見GitHub: UTCaseInput.xlsx,實現見測試類源代碼)

六、小組貢獻分

待補充。

WcPro項目(WordCount優化)