2011-11-11 42 views

回答

4

如果您的意思是最廣義的「不變」,就像Daikon的鏈接頁面所使用的那樣,那麼許多靜態分析工具的工作可以被描述爲「發現不變量」,也許不是您正在尋找的表情不變量對於。

Frama-C的價值分析爲每個陳述積累了其結果,所有變量的可能值。在分析結束時,它可以在每個語句中呈現關於程序中每個變量的域變化的非關係信息。在this screenshot中,對於該確定性程序的所有執行,不變是在選定指令之前S總是0,1,3或6。

你的問題中的兩個隱藏參數是你感興趣的不變量的形狀,以及你想要找到這些不變量的程序的形狀。例如,在Ira的回答中提到的SLAM被設計用於處理設備驅動程序代碼,並推斷只包含驗證正確使用系統API的必要信息的不變量。另一個工具,Astrée,在推斷正確的不變量以演示飛行控制軟件的運行時安全方面做得非常出色。

兩個自由度使得設計空間非常大。你不會找到任何適用於各種C程序的東西,並推斷出你可能感興趣的所有不變量,但如果你針對特定的應用領域和各種不變式細化你的問題,你將有更好的機會找到相關的答案。

+0

嗨,謝謝你的回覆。我對具有簡單結構(例如間隔(盒子))的不變量感興趣。我認爲Frama-C的價值分析更好,因爲它甚至提供了具體的價值,而不僅僅是間隔。 –

+0

@VijayaraghavanMurali好吧,關於要保留哪些信息以及丟棄哪些信息有各種各樣的妥協,例如,Frama-C的值分析只保留多達8個元素的值集合,然後切換到具有同餘信息的區間。這是整數。對於'float'和'double'來說,它只使用區間來反映這樣的事實,即這些並不常用來表示具有單獨含義的謹慎值。而對於地址...詳情請見http://frama-c.com/download/frama-c-value-analysis.pdf –