結對做業——WordCount進階版

1.做業地址及結對夥伴

3.結對PSP表格

PSP2.1 我的開發流程 預估耗費時間(分鐘) 實際耗費時間(分鐘)
Planning 計劃 60 75
· Estimate 明確需求和其餘相關因素,估計每一個階段的時間成本 60 75
Development 開發 700 960
· Analysis 需求分析 (包括學習新技術) 100 120
· Design Spec 生成設計文檔 60 65
· Design Review 設計複審 30 45
· Coding Standard 代碼規範 30 60
· Design 具體設計 60 100
· Coding 具體編碼 300 420
· Code Review 代碼複審 60 80
· Test 測試(自我測試,修改代碼,提交修改) 60 70
Reporting 報告 100 140
· 測試報告 45 60
· 計算工做量 25 30
· 並提出過程改進計劃 30 50

3.解題思路

  1. 本次程序要求基本同上一次相似,但在上一次的基礎上新增如下內容:輸出排名前n的單詞的數量;輸入參數格式;對詞組進行統計;根據參數將統計結果輸出到文件;
  2. 輸出排名前n的單詞的數量:這一要求能夠經過將參數中的該部分數值取出,加入for循環中便可,但需考慮不一樣單詞數若低於這一指定值的狀況。
  3. 輸入參數格式:對於輸入參數,分析事後發現無非就是一個指令後再跟着一個參數值,不一樣種指令之間有固定的模式,去除WordCount.exe後,正確的參數的長度只有4和6兩種,指令只有「-n/-m/-i/-o」四種且都爲「-n/-m」開頭,出於實現便利的考慮,設置爲「-n/-m」不一樣時出現,"-o"則自主決定是否跟在參數尾,分析事後這樣對於參數的判斷就比較簡單了。
  4. 對詞組進行統計:詞組的獲取方式利用將單詞按指定個數篩選拼接爲一個長字符串,再按相似處理單詞的方法進行統計,難以實現的是若要判斷以非空格符分割的先後單詞不能拼接爲詞組,考慮能夠將字符也存入數組,在拼接的時候進行字符判斷決定是否拼接。
  5. 根據參數將統計結果輸出到文件:前面第3點提到了「-o」自主決定是否跟在參數尾,如有該參數,則將統計結果寫入文件,無該參數則不寫。寫入文件該部分也較爲簡單。

4.設計實現過程

  1. 後臺Servlet在編寫時,主要設計爲Main類與FileDeal兩個類,Main類主要涉及一部分參數的篩選,並決定執行調用FileDeal類的什麼方法。
  2. FileDeal類中包含了FileDeal()構造方法,用於一部分參數的設定;FileNotExist()向前端界面輸出報錯信息;getConnection()創建與文件的鏈接;getChars()獲取字符總數;getLines()獲取行數;getWords()獲取單詞數;getWordsSort()統計單詞出現次數並排序;getGroups()統計詞組出現次數並排序;wordstoString()輸出單詞統計結果,並寫入文件;groupstoString()輸出詞組統計結果,並寫入文件。
  3. 本次實驗是結對編程,且要求有GUI界面,所以分工時我負責Servlet的主要功能實現,編寫完後交由賈海濤負責前端界面交互以及將servlet的Java代碼修改成能輸出與讀取前端內容的代碼,並對整合後的代碼邏輯進行判斷調整。完成後再協同進行數據測試,對總體邏輯再判斷,減小一部分冗餘代碼,加強容錯性。

5.代碼說明及測試

1. 代碼說明

1. JSP代碼

  • JSP界面簡單設置了一個表單,用於輸入參數。

2. go代碼

  • go代碼部分即爲編寫代碼時的Main函數,該部分重寫doGet()方法,也包含了一部分篩選參數的語句,根據不一樣篩選結果將表單參數傳遞至後臺交由Servlet的相應函數進行處理,。

3. FileDeal代碼

  • getConnection()方法實現與文件創建鏈接

  • getWordsSort()方法經過映射(Map)比較器實現對文件中單詞的統計及排序,結果返回一個包含鍵值對的數組infoIds


  • wordstoString()方法獲取上一步得到的infoIds數組,按照格式將結果輸出反饋至前臺,並根據是否給定「-o」參數決定是否將統計結果輸出到文件中。
  • getGroups()處理詞組的方法與其餘的方法等基本與處理單詞的相似,此處再也不貼代碼及闡述。

2. 單元測試

  • 運行index.jsp時的輸入界面
    html

  • 輸入參數測試
    • 含沒法識別指令(-r爲例):-m 10 -r d:\1.txt-n 10 -r d:\1.txt
      前端

    • 無可識別指令參數(-n/-m):10 3 d:\1.txt
      git

    • 參數不完整(-o後缺失):-n 10 -i d:\1.txt -o-m 3 -i d:\1.txt -o
      編程

    • 參數數值小於0:-n -2 -i d:\1.txt-m -3 -i d:\1.txt
      數組

    • 指定文件不存在:-n 10 -i d:\d.txt
      app

    • 一次傳入多個指令(-n/-m):-n 10 -m 3 -i d:\1.txt -o d:\output.txt
      jsp

    • 正確參數:-n 10 -i d:\1.txt-m 3 -i d:\1.txt-n 10 -i d:\1.txt -o d:\output.txt-m 3 -i d:\1.txt -o d:\output.txt。(注:因爲單詞判斷條件爲前四個爲字母,因此當選定詞組長度爲1時,輸出的結果與單詞統計結果不一致)
      函數

  • 文件數據測試單元測試

    • 英文文件
      學習

    • 純中文文件

    • 空白文件

3. 迴歸測試

  • 注:單元測試數據已經使用了上一次的測試用例並在此基礎上增長了其餘的測試用例,因此迴歸測試結果已在單元測試中。

4. 覆蓋率測試

  1. 參數爲-n 10 -i d:\1.txt -o d:\output.txt,正常執行並輸出到文件時。

  2. 參數爲-m 3 -i d:\1.txt -o d:\output.txt,正常執行並輸出到文件時。

  3. 參數爲10 3 d:\1.txt,錯誤參數不經過時。

6.結對感覺

1. 本次結對感受優劣並存

  • 優勢
    • 工做量:結對有必定的分工,明確各自的任務後,工做量會少不少,比一我的寫所有要輕鬆一些。
    • 代碼規範:結對編程時能夠必定程度上改善本身對於代碼規範的問題,雖然可能最終也並非很規範。
    • 問題分析:"一千個讀者就有一千個哈姆雷特"。對待同一個問題,不一樣的人有不一樣的看法,結對編程分析問題時,就會有不一樣的考慮問題解決問題的方式,就不像單人那樣過於閉塞,有多個不一樣的解決方案的時候就有選擇的餘地,隊友也能夠從其餘的角度指出本身的方案是否存在不足。遇到本身解決不了的問題時,可能隊友就是一盞明燈。
  • 缺點
    • 代碼規範:隊友之間的編程習慣不一樣,閱讀上有時會有必定難度,不理解的話就很差下手寫本身的部分。
    • 問題分析:分析問題互不相讓時,容易陷入兩難境地。
相關文章
相關標籤/搜索