1. 程式人生 > >WordCount 記第一次系統分析與設計課程個人項目作業

WordCount 記第一次系統分析與設計課程個人項目作業

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
      系統無反應
  • 第二個123.c下依次運行上述測試用例得到如下結果,除統計結果不同外,其他均相同,所以在此省略。

    測試結論

  • 1、缺少相應的提示性語言來告訴使用者運行結果。
  • 2、當用戶使用 -o 命令指定輸出文件時,沒有堅持輸出文件是否合法。
  • 3、當遇到文件內容較多,文件較大時,讀取速度較慢。

    作業心得

       學習系統分析與設計這門課後,對於軟件工程有了些許了解和自己的認識,尤其對於代碼規範、文檔設計、單元測試有了很多了解。在本次作業的完成過程中,對於代碼的規範化設計和註釋的專業都有著重註意,對於代碼復審和軟件測試對於軟件的重要性有了新的認識,在我完成了最初的代碼編寫後,在代碼復審中發現了很多不必要和冗余的代碼,沒有做到代碼復用和應用面向對象的思想,所以重構了代碼成為現在這個版本。在測試時也發現了很多漏洞,和之前沒有考慮的地方,希望在以後的項目實踐中,可以從本次作業上吸取教訓和經驗。完成更滿意的項目。

    參考文獻

    使用Intellij Idea生成可執行文件jar,轉為exe文件步驟

WordCount 記第一次系統分析與設計課程個人項目作業