標籤:
結對程式設計項目(除附加題)開發過程
結對同伴:李雲濤
一、照片
結對同伴在家,等回校後補上。
二、結對程式設計評價
優點:
1、兩個人的編程思想、演算法、代碼風格可以互相借鑒和學習,對於兩人的編程水平的提高都很有協助。
2、兩個人可以分工寫不同的相對獨立的模組,加快開發的進度。
3、自己程式的bug可能自己怎麼找都找不到,而自己的同伴就能很快找到。
缺點:
有些工作必須得兩人在一起才能進行,而兩人都閒置時間不是太多,很多時候需要通過線上進行交流,導致工作被耽擱。
我自己的優點:做事認真、有恒心、有學習精神。
我自己的缺點:編碼風格較差。
對方的優點:編碼能力很強、專業功底紮實、提的建議很中肯。
對方的缺點:比較忙、有時抽不出時間做結對項目。
三、資訊隱藏、介面設計、松耦合設計方法的使用
這三種設計方法其實本質是同一個:將屬於自己類或者模組維護的資訊通過私人屬性保護起來,對外不可見,對這些資料的操作和維護由本模組獨立完成。為了讓外部的功能模組使用本模組的服務,就通過提供給外部一組正常化的函數調用介面來實現,外部模組只需要瞭解每個函數或方法的原型及其規格,就可以正確地使用這些服務。這樣達到的好處是:每一個模組彼此之間的功能是獨立的,它們內部的實現不依賴與外部模組,也即是說,不同人寫的相同功能的模組應該是可以互相替代的。
這三種思想其實都是物件導向思想的體現。
就我們編程而言:核心模組、測試模組、使用者介面模組是三個功能完全獨立的模組,因此,我們完全可以將這三個模組獨立開發,由核心模組提供給測試模組和使用者介面模組一定的介面,兩者只需要輸入參數(generate、check、calc三者選其一),就可以調用核心模組的相應代碼來執行。如果後期要對使用者介面進行最佳化,那麼只需要更改使用者介面模組即可,大大減小了維護的工作量。
四、契約式編程
契約式設計(英語:Design by Contract,縮寫為 DbC),一種設計電腦軟體的方法。這種方法要求軟體設計者為軟體組件定義正式的,精確的並且可驗證的介面,這樣,為傳統的抽象資料類型又增加了先驗條件、後驗條件和不變式。這種方法的名字裡用到的“契約”或者說“契約”是一種比喻,因為它和商業契約的情況有點類似。(轉自維基百科)
我的理解:所謂契約式編程,就是模組使用者和模組實現者遵守一個共同的約定:模組使用者保證傳給模組實現者的參數是符合模組實現者的方法的前置條件的,模組實現者保證在前置條件得以滿足的情況之下,傳回給模組調用者的參數是符合後置條件的,並且,如果在方法執行過程中改變了某些外部變數,必須讓模組調用者顯示知曉。
這種編程設計的優點是調用者無需關心實現者的實現細節,只需瞭解給出的規格就可以正確使用每一個方法,比如我們用java寫程式,String類的每一個方法都會給出這個方法的原型以及簡單的說明,我們不知道java原始碼是如何?這些方法的,但是這完全不妨礙我們正常使用。同樣地,對於模組調用者而言,他也無需關心調用者會如何使用自己的方法,他只需要專註於實現規格規定的功能即可。這樣帶來的好處是程式各個模組之間的獨立性增強,更加利於維護和擴充。
這種方法的壞處則是如果有一方沒有遵守契約,那麼可能會帶來嚴重的後果,比如調用者傳入的資料不符合前置條件,而實現者又沒有進行檢查,而錯誤又在代碼執行了很久之後才出現,那麼排查的工作量將是巨大的。
很遺憾,我們此次作業沒有使用這樣一個設計(時間比較緊),爭取在下一個項目得以改正。
五、單元測試
以我們寫的一個BasicNum類為例,該類有三個方法:floatCmp、gcd、power,我們寫了一個測試檔案BasicNumTests,分別測試這三個方法,如下:
由可知,三個方法測試通過,且該類的程式碼涵蓋範圍為100%。
六、UML順序圖表
七、演算法關鍵
我們要實現三個功能:自己產生算式自己計算,檢查別人的算式是否計算正確,計算一個算式的結果。因此,我們抽象出了這幾個獨立的功能模組:產生算式模組、計算模組、輸入輸出模組、讀算式分析模組。其中,產生算式模組通過隨機函數隨機產生各種數字、運算子和括弧,並且調用讀算式分析模組將中綴運算式轉換成尾碼運算式,計算模組讀入尾碼運算式算出結果,如果結果合法(非負且不被0除),那麼記錄下這個算式和答案,返回產生算式模組產生下一個算式,如果不合法則重建。這是對於自己產生算式自己計算這一功能。對於檢查別人的算式和結果,只需要讀入算式進行分析,計算出結果,與答案比對即可。對於純計算模組,則直接調用分析模組和計算模組即可。輸入輸出模組完成與其他模組的傳參互動工作。
一個細節:由於要支援分數,所以我們的所有資料全部用一個Number類型來表示,由於所有的輸入輸出資料都是有理數,我們全部轉換成分數來處理,重設了分數下的四則運算和關係運算子,最後結果根據需要用分數或者小數表示,這樣就不會因為浮點數運算而帶來精度損失。
八、總結
第一次結對程式設計項目,把一個看似很簡單的程式封裝成一個可用的軟體,其中遇到了很多很多的問題,比如測試檔案怎麼寫?UI怎麼寫?C#的文法不是很熟悉等等,也因為不熟悉VS2015的編程環境而忙活了好半天,不過最後做出來的軟體儘管青澀生疏,畢竟是麻雀雖小五髒俱全,能自己獨立開發一款軟體,還是很有成就感的。
結對程式設計項目(除附加題)開發過程