項目 | 內容 |
---|---|
做業所屬課程 | 2019軟件工程_羅傑 |
做業要求連接 | 結對項目做業 |
課程目標: | 進行結對編程實踐 |
該做業的幫助 | 實踐結對編程,熟悉雙人軟工開發流程 |
隊友的結對項目總結 | 連接 |
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | ||
- Estimate | - 估計這個任務須要多少時間 | 60 | |
Development | 開發 | ||
- Analysis | - 需求分析(包括學習新技術) | 240 | |
- Design Spec | - 生成設計文檔 | 90 | |
- Design Review | - 設計複審 (和同事審覈設計文檔) | 90 | |
- Coding Standard | - 代碼規範 (爲目前的開發制定合適的規範) | 30 | |
- Design | - 具體設計 | 300 | |
- Coding | - 具體編碼 | 500 | |
- Code Review | - 代碼複審 | 300 | |
- Test | - 測試(自我測試,修改代碼,提交修改) | 300 | |
Reporting | 報告 | ||
- Test Report | - 測試報告 | 120 | |
- Size Measurement | - 計算工做量 | 30 | |
- Postmortem & Process Improvement Plan | - 過後總結, 並提出過程改進計劃 | 30 | |
合計 | 2090 |
看教科書和其它資料中關於Information Hiding, Interface Design, Loose Coupling的章節,說明大家在結對編程中是如何利用這些方法對接口進行設計的html
計算模塊是項目核心,計算功能封裝在gen_chain_cpp函數接口中,重點在於從接受命令的外模塊獲取命令和單詞,調用gen_chain_cpp函數計算出最長路徑。
算法思路簡介:根據函數獲取的單詞表,從中取得有效單詞加入有效單詞表中,建單詞表的同時爲每一個單詞創建後繼表,計算入度,最終創建鄰接鏈表。以後計算路徑,對因而否有環的兩種狀況,首先會對單詞進行拓撲排序,若能順利進行拓撲排序,則是否有參數-r都採用動態規劃算法;若不能順利完成拓撲排序,則說明有單詞環存在,此時檢查是否有-r參數存在,沒有則返回異常信息,有則採用深度優先算法逐個節點進行搜索。
算法關鍵及獨到之處:在節點數據結構中同時存儲了單詞長度,所以計算時可根據-c和-w參數自由選擇路徑計算方式。在計算無環路徑時,有無首字母要求的算法存在差別:如有首字母要求,則動態規劃計算的起點只會選擇符合首字母要求的單詞,沒有首字母要求時則是會選擇入度爲0的點做爲起點進行計算。而對於有無肯定尾字母的狀況,根據動態規劃算法的結果,每個節點均會存儲以該節點爲結尾的最長鏈的路徑和長度,所以只需在獲取結果時選擇符合尾字母要求的點,選出最長路徑輸出,無尾字母要求則直接從中選出最長路徑輸出。c++
計算模塊接口部分的性能改進。 記錄在改進計算模塊性能上所花費的時間,描述你改進的思路,並展現一張性能分析圖(由VS 2015/2017的性能分析工具自動生成),並展現你程序中消耗最大的函數
在完成程序的基本功能後,咱們採用了一些數據對程序進行測試,在少許單詞的數據下測試,咱們修復了程序的一些邏輯問題,在可以正確運行小文本數據以後,咱們利用一些大文本數據對程序進行測試,測試結果比較使人失望:因爲數據結構的設計問題,程序出現了爆內存的問題。以後咱們經過對數據結構進行重構優化,修復了這一問題,如下是一部分性能測試截圖:
以上能夠看出耗時最多的時進行動態規劃計算時的函數,咱們的動態規劃計算性能還有提高空間。git
如下是帶有-r參數且圖中有環的狀況,能夠看出searchpath做爲深度優先遞歸函數被頻繁調用:
因爲採起暴力枚舉的方法來進行有環路徑的搜索,運行速度較慢,性能仍須要改進。github
Design by Contract,即契約式編程。咱們在聲明函數時對函數輸入輸出是有所設計、指望的,將這一指望明確寫出稱爲contract。算法
這一行爲的好處是每一個人在契約範圍內對本身的代碼負責,有問題時能夠迅速找到負責人。編程
在本次做業中,咱們共同開發整個項目,所以並無嚴格按照契約式編程的方式來完成程序,更多的進行口頭溝通,提升效率。c#
如下是單元測試覆蓋率截圖:
爲了對計算模塊所能遇到的各類狀況進行測試,咱們採用了大量測試樣例對程序進行測試,如下僅展現部分單元測試代碼:
安全
根據可能出現的狀況,咱們對如下9種異常狀況作了處理:
一、出現除了"-r -c -w -t -h"之外的關鍵字,如"-x"
單元測試用例:
數據結構
二、-c -w同時出現
單元測試用例:
框架
三、同一種參數重複出現,如 -t a -t a 或 -w -w
單元測試用例:
四、-c和-w參數缺失
單元測試用例:
五、-h 後面缺乏字符
單元測試用例:
六、-t 後面缺乏字符
單元測試用例:
七、命令中出現多餘字符
單元測試用例:
八、文件打開失敗
九、缺乏-r參數的狀況下文本有環,該狀況由計算模塊經過拓撲排序後得出文本是否存在單詞環,返回信息給界面模塊進行異常處理
界面咱們僅採用簡單的命令行方式處理:
如下是命令行界面:
界面模塊的對接就是界面模塊從命令行獲取所需數據,以後調用計算模塊方法對計算模塊進行調用,計算模塊返回處理結果信息後,界面模塊做出反饋。
結對編程優缺點
我和搭檔的優缺點
本人 | 搭檔 | |
---|---|---|
優勢1 | 熟悉c#,較熟悉vs2017 | 調試能力強 |
優勢2 | 較熟悉框架、接口設計 | 對題目需求理解較細緻 |
優勢3 | 待人友善,樂於溝通 | 待人友善,樂於溝通 |
優勢4 | 能提出一些新的設計想法 | 能快速響應需求(設計)中的變化 |
缺點 | debug時不細緻,容易進入思惟慣性找不到問題 | 對vs較不熟悉 |
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | ||
- Estimate | - 估計這個任務須要多少時間 | 60 | 60 |
Development | 開發 | ||
- Analysis | - 需求分析(包括學習新技術) | 240 | 400 |
- Design Spec | - 生成設計文檔 | 90 | 90 |
- Design Review | - 設計複審 (和同事審覈設計文檔) | 90 | 60 |
- Coding Standard | - 代碼規範 (爲目前的開發制定合適的規範) | 30 | 10 |
- Design | - 具體設計 | 300 | 300 |
- Coding | - 具體編碼 | 500 | 720 |
- Code Review | - 代碼複審 | 300 | 300 |
- Test | - 測試(自我測試,修改代碼,提交修改) | 300 | 240 |
Reporting | 報告 | ||
- Test Report | - 測試報告 | 120 | 120 |
- Size Measurement | - 計算工做量 | 30 | 30 |
- Postmortem & Process Improvement Plan | - 過後總結, 並提出過程改進計劃 | 30 | 30 |
合計 | 2090 | 2360 |