1. 程式人生 > >作業小結4

作業小結4

效果 二義性 學生 僅支持 TP java 分析 進行 層次

測試與正確性論證的效果差異

測試

測試,就是通過自己對某個函數或者方法的功能,來自己構造測試數據,自己提前在腦子裏想好結果,然後,檢查自己腦子裏的結果和程序運行的結果是否一樣。如果一樣且覆蓋率達到了足夠多的成都,表明程序大概率正確。這種方法我認為有以下幾個優點:

  • 歷史悠久,大家都認可
  • 結果客觀,大概率不會出錯
  • 定位bug很快速、準確和直觀

正確性論證

正確性論證,也就是分析需求、撰寫規格後,通過嚴密的邏輯論證來驗證程序的正確性,這要求我們完全理解需求,正確撰寫規格,同時全面細致的分析代碼是否實現了需求和規格,理論上說,它可以檢查出所有的邏輯bug。

個人看法

正確性論證,檢查的是代碼邏輯是否正確。

測試,檢查的是代碼實現是否正確。

二者缺一不可。雙劍合璧,才能寫出100%正確的代碼。

僅僅通過測試,可能某些邏輯還是有錯,尤其是邊界情況。

僅僅通過正確論證,代碼可能寫錯了。

因此,兩個都非常重要!!!OO這門課實在是很嚴謹!點贊啊!!!

OCL語言與JSF規格

OCL(Object Constraint Language)語言是面向對象設計中對圖形符號的補充,能夠完善建模元素的相關細節。其與JSF規格有相似之處,也有不同。

對象約束語言是一種形式化語言,它主要用於表示UML模型中施加於模型上的約束。OCL具有如下特點:

  • OCL是一種精確的,無二義性的語言
  • OCL是一種規範說明性語言,所有有關實現的問題都不能用OCL來表達
  • OCL是一種純表達式語言,它是具有沒有任何副作用的申明性語言。
  • OCL是一種類型化語言,即OCL中的每一個表達式都是具有類型的。
  • OCL不是一種程序設計語言,不能用OCL編寫程序邏輯和控制流程。

OCL與JSF的相同點在於他們都是形式化的約束語言。OCL包括的不變量、前置、後置條件、監護規則對應著JSF中的repOK、REQUIRES、EFFECTS、MODIFIES。不同點在於OCL相比JSF要復雜的多。

相同之處:

  • 都是一種形式化的語言
  • 具有無二義性
  • 每個變量都有類型
  • 不會改變系統的運行狀態
  • 都采用前置條件和後置條件對方法的運行加以約束

不同之處:

  • 變量的類型:
    OCL有自己的一套變量(如Integer, Real, String, Boolean, Set, Bag, Sequence)
    JSF不僅支持Java語言定義的所有類型,還支持用戶自定義的類型(比如有一個Request類, 則可以在JSF中用Request修飾變量)
  • 變量的運算:
    OCL對變量規定了可以進行的運算方式(如 Boolean類型的and, or)
    JSF支持Java語言定義的所有運算方式
  • 邏輯分支:
    OCL支持if, else一類的邏輯分支。
    JSF不支持if, else, while等邏輯分支。
  • 上下文
    OCL支持用context表達上下文
    JSF不支持上下文表述。
  • 符號系統
    OCL用pre, post表達前置條件和後置條件
    JSF用REQUIRES, EFFECTS表達前置條件和後置條件

第十四次作業的單電梯系統

UML類圖

技術分享圖片

順序圖

技術分享圖片

狀態圖

技術分享圖片

總結

這個學期真的學會了非常多。對這門課的理解絕不是Java和面向對象那麽簡單。這門課很牛逼, it‘s more than java and OO.

還教大學生學會了做人。太牛逼了這門課!!!

闡述四個單元模塊知識點之間的關系

第一單元,讓我們了解面向對象,初步認識它。

第二單元,認識了多線程編程。

第三單元,知道了設計方法和原則。

第四單元,學會了正確性論證。

他們循序漸進,缺一不可!過度很自然,老師講的非常好!非常喜歡OO老師和助教!

闡述自己對工程化開發的理解

工程化開發需要遵循一些特定的規則,不僅方便自己審查代碼,也方便代碼的交流理解,畢竟程序有不確定性且代碼規模日益增大,所以需要提高開發效率,降低維護難度,這是必行之舉。

工程化開發的一般流程:

需求分析-->概要設計-->詳細設計-->編碼-->測試-->驗收-->維護

需求設計:深入了解和分析用戶的需求,避免設計時不必要的改動。
概要設計:確定設計層次、模塊劃分、接口規範、數據結構、出錯處理等。
詳細設計:實現概要設計中各個模塊的算法、調用關系、說明每一個程序的設計考慮。
編碼:根據詳細設計補充代碼、完成系統的功能。
測試:對編寫好的代碼進行初步測試,通過後交給用戶,由其確認各項功能得到正確實現。
驗收:用戶驗收軟件。
維護:根據用戶需求和環境的變化,對程序進行部分或全部的修改。

軟件工程化的優勢

  • 降低軟件系統的復雜性
  • 提高軟件可靠性
  • 提高開發、維護、測試的效率
  • 減少系統內部的邏輯耦合
  • 提高人員協作的效率

對課程的任何期望或建議

這門課賊棒!這麽好聽的課不應該翹掉。應該認真聽講。

對老師的話和對助教的話

謝謝你們!!!辛苦啦!!!繼續加油啊!!!

作業小結4