課程名稱:軟體工程1916|W(福州大學)
作業要求:結對第二次-文章摘要熱詞統計
結對學號221600225|221600435
作業目標:實現一個能夠對文字檔案中的單詞的詞頻進行統計的控制檯程式,並在基本需求實現的基礎上編碼實現熱頂會熱詞統計器
Github專案地址:Github專案地址
程式碼簽入記錄:
基本需求實現:
進階需求實現:
具體分工:
- 221600225林鵬飛負責基礎需求和進階需求的設計與實現。
- 221600435徐炳南負責部落格部分的編寫,Github上傳。
一、PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | ||
• Estimate | • 估計這個任務需要多少時間 | 610 | 630 |
Development | 開發 | ||
• Analysis | • 需求分析 (包括學習新技術) | 70 | 90 |
• Design Spec | • 生成設計文件 | 60 | 50 |
• Design Review | • 設計複審 | 30 | 50 |
• Coding Standard | • 程式碼規範 (為目前的開發制定合適的規範) | 30 | 30 |
• Design | • 具體設計 | 70 | 80 |
• Coding | • 具體編碼 | 320 | 300 |
• Code Review | • 程式碼複審 | 30 | 30 |
• Test | • 測試(自我測試,修改程式碼,提交修改) | 40 | 60 |
Reporting | 報告 | ||
• Test Report | • 測試報告 | 60 | 90 |
• Size Measurement | • 計算工作量 | 30 | 40 |
• Postmortem & Process Improvement Plan | • 事後總結, 並提出過程改進計劃 | 40 | 55 |
合計 | 740 | 820 |
二、解題思路描述
針對基本需求:
- 在考慮統計檔案的字元數時,我們採用的是直接用位元組流讀入檔案,然後判斷讀入位元組的ascii碼進而統計字元數。在考慮統計檔案的單詞數時,我們採用本次改用字串流讀入檔案。每次讀入一整行的字串。然後用正規表示式篩選出滿足條件的單詞,再用split函式和正規表示式進行分割,然後統計單詞數量。而每次讀一整行字串,對該字串的每個位元組進行逐個判斷,如果找到滿足條件的字元,則該行是有效的,否則無效。接著將單詞和頻數存入,HasmMap集合中,然後寫一個判斷函式,對HashMap集合中的單詞按要求進行排序。最後直接用字元流將結果存入result.txt檔案中。
- 在介面封裝上,我們已經儘量將每個功能單獨包裝成一個函式,但是由於程式設計能力不足,並沒對這些東西進行完全封裝,望諒解。
針對進階需求:
- 爬蟲部分由於時間緊迫,且我對這方面沒有任何經驗,所以並沒有寫爬蟲,所用的測試檔案,是從其他同學那裡借過來的。自定義輸入輸出: 從args[]中讀入命令列引數中輸入路徑和輸出路徑即可。檢測args中是否有字串”-w”如果有,則進行單詞權重計算,否則不進行。檢測到字串”-w”,再進行”Title:”和”Abstact:”的判斷,然後將HashMap集合中的詞頻進行更改即可。該問題我認為應該用正規表示式進行匹配,但是我沒有寫出滿足條件的正規表示式,所以這沒有解決。判斷args[]是否有字串”-n”若有,則在進行HashMap集合的迭代是,加入迭代次數的統計和判斷即可。但是沒能完成該功能。還有就是對於附加題沒能解決。
三、設計實現過程
這次設計實現過程使用功能流程圖的方式進行實現:
四、改程式序上花費的時間及改進思路
- 實際上,在寫程式的時候,我們是邊推進,變修改的。當每一個功能實現之後我們都會進行測試,但是當在寫一個功能之後,總是會發現上一個功能好像需要傳一些引數或者返回個什麼到下一個功能上,所以改程式序花費上的時間應該是非常多的。差不多和編寫新功能的時間是一樣。在這次作業中,遇到的最大的一個坑,就是字串流和位元組串流的不同。字串流遇到\n會自動省略並,而位元組串流則會將其讀入。
五、程式碼說明
六、單元測試程式碼(部分)
七、遇到的困難以及解決辦法
對於輸入流和輸出流不夠熟悉,最後通過對輸入流輸出流知識重新學習才對輸入流輸出流熟練起來。對於單詞個數的統計,使用正規表示式是最快的。但是一開始不是很瞭解,最後通過百度以及同學的交流討論才懂得正規表示式。然後在字串流讀取不到\n,最後通過改用位元組流讀取解決。而爬蟲的問題不會編寫。沒能解決進階需求中,多個單片語成片語的匹配。有想過用正規表示式解決,但是沒能寫出滿足條件的正規表示式。
八、評價隊友
林鵬飛:
對於林鵬飛同學,程式碼的部分基本上都是由他負責,對於整個專案的分工和每個部分的安排他都做的非常好,我要向他學習這種全域性的規劃以及對整個專案的安排能力。他對於問題的解決能力很強。
徐炳南:
對於徐炳南同學,他經常會和鵬飛一起討論一些問題,且會通過各種辦法去解決。但是程式碼能力還需要提高。