| 課程名稱 | 2016級計算機科學與工程學院軟件工程(西北師范大學) |
|---|---|
| 作業要求 | 實驗二 軟件工程個人項目 |
| 課程目標 | 通過學習這門課程,深入了解軟件開發的標准過程,從軟件生命周期的8個階段分析各個階段的開發任務,摒棄以往開發軟件的方法。 |
| 作業意義 | 此次作業能幫助我掌握軟件項目個人開發流程和Github上發布軟件項目的操作方法 |
### 需求分析(根據作業要求中給出的進行分析) ### - 程序可以讀入任意英文文本文件,能讀取容納10萬詞以上的文章,程序需要很壯健。 - 指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,可顯示對應單詞在文本中出現的次數和柱狀圖,由柱狀圖顯示單詞出現的頻率的高低。 - 高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。 - 統計該文本所有單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
功能設計
- 讀入讀出文件功能(將文件進行讀取,存放),這個是對於第一條和第四條需求所需要的一部分功能。
- 用戶輸入功能(用戶輸入想要查詢的單詞,以及查詢高頻單詞的個數),這個是對於第二條和第三條需求所需要的一部分功能。
- 詞頻統計功能,這個是對於第二條、第三條和第四條需求所需要的一部分功能。
- 排序功能(降序排序和按字典順序排序),這個是針對第三條、第四條需求和所需要的一部分功能。
- 顯示功能(顯示柱狀圖,顯示前k個高頻單詞的詞頻,顯示指定單詞出現的次數),這個是對於第二條和第三條需求所需要的一部分功能。
### 設計實現 ### #### 該程序共有四個類: #### - 包含主函數main的主類:Test.java,主要就是控制整個程序流程,讀入文本文件,統計單詞出現的次數,然后分別調用不同的類的方法去實現功能,對用戶輸入的單詞進行查詢詞頻,並且由查詢出的數據進行柱狀圖的表示。 - 指定單詞詞頻統計功能類: Wordcount.java,對用戶輸入的單詞進行處理,查詢單詞出現的次數。 - 高頻詞統計功能類:Highwordcount.java,讀取用戶輸入的k值,對整個文本文件進行降序排序,輸出前k個單詞和詞頻。 - 單詞及詞頻數按字典順序輸出:Wordout.java,獲取整個文檔,將單詞及詞頻數按字典順序輸出到result.txt中,保存。
### 測試運行 ### #### 測試功能一截圖: ####  #### 測試功能二截圖: ####  #### 測試功能三截圖: ####  #### 測試功能四截圖: #### 
### 代碼 ### #### - 我為什么要粘貼這段代碼,因為這段代碼編寫過程中查閱了很多資料,由於資料類型繁多,就不一一列舉了。這段代碼是關於柱狀圖這個需求的。Java中柱狀圖的畫法有很多種,可以在導入jar包的基礎上,調用方法去構造,也可以通過重寫JFrame中的paint()方法來進行構造,每種方法都是可行的,看你自己的選擇,這段代碼中涉及在Java中我們可能不常用的一些方法,對象,我也通過寫注釋的方法來進行了標注。 ####
public void paint(Graphics g){
int Width = getWidth();
int Height = getHeight();
int leftMargin = 50;//柱形圖左邊界
int topMargin = 50;//柱形圖上邊界
Graphics2D g2 = (Graphics2D) g;
int ruler = Height-topMargin;
int rulerStep = ruler/20;//將當前的高度評分為20個單位
g2.setColor(Color.WHITE);//繪制白色背景
g2.fillRect(0, 0, Width, Height);//繪制矩形圖
g2.setColor(Color.LIGHT_GRAY);
for(int i=0;i<rulerStep;i++){
g2.drawString((400-20*i)+"個", 8, topMargin+rulerStep*i);//繪制Y軸上的數據
}
g2.setColor(Color.PINK);
int m=0;
for(int i = 0;i<wordCount.length;i++){
int value = wordsCount.get(wordCount[i]);
int step = (m+1)*40;//設置每隔柱形圖的水平間隔為40
g2.fillRoundRect(leftMargin+step*2,Height-value, 40, value, 40, 10);//繪制每個柱狀條
g2.drawString(wordCount[i], leftMargin+step*2, Height-value-5); //標識每個柱狀條
m++;
}
}
### 總結 ### - 在進行需求分析時,將整個程序按照功能划分為若干小程序模塊,每個小程序模塊完成一個確定的功能,並在這些模塊之間建立了必要的聯系,通過每個模塊的互相協作完成整個程序功能,其次采用了自頂向下的方法,將問題划分為幾個部分,然后再將各個部分再進行細化,直到分解為較好解決問題為止。這樣做的目的是為了降低程序復雜度,使程序設計、調試和維護等操作簡單化,在后期的開發過程中遇到了很多問題,由於每個模塊的功能相對獨立,所以改起來也沒有很麻煩。
### PSP ###
| PSP2.1 | 任務內容 | 計划共完成需要的時間(min) | 實際完成需要的時間(min) |
|---|---|---|---|
| Planning | 計划 | 15 | 15 |
| · Estimate | · 估計這個任務需要多少時間,並規划大致工作步驟 | 15 | 15 |
| Development | 開發 | 146 | 218 |
| ·· Analysis | 需求分析 (包括學習新技術) | 15 | 10 |
| · Design Spec | · 生成設計文檔 | 15 | 15 |
| · Design Review | · 設計復審 (和同事審核設計文檔) | 3 | 5 |
| · Coding Standard | 代碼規范 (為目前的開發制定合適的規范) | 3 | 3 |
| · Design | 具體設計 | 20 | 25 |
| · Coding | 具體編碼 | 50 | 120 |
| · Code Review | · 代碼復審 | 15 | 20 |
| · Test | · 測試(自我測試,修改代碼,提交修改) | 25 | 20 |
| Reporting | 報告 | 25 | 30 |
| ·· Test Report | · 測試報告 | 10 | 15 |
| · Size Measurement | 計算工作量 | 5 | 5 |
| · Postmortem & Process Improvement Plan | · 事后總結 ,並提出過程改進計划 | 10 | 10 |
分享
- 從表中可以看出在每個階段自己預估的時間和實際的時間還是有一定的差距,對於Java有些內容還是掌握不夠,基礎不是很扎實,對軟件開發過程的每個階段還不是很熟悉,導致開發過程較為困難,但是不管是什么困難都可以通過很多方式來得到解決,希望自己能在以后的學習過程中扎好基礎,在軟件開發過程中去體會軟件工程的魅力。
