psp2.1
personal software process stages
預估耗時(分鐘)
實際耗時(分鐘)
planning
計畫50
50• estimate
• 估計這個任務需要多少時間
1515
development
開發660
600• analysis
• 需求分析 (包括學習新技術)
10070
• design spec
• 生成設計文件
3020
• design review
• 設計複審
2010
• coding standard
• **規範 (為目前的開發制定合適的規範)
2020
• design
• 具體設計
6060
• coding
• 具體編碼
270250
• code review
• **複審
6050
• test
• 測試(自我測試,修改**,提交修改)
100120
reporting
報告90
80• test repor
• 測試報告
4040
• size measurement
• 計算工作量
1010
• postmortem & process improvement plan
• 事後總結, 並提出過程改進計畫
4030
合計800
730
我的計算模組設計是打算使用有窮自動機來實現,對讀入的每乙個字元做一次判斷,然後轉移狀態。
我設計的自動機有7個狀態
-2 :非單詞
-1 :遇到換行
0 : 遇到分割符
1, 2, 3, 4 : 開頭的字母長度
我所需要的設計的函式有三個,對應需求的三種功能。
我這種做法的獨特之處是對所有要實現的功能其實邏輯是基本一樣的,而且複雜度也比較低,是o(n)的,感覺應該屬於比較好的做法了。
以下是自動機轉移的**
int now = -1, ch;
while (ch = getchar())
if (ch > 128) continue;
if (ch == '\n')
if (ch >= 'a' && ch <= 'z') ch -= 'a' - 'a';
if (now == -2)
if (checkword(ch))
if (checknumber(ch))
if (now >= 4) add(s, map); s = ""; now = 0;
}
一開始測試有1e7個字元的隨機文字時要花很多時間,後來考慮到只要求前10頻繁出現的單詞就可以了,所以不用對所有的單詞排序,只要對前10大排序即可。
以及可以把統計單詞的map改為unordered_map,減少時間花費。
可以看出,程式時間消耗主要是在統計前十頻率的單詞上,且主要是統計的過程中把單詞這個字串和出現次數用unordered_map對映關聯起來這個部分,但是這是我想到的比較快而且好寫的資料儲存結構了,而且這部分會成為效能瓶頸在寫之前我就已經想到了,效能改進部分我主要在**實現前完成了。
#include "stdafx.h"
#include "cppunittest.h"
#include "../wordcount/core.h"
using namespace microsoft::visualstudio::cppunittestframework;
namespace unittest1
test_method(testmethod2)
test_method(testmethod3)
test_method(testmethod4)
test_method(testmethod5)
test_method(testmethod6)
test_method(testmethod7)
test_method(testmethod8)
test_method(testmethod9)
test_method(testmethod10)};}
輸入的測試資料可以在github中檢視
我裝的vs好像沒有**覆蓋率檢視的模組
if (characters == 0)
如果訪問的檔案不存在,會返回錯誤
這次軟工作業我用了很長的時間來做,在這過程中遇到了很多困難也學到了很多。這是我第一次用vs2017來開發,一開始有很多不熟悉的地方,比如可以把頭檔案放到預編譯的檔案中,知道了把模組進行封裝,然後可以通過單元測試來檢驗,之前都是把**寫一起,然後多個測試資料都是用批處理檔案來對拍的。這次作業帶給我的價值不是在於實現了這麼乙個功能,而是了解了許多軟體開發的步驟和經驗,讓我感受到了軟體開發大概是乙個什麼樣的過程,感覺花的時間還是很有意義的。
軟工實踐第二次作業
1 字元統計 利用c 輸入輸出流函式逐個讀取字元,判斷字元ascii碼值是否在ascii碼表範圍內,我對字元的輸入輸出流不太了解,剛開始出現了亂碼,讀取字元不完整等情況,所以這方面花費時間很長,下面給出 以作記錄 fstream infile infile.open filename 讀取檔案 if...
軟工實踐第二次作業
github專案位址 由於程式要求從命令列讀入檔案,所以需要c 輸入輸出流的知識,題目要求得到檔案的字元數,我是逐個字元累計,對於求檔案行數,檔案單詞數,所以我採取按行讀取檔案的字串,每一行再分別統計單詞數的方法。重點就在於檔案流的操作和對字串的操作。我通過網路和書本了解到了相關資料。從命令列讀入檔...
軟工實踐2017第二次作業
用回溯法實現的流程圖如下 1.判斷可以放哪些數字 void confirmcandidate int a 9 int i,int j for int line 0 line 9 line for int line i 3 3 line i 3 3 3 line 2.標記每個空格位置 void tot...