軟件工程結對編程做業

1.本次做業GitHub地址

項目地址git

2. PSP表

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃
.Estimate 估計這個任務須要多少時間 2000
Development 開發
.Analysis 需求分析 (包括學習新技術) 220
.Design Spec 生成設計文檔 160
.Design Review 設計複審 (和同事審覈設計文檔) 140
.Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 40
.Design 具體設計 400
.Coding 具體編碼 400
.Code Review 代碼複審 250
. Test 測試(自我測試,修改代碼,提交修改) 220
Reporting 報告
.Test Report 測試報告 200
.Size Measurement 計算工做量 30
·Postmortem & Process Improvement Plan 過後總結, 並提出過程改進計劃 50
Sum 合計 2110

3.接口設計方法

在類的內部提供若干方法,屬性爲類內私有,調用者調用函數的時候輸入合法的參數便可。github

4. 計算模塊的設計與實現過程

算法說明

首先是對輸入文本的處理,將輸入的一個個單詞看成圖上的一個個點進行處理,採用鄰接矩陣來儲存邊與邊之間的距離,距離爲被指向單詞的長度。以後先對全部的單詞進行拓撲排序,排序後能夠知道這個圖是否是有環的(若是有環那麼排序後頂點的數量將少於圖自己點的數量),從而採用兩種不一樣的方法處理。若是圖是無環的,那麼就用動態規劃的算法來求出最長的路徑長度和路徑,若是要指定首字母,那麼就在選擇起點的時候選擇符合的首字母做爲起點;若是要指定尾字母,那麼就對找到的路徑從頭開始檢查,由於是無環的圖,因此當找到指定的尾字母后,至多還有其後面的單詞也爲一樣的尾字母,這樣就找到了符合要求的單詞鏈。若是圖是有環的,那麼就用DFS搜索每一個點做爲起點的最長路徑而後排序比較便可,若是指定首字母就選擇符合要求的起點;若是指定尾字母就看符合要求的尾字母的鏈那個最長便可。算法

5. UML圖

-該圖爲自動生成的,和隊友的差很少編程

6.計算模塊接口部分的性能改進

咱們小組開始沒有對搜索進行優化,因此說有時候進行了大量的無用搜索。咱們主要對這個拓撲排序進行了優化,減小了不少沒必要要的搜索。其次就是在處理-r參數時,咱們先判斷了圖,若是沒有環,仍然調用拓撲排序來作。這樣就減小了不少時間開銷。咱們這個改進大概總共花費了6個小時吧函數

7. 看Design by Contract, Code Contract的內容,描述這些作法的優缺點, 說明你是如何把它們融入結對做業中的

優勢:保證了雙方的代碼質量
缺點:並非全部程序設計語言都有斷言機制。oop

8. 計算模塊部分單元測試展現

沒有封裝成core接口,因此測試很差作。
TEST_METHOD(TestMethod1) { string xx = "test.txt"; ProcessNoRing p = ProcessNoRing(xx); p.init(); p.getWord(xx); Assert::AreEqual(2, p.wordNum); }
後續會改進性能

9.計算模塊部分異常處理說明

-輸入文件不存在單元測試

例如輸入111.txt,可是在這個目錄下沒有這個文件,會報錯:open file failed!!!學習

-輸入的單詞數量過多測試

例如輸入五百個以上不一樣的單詞的文件,會報錯:too many words!!!

-輸入了有環的指令但圖中沒有環

報錯:topologicalSort successed! 表示能夠拓撲排序,圖中無環

-輸入了無環的指令但圖中有環

報錯:topologicalSort failed! 表示不能夠拓撲排序,圖中有環

-輸入的首字母有除了字母以外的字符出現

報錯:illegimate input as first char X(表示錯誤的字符)

-輸入的尾字母有除了字母以外的字符出現

報錯:illegimate input as last char X(表示錯誤的字符)

-輸入的某個單詞自身首尾相同

不會報錯,不會自身成環

-輸入單個字母的單詞

不會報錯,視爲正常單詞

10.界面模塊(若是沒有實現GUI,則能夠描述命令行模塊)的詳細設計過程

這個主要就是運用狀態機的知識來處理這個命令行參數。
主要函數有下面三個

