1. 程式人生 > >OO學習總結(四)

OO學習總結(四)

string 質量 人員 其他 png ext 內部 支持 分支

一、 測試與正確性論證的比較

測試和正確性論證分別從用戶角度和開發者角度對工程進行評估。前者能夠評測程序在一般情況和可預見的特殊情況下的執行效果,後者能夠較為全面地測試到每一個細節。

測試的優點:

  • 所需時間較短;
  • 能夠較為全面地測試;
  • 樣例編寫容易;
  • 可保留樣例,用於以後的回測;

測試的缺點:

  • 無法涵蓋所有細節,測試樣例不能保證以後在運行時一定不會出錯

正確性論證的優點:

  • 邏輯嚴密;
  • 可信度更高;
  • 細節覆蓋更廣;

正確性論證的缺點:

  • 不易上手;
  • 測試時間成本高;
  • 對代碼做了小改動,可能就需要對整個工程重新論證;

二、 OCL語言與JSF規格的比較

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

相同之處:

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

不同之處:

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

三、 單電梯系統結構梳理

A. UML類圖

技術分享圖片

B. 順序圖

技術分享圖片

C. 狀態圖

電梯:
技術分享圖片

調度器:
技術分享圖片

請求:
技術分享圖片

四、 學期小結

A. 知識點

技術分享圖片

B. 個人總結

通過這一學期的訓練,我能感受到自己在面向對象設計與測試等方面的進步。

設計

  • 方法不會過於臃腫
  • 實現類層次的劃分
  • 掌握多線程設計的基本原理
  • 避免死鎖
  • 將具有聯系的抽象數據歸結於一個對象,通過對象來管理數據
  • 約束代碼行為,各個類與方法只行使自己的職能

測試

  • 減少盲目測試和碰運氣的測試
  • 學會根據規格進行測試
  • 學會根據參數構造不同輸入組合
  • 使用Junit進行單元測試

質量

  • 提高魯棒性
  • 確保程序能對每一種可能的輸入組合做出響應

設計、測試和質量這三方面都是相輔相成的,好的設計+全面細致的測試當然能確保這是一份質量優秀的代碼, 能寫出質量優秀的代碼+會設計當然也會促進測試能力。

C. 工程化開發

通過這學期的學習,我覺得工程化是指把系統的、可量化的、有序的方法應用到軟件的開發和維護上來。 通過規格對代碼設計進行約束, 或許有時候顯得不那麽靈活, 但正是這種“笨拙”使得整個工程的規範性大大提高, 減少了後續測試的難度, 提高了軟件的易維護性。

工程化開發的一般流程:

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

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

軟件工程化的優勢

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

D. 對課程的建議

  • 及時更新消息應。可以建一個大群,所有對指導書的更新和其他重大消息發布於此,不允許討論。各小班另建客服群用於答疑。這樣可最大程度避免有的同學錯過消息。
  • 記錄issue和各客服群中有價值的內容。可編成問答形式,用於以後助教的工作和答疑。(比如作為仲裁的依據)。
  • 鼓勵獨立思考。對於issue中有較大價值的提問(如激發了同學的廣泛討論),可對提問者予以一定程度的加分。
  • 否定惡意扣分。在仲裁時若發現有同學惡意扣分,可對其提出批評並記錄在案。對於累犯者,可予以一定程度的扣分。所扣分數歸被惡意扣分者所有。
  • 提高扣分門檻。若要報告被測試者的bug,測試者應提供充分的理由,對於理由不充分者,其所報告的bug不予以采納。

OO學習總結(四)