@Filipp42

Зачем нужен статический анлизатор и как он работает?

Здравствуйте, скажите пожалуйста, для чего нужен статический анализатор кода и какие функции он выполняет? Вот скормил я ему свой код, что он мне выведет?

И ещё интересно, как именно происходит анализ кода? Какие механизмы используются? Неужели рассматривается каждый частный случай?

Заранее спасибо!
  • Вопрос задан
  • 173 просмотра
Пригласить эксперта
Ответы на вопрос 5
Maksclub
@Maksclub
maksfedorov.ru
Например для линтеров, очень подробное руководство зачем они нужны
https://habr.com/ru/post/457970/

Чтобы написать линтер — часто нужно сделать статич анализ кода.

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

Для динамически-типизированных языков стат-анализ может взять роль компилятора и проверять корректность типов и прочих штук. Например описать типы массива (который не типизирован в PHP) или даже имитировать функционал дженериков. Это повысит качество кода и его надежность, избавит от ошибок в боевой среде.

И ещё интересно, как именно происходит анализ кода?

Все зависит от того, какую проверку вы делаете... Например (из воздуха) вы хотите сделать проверку, что метод слишком сложный (большой) — делаете анализ кода и по каким-то критериям выдаете оценку/предупреждения. Находите метод (начало и конец) и число строк сравниваете с "приемлимым для вас".

Или например есть код, но на самом деле он не вызывается никогда (утверждения всегда true дают, а IDE не может этого понять), вы находите такие случае в работе/на ревью со временем и вырабатываете правила как это детектить... Чтобы задетектить, вам надо разобрать инструкции кода, как понимаете без статанализа этого не возможно, не регулярками же делать.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
@vitaly_il1
DevOps Consulting
Вот хороший пост на тему https://habr.com/ru/company/odnoklassniki/blog/486722/
Ответ написан
Комментировать
Griboks
@Griboks
Чтобы найти больше ошибок перед публикацией программы.
Ответ написан
Комментировать

Вот скормил я ему свой код, что он мне выведет?

Очевидно, он выведет тебе отчёт о проведённом анализе, где будет написан список из найденных проблем.


И ещё интересно, как именно происходит анализ кода? Какие механизмы используются? Неужели рассматривается каждый частный случай?

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

Моделью может быть как просто AST, но иногда может быть сложнее (например для execution flow analysis).
Затем в этой модели ищутся какие-то паттерны, которые прописаны заранее.
Это может быть как что-то простое типа "условное выражение, которое всегда истинно", так и что-то более сложное, типа "при определённых условиях функция никогда не завершится"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы