Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
sxiii
5 лет назад
кодинг

Статический анализ кода... Что? Как? Зачем?

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

Что это такое "на простом языке"?

Люди совершают ошибки. Машины из-за этого человеческого фактора, иногда, тоже. Утилиты или приложения для статического анализа кода это группа инструментов, позволяющая в автоматическом или полуавтоматическом режиме производить проверку написанного кода на различные типичные и не очень ошибки. Среди которых иногда такие, о существовании которых вы могли и не подозревать!

Для чего?

  • Быстро и легко находить ошибки в своём ПО (ускорение разработки за счет упрощения проверки кода)
  • Использовать данные утилиты для проверки чужого открытого ПО (удостовериться что оно написано грамотно, без использвования т.н. "небезопасных" приёмов)
  • Проверяя чужой код можно даже немного (или много - в зависимости от вашей квалификации) заработать. Компании часто выделяют на это различные гранты (Bug Bounty Programs), и не только компании: даже Евросоюз выделяет на это средства. Вот вам ещё пример - список баг-баунти программ от популярного сайта HackerOne

Какие бывают анализаторы?

Типов их великое множество, но для упрощенного восприятия я бы разделил как минимум на такие категории:

  • Универсальные анализаторы, "умеющие понимать" множество языков
  • Заточенные на один конкретный язык анализаторы
  • Заточенные для одного конкретного ПО анализаторы

Соответственно, первая категория этаких комбайнов-монстров, вторая - чуть поменьше и поконкретнее, третья встречается обычно только в очень крупных проектах, таких как один из "священных граалей" свободного ПО - само ядро Linux.

На что посмотреть (opensource)

В основном здесь представлены инструменты для проверки кода из мира языков "C" и Java, но встречается и Python, Perl и другие:

  • Clang - фронтенд для фреймворка LLVM, включающий в себя статический анализатор для языка C/C++/Objective-C/C++ и некоторых других,
  • Coccinelle - опять же для C,
  • Cppcheck - C & C++,
  • Cpplint - средство от Google для проверки С++,
  • Frama-C - тоже для C,
  • Infer Static Analyzer: разработка Facebook для проверки Java, C, C++ и Objective-C,
  • Sparse - инструмент для проверки ядра Linux,
  • BLAST - разработка института Berkeley для C,
  • Checkstyle - инструмент для Java,
  • FindBugs - ещё один инструмент для Java,
  • Splint - проверка кода на C,
  • PMD - инструмент для проверки массы всего web-related, напр. JavaScript, XML, XSL, Java, и др.,
  • Soot - оптимизационный фреймворк для Java,
  • Squale - Java, плюс С/C++ и Cobol,
  • Opa - язык Opa включает собственный статический анализатор,
  • Lintian - проверка корректности пакетов DEB (Debian),
  • RPM - проверка пакетов RPM,
  • RIPS - PHP и Java,
  • Pylint - для Python,
  • Perl::Critic - проверка Perl,
  • PerlTidy - ещё одна софтинка для Perl,
  • Исчерпывающий список средств, конечно же, есть в википедии.

JavaScript

  • ESLint – проверка синтаксиса и форматирования для JavaScript,
  • Google's Closure Compiler – JavaScript оптимизатор, переписывающий код чтобы он был компактнее и быстрее,
  • JSHint – коммьюнити-форк JSLint,
  • JSLint – JavaScript проверялка синтаксиса и валидатор.

Крупные IDE, которые тоже умеют

  • Eclipse - одна из популярных IDE, включает в себя статические анализаторы, например PyDev плагин для проверки Python,
  • IntelliJ - IDE от Intel,
  • Padre - IDE для языка Perl,
  • PyCharm - IDE для Python.

Инструменты, использующие формальные методы проверки

  • OpenJML (Java Modelling Language) - для JML,
  • KeY - формальная верификация кода на Java,
  • SPARK - язык, основанный на Ada, включает в себя средства для самопроверки.

Что почитать по теме (англ)?

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

Надеюсь, вы нашли здесь инструмент для статической проверки вашего любимого языка или языка вашего любимого проекта. Надеюсь, ваш код теперь всегда будет супер-корректный, оптимизированный и быстрый! А теперь вперед, к багтрекингу! :D

See ya,
@sxiii from OoOoOoslO City

кодинганализпроверкапроверка-кодастатический-анализcode-reviewcode-analysis
29
1143.992 GOLOS
На Golos с January 2017
Комментарии (2)
Сортировать по:
Сначала старые