天天看點

OO第四次部落格作業

測試和正确性論證的效果差異

  • 測試:測試一般分為功能性測試和邊界條件測試,功能性測試是為了保證程式能夠完成要求的正常功能,邊界測試是測試邊界條件,比如遊戲中地圖越界的問題,一般來說,如果不能正常處理邊界條件,程式崩潰也是經常的事情。測試的優點是 效率比較高,缺點是即使所有的測試點都過了,也不能保證程式沒有bug。
  • 正确性論證:正确性論證是從代碼邏輯的角度來論證代碼是否有無bug,優點是能夠全面覆寫程式正确性,缺點是十分繁瑣,而且耗時多。目前各種招聘網站有很多測試工程師崗位,但卻沒有正确性論證工程師。可見,測試才是一般商業項目開發的重點流程。

OCL語言調研

調研OCL語言,比較和JSF的相似和不同之處:

OCL(Object Constraint Language)直譯是對象限制語言,OCL最早是由IMB在1995年提出的business engineering language,後被采用為正式規範語言作為UML(Unified Modeling Language)的一部分,目前的版本是OCL 2.0。

OCL和JSF相似,也有Precondition、Postcondition和Invariant,定義和文法如下:

OO第四次部落格作業
OO第四次部落格作業

可見和JSF文法上差異比較大,相同之處是兩者都是形式化語言,起限制定義的作用。

第十四次電梯作業Graph

類圖UML

OO第四次部落格作業

UML圖

UML圖中可以看出,單線程ALS電梯結構比較簡單,至下而上首先是排程輸入處理InputHandler,傳回的Request集合通過main函數傳遞給Scheduler類,而Scheduler排程時結合電梯燈的情況,結果通過OutputHandler輸出到控制台。

時序圖

OO第四次部落格作業

UML Sequence

狀态圖

OO第四次部落格作業

State UML

OO學期總結

子產品知識點

本學期OO作業基本概況如下:

作業 主要完成功能
1 多項式處理
2 單線程傻瓜電梯
3 單線程ALS電梯
5 多線程ALS電梯
6 檔案系統IFTTT
7 計程車:多線程
9 計程車:增加道路開關
10 計程車:增加紅綠燈
11 計程車:增加類規格和LSP原則
13 單線程ALS電梯:Junit4覆寫測試
14 單線程ALS電梯:正确性論證

大緻可以分為四個單元:

  • 第一單元:Java基礎文法入門,掌握正規表達式
  • 第二單元:多線程電梯,掌握基本的多線程和互斥處理
  • 第三單元:計程車,繼續多線程,程式套上圖形接口
  • 第四單元:重構代碼、修複Bug以及規格化測試和JSF限制

設計、測試上的進步

本學期應該是大學以來代碼量最多的一個學期,收獲比較大。

感受就是coding是最好的學習方式,看不太懂的東西,寫着寫着就會了。

  • 子產品化:最開始寫的面向過程式、面條式代碼,中期發現修改功能非常痛苦,後期重構代碼後能夠保證大多數方法控制在40行以内。
  • 設計進步:在後期重構的過程中,設計上能夠各個類的功能更加清晰。
  • 程式規範:對各種變量的命名規範化,保證程式過一段時間還能看懂。

對工程開發的了解

  • 工程開發一般需要嚴格的規範,以便組内能夠互相看懂代碼,比如命名和函數功能。
  • git、maven等工具在工程開發中比較重要。
  • 自己寫的接口需要提供文檔,友善别人使用。

課程建議

  • 多線程部分難度跨度比較大,入門就寫多線程捎帶電梯接受不來。
  • 對于Java SE的基礎文法考察覆寫不夠,比如泛型、Collection架構和圖形界面如Swing。
  • 課程後期的測試部分,惡意扣分比較嚴重,并且繁瑣的正确性論證占用了大量的課餘時間。