結對項目

教學班級:005
項目地址:https://github.com/gzhGit/Intersectprogit

項目 內容
這個做業屬於哪一個課程 班級博客
這個做業的要求在哪裏 結對項目
我在這個課程的目標是 學會團體和我的的軟件開發方式
這個做業在哪一個具體方面幫我實現目標 結對編程,體會合做

在開始實現程序以前,在下述 PSP 表格記錄下你估計將在程序的各個模塊的開發上耗費的時間。

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

看教科書和其它資料中關於 Information Hiding,Interface Design,Loose Coupling 的章節,說明大家在結對編程中是如何利用這些方法對接口進行設計的。

Information Hiding:對這一項應用比較少,全部類的屬性和方法基本都是public,沒有特別隱藏的方法或者變量。
Interface Design:只是建立一個能工做的應用程序是不夠的。 用戶期待直觀的,吸引人的,強壯的應用。因此咱們採用gui來完成與用戶的交互。圖形界面簡單直接,易於操做。
Loose Coupling:不少不須要交流的參數和變量都封裝在模塊單元內部,不用被其餘單元知曉,其餘模塊單元只須要知道提供的函數接口須要的數據類型,以及返回的數據類型。github

計算模塊接口的設計與實現過程。設計包括代碼如何組織,好比會有幾個類,幾個函數,他們之間關係如何,關鍵函數是否須要畫出流程圖?說明你的算法的關鍵(沒必要列出源代碼),以及獨到之處。

咱們在core模塊中,爲點、線、圓各建了一個類。其中,線分爲直線、線段、射線,這三種都屬於線這個類,用類中的一個整型變量來區分(0-直線,1-射線,2-線段)。而後線與線求交點,而後線與圓求交點,而後圓與圓求交點三個函數(直線、線段、射線都屬於線,用同一個函數處理,在求出交點後,根據射線和線段的性質對交點取捨)。這些外部單元模塊不須要知道,core向外提供了三個重載函數solve做爲藉口,外部模塊只須要按頭文件中的函數聲明順序輸入參數便可(輸入的參數就和結對項目中給的樣例是同樣的,好比直線就輸入一個字符‘L’,四個整型表明兩個點座標,採用這樣的標準輸入來下降耦合度)。算法

畫出 UML 圖顯示計算模塊部分各個實體之間的關係。

計算模塊接口部分的性能改進。記錄在改進計算模塊性能上所花費的時間,描述你改進的思路,並展現一張性能分析圖(由VS 2015/2017的性能分析工具自動生成),並展現你程序中消耗最大的函數。

咱們起初用來存儲幾何類型數據信息的數據結構是set容器,可是set容器是一個基於紅黑樹的容器,他須要維護樹結構的平衡和順序,這會帶來時間開銷,然而這些功能對於此次的項目是沒有必要的,因此咱們又換用了vector容器。vector容器至關於就是一個動態數組,他的插入、刪除速度要因爲set,可是數組擴容時,vector須要複製整個數組,也須要大量的時間開銷。vector還有一個致命的問題。在插入幾何對象時須要判斷這個集合對象是否已經存在容器中,要解決這個問題,vector須要遍歷一遍整個數組,在分析圖中咱們也能夠看到,在插入點時,爲了不插入重複點,須要大量時間遍歷數組,佔到了90%以上的時間開銷。因而咱們決定使用hash結構來存儲幾何類型,能夠避免對容器的遍歷
編程

看 Design by Contract,Code Contract 的內容:

http://en.wikipedia.org/wiki/Design_by_contract
http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx
描述這些作法的優缺點,說明你是如何把它們融入結對做業中的。
優勢:
(1)編寫者和使用者均可以獲得足夠的信息。
(2)對於編寫者來講,明確接口功能,檢查預期行爲,幫助debug,縮小了檢測時間的花銷。
(3)對於使用者來講,必要的有關接口的信息,給了使用者正確的使用方法。
缺點:編寫須要額外的時間開銷。數組

計算模塊部分單元測試展現。展現出項目部分單元測試代碼,並說明測試的函數,構造測試數據的思路。並將單元測試獲得的測試覆蓋率截圖,發表在博客中。要求整體覆蓋率到 90% 以上,不然單元測試部分視做無效。

