С сообщениями об уязвимостях веб-сайтов и утечках конфиденциальных данных, регулярно появляющимися в новостях, защита жизненного цикла разработки программного обеспечения становится особенно важной. Таким образом, предприятие должно тщательно выбирать правильные методы обеспечения безопасности. Статический и динамический анализ являются двумя наиболее популярными типами тестов безопасности кода. Перед внедрением, однако, предприятие, которое заботится о безопасности, должно точно изучить, как оба типа тестов могут помочь защитить жизненный цикл программного продукта. В конце концов, тестирование можно считать инвестицией, которую следует тщательно контролировать.
Статический идинамический анализ
Статический анализ выполняется в среде без времени выполнения. [1] Как правило, инструмент статического анализа проверяет программный код на предмет всех возможных режимов работы во время выполнения и выявляет недостатки проектирования, черные ходы и потенциально вредоносный код.
Статический анализ кода может помочь в процессе код-ревью благодаря:
- обнаружению областей в коде, которые необходимо реорганизовать и упростить;
- поиску областей кода, которые могут нуждаться в дополнительном тестировании или более глубоком рассмотрении;
- выявлению проблем проектирования, таких как цикломатическая сложность, и помощь в снижении сложности кода, улучшении удобства обслуживания;
- выявление потенциальных проблем с качеством программного обеспечения до его запуска в промышленную эксплуатацию.
Динамический анализ использует противоположный подход и выполняется во время работы программы. [2] Динамический тест будет контролировать системную память, функциональное поведение, время отклика и общую производительность системы. Этот метод схож со способом, которым злонамеренная третья сторона может взаимодействовать с приложением.
Динамический анализ может дать вам следующие показатели:
- потребляемые ресурсы — время выполнения программы в целом или ее модулей в отдельности, количество внешних запросов (например, к базе данных), количество используемой памяти и другие ресурсы;
- цикломатическая сложность, степень покрытия кода тестами и другие метрики программы;
- программные ошибки — деление на ноль, разыменование нулевого указателя, утечки памяти, состояние гонки
- уязвимости в программе.
Возникшие и развивавшиеся отдельно, статический и динамический анализ порой ошибочно воспринимаются как противоположные. Однако существует ряд сильных и слабых сторон, связанных с обоими подходами.
Сильные ислабые стороны статического идинамического анализа
Статический анализ с его видимостью в виде «белого ящика», безусловно, является более тщательным подходом и может также оказаться более экономичным с возможностью обнаружения ошибок на ранней стадии жизненного цикла разработки программного обеспечения. Например, если ошибка обнаружена на во время статического анализа — это может быть относительно дешево исправить. Если бы ошибка оказалась в системе, затраты увеличились бы. Статический анализ также может выявить будущие ошибки, которые не возникнут при динамическом тестировании. Динамический анализ, с другой стороны, способен выявлять тонкие недостатки или уязвимости, слишком сложные для одного лишь статического анализа, и также может быть более целесообразным методом тестирования. Динамический анализ, однако, обнаружит дефекты только в той части кода, которая фактически выполняется. Предприятие должно взвесить эти соображения с учетом сложности их собственной ситуации. Тип приложения, время и ресурсы компании являются одними из основных факторов. Уровень технического долга, который предприятие готово взять на себя, также может быть измерен. Определенное количество технического долга может быть взято на себя, если финансовые выгоды от победы над конкурентом на рынке перевешивают потенциальную экономию от более тщательно протестированного кода. Хотя и у статических, и у динамических тестов есть свои недостатки, предприятие не должно стоять перед выбором. В то время как статический анализ можно считать превосходным методом тестирования, это не обязательно означает, что он должен автоматически выбираться вместо динамического анализа в любой ситуации, когда возникает выбор.
Автоматизация анализа исходного кода
Хотя статический и динамический анализ можно выполнять вручную, они также могут быть автоматизированы. При грамотном использовании автоматизированные инструменты могут значительно повысить отдачу от инвестиций в тестирование. Инструменты автоматического тестирования являются идеальным вариантом в определенных ситуациях. Например, автоматизация может использоваться для проверки реакции системы на большое количество пользователей или для подтверждения того, что исправление ошибки работает должным образом. Она также помогает автоматизировать тесты, которые регулярно выполняются во время разработки продукта. Поскольку предприятие стремится обеспечить защищенность продукта во время его жизненного цикла, следует отметить, что панацея отсутствует. Ни статическое, ни динамическое тестирование сами по себе не могут обеспечить полную защиту. В идеале предприятие должно выполнять как статический, так и динамический анализ. Этот подход выиграет от синергетических отношений, существующих между статическим и динамическим тестированием. [3]
Заключение
С таким количеством современных устройств, поддерживающих веб-интеграцию, методы безопасного кодирования важны как никогда. Например, динамический анализ кода стал важным инструментом для демонстрации соответствия безопасности медицинских устройств требованиям FDA. Он обеспечивает эффективный анализ потенциальной угрозы и, в сочетании со статическим анализом, обеспечивает мощный обзор возможных уязвимостей.
Литература:
- Статический анализ кода // Википедия. URL: https://ru.wikipedia.org/wiki/Статический_анализ_кода (дата обращения: 8.01.2019).
- Динамический анализ кода // Википедия. URL: https://ru.wikipedia.org/wiki/Динамический_анализ_кода (дата обращения: 8.01.2019).
- Макконнелл С. Совершенный код. Мастер-класс / Пер. с англ. — М.: Издательско-торговый дом «Русская редакция»; СПб.: Питер, 2005. — 896 стр.