軟工第四次做業

結對編程

github項目地址
夥伴做業連接
--------------------------------------------------html

一:結對過程

結對編碼過程:我與結對編碼的同伴,首先是各自分別閱讀項目條件,以後開始討論各自對於此次做業的理解。隨後咱們把本身要作的工做細緻的分工,最重要的一點是缺點二人代碼的鏈接方式,以便儘量少的對代碼進行沒必要要的修改,最後把寫好的代碼互相交換來審閱達到找出錯誤的目的。最後緊行代碼的彙總調試,獲得想要的結果。

二:PSP表

- ———————————————————————————————
- |預估(分鐘)\實際分鐘|
- 計劃:10\15
- 預估項目耗時:190 \ 275
- 開發: 30 \ 90
- 需求分析:12 \ 15
- 生成設計文檔:18 \ 20
- 設計複審:5  \ 5
- 代碼規範:5  \ 5
- 具體設計:5  \ 15
- 具體編碼:30 \ 35
- 代碼複審:10 \ 15
- 測試:20 \ 20
- 報告:10 \ 10
- 測試報告:10 \ 10
- 計算工做量:5  \ 5              
- 過後總結:20 \ 20                   
- 合計:190 \ 275                 
- ———————————————————————————————

三:思路

咱們將做業分紅兩個部分,即文件操做以及字符的識別與計數。我負責的是對文件的操做以及指出同伴編碼的錯誤。對於字符的計數,爲了節約內存打算使用動態的內存申請,經過遍歷鏈表來判斷是不是新字符以及增長次數,同時用結構體來進一步的簡化代碼。首先是關於c++的空間申請,由於從未學習因此在博客園上尋找相關的知識內容;對於文件操做,經過打開文件,使用文件類的getline函數,將文件裏面的字符儲存到數組裏面,而後開始進行操做。由於事先還未學習,便在上面畫了大量時間學習,找到一個合適的函數或方法可以很好的錄入文件內容。

四:設計實現過程

爲了使得字符與字符數量緊密結合與代碼簡化,咱們決定使用結構體來經行工做,同時創建一個類來捆綁相關函數的使用同時確保數據的安全性,其私有成員是字符總數與一個指向結構體的指針(其做用爲頭指針)。函數分爲指針初始化函數,字符計數函數,與鏈表打印函數。字符計數函數形參爲字符數組,完成與文件操做的交接。

五:編碼規範

- 對於命名除了無關變量以外其他所有使用英文命名,若是存在多個英文則使用' _ '字符隔開,其他空格與縮進徹底遵循vs2019自動隔開。
- 代碼互審:在完成一個模塊後互相審覈與測試,其中代碼錯誤有鏈表頭指針爲空,文件地址不正確,數組的數據溢出。

六:性能分析

  • 消耗最大函數:
int fun(char b[])
    {
        int a;
        set();
        for (a = 0; b[a] != '\0'; a++)
        {
            char_counter(b[a]);
        }
        return 0;
    }
- 代碼改進:最開始是打算把識別與計算分開後來發現這麼一來會遍歷兩次鏈表,形成效率下降,後來使用if語句來實現是否爲新字符,以此來進行操做。

七:關鍵代碼

- 對字符及其操做封裝爲一個類來,包含鏈表建立,字符計數與識別和打印。保護數據與實現代碼簡潔。
class way_to_char
{
public:
    int set()
    {
        use = new struct zifu;
        use->next = NULL;
        if (use == NULL)
        {
            cout << "分配內存失敗" << endl;
        }
        cout << use << endl;
        return 0;
    }
    int char_counter(char b)
    {
        if (use == NULL)
        {
            return 0;
        }
        struct zifu* p;
        for (p = use->next; p != NULL; p = p->next)
        {
            if (p->word == b)
            {
                p->number++;
                char_number++;
                return 0;
            }
        }
        p = new struct zifu;
        p->word = b;
        p->number = 1;
        p->next = use->next;
        use->next = p;
        char_number++;
        return 0;
    }

    int show()
    {
        if (use == NULL)
            return 0;
        struct zifu* p;
        char stead;
        cout << "總的字符數爲" << char_number  << endl;
        for (p = use->next; p != NULL; p = p->next)
        {
            if (p->word >= 65 && p->word <= 90)
                stead = p->word + 32;
            else
                stead = p->word;
            cout << "字符爲" << stead << "出現次數爲" << p->number << endl;
        }
        return 0;
    }
    int fun(char b[])
    {
        int a;
        set();
        for (a = 0; b[a] != '\0'; a++)
        {
            char_counter(b[a]);
        }
        return 0;
    }
private:
    struct zifu* use;
    int char_number = 0;
};

八:心路與收穫

結對編程最開始的難題不是項目,而是兩人的配合問題,針對同一個任務意見上總會產生分歧,致使遲遲沒進展。但隨着時間推移,兩人步調漸漸一致,能互相理解對方代碼的意圖並進行審覈,提高了代碼質量。一旦編碼有紕漏另外一方總能指出,效率相比一人提高了很多。
相關文章
相關標籤/搜索