>
>
Ситуации, когда может пригодиться стати…

Андрей Карпов
Статей: 674

Ситуации, когда может пригодиться статический анализатор кода

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

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

Обучение

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

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

Перенос программы на другую систему

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

Поиск черных дыр

Статический анализ может использоваться не только во благо, но и во вред. Раз анализ кода помогает разработчикам выявить переполнения буферов, стека и прочие подобные дефекты, то тоже самое может сделать и злоумышленник. Изучая хрупкие места, хакер быстрее может выбрать объект для атаки. То есть ему не надо просматривать огромное количество кода. Часть работы за него выполнит статический анализатор. Он укажет, где код уязвим, и хакер сможет перейти к следующему этапу работ - попытке понять, можно ли воспользоваться найденными дефектами в коде, и если да, то как.

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

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

Использование сторонних исходных кодов

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

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

Обоснование необходимости рефакторинга кода

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

Заключение

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