第四次結對編程做業

項目地址 倉庫地址
結隊夥伴 陳宇紅
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文件裏的全部內容,形成了單元測試時報錯多個函數重複定義。


後來咱們把附加依賴項刪除後就解決了這個問題。
第二個問題:是文件的相對路徑上:文件明明已經存在但就是打不開,測試一直不經過。

後來發現咱們代碼裏用的是相對路徑,可是要打開的文件與咱們運行的程序不在同一個文件夾裏面,因此報錯了。

相關文章
相關標籤/搜索