項目源碼地址:https://gitee.com/xjtsh/projects
功能實現:
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
項目簡介
本項目的需求可以概括為:對程序設計語言源文件統計字符數、單詞數、行數,統計結果以指定格式輸出到默認文件中,以及其他擴展功能,並能夠快速地處理多個文件。
可執行程序命名為:wc.exe,該程序處理用戶需求的模式為:
wc.exe [parameter] [input_file_name]
存儲統計結果的文件默認為result.txt,放在與wc.exe相同的目錄下。
我采用的是Java語言實現。這個項目看似功能比較簡單,實則工作量巨大,原因有三:一、對細節的要求比較高,從基本功能實現形式,小到命令輸入的格式,都有比較嚴格的要求,必須按照要求來執行的話需要增加一定的工作耗時;需求分析、測試用例、博客撰寫,所以整個項目開發的過程不單單只是考慮如何去實現功能這一件事情了,這也導致了所花費的時間增多;自身編程水平的限制,整個項目的流程要求非常規范,所以一步一步來執行的話需要連續的時間,然而當前課程任務並不輕松加上這幾天正好又是另一門課程的課程設計上交截止時間,故而只能在零零碎碎的時間之中去完成項目設計和編碼實現,在一定程度上降低了效率.但是最麻煩是.jar轉.exe文件實在消耗了我大量的時間,網上博客眾說紛紜,自己嘗試的時候出現各種不理解的bug,不理解軟件的運行過程對於我改進轉換過程造成了極大的困難,好在,最終解決了問題。先這樣吧,以后再汲取經驗和教訓,慢慢學習改進。
解題思路:
獲取鍵盤數輸入的指令,當讀取到 '-'這個命令符號前綴時 ,我們能知道它將會和下一個字符一起構成一個操作指令,於是我們通過對下一個字符的讀取就能夠決定這個命令符號具體代表了什么含義。這里分幾種情況:若下一個字符是 'c'、 'w'、'l'之類的基本功能參數,若下一個字符是 'o'、'e'之類的拓展功能參數,那么它會緊跟着一個txt文件,實現的是對文件內容停用詞檢索與執行結果輸出到文件的操作功能;也存在下一個字符是程序未定義的參數字符如‘m’、'n'等,這時程序應當是無法識別這類命令參數的,不會執行任何操作,但一般也不會報錯。獲取待處理文件名和結果輸出文件名,通過指令中是否含有-o指令判斷是否采用默認的result.txt文件輸出。以及獲得輸出文件名。本項目僅實現了文件的字符數、行數、單詞數的統計。即分為一個主類和獲取字符數、行數、單詞數方、輸出方法和main方法。待處理文件放在項目的統一文件夾內。
上述的部分代碼展示如下:
在編譯時輸入指令,所以指令被儲存在args[]數組中,區分默認的儲存文件和用戶自定義文件。統計指令中的.txt指令數,然后經過if判斷獲得待處理文件名
統計文件字符數時,對字符進行判斷,如果讀取的某一個字符為/,並且下一個字符也為/時,則后面的字符均為注釋,否則繼續自增
統計非正確單詞數時,僅以一個或者空格或逗號作為分隔符。
統計包括空行在內的文件行數:
將統計內容輸出到文件
測試設計
對於程序測試這一塊,我一共設計了10個測試用例,其中包括8個相互獨立的常規測試用例和2種類型的錯誤測試用例。具體測試如下:
1. 基本字符測試
輸入:–c test.txt
期望輸出:字符數:148
實際輸出:字符數:148
分析:符合預期輸出
2. 行數字符測試
輸入:-l test.txt
期望輸出:,文件總行數:7
實際輸出:文件總行數:7
分析:符合預期輸入
3. 單詞測試
輸入:-w test.txt
期望輸出:,文件總行數:20
實際輸出:文件總行數:20
分析:符合預期輸入
4. 基本功能測試
輸入:-c -w -l test.txt
期望輸出:字符個數:148
單詞個數:20
文件總行數:7
實際輸出:字符個數:148
單詞個數:20
文件總行數:7
分析:符合預期輸出
5. 部分擴展功能測試
輸入:-c test.txt stoplist.txt -o output.txt
期望輸出:字符數:143
實際輸出:字符數:143
分析:符合預期輸出
6. 錯誤指令測試一(純未定義命令參數)
輸入:-m test.txt
期望輸出:無期望
實際輸出:無任何內容,但也未報錯
分析:由於並未涉及命令參數-m,故而程序無法識別對應指令無法執行。
7. 錯誤指令測試二(含未定義命令參數)
輸入:-c -m test.txt
期望輸出:無期望
實際輸出:字符個數:148
分析:由於命令語句中含有已定義的命令參數-c,故而雖然含有-m,但是程序依然識別了-c並且執行了字符統計功能。
以上除-|指令以外均在dos界面測試,-|指令在dos界面未知錯誤,無任何輸出,但是在IDEA中輸出沒有任何問題。希望在接下來的時間內會發現錯誤所在。
項目總結
總的說來,這次項目確實讓我收獲了不少東西,一開始因為要求的細節過於繁瑣而且時常所以有些情緒化,在項目設計和開發的過程中沒有完全靜下心來去好好地想一下如何解決這個問題。隨着提交時間的逼近才逐漸硬着頭皮開始認真去搞這個作業,從最終的結果來看,確實學到了很多有用的東西,關於注釋行、代碼行與空行的正則表達式匹配判定法以及如何從提高一個程序的條件覆蓋率去編寫測試用例測試程序的性能,這些都是以后走向工作崗位很寶貴、很重要的東西。不過由於時間的倉促,我編寫的程序仍存在着很多不盡如人意的地方,相關的測試用例的設計也有一定的缺憾和漏洞,這些都是我在今后學習中要去學習改進的地方。