項目地址 | 倉庫地址 |
結隊夥伴 | 陳宇紅 |
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
Planning | 計劃 | 20 | 40 |
Estimate | 估計這個任務須要多少時間 | 480 | 600 |
Development | 開發 | 40 | 45 |
Analysis | 需求分析(包括學習新技術) | 20 | 15 |
Design Spec | 生成設計文檔 | 60 | 60 |
Design Review | 設計複審(和同事審覈設計文檔) | 20 | 30 |
Coding Standerd | 代碼規範(爲目前的開發制定合適的規範) | 20 | 15 |
Design | 具體設計 | 80 | 100 |
Coding | 具體編碼 | 240 | 300 |
Code Review | 代碼複審 | 120 | 120 |
Test | 測試(自我測試,修改代碼,提交修改) | 240 | 200 |
Reporting | 報告 | 30 | 30 |
Test Report | 測試報告 | 60 | 60 |
Size Measurement | 計算工做量 | 30 | 30 |
Postmortem & Process Improvement Plan | 過後總結, 並提出過程改進計劃 | 60 | 50 |
合計 | 1040 | 1095 |
思路描述:
1.細分題目,劃分紅一個個小任務以下圖所示
2.由於c++尚未學到文件操做,因此我就先看了教材,大體學了下文件基本操做,再在網上查了文件操做的教程。
3.這次代碼涉及到了排序,我就翻了數據結構關於排序方面的知識,以及如何寫代碼。html
1.規劃出大體方法
ios
2.概括整理函數,類及之間的關係
咱們通過協商大體把每個功能都設計成一個函數,這樣比較整潔且比較有概括性,在調試過程也比較容易找到錯處。而後是劃分類,咱們把最基礎的統計字符方面劃分爲一個類,再把關於單詞的劃分爲一個類,最後把行數統計劃分爲一個類。函數與類之間最重要的是類中包含函數,由於咱們在設計的時候把每個須要實現的功能都設計成了一個函數,因此在類裏面能夠很容易想到把函數劃分進去。c++
因爲這是我倆第一次用c++完成一個項目,因此咱們參考了網上的c++代碼規範知否,知否git
審查模塊名
coutword_1github
1.主要問題數據結構
1.發現同伴在設計過程出現了一個功能上的遺漏,在限制單詞條件時,遺漏了「以數字開頭"不是單詞這一條件函數
2.第二個問題是我在統計單詞數所用的循環結構中,因爲邏輯表達不當形成了死循環。
修改前:性能
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); } } } } }
2.複審感悟學習
在寫代碼時,對於重要部分咱們必定要註釋,否則會對代碼複審形成很大的影響。甚至要從新想代碼的思路.
性能改進時間花費
大體是120分鐘
改進思路
1.主要改進是將散亂函數封裝成類
性能分析圖
.單元測試圖
1.在進行單元測試時出現不少問題,以致於咱們單元測試這卡了好久。
第一個問題:附加依賴項添加錯誤:根據以前博客須要咱們添加obj文件,可是咱們進行單元測試時已經添加的頭文件裏面已經包含了obj文件裏的全部內容,形成了單元測試時報錯多個函數重複定義。
後來咱們把附加依賴項刪除後就解決了這個問題。
第二個問題:是文件的相對路徑上:文件明明已經存在但就是打不開,測試一直不經過。
後來發現咱們代碼裏用的是相對路徑,可是要打開的文件與咱們運行的程序不在同一個文件夾裏面,因此報錯了。