這一階段的兩次做業分別經過編寫測試代碼和書寫正確性論證文檔檢查了ALS電梯程序的正確性。python
直接測試的方式曾經是過去本身檢查本身代碼正確性最經常使用的方法,由於這種方式最爲簡單直接,但只限於發現實際結果與預期結果不符的狀況。編程
第13次做業所要求的測試與過去本身所作的測試有明顯的差別,須要對每一個方法,根據方法的規格進行測試,避免了原來測試的盲目性,而且使用junit自帶的一些功能能夠一次跑多組測試樣例相比手動測試節省了大量的時間。設計模式
可是測試畢竟只是測試,只能證實程序有問題,而不能證實程序沒問題,特別是在規格寫的並怎麼詳細的狀況下,根據規格設計的測試代碼也就沒法徹底驗證程序,即便把代碼覆蓋率和分支覆蓋率都作到100%,也不能說明程序是徹底正確的。安全
而寫正確性論證文檔能夠作到幾乎全覆蓋,我在寫正確性論證文檔的過程當中,常常發現本身原來規格中寫的不怎麼全面的地方,並且還找到了程序結構以及邏輯上的一些不合理的地方,並進行了修改,正確性論證明際上是對本身所寫程序的一次解剖,能夠深刻程序的細節進行分析,然而代價也是巨大的。多線程
爲了這兩次做業我重構了以前的ALS電梯做業,把整個程序設計得儘量簡潔,即便如此這個正確性分析文檔最終寫成後體量仍然十分龐大,有一萬兩千字三十頁,寫了幾乎是整整兩天,寫完之後本身都不想看(心疼一下檢查的老師)。併發
OCL(object constraint language)對象約束語言,一種用來進行約束定義的,形式化的無二義的語言。包含四種基本語言要素。框架
OCL中涉及到上下文,不變量等一系列規範,爲了保證無二義性,相比咱們所使用的JSF更加複雜和精細化,OCL中自己定義了基本數據類型和一些高級數據類型,還有運算符和表達式中的一些書寫規範,幾乎算得上是一種編程語言,這也正對應OCL的實際含義。編程語言
OCL和JSF中都有對前置條件和後置條件的說明,能夠說JSF是一種極大簡化以及自由化了的OCL。工具
UML類圖
學習
UML順序圖
UML狀態圖
從第一部分的Java面向對象基礎開始,到第二章的多線程,再到第三章規格化設計,再到最後一章的測試與論證,第一第二章之間還算有些聯繫,可是跨度極大,有些偏離面向對象的軌道,第三章開始直接跑偏,第四章在第三章基礎上在順着這條跑偏的路繼續狂奔。
第一章是課程的基礎部分,讓咱們對Java語言和麪向對象有了初步的認識。緊接着從第二章開始就踏入了一個未知領域,多線程編程,這與咱們過去所編寫的程序大不相同,在學習了多線程編程以後,許多過去用單線程沒法解決的問題迎刃而解。第三章開始談設計,可是說實話我並不知道這些所謂的設計原則以及煩人的JSF在咱們的做業中能有什麼體現,更多的感受是在沒事找事。第四章在第三章的基礎上根據規格進行測試以及論證,從這算是看到了一些設計原則以及jsf的用處。
回頭來看,OO課程的知識體量十分龐大。
程序結構和質量上的進步是明顯的,過去我寫的代碼一直十分臃腫,前幾回做業的代碼中也有體現,雖然功能正確,可是結構上十分混亂,屬於典型的想一步寫一步,而後回過頭來修修補補,最後的程序可讀性極差。
隨着程序體量不斷增大,原來的編寫方式難以適應,在ALS電梯做業中體現尤其明顯,那次做業的代碼繼承自上一次做業原本就很臃腫,再加上編寫過程當中考慮不周,完成後bug不斷,再加上代碼結構混亂debug十分困難,彷彿是在補丁上打補丁。從第二章開始轉變了模式,先設計再編寫。先打一個基本框架或是流程,而後根據這個框架進行細節擴充,不只縮短了編寫代碼的時間,也減小了bug的數量,同時debug的過程也相比原來更加簡單,代碼的質量有了明顯的提高,可是多線程自己的不肯定性也帶來了許多問題,如何發現bug成了關鍵。
談到設計,上面所說的設計與第三章講的設計模式沒有任何關係,在我看來第三章的內容十分雞肋,浪費時間浪費精力,根據代碼寫jsf已經喪失了jsf原本用途,使用jsf描述設計規格遠不如流程圖結構圖的宏觀把控,也不能像代碼同樣準確描述,因爲是根據代碼寫的jsf,轉化過程當中可能存在問題,代碼正確jsf出錯的狀況層出不窮,再加上jsf可讀性極差,我真的是寧願讀代碼也不想去看jsf。
至於測試和論證總算是給雞肋的jsf一點用武之地,junit測試工具能夠說是開啓了一片新天地,過去的測試過程基本上都是本身構造測試用例而後是轟動測試,偶爾有精力用python寫個腳本自動生成一些測試數據來測試,不過這些方法仍是比較原始。我深刻探究了junit的各類使用方法,收益頗豐。
在互評階段,閱讀別的同窗的代碼,對本身閱讀代碼的能力也是一種鍛鍊,同時也能夠發現其餘同窗在程序設計過程當中的優缺點,從而能夠在本身從此的程序設計中注意這些問題。
實不相瞞,我對工程化開發沒多少理解,僅靠這種一週一次還不停改需求的趕工做業,就算有前期準備也不超過一天,根本不可能有太全局的設計,也不可能徹底像課上所講的設計原則那樣實現,這樣作只會給本身添麻煩。
通常狀況下週六發布做業,白天剛OS,先把OO放一邊,週六晚上分析指導書進行初步設計,並解決指導書中的一(da)些(liang)問題,週日早上進一步構思,進一步分(tu)析(cao)指導書,開始搭框架寫readme,週日下午和晚上基本能夠完成一大半,週一夜再修個仙基本能夠把代碼寫完,週二週三構造數據debug,順便再 改 改 需 求,這基本上就是個人開發流程。
在前幾回博客做業中相關的吐槽已經寫了太多了,在此作個總結。
無論怎麼說,OO課程總算是結束了,度周如年的日子已通過去了,只是但願學院改變折磨下一代的想法(這種心理是極其變態的,只會致使惡性循環),不知爲什麼這種思想還能拿出來大搖大擺的宣傳(難不成是爲了掩飾課程設計上的漏洞?)。雖然沒有報名助教團隊,但仍是但願可以針對以上問題對課程進行改良甚至大換血,放過下一代。
最後再次感謝在這一學期一塊兒探討OO相關問題,分享測試數據設計思路的各位大佬們。