WordCount 記第一次系統分析與設計課程個人項目作業
阿新 • • 發佈:2018-09-23
win idea utf pub 做到 out 測試報告 第一個 buffer
作業成果
作業源碼-java-gitee.
作業要求
根據WordCount的需求描述,先編程實現,再編寫單元測試,最後撰寫博客。
WordCount需求分析
WordCount的需求可以概括為:對程序設計語言源文件統計字符數、單詞數、行數,統計結果以指定格式輸出到默認文件中,以及其他擴展功能,並能夠快速地處理多個文件。
可執行程序命名為:wc.exe,該程序處理用戶需求的模式為:
wc.exe [parameter] [input_file_name]
存儲統計結果的文件默認為result.txt,放在與wc.exe相同的目錄下。
基本功能
wc.exe -c file.c //返回文件 file.c 的字符數 wc.exe -w file.c //返回文件 file.c 的單詞總數 wc.exe -l file.c //返回文件 file.c 的總行數 wc.exe -o outputFile.txt //將結果輸出到指定文件outputFile.txt
- 註意:
- 空格,水平制表符,換行符,均算字符。
- 由空格或逗號分割開的都視為單詞,且不做單詞的有效性校驗,例如:thi#,that視為用- - 逗號隔開的2個單詞。
- -c, -w, -l參數可以共用同一個輸入文件,形如:wc.exe –w –c file.c 。
- -o 必須與文件名同時使用,且輸出文件必須緊跟在-o參數後面,不允許單獨使用-o參數。
編碼過程
PSP表格
PSP2.1 | PSP階段 | 預估耗時(分鐘) | 實際耗時(分鐘) |
· Planning | · 計劃 | 15 | 10 |
· Estimate | · 估計這個任務需要多少時間 | 30 | 15 |
· Development | · 開發 | 120 | 18 |
· Analysis | · 需求分析 (包括學習新技術) | 5 | 5 |
· Design Spec | · 生成設計文檔 | 5 | 5 |
· Design Review | · 設計復審 (和同事審核設計文檔) | 10 | 0 |
· Coding | · 代碼規範 (為目前的開發制定合適的規範) | 10 | 0 |
· Code Review | · 具體設計 | 15 | 20 |
· Test | · 具體編碼 | 60 | 100 |
· Reporting | · 代碼復審 | 20 | 60 |
· Test Report | · 報告 | 30 | 60 |
· Size Measurement | · 測試報告 | 30 | 10 |
· Postmortem & Process | · 計算工作量 | 10 | 15 |
· Improvement Plan | · 事後總結, 並提出過程改進計劃 | 10 | 5 |
· 合計 | 370 | 323 |
解題思路
對於題目中涉及到的幾點需求:統計字符數、單詞數、行數、向文件中寫入統計結果。第一感覺要用java的io流進行解決。另外查詢了java項目如何導出exe文件的實現過程,以及如何在命令行中接受參數等疑問。
IDE環境
Windows 10 + idea -使用JAVA語言
程序設計
設計了四個類來完成這項任務
Count.class //用於接受文件統計後的結果
Output.class //用於將統計輸出到指定文件中
Wc.class //核心算法,用於實現文件的統計
WordCount.class //主方法,接受並判斷命令行參數
UML類圖
關鍵代碼說明
Count類
package WordCount;
public class Count {
public int LineCount; //文件行數
public int WordCount; //單詞個數
public int CharCount; //字符個數
public int getLineCount() {
return LineCount;
}
public int getWordCount() {
return WordCount;
}
public int getCharCount() {
return CharCount;
}
public Count(int lineCount, int wordCount, int charCount){
this.LineCount=lineCount;
this.WordCount=wordCount;
this.CharCount=charCount;
}
}
Wc類
package WordCount;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Wc {
public static Count wc(String inputFile) throws IOException {
Count count=new Count(0,0,0);//生成Count對象
String txt = "";//文件內容
String[] buffer;//存儲處理後的txt內容
File dir=new File(inputFile);
BufferedReader bf = new BufferedReader(new FileReader(dir));//生成緩沖字符輸入流
while((txt=bf.readLine())!=null){
buffer=txt.split(",| |\t|\n");//處理 ,空格 制表符 換行符
for(int i=0;i<buffer.length;i++){
if(!buffer[i].equals(""))
count.WordCount++;//統計單詞數
}
count.LineCount++;//統計行數
count.CharCount+=txt.length();//統計字符數
}
bf.close();
return count;//返回count對象
}
}
測試設計過程
測試用例
共十個測試用例,其中8個用於命令行中命令參數測試,2用於輸入文件的內容測試
- 命令行參數測試用例(默認輸出文件為根目錄下的result.txt文件下)
- wc.exe -c -l -w -o 456.txt 123.c
- wc.exe -c -o 123.txt 123.c
- wc.exe -c -l -w 456.c
- wc.exe -c -l -w 123.c
- wc.exe -o 123.txt
- wc.exe -o 123.c
- wc.exe 123.txt
- wc.exe 123.c
- 文件內容
- 第一個123.c
#include<stdio.h> main(){ printf("Hello World") }
- 第二個123.c
內容為空
測試結果
- 第一個123.c下依次運行上述測試用例得到如下結果
- wc.exe -c -l -w -o 456.txt 123.c
- wc.exe -c -o 123.txt 123.c
- wc.exe -c -l -w 456.c(拋出異常)
- wc.exe -c -l -w 123.c
- wc.exe -o 123.txt
- wc.exe -o 123.c
- wc.exe 123.txt
系統無反應 - wc.exe 123.c
系統無反應
- wc.exe -c -l -w -o 456.txt 123.c
第二個123.c下依次運行上述測試用例得到如下結果,除統計結果不同外,其他均相同,所以在此省略。
測試結論
- 1、缺少相應的提示性語言來告訴使用者運行結果。
- 2、當用戶使用 -o 命令指定輸出文件時,沒有堅持輸出文件是否合法。
3、當遇到文件內容較多,文件較大時,讀取速度較慢。
作業心得
學習系統分析與設計這門課後,對於軟件工程有了些許了解和自己的認識,尤其對於代碼規範、文檔設計、單元測試有了很多了解。在本次作業的完成過程中,對於代碼的規範化設計和註釋的專業都有著重註意,對於代碼復審和軟件測試對於軟件的重要性有了新的認識,在我完成了最初的代碼編寫後,在代碼復審中發現了很多不必要和冗余的代碼,沒有做到代碼復用和應用面向對象的思想,所以重構了代碼成為現在這個版本。在測試時也發現了很多漏洞,和之前沒有考慮的地方,希望在以後的項目實踐中,可以從本次作業上吸取教訓和經驗。完成更滿意的項目。
參考文獻
使用Intellij Idea生成可執行文件jar,轉為exe文件步驟
WordCount 記第一次系統分析與設計課程個人項目作業