github地址:java
https://github.com/Hoyifei/SQ-T-Homework-WordCount-Advancedgit
psp表格:github
PSP2.1正則表達式 |
PSP階段編程 |
預估耗時(分鐘)數組 |
實際耗時(分鐘)函數 |
Planning工具 |
計劃性能 |
20學習 |
30 |
· Estimate |
· 估計這個任務須要多少時間 |
10 |
20 |
Development |
開發 |
400 |
480 |
· Analysis |
· 需求分析 (包括學習新技術) |
60 |
80 |
· Design Spec |
· 生成設計文檔 |
20 |
40 |
· Design Review |
· 設計複審 (和同事審覈設計文檔) |
30 |
40 |
· Coding Standard |
· 代碼規範 (爲目前的開發制定合適的規範) |
10 |
10 |
· Design |
· 具體設計 |
60 |
60 |
· Coding |
· 具體編碼 |
500 |
480 |
· Code Review |
· 代碼複審 |
60 |
90 |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
200 |
220 |
Reporting |
報告 |
100 |
120 |
· Test Report |
· 測試報告 |
50 |
60 |
· Size Measurement |
· 計算工做量 |
20 |
20 |
· Postmortem & Process Improvement Plan |
· 過後總結, 並提出過程改進計劃 |
30 |
30 |
|
合計 |
1570 |
1780 |
本次我負責的代碼在src/com/wordcount/Main.java和WordCounter.java
在Main函數中 我主要對參數進行了判斷處理:
若是少於一個,報錯退出
當多餘一個時,給出警告並提示將忽略其餘參數
當處理的文件擴展名並不是txt時,給出警告,但仍然執行
以後經過調用Splitter對文件進行分詞統計並實現回調函數將結果輸入統計模塊
從統計模塊獲取結果並輸入到result.txt,若發生錯誤,則給出警告並將結果輸出到控制檯
使用接口:
WordSplitterCallback
WordSplitter:constructor split()
Trie:curWordAppendChar() curWordEnd()
sortWords() getWord()
TrieNode: getCount()
接口具體實現:
使用正則表達式判斷輸入的文件是否以.txt 結尾
WordSplitterCallback:在構造函數中創建一個Trie,以後在回調函數中調用相應的操做
從Trie的排序結果中獲取最多前100,轉換成string的形式,組織成word-Count pair數組
代碼以下:
測試用例:
本模塊依賴於Trie和WordSplitter模塊,所以沒有進行單獨測試
對於運行參數的處理進行了手工運行的測試 ,對程序總體的測試包含5個手工編寫文件(case1-case5)以及15個·隨機生成的較大的文件(case6-case20)
其中五個手工編寫的文件以下:
case1:普通的英語文章,用於測試基本功能
case2:有大量詞頻相同的詞語,用於測試詞頻相同時的排序結果
case3:有詞頻相同的單詞和含有數字的單詞
case4:這是一個空文件。。。
case5:有非法字符出現,單詞末的鏈接符和連續的鏈接符等狀況
其他15個隨機生成的較大文件在此不一一列舉
最終測試結果以下:
測試評價:
全部的測試案例都經過了測試,被測模塊質量水平較高。
開發規範說明:
我選取的是谷歌java編程風格指南中的規則
經過對我代碼的評審,我發現大部分的代碼符合規範,主要不符合的有:
在類內連續的成員之間(字段,構造函數,方法,嵌套類,靜態初始化塊,實例初始化塊)需使用空格
大括號與if, else, for, do, while
語句一塊兒使用,即便只有一條語句(或是空),也應該把大括號寫上
參考文獻:https://blog.csdn.net/zen99t/article/details/50763231
靜態代碼掃描:
掃描工具:Checkstyle
掃描截圖:
安裝靜態檢查插件後,編碼過程當中IDE實時給出了提示,所以最終沒有統計數據,可是代碼基本符合代碼規範
性能測試:
咱們進行了性能測試,具體結果參見組員高陽的博客,這裏再也不贅述。
高陽博客連接:http://www.cnblogs.com/dilidiligy/
小組小結:
本次軟件測試結果還算讓人滿意,軟件測試也是軟件質量的重要保證。