【軟件工程】結對項目

項目 內容
課程 軟件工程(羅傑)
做業要求 結對項目-單詞最長鏈
本次做業的目的 體驗結對編程
本次做業對個人鍛鍊 熟悉結對編程,瞭解結對編程的優勢和缺點
項目github地址 項目地址

1.Github項目地址

項目地址git

2.預估耗時PSP

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

3.接口設計方法

  • Information Hiding(信息隱藏)github

    信息隱藏是指在設計和肯定模塊時,使得一個模塊內包含的特定信息(過程或數據),對於不須要這些信息的其餘模塊來講,是不可訪問的。這個體如今類的私有屬性和函數上。算法

  • Interface Design(接口設計)編程

    接口設計是對程序的進一步封裝,主要依賴的原則有:單一職責原則、里氏替換原則、依賴倒置原則、接口隔離原則、開閉原則等。本次項目中的程序並未用到類的繼承,除了里氏替換原則以外,其餘的幾個接口原則基本都知足了。數組

  • Loose Coupling(鬆散耦合)函數

    模塊間的耦合度是指模塊之間的依賴關係,包括控制關係、調用關係、數據傳遞關係。模塊間聯繫越多,其耦合性越強,同時代表其獨立性越差( 下降耦合性,能夠提升其獨立性)。本項目分爲兩個模塊,輸入模塊和計算模塊,基本實現了高內聚低耦合的要求。oop

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

​ void Get_num(char* word[], int len, bool Weight);
​ // 構造圖的模塊
​ void topologicalSort();
​ // 拓撲排序模塊
​ void longestPath(int start, char* word[], bool begin_end, bool Weight);
​ // 從點start找出最長鏈的模塊
​ void Every_Path(int chose, char* word[], char end_letter, char start_letter, bool Weight);
​ // 根據處理輸入的結果,以及接口實現找word list中的最長鏈性能

int getWord(char *words[], string path);
// 根據路徑path,從文件中讀出 *word[]
void paraAnalysis(int argc, char * argv[], char opt[][5], int & flag_wc, char & head, char & tail, bool & para_loop, string &filePath);
// 根據argc,agrv[], 處理參數,得出輸入參數的類型,
int gen_chain_word(char* words[], int lens, char* result[], char head, char tail, bool enable_loop);
// 處理單詞個數最長的單詞鏈
int gen_chain_char(char* words[], int lens, char* result[], char head, char tail, bool enable_loop);
// 處理字母個數最多的單詞鏈的長度
  • 咱們接口主要體如今gen_chain_char 函數與 Every_Path 函數,gen_chain_char 函數將輸入處理完畢,而後傳入參數,表示計算的步驟須要進行哪些計算。這裏主要體現的接口參數是 word(表示單詞鏈)head(單詞鏈的頭)tail(單詞鏈的尾)chose(從 gen_chain 到 Every_Path的選擇參數)。這是最主要的接口設計與實現過程。
  • 在計算模塊的內部,咱們也使用了接口。在函數Every_Path 與 函數longestPath 之間,咱們爲了實現函數功能的單調性。因此我進一步在 Every_Path 中,將函數的功能細分。在 Every_Path 中主要是將函數細分,而longest_Path 只實現了從某一個起點開始找出最長鏈。這個設計使模塊內的函數功能更加單一,也提升了函數的複用性。

5.計算模塊UML建模

UML

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

計算的核心部分咱們採用的是拓撲排序動態規劃的算法。比暴力搜索比起來下降了計算的複雜性。在拓撲排序階段,算法的採用的是類DFS的算法。在動態規劃階段,時間複雜度是O(n)。咱們沒進入下一個點就會存儲到這一點的最長路徑。在考慮有環的算法的時候,咱們想的是對於環,能夠將環切出來,也就是將環的入口鏈與出口鏈分出來,這樣的話在環內計算環的最長鏈,在環外面加上入口最長鏈與出口最長鏈便可。不幸的是,咱們並無實現,還不如直接和其它同窗同樣使用暴力搜索。花了一些時間實現,可是沒有成功。單元測試

