顯示具有 javadoc 標籤的文章。 顯示所有文章
顯示具有 javadoc 標籤的文章。 顯示所有文章

星期三, 1月 10, 2007

Code coverage with emma

打從第一次看到有Open source 的專案使用clover來作測試覆蓋率(Test coverage)的工具, 就一直想找一個類似的工具來用,但是Clover是要錢的,如果只是寫寫自己好玩的程式,也要用這種花錢的工具,那這個興趣的成本還真是太高了,也就沒很認真看待這件事,久了,也就忘了。

前陣子,閒閒在Eclipse的網站上晃的時候,碰巧被我看到了這個plugin -- EclEmma,一個把emma整合進eclipse 環境中的plugin,裝起來試了一下,蠻有趣的,就持續用下去了,下一步,就是把emma導入作為部門中的正規流程了。

emma是一個找覆蓋率的工具,透過emma來執行Java程式,可以在程式結束的時候,顯示出執行期間所有執行到的程式碼,跟執行的狀況 -- 完全執行,未執行,部份執行(條件判斷式)。如果用來執行junit 的測試,就能夠看出執行這些測試程式的時候,執行過那些正式的程式碼。雖然說這類的資訊,只是參考用,但是對於剛開始寫測試程式,或是維護舊有的未測試程式時,也是蠻好用的工具。

Emma 官方站


EclEmma 官方站

星期四, 11月 02, 2006

method/function spec -- 如何寫好 JavaDoc

寫Java寫了那麼久,一直不知道怎麼寫JavaDoc會比較好,最近剛好在看MIT的線上課程,其中有關於function/method規格的部份,發現如果依據這種方式來寫的話,既可以清楚的表達function/method的行為,又不會把太多的實作細節寫出來,是一個很好的寫JavaDoc的格式。

規格定義

規格同時定義了使用者以及實作者雙方的責任 -- 在使用者滿足規格中所定義的條件下,實作者保證能達到規格中要求的結果。

一個function/method的規格,包含了三個部份

  • precondition -- 一般用關鍵字 requires來表示
  • postcondition -- 一般用關鍵字 effects來表示
  • frame condition -- 一般用關鍵字 modifies來表示

precondition 規範了使用者的責任,如果precondition中的條件沒有滿足的話,實作者可以用任意的方式來完成實作 (包含終止整個程序)。

postcondition 則是規範了實作者的責任,在precondition滿足的條件下,實作必需要滿足postcondition中所規範的條件。

frame condition 和 postcondition有關,讓寫規格的人能夠比較簡單、清楚的表達其他的 postcondition。在frame condition中必需明確指出其他會受要變動的物件,所有沒有列在frame condition中的物件,預設狀態都是靜態的,也就是在function/method執行期間,不會受到任何改變。

不同的軟體規格寫法

規格的寫法可分為兩大類: operational specification 跟 declarative specification,虛擬碼就是 operational specification最常見到的做法。declarative specification 並不明確定義實際達行的步驟,而是把執行前後的狀況明確的定訂下來。

在大部份的狀況下,declarative specification是比較好的寫法,因為他比較短,比較容易了解,更重要的是,declarative specification 不會提到實作的細節,讓實作的人有更大的空間,也避免使用者過度依賴特定方式的實作。

規格的強度

A specification A is at least as strong as specification B if

  • A's precondition is no stronger than B's
  • A's postcondition is no weaker than B's, for the stats that satisfy B's precondition

規格的強度,在考慮繼承的時候,更能顯示出他的重要性。