metamorphic-testing

4 posts

Metamorphic testing 發現了 147 個編譯器 bug 與一個自駕車缺陷。以下是它的運作原理。

Metamorphic testing 在 GCC、LLVM、Vulkan shader compiler 與 ADAS 模擬器中發現了真實的 bug。這篇文章用可執行的程式碼解釋這項技術,並說明它適合放在測試套件的哪個位置。

Metamorphic testing 在 GCC 與 LLVM 中發現了 147 個已確認的 bug,在汽車 OEM 使用的商業 ADAS 模擬器中發現了缺陷,並在一名行人被撞身亡的八天前,於一個自駕車感知系統中發現了致命缺陷。這項技術聽起來很學術,但這些 bug 可不是。 問題出在 oracle…

LLM 能建議 Metamorphic Relations,但它保證不了正確性

大型語言模型是發掘 test oracles 時還算稱職的腦力激盪夥伴,但它會幻覺化性質、遺漏領域限制。以下是如何安全使用它們,而不會上線錯誤的測試。

你需要測試一個無法事先知道正確輸出的函式。一個路徑最佳化器。一個情緒分類器。一個物理模擬。你讀過 metamorphic testing:找出輸入與輸出之間必須成立的關係,然後測試這些關係,而不是精確值。 問題在於想出這些關係。你盯著你的函式簽章,腦袋一片空白。 於是你去問 LLM。它在幾秒內丟回十個…

大多數 Metamorphic Relations 都沒用,這裡教你怎麼挑出好的

並非所有 metamorphic relations 都能抓到缺陷。弱的關係給你虛假的信心,強的關係才能找出真正的錯誤。以下是如何區分兩者,並建構一套真正有效的關係集合。

你為定價引擎寫了十二個 metamorphic relations。每個測試都通過。你對自己的涵蓋率感覺良好。 然後顧客回報大量折扣計算反了。你檢查你的關係套件。沒有任何一個測試失敗。你有加法一致性、單調性與idempotency的關係。沒有任何一個抓到折扣乘數的正負號錯誤。 這是 metamorphic…

不知道正確答案是什麼,要怎麼測試程式碼?

Metamorphic testing 讓你在不知道預期輸出的情況下驗證程式碼正確性。以下是它的運作方式、限制,以及如何開始使用。

你上線了一個為支援工單標記分類的機器學習模型。你的測試套件全綠。每個測試都通過了。 那些測試沒有一個真正檢查標籤是否正確。你根本不知道正確的標籤是什麼。沒人知道。對於真實世界的輸入,「正確」的輸出實際上無法得知,所以你只好檢查函式不會崩潰,或者輸出形狀符合預期。這不是測試。這是在祈禱。 這就是 oracle…