測試實際上就是對程序進行的一種黑箱測試,利用各類各樣的測試樣例去檢驗程序是否可以給出正確的結果。其中的單元測試則是將總體的測試拆分紅單元來進行,但其仍然躲不開黑箱測試的形式。而正確性論證雖然也是從各個方法入手,但其並非盲目的對比輸入輸出是否同樣,而是從邏輯上梳理某個方法運行過程當中僅可能出現的輸入(即前置條件)和針對這些輸入僅可能給出的結果(後置條件),從而在確保各個方法實現均正確的狀況下將其組合起來成爲一個正確的系統。編程
從效果上來說測試因爲並不能窮舉全部的狀況,而正確性論證我認爲其實是對各類狀況的抽象和歸類,從而將無窮變爲有窮,其效果也明顯優於測試。但正確性論證若是要梳理清楚各類邏輯的關係,其複雜程度要高於測試不少, 所以作起來也相對複雜,測試只須要設計各類測試樣例而且自動運行查看結果便可,相比而言較爲簡單。數組
OCL (Object Constraint Language) 即對象約束語言,是一種指示用戶建模系統中的限制方式,它是UML可選的附加內容,能夠用來更好的定義對象的行爲,併爲任何類元指定約束。微信
OCL是一種精確無二義性的語言,而且是一種規範說明性語言,可以用來約束UML圖中的對象。多線程
相同:併發
均使用了數學的方法(謂詞邏輯、集合論)來表達對對象和方法的約束,都採用了天然語言和數學符號折衷的方式模塊化
均是一種聲明式的語言,即內容中不包含具體實現單元測試
都包含前置條件和後置條件的聲明,也都包含不變式相關邏輯學習
不一樣:測試
OCL中沒有JSF的MODIFIES,但多出了「監護規則」。除此以外OCL很是注重類型的聲明,而且細化了各類容器,相比之下JSF均抽象爲數組來表達了。線程
第一單元我認爲主要是初步認識面向對象思想,掌握類屬性方法等元素以及繼承、多態等OO的基本思想,順便學會如何使用Java編寫OO程序。第二單元主要面向OO當中的多線程編程,在前一個單元的基礎上利用面向對象的方式編寫多線程程序。第三單元主要是JSF的引入,以及設計方面的更高級要求(如SOLID、規格)。第四單元則是對於測試和正確性論證的學習,即一個程序寫到最後要確保寫的是對的。
這四個單元我認爲前兩個單元主要更側重編程技術方面,實際上學習多線程編程除了掌握並行的思想外,更重要的實際上是怎麼在多線程如此混亂的狀況下讓程序跑出本身想要的結果(想起了OS中的互斥和同步的關係),於是技巧方面更重一些。然後兩個單元則更側重設計以及編程以後驗證的部分,前者讓咱們養成良好的設計思想,我認爲規格化的開發思想在程序規模增大的時候才能體現其優點;然後者讓咱們確保了本身程序寫的是對的,可以通過各類各樣的檢驗。
一個學期以來寫了多項式、電梯三部曲、IFTTT、出租車四部曲這麼多程序,能夠說進步應該仍是有的。
從設計和代碼質量上,一開始代碼耦合高,第一次ALS電梯一個方法有200行,到後來程序逐漸變得層次清晰,最後第13次和14次做業對電梯進行了解耦,將原先200行的方法拆分紅不少個,每一個的行數都較短。原先由於DRY作的很差,重複代碼較大致使常常出現改一處忘了改另外一處的狀況以後也變得不多了。
雖然第一單元的程序幾乎沒什麼bug,但設計思路方面的不清晰致使多線程部分有所翻車,但在對程序的構思逐漸造成合理的模式後,這種狀況在出租車有了很大改善。
我是從大二纔開始據說「工程化思想」這一詞的,印象最深入的實際上也是上學期的計組,老師不斷的強調「工程話思想」。實際上工程化思想我認爲只有當程序須要達到必定規模時才能看出其優點,不管是這學期OO到最後代碼量很大的出租車仍是上學期完成的計組實驗均可以說明這一點,而這二者相比於真正的工程而言更是小巫見大巫。
雖然到如今爲止我尚未接觸過真正的工程化開發,對於做業也僅僅是利用了一點「思想」而已,所以個人理解還只能停留在空想的階段。我理解的工程化開發,首先是一種模塊化的設計,整個程序是由多個模塊構成的,這些模塊知足所謂的「高內聚、低耦合」關係,單獨來看雖然不能作什麼但組合到一塊兒才能完成很複雜的工做。其次做爲一個「工程」,一定是一個相對長久的概念,所以須要不少我的「前仆後繼」的進行努力。所以在工程化開發中我認爲規格很重要。如何讓你們編程的點子統一塊兒來,同時讓你們編寫的一個個」模塊「最後能順利的組合在一塊兒是一個須要重視的問題。規格設計以及接口這一律念在其中充當了很是重要的角色。
1. 在寫做業的時候不少問題我都是從同窗的口中得知在」他們班的羣裏「助教說了什麼什麼要求,不少時候這些要求沒有被通知到,也出現了最後申訴中兩人互飆微信羣截圖的狀況。但願能夠有一種統一的要求通知機制(好比對於各類問題能及時梳理到issue),可以統一口徑而且減輕助教答疑和同窗們追問的壓力。
2. JSF方面首先我感受能夠借鑑一下OCL語言,例如其中的各類容器。其次課件中常用多項式以及數組等等來舉例子,在這些方面的確JSF能夠清晰的表達規格,但對於出租車等複雜邏輯而言沒有很好的參考價值。但願課上能多一些較爲複雜的例子。
3. 多線程其實在這個課程中的位置稍顯尷尬,的確很重要,但也致使學習曲線較爲陡峭。本學期中期OS課上咱們也接觸了不少併發相關的概念,其中PV操做講的那些併發經典例子其實對多線程理解有很多幫助。第一次多線程電梯以前那節多線程的課對於多線程電梯來講有點「不夠」,致使多線程電梯寫的雲裏霧裏。但願在多線程的起步教學這方面能夠增長一些內容幫助理解。