void FirstState(char *argv[]);
void SecondState(char *argv[]);
void ThirdState(char *argv[]);

這個主要就是識別到-r進入第一個狀態,而後識別到-h或者-t進入第二個狀態,最後-w,-c進入第三個狀態。
在這個過程當中,咱們會把一些參數轉爲bool型變量。

void FirstState(char *argv[]) {
    if (strcmp(argv[ArgvCnt], "-w") == 0 || strcmp(argv[ArgvCnt], "-c") == 0) {
        process = strcmp(argv[ArgvCnt], "-w") == 0 ? 0 : 1;
        ArgvCnt++;
        ThirdState(argv);
    }
    else if (strcmp(argv[ArgvCnt], "-h") == 0 || strcmp(argv[ArgvCnt], "-t") == 0) {
        ProStart = strcmp(argv[ArgvCnt], "-h") == 0;
        ProEnd = strcmp(argv[ArgvCnt], "-t") == 0;
        ArgvCnt++;
        if (strlen(argv[ArgvCnt]) == 1 && isalpha(argv[ArgvCnt][0])) {
            StartWord = argv[ArgvCnt][0];
            EndWord = argv[ArgvCnt][0];
            ArgvCnt++;
            SecondState(argv);
        }
        else {
            ErrorPrint(argv);
        }
    }
    else {
        ErrorPrint(argv);
    }
}

部分函數如上所示。

11. 界面模塊(GUI或命令行模塊)與計算模塊的對接

int EnalbleLoop; //是否容許單詞環 (0不容許,1容許)
int process;    //處理單詞的方式 (0爲單詞數量,1爲單詞字母數)
int ProStart; //是否指定首字母(0不指定,1指定)
char StartWord; //首字母
int ProEnd;   //是否指定尾字母(0不指定,1指定)
char EndWord;  //尾字母
string fileName;  //文件路徑

如上所示,這個界面模塊和計算模塊主要就是經過這幾個全局變量進行對接,命令行的參數已經徹底轉化爲咱們所需的參數,直接調用便可。

12. 描述結對的過程

咱們結對編程大多時候就坐在一塊兒寫,偶爾經過QQ共享屏幕來一塊兒完成。在思考方面,主要是各自上網蒐集方法,我搜了無環的狀況,他搜了有環的狀況。而後他寫了命令行輸入的部分,我寫了處理輸入文件的部分,以後我完成了無環的部分,他完成了有環的部分,中間也一塊兒討論並告訴對方實現的原理。在結對的過程當中,咱們的確發現了對方編程時的bug,也統一了編程的風格,而且互相瞭解了對方完成模塊的實現過程。

13. 說明結對編程的優勢和缺點;結對的每個人的優勢和缺點在哪裏

結對編程

結對編程的優勢:可讓兩我的互相監督對方,使得被監督者能被迫的專一,而且能夠及時發現被監督者的bug
結對編程的缺點:兩我的一塊兒幹一件事情,使得花費的時間變多,而且可能會閒聊。

隊友

-優勢1:開朗有熱情
-優勢2:隨和有耐心
-優勢3:踏實且認真
-缺點0:在時間規劃上過於理想

本身

-優勢1:不懂就問積極上網查找方法
-優勢2:積極交流
-優勢3:勇敢的發現bug
-缺點0:喜歡拖沓,實現部分功能便跑去作其餘事情,不能一氣呵成

14.PSP表格回填

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃
.Estimate 估計這個任務須要多少時間 2000
Development 開發
.Analysis 需求分析 (包括學習新技術) 220 250
.Design Spec 生成設計文檔 160 120
.Design Review 設計複審 (和同事審覈設計文檔) 140 120
.Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 40 30
.Design 具體設計 400 300
.Coding 具體編碼 400 500
.Code Review 代碼複審 250 200
. Test 測試(自我測試,修改代碼,提交修改) 220 260
Reporting 報告
.Test Report 測試報告 200 100
.Size Measurement 計算工做量 30 20
·Postmortem & Process Improvement Plan 過後總結, 並提出過程改進計劃 50 30
Sum 合計 2110 1930
相關文章
相關標籤/搜索