Как создать инструмент статического анализа кода? - PullRequest
15 голосов
/ 17 декабря 2010

Я нахожусь в процессе понимания и создания инструмента статического анализа кода для проприетарного языка от большой компании. Причина этого заключается в том, что я должен рассмотреть довольно большую кодовую базу, и статический анализ кода очень помог бы, а у него пока нет такого для языка.

Я хотел бы знать, как можно создать инструмент статического анализа кода, например, Lint или SpLint для C.

Любые книги, статьи, блоги, сайты ... и т. Д. Поможет.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 30 января 2014

Я знаю, что это старый пост, но ответы на самом деле не кажутся такими уж удовлетворительными. Эта статья представляет собой довольно хорошее введение в технологию инструментов статического анализа и содержит несколько ссылок на примеры.

Хорошая книга Брайана Честа и Джейкоба Уэста "Безопасное программирование со статическим анализом".

3 голосов
/ 12 августа 2011

Вам нужна хорошая инфраструктура, такая как анализатор, построитель деревьев, анализаторы деревьев, составители таблиц символов, анализаторы потоков, а затем, чтобы выполнить свою конкретную задачу, вам необходимо кодировать конкретные проверки для конкретных проблем, которые вас интересуют., используя все механизмы инфраструктуры.

Собрать все эти базовые механизмы на самом деле довольно сложно, и это не поможет вам выполнить вашу конкретную задачу.Люди не пишут операционную систему для каждого приложения, которое они кодируют;зачем строить всю инфраструктуру?Как и ОС, лучше, если вы просто приобретете хорошую инфраструктуру.

Люди скажут вам lex и yacc.Это все равно что предложить вам использовать в реальном времени общую часть ОС;полезная, но далеко не вся инфраструктура, которая вам действительно нужна.

Наш набор инструментов для реинжиниринга программного обеспечения DMS обеспечивает все необходимое разрушение.Он использовался для определения многих языковых интерфейсов , а также многих инструментов для таких языков.

Такая инфраструктура позволит вам относительно быстро определить свой нестандартный язык, а затем приступить к задаче кодирования ваших специальных проверок.

0 голосов
/ 17 декабря 2010
  1. Очевидно, вам нужен парсер для языка.Хороший AST высокого уровня полезен.
  2. Вам необходимо перечислить множество "ошибок" в языке.Не зная больше о рассматриваемом языке, мы не можем здесь помочь.Примеры: нераспределенные указатели в C и т. Д.
  3. Объедините AST с ошибками в # 2.
...