首先咱們考慮全部的幾何類型組合,共有10種(從4個選2個,好比LC相交,從4個選1個,好比LL相交),再根據分支覆蓋狀況添加測試樣例。






微信

計算模塊部分異常處理說明。在博客中詳細介紹每種異常的設計目標。每種異常都要選擇一個單元測試樣例發佈在博客中,並指明錯誤對應的場景。

咱們設計了4種異常狀況:
(1)輸入幾何類型字符不合法,輸入了L, R, S, C以外的幾何類型
(2)輸入的點的座標不在規定範圍內
(3)輸入的直線的兩個端點重合
(4)輸入的圓的半徑r小於等於0


數據結構

界面模塊與計算模塊的對接。詳細地描述 UI 模塊的設計與兩個模塊的對接,並在博客中截圖實現的功能。


ui模塊如圖所示,有兩種輸入方式:(1)直接從文件導入; (2)輸入幾何對象數據信息來增長集合對象。
用戶輸入數據後,ui模塊調用core模塊的solve函數接口,將這些數據傳到core模塊中去運算,core將算出來的交點座標返回給ui模塊,ui在下方的顯示界面上繪製出幾何圖形和交點。架構

界面模塊的詳細設計過程。在博客中詳細介紹界面模塊是如何設計的,並寫一些必要的代碼說明解釋實現過程。

咱們使用了qt的信號與槽機制來實現以上功能。首先咱們所用的組件有6個push button,分別是上圖中給出的6個功能,每一個push button對應一個被用戶點擊都會發出一個clicked()信號(這個信號函數由qt的庫提供),咱們的工做主要是包這些clicked()對應到相應的功能上,也就是qt的信號與槽機制。如下是這幾個槽函數的函數聲明以及6個push botton的聲明,以及註釋說明每一個槽函數具體幹什麼。函數

private: 
        QPushButton     *btnFile;
        QPushButton     *btnHelp;
        QPushButton     *btnLine;
        QPushButton     *btnCycle;
        QPushButton     *btnInfile;
        QPushButton     *btnAbout;
    private slots:
        void on_btnFile(bool checked); //btnfile按鈕的clicked(bool)信號的槽函數,點擊將會進入選擇要導入的文件路徑
        void on_btnHelp(bool checked);//btnHelp按鈕的clicked(bool)信號的槽函數,點擊將會跳出一個文本窗口介紹本UI界面
        void on_btnLine(bool checked); //btnHelp按鈕的clicked(bool)信號的槽函數,點擊將會跳出一個窗口,用戶在這個窗口輸入想要插入的Line的參數
        void on_btnCycle(bool checked); //btnCycle按鈕的clicked(bool)信號的槽函數,點擊將會跳出一個窗口,用戶在這個窗口輸入想要插入的Cycle的參數
        void on_btnInfile(bool checked); //btnInfile按鈕的clicked(bool)信號的槽函數,點擊將會把先前讀入的文件信息轉化爲幾何圖形繪製在畫布上。
        void on_btnAbout(bool checked); //btnAbout按鈕的clicked(bool)信號的槽函數,點擊將會跳出一個文本窗口,窗口中顯示當前已輸入幾何圖形的數字信息。

描述結對的過程,提供兩人在討論的結對圖像資料(好比 Live Share 的截圖)。關於如何遠程進行結對參見做業最後的注意事項。



微信語音形式,界面分享靠截圖。工具

說明結對編程的優勢和缺點。同時描述結對的每個人的優勢和缺點在哪裏(要列出至少三個優勢和一個缺點)。

優勢:(1)兩我的起到了一個相互監督的做用,有助於雙方(尤爲是在寫代碼的一方)集中於工做。 (2)兩我的一塊兒工做,能夠隨時討論程序算法、架構等問題,集思廣益。 (3)一我的在寫代碼的同時,另外一我的在debug,極大的下降了出bug的可能性。 缺點:須要兩我的有比較默契的合做,兩人實力差距也不該過大。

相關文章
相關標籤/搜索