2018-9-17 22:00PM,以博客提交至班級博客時間爲準
要求參考來自:https://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html;
https://edu.cnblogs.com/campus/buaa/BUAASummerSETraining/homework/2013;
https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1816W/homework/2085 。html
實現一個統計程序,它能正確統計程序文件中的字符數、單詞數、行數,以及還具有其餘擴展功能,並可以快速地處理多個文件。java
輸入文件名以命令行參數傳入。例如咱們在命令行窗口(cmd)中輸入:git
//C語言類 wordCount.exe input.txt //Java語言 java wordCount input.txt
則會統計input.txt中的如下幾個指標github
A-Z
,a-z
A-Z
,a-z
,0-9
file123
是一個單詞,1file
不是一個單詞。file
,File
和FILE
是同一個單詞輸出的格式爲算法
characters: number words: number lines: number <word1>: number <word2>: number ...
在寫了一些代碼開胃以後,你們都完成了一份知足基本功能的代碼。
你們的代碼都各有特點,若是如今咱們要把這個功能放到不一樣的環境中去(例如,命令行,Windows圖形界面程序,網頁程序,手機App),就會碰到困難:代碼散落在各個函數中,很難剝離出來做爲一個獨立的模塊運行以知足不一樣的需求。
同時咱們也看到,不一樣的代碼解決不一樣層面的問題:windows
這些代碼的種類不一樣,混雜在一塊兒對於後期的維護擴展很不友好,因此它們的組織結構就須要精心的整理和優化。
咱們但願把基本功能裏的:架構
這三個功能獨立出來,成爲一個獨立的模塊(class library, DLL, 或其它),這樣的話,命令行和GUI的程序都能使用同一份代碼。爲了方便起見,咱們稱之爲計算核心"Core模塊",這個模塊至少能夠在幾個地方使用:app
把計算核心在單元測試框架中作過完備的測試後,咱們就能夠在算法層級保證了這個模塊的正確性。
但咱們知道軟件並不是只有計算核心,實際的軟件是交付給最終用戶的軟件,除了計算核心外,還須要有必定的界面和必要的輔助功能。
這個Core模塊和使用它的其餘模塊之間則要經過必定的API來交流。
API應該怎麼設計呢?
爲了方便起見,咱們能夠從下面的最簡單的接口開始(僅舉例,你的代碼裏可能沒有這個函數):框架
int countChar(File *file)
這個函數表示輸出一個文件指針,返回這個文件的字符數。
假設咱們用Core封裝了這個接口,那麼咱們的測試程序能夠是這樣:ide
File *in = fopen("input.txt","r"); int count = 100; Assert(countChar(in) == count);
固然,這樣的測試程序並不充分,但願你們測試時不要像這樣偷懶。
如今咱們封裝了接口,咱們要對咱們的代碼進行正確性驗證。
另外一方面咱們都知道健壯性對於軟件來講是很是必要的,請各位使用單元測試對項目進行測試,並使用插件查看測試分支覆蓋率等指標;另外,請準備至少10個測試用例確保你的程序可以正確處理各類狀況,而且不會崩潰。
對待錯誤的輸入,可以儘量精確報錯(就像編譯器同樣)。
你能夠有「容錯性」的出錯設計,但必須輸出必要的提示或說明。
如今咱們已經有了一個基礎的詞頻統計軟件,若是它經過了足夠多的單元測試,那它可能也已是一個比較完善的詞頻統計軟件了。可是一個軟件光正確了還不夠,還須要有必定的性能。
那麼,如何讓軟件又快又好地執行呢?那就須要咱們找到執行消耗時間最久的模塊,而後不斷地優化改進它。那麼,如何知道哪些語句是軟件的時間瓶頸呢,這就須要用到效能分析。
使用 Visual Studio 進行 C++ 效能分析:https://docs.microsoft.com/en-us/visualstudio/profiling/beginners-guide-to-performance-profiling
使用 JProfiler 進行 Java 效能分析:http://www.javashuo.com/article/p-urvgxxxt-hn.html
關於效能分析的更多資料,能夠查看:http://www.cnblogs.com/xinz/archive/2011/11/20/2255809.html
參照「效能測試、分析、改進,再效能測試」的流程,找出關鍵模塊消耗最大的函數,而後分析一下:該如何改進這個程序?
值得注意的一點是,效能分析只在真正有性能問題時纔會有顯著結果。也就是說,學員在進行效能分析時,可能統計一個只有100行的文件並看不出來有什麼差別,也看不出來哪裏消耗最大。此時可使用更大的參數試試,好比統計一個有1000,000行的文件,再使用效能分析工具測試消耗時間最多的模塊,再進行改進。
助教在測試時,將運行自動測試程序編譯源文件並運行,進行批量測試,所以請保證項目的組織目錄符合要求.
對於使用Java語言的項目有如下兩點要求:
【以學號爲名的文件夾中】的目錄下必須有src文件夾
201621123000(文件夾名字爲學號,這裏以學號201621123000爲例) |- src |- Main.java(主程序,能夠從命令行接收參數) |- lib.java(包含其它自定義函數,能夠有多個,對名字不作要求)
對於使用C++語言的項目有如下兩點要求:
【以學號爲名的文件夾中】的目錄下必須有src文件夾,在src文件夾中是可在VS2017下編譯運行的解決方案,解決方案的名字必須爲 WordCount,一個C++工程示例組織目錄以下所示:
201621123000(文件夾名字爲學號,這裏以學號201621123000爲例) |- src |- WordCount.sln |- WordCount |- stdafx.cpp |- stdafx.h |- WordCount.cpp |- WordCount.vcxproj
本次博客做業總分 20分,由如下部分組成:
本次程序做業總分40分,由如下部分組成:
注:
PSP模版表格以下,第3列和第4列分別對應第2列條目的估計時間和真實時間,模版表格裏的時間只是示意。
PSP2.1 | 我的開發流程 | 預估耗費時間(分鐘) | 實際耗費時間(分鐘) |
Planning | 計劃 | 8 | 6 |
· Estimate | 明確需求和其餘相關因素,估計每一個階段的時間成本 | 8 | 6 |
Development | 開發 | 82 | 88 |
· Analysis | 需求分析 (包括學習新技術) | 6 | 10 |
· Design Spec | 生成設計文檔 | 5 | 6 |
· Design Review | 設計複審 | 4 | 6 |
· Coding Standard | 代碼規範 | 3 | 3 |
· Design | 具體設計 | 10 | 12 |
· Coding | 具體編碼 | 36 | 21 |
· Code Review | 代碼複審 | 7 | 9 |
· Test | 測試(自我測試,修改代碼,提交修改) | 13 | 21 |
Reporting | 報告 | 9 | 6 |
· | 測試報告 | 3 | 2 |
· | 計算工做量 | 2 | 1 |
· | 並提出過程改進計劃 | 3 | 3 |