Как создать статический инструмент анализа кода?

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

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

Любые книги, статьи, блоги, сайты.. и т.д. помогут.

Спасибо.

Ответ 1

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

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

Ответ 2

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

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

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

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

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

Ответ 3

  • Очевидно, вам нужен парсер для языка. Хороший АСТ высокого уровня полезен.
  • Вам нужно перечислить набор "ошибок" на этом языке. Не зная больше о рассматриваемом языке, мы не можем здесь помочь. Примеры: нераспределенные указатели в C и т.д.
  • Объедините АСТ с ошибками в # 2.