2017-06-12 62 views
0

我正在閱讀關於使用Scala語言的Property based testing。在這張幻燈片中,他們提出了這個概念:證明函數a+b是正確的。我們僅僅只證明這些語句是在隨機數據爲真:Scala:基於屬性的測試:如何在編寫測試時知道所有的必要測試用例

  1. A + B = B + A
  2. 一個+ 0 = A
  3. 一個+ 1 + 1 = A + 2

我的問題是:哪些方法用於檢查我們的測試用例是否足夠,並且可以覆蓋所有不同數據的情況。例如在前面的例子中,我們如何確定在我們的三個屬性正確運行後,我們可以確定我們的實現是正確的。

+1

'3.'看起來不正確 – stark

回答

0

首先,我假設,你在#3中有一個錯字,它應該是+而不是*

要回答你的問題,你當然可以而不是如果你證明了這三個屬性,請確保你的實現是正確的。考慮這一點的實現,例如,滿足所有三個屬性,但絕對是錯誤的:

def wrongPlus(a: Int, b: Int) = if(a < 3 || b <3) b a+b else 0 

要明確證明(整數)此外,你需要有一個獨立的執行next整數。然後,通過定義:

1. a + 0 = a 
2. a + next(b) = next(a + b) 

如果這些特性適用於任何A和B以及一些操作+,然後+的確是加法。

+0

你能告訴我函數'next'的含義嗎?此外,是否有任何方法可以確定我們已經爲基於屬性的測試製定了所有條件。謝謝 –

+0

'next'只是「+1」。這是自然數如何定義的。 '1 = next(0)'是一個自然數,對於每個自然N,恰好有一個M = next(N),這也是自然數。上面的兩個屬性是整數加法的定義,所以你知道,如果他們滿意,你的操作就是定義的加法。沒有通用的規則來確定哪些屬性要驗證任何操作。你是唯一一個能夠操作你的操作屬性的人。 – Dima

相關問題