測試是用通過構造資料, 讓程式在某種特定情況下執行, 觀察程式的執行結果和預期結果比較, 來判斷在這種情況下程式的正確性。 我們每次作業oo的互測, 以及第13次作業中的junit測試, 都是測試的例子。 測試像是把程式, 看成乙個黑盒, 不關注其內部具體的實現。 測試往往需要大量的資料, 而且需要對輸入劃分成各種情況, 就像每次作業的錯誤分支樹一樣, 通過錯誤分支樹構造測試資料, 能夠保證測試的全面性, 更好的覆蓋每一種情況, 同時也能避免一味地去構造隸屬於同一情況的資料。 通過測試不通過的資料能夠方便找到程式的bug, 但及時通過了所有的測試, 也不能一定說程式是正確的。
正確性論證是深入程式的每個模組, 根據**的規格, 逐一論證每一部分的實現是滿足需求的, 從而得到整個程式的實現是正確的。 第14次作業寫的正確性文件就是幹的這麼一件事。 正確性論證是從理論上證明這個程式是正確的, 通過數理邏輯的推導, 往往需要大量的文字描述, 尤其如果程式的規模越大, 其工作量也成倍增加。 但是, 如果程式能通過正確性論證, 那麼一定能夠說明程式是正確的。
物件約束語言(object constraint language), 簡稱ocl, 是一種指示使用者建模系統中的限制方式。 他是uml可選的附加內容, 可以用來更好地定義物件的行為, 並為任何類元指定約束。
在ocl中, 物件代表了系統的元件, 他定義了完善的專案, 約束代表限制, 而語言並非指一種正式的計算機語言。
ocl是一種形式語言, 可以應用於任何實現方式的非正規語言。 物件約束語言對uml中的圖形或其他元件都沒有控制權, 它只是在使用時返回值。 ocl並不能修改物件的狀態, 而是用來指示狀態的修改何時發生。
ocl表示式以附加在模型元素上的條件和限制來表現對該物件的約束, 其中包括附加在模型元素上的不變數或約束的表示式、 附加在操作和方法上的前置條件和後置條件等。
ocl語言雖然是一種形式化語言, 但是它既具有形式化語言無二義性的特點, 又消除了形式化語言的複雜性。 jsf和ocl的目的是相似的, jsf包括過程規格和類規格, 是對某段**的規格化描述, 其實也就是對這一段**的約束, jsf的組成主要是布林表示式, 可以說jsf是輕量級的ocl。 ocl是一種純表示式語言, 是具有沒有任何***的宣告性語言, 一種型別化語言, ocl中的每個表示式都是具有型別的。 可以說ocl的約束比jsf更精準, 無二義性, 其語言體系更加完善, 至少不能像jsf那樣寫自然語言了。
OO第四次部落格作業!
測試只是單方面片面的證明對於當前的輸入程式是正確的,測試只能證明程式有錯誤,不能說明程式是對的。正確性論證是程式達到預期目的的一般性陳述,是通過規範化的論證來說明程式執行是否符合預期,嚴謹的證明是可以有效說明程式的正確性的。ocl object constraint language 物件約束語言,...
OO第四次部落格
一.測試與正確性論證 測試 爭對程式構造樣例去驗證程式的正確性。正確性論證根據程式的邏輯去判斷程式的有效性和正確性。測試的難度較正確性論證容易,但測試並不能說明測試已經全部覆蓋程式。二.ocl語言和jsf的異同 ocl物件約束語言,用來約束定義,形式化的無二義的語言,說明建模元素的有關細節。相同的 ...
OO第四次部落格
body body first child body last child p,blockquote,ul,ol,dl,table,pre h1,h2,h3,h4,h5,h6 h1 tt,h1 code,h2 tt,h2 code,h3 tt,h3 code,h4 tt,h4 code,h5 tt,...