軟件工程第四次做業

github地址:項目地址

                     夥伴地址

1、結對過程

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

2、PSP表格

PSP2.1c++

Personal Software Process Stagesgit

預估耗時(分鐘)github

實際耗時(分鐘)編程

Planning數組

計劃安全

 10函數

 15性能

· Estimate學習

· 估計這個任務須要多少時間

190

 275

Development

開發

 30

 90

· Analysis

· 需求分析 (包括學習新技術)

 12

 15

· Design Spec

· 生成設計文檔

18

20

· Design Review

· 設計複審 (和同事審覈設計文檔)

5

 5

· Coding Standard

· 代碼規範 (爲目前的開發制定合適的規範)

 5

 5

· Design

· 具體設計

 5

 15

· Coding

· 具體編碼

 30

 35

· Code Review

· 代碼複審

 10

 10

· Test

· 測試(自我測試,修改代碼,提交修改)

 20

 20

Reporting

報告

 10

 10

· Test Report

· 測試報告

 10

 10

· Size Measurement

· 計算工做量

 5

 5

· Postmortem & Process Improvement Plan

· 過後總結, 並提出過程改進計劃

 20

 20

 

合計

 190

 275

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1)、解題思路

             將做業分紅兩個部分,即文件的傳入以及字符的識別與計數。由我來負責計數的相關函數實現。對於字符的計數,爲了節約內存打算使用動態的內存申請,經過遍歷鏈表來判斷是不是新字符以及增長次數,同時用結構體來進一步的簡化代碼。首先是關於c++的空間申請,由於從未學習因此在博客園上尋找相關的知識內容。爲了銜接二這的函數打算用數組來傳入字符。

(2)、設計實現過程

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

(3)、代碼規範

             對於命名除了無關變量以外其他所有使用英文命名,若是存在多個英文則使用' _ '字符隔開,其他空格與縮進徹底遵循vs2019自動隔開。

             代碼互審:在完成一個模塊後互相審覈與測試,其中代碼錯誤有鏈表頭指針爲空,文件地址不正確,數組的數據溢出

(4)、性能分析

 

 消耗最大函數爲:

int fun(char b[])
    {
        int a;
        set();
        for (a = 0; b[a] != '\0'; a++)
        {
            char_counter(b[a]);
        }
        return 0;
    }

            嵌入了其餘兩個函數。

            代碼改進:最開始是打算把識別與計算分開後來發現這麼一來會遍歷兩次鏈表,形成效率下降,後來使用if語句來實現是否爲新字符,以此來進行操做。

(5)、代碼說明

            

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;
};

對字符及其操做封裝爲一個類來,包含鏈表建立,字符計數與識別和打印。保護數據與實現代碼簡潔。

(6)、心路與收穫

             二人合做剛開始是有些不能接受,感受會大幅的下降勞動效率,而且不肯意聽取他人的意見。可是慢慢的發現二人合做,相互的代碼審覈,可以極大的提升本身的代碼質量,同時工做量的減少可以使得本身可以更加專一於本身的工做部分。雙人合做更容易暴露出本身的代碼問題,可以幫助本身提升編碼水平。如今看來結對編程可以提升代碼質量與效率。

相關文章
相關標籤/搜索