性能分析報告

消耗最大函數

7.Design by Contract, Code Contract

契約式設計就是按照某種規定對一些數據等作出約定,若是超出約定,程序將再也不運行,例如要求輸入的參數必須知足某種條件。學習

優勢:

  • 充當外部和內部API的檢查文檔 。
  • 是一種穩固的保障,不只意味着在知足前置條件時,代碼將以特定的方式運行,還意味着在不知足的時候,就不會執行。
  • 增長程序的健壯性、魯棒性。

缺點:太過繁瑣,使用起來比較費時費力。

咱們的項目並未嚴格按照契約式編程,可是對於非預期的狀況作了輸出提醒處理,而且終結程序。

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

因爲用VS的單元測試出現了一些問題,一直都沒法運行測試程序。因此咱們就採用了運行測試的方法,構造好測試樣例後,不斷重複運行程序,與預期效果比對,從而達到測試效果,下面是部分測試的截圖和樣例:

  • 例子一:例子1
  • 例子二: 例子二

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

  • 命令行參數中沒有-r, 可是文本自己構成環,會報告相關異常錯誤,並結束程序。
  • 文本文件爲空,傳進去的單詞數組爲空,會報告異常錯誤,並結束程序。

10.命令行模塊設計過程

  • 命令行模塊採用argc, char *argv[]兩個參數做爲命令行輸入的接受單元,其中argc代表輸入參數的個數(包括程序名),argv是一個字符型的指針數組,存儲具體輸入的參數。

  • 爲了便於調試,最初採用的是控制檯輸入,即利用控制檯模仿命令行輸入。首先設置int 類型的變量argc, 字符指針數組argv[], 經過控制檯將這兩個數據補齊,從而達到模擬命令行的功能,這樣就將命令行和其餘模塊分離開來。

11.命令行模塊與計算模塊的對接

命令行模塊有兩個參數做爲接口,計算模塊有相應的參數來接受命令行輸入的參數,從而實現對接。

12.結對編程過程

下課後在空教室內進行結對編程。

結對編程

13.結對總結

​ 結對編程能夠很大程度上減小BUG的數量,而且將編程這一過程變得相對輕鬆,簡單,在肯定了詳細設計以後,能夠很大程度上提升編程的速度和效率,可是,結對編程也確實是須要兩人的默契配合,起初的磨合階段其實效率仍是比較低的,而且對於過於簡單的程序編寫,不如兩人分開的效率高。總的來講結對編程仍是有其獨特的優點的,值得體驗和學習。

成員 優勢 缺點
吳光輝 認真仔細;總結能力強;果斷 急躁,強勢
吳楓 脾氣好;認真負責;樂觀向上;有探索精神;堅持不懈 執行力稍欠缺

14.PSP表格

PSP Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 60(1h) 60(1h)
· Estimate · 估計這個任務須要多少時間 60(1h) 60(1h)
Development 開發 1500(25h) 1950
· Analysis · 需求分析 (包括學習新技術) 120(2h) 120(2h)
· Design Spec · 生成設計文檔 120(2h) 60(1h)
· Design Review · 設計複審 (和同事審覈設計文檔) 60(1h) 60(1h)
· Coding Standard · 代碼規範 (爲目前的開發制定合適的規範) 60(1h) 30(0.5h)
· Design · 具體設計 120(2h) 200
· Coding · 具體編碼 600(10h) 1200
· Code Review · 代碼複審 240(4) 200
· Test · 測試(自我測試,修改代碼,提交修改) 180(3h) 80
Reporting 報告 240(4h) 240(4h)
· Test Report · 測試報告 120(2h) 120(2h)
· Size Measurement · 計算工做量 60(1h) 60(1h)
· Postmortem & Process Improvement Plan · 過後總結, 並提出過程改進計劃 60(1h) 60(1h)
合計 1800(30h) 2250
相關文章
相關標籤/搜索