結對做業

結對做業

開發耗時

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

接口設計

在設計之初,考慮到爲下降代碼單元的耦合度,咱們將需求簡單拆分爲3個類,分別是輸入,輸出,和單詞處理。使各個代碼單元之間的耦合度儘可能最低,不須要與其餘代碼糾纏不清。將類封裝,數據以接口的形式傳入。git

計算模塊接口的設計和實現過程

  • 在最初分析需求時,咱們將代碼分紅4個類,分別是負責輸入數據的input,輸出須要數據的output,對需求處理的wordHandler,和統合的main。
    input類含函數:FIleInput(); 用於提取文件中的單詞信息。
    output類含函數:_output(); 用於輸出要求的計算結果數據。
    wordHandler類含函數:get_chain_word(); 用於尋找最多單詞數的最長鏈。
    get_chain_char(); 用於尋找最多字母數的最長鏈。
    這三個類每一個類都是很獨立的代碼單元,三者間並無什麼關係,使得程序的耦合度很低。github

  • 算法的關鍵是:蠻力求解。算法

  • UML圖
    編程

  • 計算模塊接口部分的性能改進
    由於查找的最長鏈爲無序數組,因此在進行查找比較時並沒有優化可說,查找的時間複雜度仍未O(n)。
    數組

Design by Contract, Code Contract對結對做業的影響

這促使咱們組在結對工做時按時按點準時開始工做,每次工做都儘可能不拖延按時完成計劃好的工做進度。app

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

  • 測試代碼
TEST_METHOD(TestMethod1)
        {
            FileInput fin;
            fin.readFile("D:\\word_chain\\01.txt");
            wordHandler wh(fin);
            char *words[20];
            vector<string> result;
            wh.gen_chain_word(words, 0, result, 0, 0, false);
            Assert::IsTrue(result.at(0) == "apple");
            Assert::IsTrue(result.at(1) == "elephant");
            Assert::IsTrue(result.at(2) == "toad");
        }

        TEST_METHOD(TestMethod2) {
            FileInput fin;
            fin.readFile("D:\\word_chain\\02.txt");
            wordHandler wh(fin);
            char *words[20];
            vector<string> result;
            wh.gen_chain_char(words, 0, result, 0, 0, false);
            Assert::IsTrue(result.at(0) == "pseudonym");
            Assert::IsTrue(result.at(1) == "moon");
        }
  • 測試數據
    在測試數據上,咱們除了邊界數據和錯誤數據外,還測試了以同一單詞重複出現的狀況函數

  • 測試覆蓋率截圖
    性能

計算模塊部分異常說明

  • FINException:檢測用戶輸入文件不合法時,拋出異常,main中捕獲直接退出。

命令行設計過程

按指導書中的命令行參數,設計瞭解釋程序。如出現'-r',則將對應的bool型變量置爲true,'-h'則按順序讀入下一個命令行參數,將其複製給char型變量,'-t'同上。'-w'先按順序讀入下一命令行參數做爲文件路徑,調用gen_chain_word()接口;'-c'同上,不一樣在於調用gen_chain_char()接口。讀到文件路徑後完成對命令行的解析。單元測試

while (true)
    {
        con = false;
        switch (ptr[1])
        {
        case 'r':
            recur = true;
            con = true;
            break;
        case 'h':
            ptr++;
            head = *ptr;
            con = true;
            break;
        case 't':
            ptr++;
            tail = *ptr;
            con = true;
            break;
        case 'w':
            fun = 'w';
            break;
        case 'c':
            fun = 'c';
            break;
        default:
            break;
        }
        if (con)
        {
            i++;
            ptr = argv[i];
            continue;
        }
        else
        {
            break;
        }
    }
    try
    {
        fin.readFile(argv[i + 1]);
    }
    catch (FINException& fine)
    {
        fine.what();
        return 0;
    }
    if (fun == 'w')
    {
        wordHandler whword(fin);
        whword.gen_chain_word(_words, _len, result, head, tail, recur);
    }
    else if (fun == 'c')
    {
        wordHandler whchar(fin);
        whchar.gen_chain_char(_words, _len, result, head, tail, recur);
    }
    else
    {
        cout << "Invalid command!" << endl;
    }

結對體驗

兩我的結對編程有助於提高代碼質量,隨時複審,能儘早發現和解決一些問題,兩我的能夠拓寬思路,避免一我的陷入死衚衕。
學習

對結對做業的優缺點

  • 優勢
    • 能隨時複審,可以及時發現邏輯錯誤
    • 能在發現問題是互相交流拓寬思路
    • 雙方適時的交換角色能改變角度審視本身的邏輯和代碼細節
  • 缺點
    • 在發現bug交流時容易打斷我的的思路
相關文章
相關標籤/搜索