第4周小組做業:WordCount優化

1 GitHub項目地址

https://github.com/JarrySmith/WordCountProjava

2 基本任務:代碼編寫+單元測試

2.1 PSP表格

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

2.2 接口的實現

在包project中建立輸入類InputProcess,其包含方法processInput(),該方法會拋出異常IOException和IllegalArgumentException,該方法輸入參數爲一個String[]類型字符串數組,返回值爲一個String類型字符串。git

根據接口定義搭建框架以下:github

package project;
public class InputProcess{
    public String processInput (String[] args) throws IOException,IllegalArgumentException{
        String filePath=null;
        //一系列判斷args是否符合規範的條件判斷語句
        ......;
        return filePath;
    }
}

processInput方法僅判斷輸入參數是否合法,判斷傳入的文件是否包含非法字符。數組

經過if語句判斷字符串數組args的個數是否爲一,args[0]內是否存放合法的文件名,然後按字符讀取文件內容,經過對每一個字符的ASCII碼進行處理來判斷文件內的字符是否都是合法字符。框架

若args不符合規定,或文件內包含非法字符,則拋出異常:ide

......
throw new IllegalArguementException("參數個數只能爲1");
......
throw new IllegalArgumentException("待處理文件不是txt類型");
......
throw new IllegalArgumentException("待處理文件內包含非法字符");
......

2.3 測試用例設計

本項目使用集成開發環境IntelliJ IDEA進行開發,使用junit4測試框架進行測試工具

根據白盒測試的思想,儘可能實現條件覆蓋和語句覆蓋,設計了編號爲一、四、1三、15的測試用例,根據黑盒測試的思想設計了其他的測試用例。性能

由於被測試的模塊較爲簡單,在對測試效率上能夠不作特別要求。
測試用例詳見GitHub內的測試腳本和測試用例EXCEL表格。單元測試

2.4 測試結果

運行測試用例的結果如圖所示:學習

被測模塊的質量較高,由測試結果可知測試效率較高,但沒有檢測全部非法字符輸入狀況,所以測試質量通常。

3 擴展任務

3.1 開發規範說明

項目開發語言是Java,選定《阿里巴巴Java開發手冊》做爲開發規範。

3.2 交叉代碼評審

評審同組成員徐江南的代碼,除了發現一處變量命名不符合lowerCamelCase命名風格外,沒有發現其它不符合規範的地方。

3.3 靜態代碼掃描

使用的掃描工具是「Alibaba Java Coding Guidelines」。
該工具是一個idea插件,其GitHub項目地址:https://github.com/alibaba/p3c/tree/master/idea-plugin
工具的下載地址:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines

使用掃描工具掃描我的所有代碼後運行結果如圖所示:

依據掃描結果改進代碼後再次運行單元測試,發現結果沒有明顯區別,多是模塊簡單所致,但修改後的代碼的可讀性的確大爲提升。

3.4 組內代碼分析

使用掃描工具進行代碼檢測後發現小組代碼存在多處不規範。這些不規範的地方雖然暫時不妨礙項目的正確運行,但它阻礙了其餘開發人員閱讀代碼,讓項目的維護變難了。修改事後的代碼更符合規範,也更容易找出代碼中隱藏的bug。

4 高級任務:性能測試和優化

4.1 測試數據集

考慮到"WcPro.exe"的功能是統計詞頻,所以用一個12MB的txt文本做爲輸入,進行測試。

4.2 同行評審過程

由全體組員參與,組員徐江南主持,全部人一同評審小組的所有代碼,通過討論,一致認定在循環內定義變量會增長額外開銷。另外,在讀取txt內容時只會讀取合法字符,對非法字符判斷反而會影響效率。

4.3 性能分析與優化

將代碼循環內定義的變量外提,刪去對非法字符判斷等工做後,程序效率大約提高了20%,與同行評審的結論一致。

4.4 做業小結

在軟件開發之中,只有自始至終貫徹軟件測試,纔有可能在項目臨近結尾時獲得一個過得去的項目成果。

5 小組貢獻

經討論,小組貢獻分爲0.22

相關文章
相關標籤/搜索