WcPro項目(WordCount優化)
阿新 • • 發佈:2018-04-07
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優化)