程序的測試分爲大小不一樣的幾個階段,咱們在這個階段的做業中進行的是基於JUnit測試框架的單元測試。java
單元測試是指對程序中最小的可測試單元進行測試。咱們測試的單元是方法。單元測試的特色使是從結果出發,尋找代碼的漏洞。一個全面的單元測試可以對覆蓋到方法執行過程當中遇到的全部狀況,也就是覆蓋全部分支條件。經過單元測試則說明該方法可以徹底符合指望的規格。所以,單元測試的優勢是可以確保一個方法的正確性。然而構造一個完美覆蓋的單元測試很難,尤爲是當原方法的分支條件不少的時候。編寫單元測試一般要花費比編寫原方法更多的時間。編程
正確性論證也是證實方法是否符合指望規格的手段。與單元測試從結果出發不一樣,正確性論證是從代碼邏輯出發,論證方法如何完成規格。正確性論證更像是數學中的證實題,須要嚴謹嚴密的邏輯思惟。完成正確性論證的前提是對代碼邏輯徹底掌握。安全
正確性論證可以對全部分支進行論證,較單元測試來講更容易達到徹底覆蓋,然而正確性論證過程較爲複雜,相比單元測試"粗暴"地判斷對錯來講更難保證論證結果的正確性。多線程
因爲兩者具備各有優劣,能夠互相補充,兩者兼用可以更充分的保證代碼的正確性。框架
OCL(object constraint language)語言即對象約束語言。它是一種用於約束指定模型的定義,形式化的沒有二義性的語言。模塊化
OCL擁有本身的語法體系,有數據類型和運算符,更優高級數據類型例如羣、集合、袋和序列。在對象約束方面,OCL表達式包括不變量、前置條件和後置條件等。單元測試
OCL同咱們學習的JSF用途相同,都是用於描述對象的約束規範的形式化語言。用兩者描述的約束都是沒有二義性的。不一樣的是,OCL有一套比JSF更加完備高級的語法結構,而JSF只有二階邏輯結構,沒有高級的分支語句等,也沒有對數據類型的描述。學習
UML類圖:測試
UML順序圖:優化
UML狀態圖:
課程分爲四個模塊。
第一個模塊主要熟悉面向對象編程方法以及對象機制。這個模塊是對java語言和麪向對象的初步接觸。
第二個模塊是多線程編程,以及線程安全問題。這個模塊訓練了多線程的思惟。
第三個模塊是規格設計。這個模塊咱們將代碼規範化,使代碼更加規格化、模塊化。
第四個模塊是基於規格的測試與論證。這個模塊學習了更加嚴謹規範的測試方式。
能夠說這四個模塊之間就是四層積木的關係,層層遞進,讓咱們從零開始體會面向對象程序從構思、實現到測試的完整過程,並在這個過程當中逐漸強化面向對象的編程思想。
在此以前徹底沒有接觸過面向對象有關知識,編程還停留在一個程序幾個方法的過程式編程中。在第一次多項式的編程中,我僅僅使用了兩個對象,且沒有作到對象的封裝,這兩個對象之間相互調用,邏輯十分混亂;第三次ALS電梯在重構以前更是在調度類中一個方法寫了兩百多行,徹底沒有作到方法的抽象,致使程序十分臃腫,不少BUG發現了卻沒法定位修復;
從多線程電梯開始決定優化代碼結構,至此開始,之後的做業中慢慢造成了面向對象的基本思想和思路框架,代碼結構也在一次次訓練中獲得改善。
總的來講進步很是明顯。經過這門課程的高強度訓練,如今可以比較完整的從問題中抽象出對象並進行模塊化的編程,代碼的規範程度也有很大提升。但仍有不少不足之處,例如對接口的理解感受不是很深入。
工程化即系統化、模塊化、規範化的過程。指將具備必定規模數量的單個系統或功能部件,按照必定的規範,組合成一個模塊鮮明、系統性強的總體。工程化開發的關鍵是封裝,將各類資源封裝成一個個模塊以後,咱們沒必要再關心該封裝下的具體細節,只須要將這些模塊組裝成一個總體就可以造成一個完整的工程。
面向對象的設計原則與工程化開發中模塊化的要求不謀而合,然而面向對象設計缺少清晰的層次關係,面對複雜的操做過程時實現效果不佳,涉及多個對象之間共同協做時也會顯得不那麼靈活,這是面相對象設計的一個不足之處。
規格設計是工程化開發最重要的一環。良好的規格約束可以便於團隊合做與相互理解,實現更好的協做關係。