本項目GitHub地址:https://github.com/sherlockHSY/WCcss
1、項目要求html
wc.exe 是一個常見的工具,它能統計文本文件的字符數、單詞數和行數。這個項目要求寫一個命令行程序,模仿已有wc.exe 的功能,並加以擴充,給出某程序設計語言源文件的字符數、單詞數和行數。git
實現一個統計程序,它能正確統計程序文件中的字符數、單詞數、行數,以及還具有其餘擴展功能,並可以快速地處理多個文件。github
具體功能要求:web
程序處理用戶需求的模式爲:wc.exe [parameter] [file_name]正則表達式
基本功能列表:後端
wc.exe -c file.c //返回文件 file.c 的字符數瀏覽器
wc.exe -w file.c //返回文件 file.c 的詞的數目框架
wc.exe -l file.c //返回文件 file.c 的行數函數
擴展功能:
-s 遞歸處理目錄下符合條件的文件。
-a 返回更復雜的數據(代碼行 / 空行 / 註釋行)。
高級功能:
-x 這個參數單獨使用。用戶可圖形化選取界面,選取文件展現文件信息。
2、PSP表格
PSP | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 40 | 30 |
· Estimate | · 估計這個任務須要多少時間 | 30 | 25 |
Development | 開發 | 790 | 710 |
· Analysis | · 需求分析 | 20 | 20 |
· Design Spec | · 生成設計文檔 | 40 | 30 |
· Design Review | · 設計複審 | 30 | 30 |
· Coding Standard | · 代碼規範 | 30 | 40 |
· Design | · 具體設計 | 80 | 100 |
· Coding | · 具體編碼(查找文檔) | 470 | 370 |
· Code Review | · 代碼複審 | 60 | 50 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 60 | 80 |
Reporting | 報告 | 120 | 120 |
· Test Report | · 測試報告 | 60 | 80 |
· Size Measurement | · 計算工做量 | 30 | 50 |
· Postmortem & Process Improvement Plan | · 過後總結, 並提出過程改進計劃 | 30 | 30 |
合計 | 950 | 960 |
3、解題思路
拿到這個題目後,首先理解項目需求,大體是統計文件中的數據,須要統計包括字符數、行數、單詞數、代碼行、註釋行、空行等結果。會涉及到文件的讀寫操做。經考慮後,決定用Node.js實現。圖形界面直接使用web頁面。
1. 開發準備
實現語言:Node.js
IDE:VSCode
2.需求分析:
(1)基礎功能:首先是命令行指令與參數的獲取。利用yargs模塊讀取命令的輸入,判斷指令類型,以及對指令和參數進行驗證,確保輸入是否合法。而後執行相應的邏輯處理。使用原生fs模塊建立文件IO流,利用readline模塊逐行讀取文件內容,再結合正則表達式實現對文件字符數、行數、單詞數的統計
(2)進階功能:實質上是在基礎功能上的一些拓展,寫個遞歸函數增長對文件夾的遞歸處理,以及正則匹配出通配符(* ?),在對文件搜索時加以判斷。-a 命令中的複雜查找,結合正則匹配便可實現統計。
(3)高級功能:圖形化界面的實現。因爲Node.js語言自己做爲一門新起的後端語言,自己就服務於web端,因此圖形界面直接用web實現,只要命令行輸入命令,調用Node的子進程實現自動打開瀏覽器窗口運行。web頁面採用html,css,js實現。
4、設計實現
流程圖
1. index.js做爲程序主入口,獲取命令行輸入的指令和參數後,校驗指令輸入是否合法,作出相應處理,至關於Controll層。
2. handleCommand.js將對各個指令的邏輯處理過程高度封裝對應函數,並經過export暴露出模塊,至關於Service層,對數據的深層處理。供Controll層調用
3. webView.js實現對web層的處理。經過開啓http server監聽頁面請求,並主動觸發自動打開web頁面,渲染index.html(至關於View層)。
5、測試
單元測試
1.測試基礎指令
測試文件 1.c
測試結果:
2.測試進階指令 測試遞歸讀取文件夾下的文件,並統計複雜數據
測試文件夾 testDir
測試結果:
3.測試高級指令
4. 通配符測試
測試通配符 * :
測試通配符 ? :
6、總結
本項目採用Node.js+web是個人一次嘗試,使用web的初衷是想要與傳統的GUI不同。這個項目的開發,我第一次一我的實現一個完整的流程,從需求分析、設計、開發到測試,學習到了軟件工程的不少思想和知識,把項目的自己功能點實現是一方面,項目的測試也是很是重要的一部分。在實際開發中,模塊的構建和總體框架的搭建也十分重要。我也認識到只有把各個方面都儘量的作好,才能使程序具備更好的健壯性。