1. 程式人生 > >結對編程-詞頻統計(第9組)

結對編程-詞頻統計(第9組)

eas 去除 耗時 rep NPU 分享 get img 完成

1、Fork倉庫的Github項目地址:

https://github.com/linlkg/PairProject2018

2、預估各個模塊開發耗費的時間:

PSP2.1 PersonalSoftware Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 20 20
-Estimate -估計這個任務需要多少時間 20 20
Development 開發 230 303
-Analysis -需求分析(包括學習新技術) 20 25
-Design Spec -生成設計文檔 20 25
-Design Review -設計復審(和同事審核設計文檔) 5 8
-Coding Standard -代碼規範(為目前的開發制定合適的規範) 10 10
-Design -具體設計 25 25
-Coding -具體編碼 120 150
-Test -測試(自我測試,修改代碼,提交修改) 30 60
Reporting 報告 80 105
-Test Report -測試報告 20 20
-Size Measurement -計算工作量 30 35
-Postmortem&Process Improvement Plan -事後分析,並提出過程改進計劃 30 50
- 合計 330 428

3、計算模塊接口的設計與實現過程:

-第一步:相關類設計

  • 讀取輸入輸出文件類IOfile用於定義用戶輸入/輸出的文件名和路徑;
  • 單詞類Word用於存儲單詞提取以及單詞詞頻統計;
  • 詞組類Phrase用於存儲詞組提取以及詞組頻度;
  • 接口類UserInterface用於存儲用戶輸入的參數值;
  • 相關類圖如下:
    技術分享圖片

  • 第二步:相關操作函數
    • 提取單詞函數getWord()用於根據分隔符將文件流中的單詞提取出來並存儲;
    • 統計單詞頻率函數countWord();
    • 排序輸出單詞頻度函數sortWordOutput();
    • 提取指定長度詞組getPhrase();
    • 統計詞組頻率函數countPhrase();
    • 排序輸出詞組頻度函數sortPhraseOutput();

4、計算模塊接口部分性能改進

-性能分析圖(由VS 2017/JProfiler的性能分析工具自動生成)
技術分享圖片
技術分享圖片
技術分享圖片

5、計算模塊部分測試結果

輸入文件為群裏分享的測試文件bible-kjv.txt
技術分享圖片

6、計算模塊部分異常處理說明

讀文件時若讀取文件失敗則拋異常
//讀入用戶寫好的TXT文件,
//嘗試讀取文件,若失敗catch到異常並打印出來

try {
File file = new File(args[0]);
Scanner input = new Scanner(file);
String path = input.next();
List<String> wordArray = new ArrayList<String>();
int countChar=0;
int countWord=0;
int counLine=0;
InputStreamReader reader = new InputStreamReader(new FileInputStream(args[0])); // 建立一個輸入流對象reader
BufferedReader br = new BufferedReader(reader); // 建立一個對象,它把文件內容轉成計算機能讀懂的語言
}catch (Exception e){
e.printStackTrace();
}

7、關鍵代碼分析

//統計行數
一行一行讀入文件,所以每行讀入次數加一,但要註意去除空白行
再將分割好的單詞與正則表達式匹配以便統計詞頻
技術分享圖片

//單詞的詞頻統計
如果已有相同的單詞,則詞頻加1
否則創建一個<key,value>以保存新的單詞
技術分享圖片

//按value的大小進行排序並輸出詞頻最高的前十個
按字典序大小進行排序,當結果少於10個時全部輸出,當結果多於10個時輸出前10個結果
技術分享圖片

8、描述結對的過程

技術分享圖片

結對體會:

  • 結對中汪璟玢充當領航員(Navigator)角色,林靜充當駕駛員(Driver)角色。先是一起討論做了大體類的設計和算法流程設計,接著林靜就開始編程。兩個人編程還是比一個人來的效率高些,有問題一起討論,錯誤也第一時間被指出,特別是一開始的討論,就先定義和封裝了幾個要用到的函數,避免了後期推翻修改,提高了開發效率。不過缺點也是有的,就是一個人在編程的時候,另一個人不好打擾,默默滴看,後面發現沒有完全按照領航員的設計來實現。函數沒有完全按照預期抽象出來,導致效能分析處有問題!設計當中的接口和新增功能未實現,但類圖當中的設計將其抽象出來方便了後續的代碼優化。
  • 這次的體會真的很深,實打實的結對,兩人分工合作完成一個看似不難的任務,實際執行過程中還是遇到不少困難,結對的最大好處就在此處體現:在遇到困難的時候總是可以通過提醒和討論解決之!
  • 兩個人的合作總是勝過一個人埋頭苦寫代碼的,通過兩個人結對的交流和探討,會比平常一個人設計節約了不少的時間。由於生疏在百度許多東西的寫法上耽

結對編程-詞頻統計(第9組)