2011-05-03 198 views
2

爲什麼我從來沒有見過有靜態代碼分析和動態分析代碼分析工具,因此檢查他們兩個?靜態代碼分析與動態代碼分析工具?

一個側面說明,FxCop的使用CIL解析和調用圖分析來運行其檢查。有誰知道它是否使用動態或靜態調用圖分析?

我承認,我已經限制了這些工具的知識,而且一直在做一些研究和似乎無法找到兩人在一起......如果你知道的一些工具,兩者都做,請列出它們。

謝謝!

回答

1

應當把它這兩個結合:你顯然希望靜態分析,以檢測真正問題(不只是似是而非問題)和舉報。對於那些靜態分析儀確定沒有問題的地方,什麼都不需要做或說。對於那些靜態分析器無法解決的地方...您希望動態分析在運行時監視不良事件。

基本的答案是做靜態分析的工具通常沒有很好地提供給儀器應用程序代碼,那些儀器沒有很多靜態分析支持。

我們DMS Software Reengineering Toolkit是一套基礎設施,既有capabilites,可用於構建這樣的工具。 DMS的核心是一個程序分析和轉換系統。分析端解析代碼並構建基於分析器的模型(AST,符號表,控制/數據流圖等)。轉換方可以修改AST(使用分析器來確定要改變的內容),並隨意更改任意修改後的源代碼;爲了討論的目的,提供了代碼。

本文提供了DMS如何用於儀器代碼(動態分析)的清晰概述:Branch Coverage for Arbitrary Languages Made Easy

一個結合了靜態分析和動態分析的更復雜的例子是我們的CheckPointer工具,它可以檢測出哪裏產生指針錯誤(而不是下游損壞)。 CheckPointer結合了(在其生命早期)主要的動態分析來實現這種效果,再加上一些(和計劃中的進一步的)靜態分析,以儘可能多地消除動態檢查。

0

雖然我不知道有一種工具可以執行靜態和動態分析,但工具供應商已經合作提供此功能。一個很好的例子就是MathWorks的Polyspace靜態分析工具和Vector Software的VectorCAST動態分析工具。

例使用這些工具整合在一起:

  1. 使用靜態分析,以幫助獲得更好的代碼覆蓋率。例如。靜態分析工具可以識別無法獲得測試覆蓋的死或無法訪問的代碼。
  2. 使用靜態分析工具的範圍分析來開發測試用例,然後可以在動態分析工具中使用這些測試用例。
  3. 使用靜態分析工具(如MISRA或JSF ++)中的代碼規則檢查功能來開發更好的代碼,從而生成具有更好覆蓋率分析的軟件。

如要進一步瞭解,這裏是一個文章的鏈接描述如何將這些工具可以一起使用:http://www.vectorcast.com/blog/2011/04/25/combining-dynamic-testing-static-verification-part-1/