PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘 |
Planning | 計劃 | 120 | 180 |
· Estimate | · 估計這個任務須要多少時間 | 1440 | 1000 |
Development | 開發 | 720 | 600 |
· Analysis | · 需求分析 (包括學習新技術) | 300 | 240 |
· Design Spec | · 生成設計文檔 | 120 | 100 |
· Design Review | · 設計複審 (和同事審覈設計文檔) | 50 | 89 |
· Design Review | · 代碼規範 (爲目前的開發制定合適的規範) | 60 | 30 |
· Design | · 具體設計 | 250 | 300 |
· Coding | · 具體編碼 | 740 | 600 |
· Code Review | 代碼複審 | 180 | 120 |
Test | · 測試(自我測試,修改代碼,提交修改) | 300 | 360 |
Reporting | 報告 | 60 | 45 |
· Test Report | · 測試報告 | 60 | 55 |
· Size Measurement | · 計算工做量 | 50 | 30 |
· Postmortem & Process Improvement Plan | · 過後總結, 並提出過程改進計劃 | 45 | 30 |
合計 | 1000 | 1200 |
對這個問題的大體解題階段:
拿到這個題目的時候,由於他要實現的功能相對較多。因此,我先對每個要實現的功能設計了函數。
因此,我先對每個要實現的功能設計了函數。下面是一些我認爲相對來講比較麻煩的功能的實現:
一共兩個類: 基類:
class word_count { public: void f_open();/*打開文件函數*/ void count_acill();/*統計文件中出現的acill 碼*/ void count_aphabet();/*統計文件中出現的字母*/ void count_Enum();/*統計文件中出現的字母*/ void count_seperetors();/*統計文件中出現的分割符號*/ void count_line();/*存儲文件中的每一行的字符串*/ void display_1(); protected: ifstream f_in; private: int acill; int aphabate; int Enum; int seperetors; string line_count[MAX]; string line_count_all[MAX]; };
繼承類:node
class word_count2 :public word_count { public : void read_str(); void store_str(string s); void display(); void count_limit(); void ruin_node(); private: count_str *first, *rear; };
寫了一點代碼,我發現對於像我如今這個階段。完整的寫一段代碼花費時間更多的是在後面的修改代碼上面。緣由是:首先,本身寫代碼用的算法都是已經存在,沒有說本身設計一個算法去寫一段代碼。其次,本身對不少語法不熟悉,每次編譯的時候沒有問題可是運行就會出錯。最後,對整段代碼的分析不到位,得不到本身想要的結果。 此次寫代碼,在寫函數統計文件中出現的頻數最大的10個字符串的時,就遇到了一個讓我很惱火的問題。在這裏我也花費了不少的時間去修改。可是最後我仍是放棄了重寫一段代碼來代替他。 未修改前的思路:
修改後的思路:
通過了此次同伴複審後,我發覺有一個同伴來審查本身寫的代碼會提升本身寫代碼的效率。 ###(1)提升本身代碼的運行可信度。 此次寫函數統計指定字符的時候,我忘記了"123file"這一類不是單詞,不能被寫入。 起始代碼是這樣的:
void word_count2::read_str() { char ch;//收集每個文件中字符 string str_1;//記錄每個規定的字符 long pos;//記錄f_in的位置 int fir = 0;//判斷第一個字符是否爲字母 f_in.clear(); f_in.seekg(0, ios::beg); while (!f_in.eof()) { int read=0; f_in.get(ch); read++; int k; f_in.seekg(pos); //f_in.get(ch); for ( k = 1; k < 4; k++) { read++; f_in.get(ch); if ( ch<'A' || (ch > 'Z'&& ch < 'a') || ch>'z' ) break; } if (k == 4) { f_in.get(ch); while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)|| ( '0' <= ch && ch <= '9')) { f_in.get(ch); read++; } pos = f_in.tellg(); f_in.seekg(pos - read); getline(f_in, str_1, ch); store_str(str_1); f_in.seekg(pos); } } } }
通過個人好夥伴的提醒我就有修改了代碼,以下:
void word_count2::read_str() { char ch;//收集每個文件中字符 string str_1;//記錄每個規定的字符 long pos;//記錄f_in的位置 int fir = 0;//判斷第一個字符是否爲字母 f_in.clear(); f_in.seekg(0, ios::beg); while (!f_in.eof()) { f_in.get(ch); fir++; if (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)) { int read=1;//記錄規定字符創的長度。 //-------------------------------------------------->增長代碼 if (fir == 1) { pos = f_in.tellg(); } else { pos = f_in.tellg(); f_in.seekg(pos-1);//獲得上一個字符 f_in.get(ch); } if (('0' <= ch && ch <= '9') || ch== '" ') { f_in.seekg(pos); f_in.get(ch); while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch) || ('0' <= ch && ch <= '9')) { f_in.get(ch); } }//------------------------------------------------------------------------------------------------------------------- else { read++; int k; f_in.seekg(pos); //f_in.get(ch); for ( k = 1; k < 4; k++) { read++; f_in.get(ch); if ( ch<'A' || (ch > 'Z'&& ch < 'a') || ch>'z' ) break; } if (k == 4) { f_in.get(ch); while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)|| ( '0' <= ch && ch <= '9')) { f_in.get(ch); read++; } pos = f_in.tellg(); f_in.seekg(pos - read); getline(f_in, str_1, ch); store_str(str_1); f_in.seekg(pos); } } } } }
這樣的事情在此次的做業中還出現了不少次,這裏就不在都說了。GitHub上的代碼就是我和個人同伴通過相互修改後的最終結果。
一、我學到了同伴寫代碼時候的都看,多寫的好習慣。 二、每次編寫代碼的時候會先寫一遍僞代碼。
根據以前的做業,這一次單元測試咱們仍然將**屬性->連接器->輸入->附加依賴項**的地址寫爲了Debug中的 .obj文件,可是運行包錯。
改正:
由於這一次,咱們直接將類獨立成了頭文件,因此其實在 #include "../ConsoleApplication1/word_count.h" 這裏就已經有了咱們單元測試所須要的類的定義。即咱們刪除以前所修改的附加依賴項中的路徑就行了。ios
測試沒法經過!
緣由是咱們的路徑寫的是相對路徑,因此沒辦法在當前路徑下找到這個 .txt文件,最後咱們將文件拷貝到了Test項目下的路徑。c++
消耗最大的函數:
git
因爲這是我倆第一次用c++完成一個項目,因此咱們參考了網上的c++代碼規範知否,知否github
一、結對編程讓我節約了不少時間,也避免了不少沒必要要的錯誤。「人多力量大」果真正確的。就算只有兩我的,也會比一我的的寫代碼來的好一些。
二、編寫代碼上思想的一些碰撞,真的會讓本身收穫不少!算法