項目 | 內容 |
---|---|
軟件工程 | 任課教師博客主頁連接 |
結對項目要求 | 做業連接地址 |
課程學習目標 | 嘗試按照《構建之法》第2章中2.3所述PSP流程,使用JAVA編程語言,獨立完成一個英文文本詞頻統計的軟件開發。 |
本次做業在哪一個具體方面幫助咱們實現目標 | (1)掌握軟件項目我的開發流程。(2)掌握Github上發佈軟件項目的操做方法。 |
在上一次的做業中,咱們提到了使用Java語言去編寫詞頻統計的系統開發,在每一步的開發過程當中咱們遇到了一系列問題,有一些耽誤了咱們開發的進度,另外一些則致使咱們對邏輯產生誤解,下面咱們會結合實驗四的實驗要求將問題一一提出並加以解決。
任務1:嘗試按照《構建之法》第2章中2.3所述PSP流程,使用JAVA編程語言,獨立完成一個英文文本詞頻統計的軟件開發。軟件基本功能要求以下:
1.程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。
2.程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。
3.指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。
4.高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
5.統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
任務2:將包含任務1源碼的完整工程文件提交到你註冊Github帳號下的項目倉庫中。html
package com.xi.bei.shi.da.task.index.utils; import com.xi.bei.shi.da.task.index.entity.ResponseEntity; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.*; public class StatisticalWords { public static List<ResponseEntity> statistical(InputStream inputStream) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8")); StringBuffer buffer = new StringBuffer(); String text; while ((text = reader.readLine()) != null) { buffer.append(text);// 將讀取出的字符追加到stringBuffer中 } reader.close(); // 關閉讀入流 String str = buffer.toString().toLowerCase(); // 將stringBuffer轉爲字符並轉換爲小寫 String[] words = str.split("[^(a-zA-Z)]+"); // 非單詞的字符來分割,獲得全部單詞 Map<String, Integer> map = new HashMap<String, Integer>(); for (String word : words) { if (map.get(word) == null) { // 若不存在說明是第一次,則加入到map,出現次數爲1 map.put(word, 1); } else { map.put(word, map.get(word) + 1); // 若存在,次數累加1 } } // 排序 List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet()); Comparator<Map.Entry<String, Integer>> comparator = new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> left, Map.Entry<String, Integer> right) { return (left.getValue().compareTo(right.getValue())); } }; // 集合默認升序升序 Collections.sort(list, comparator); List<ResponseEntity> responseEntities = new ArrayList<>(); for (int i = 0; i < list.size(); i++) {// 由高到低輸出 if (i > 9) { break; } ResponseEntity responseEntity = new ResponseEntity(); responseEntity.setKey(list.get(list.size() - i - 1).getKey()); responseEntity.setValue(list.get(list.size() - i - 1).getValue()); responseEntities.add(responseEntity); System.out.println(list.get(list.size() - i - 1).getKey() + ":" + list.get(list.size() - i - 1).getValue()); } return responseEntities; } }
點評博客 | http://www.javashuo.com/article/p-oxgkpxkg-b.html |
Github連接地址 | https://github.com/sjz961108/-JavaScript |
點評內容 | 對於實驗項目有本身獨特的思考和獨到的看法,而且對於規定的項目可以取長避短利用本身最熟練的技術來輕鬆的解決問題,這一點很贊。博文界面簡介清晰,排版主次分明,內容飽滿流暢。稍有不足的地方就是項目規定用JAVA,仍是應該提升本身的JAVA能力,這樣就更加優秀了。 |
點評心得 | 此次看到告終對夥伴利用本身的優點JS編寫程序非常震驚,也私下向他討教了編寫中遇到的問題以及發現的閃光點。 |
PSP2.1 | 任務內容 | 計劃共完成須要的時間(min) | 實際完成須要的時間(min) |
Planning | 計劃 | 15 | 40 |
Estimate | 估計這個任務須要多少時間,並規劃大體工做步驟 | 15 | 40 |
Development | 開發 | 40 | 60 |
Analysis | 需求分析 (包括學習新技術) | 10 | 10 |
Design Spec | 生成設計文檔 | 15 | 10 |
Design Review | 設計複審 (和同窗一塊兒審覈設計文檔) | 3 | 5 |
Coding Standard | 代碼規範 (爲目前的開發制定合適的規範) | 3 | 3 |
Design | 具體設計 | 20 | 25 |
Coding | 具體編碼 | 30 | 60 |
Code Review | 代碼複審 | 15 | 20 |
Test | 測試(自我測試,修改代碼,提交修改) | 25 | 20 |
Reporting | 報告 | 25 | 30 |
Test Report | 測試報告 | 10 | 15 |
Size Measurement | 計算工做量 | 5 | 5 |
Postmortem & Process Improvement Plan | 過後總結 ,並提出過程改進計劃 | 10 | 10 |
在實驗二的過程當中:
(1)計劃階段的不一樣意,在計劃階段咱們本來打算花15分鐘計劃處出一個大體的流程,但由於意見的不統一和自身技術的缺陷而致使花了40分鐘。
(2)開發階段,是讓我意識到本身的短板的時期,由於對代碼的不熟悉,以及對於總體構造的不完美,致使花了大量的時間編寫代碼。
(3)需求分析是已知的,但須要整理轉換爲咱們所須要的步驟要求。java
(1)全英文界面對於英語基礎低的同窗去正確使用有着不小的困難,建議使用Chrome瀏覽器進行網頁翻譯。
(2)文件沒法上傳的問題:
http://www.javashuo.com/article/p-puyjwjbp-n.htmlgit
此次實驗在實驗二的基礎上又增長了不少有難度的功能。若是本身獨立完成頗有挑戰,極可能完成不了。老師也讓咱們結對完成實驗,咱們兩人剛開始在編碼設計的時候出現分歧,老是認爲本身的觀點是最好的,互不退讓,後面通過一段時間的磨合以後,咱們相互取長補短,才讓實驗更加順利流暢的進行下去。此次咱們都發現了本身的代碼能力很弱,須要增強的地方還不少,繼續增強代碼能力是咱們目前最大的目標。