Под верификацией понимается процесс определения, в какой степени программные средства выполняют наложенные на них требования. Функции, выполняемые верификацией, определены в стандарте “ISO 12207” (SoftWare LifeCycle Processes. Процессы жизненного цикла программных средств). В соответствии с требованиями стандарта “ISO 12207” процессы верификации программного средства включают в себя следующие задачи: Первая задача верификации «Проверка контракта». При проверке контракта необходимо удостовериться в следующем:
Во-первых, в том, что поставщик имеет возможность удовлетворить требования контракта;
Во-вторых, в том, что требования непротиворечивы и покрывают все нужды пользователя;
В-третьих, в том, что предусмотрены адекватные процедуры для регулирования изменений требований и возрастающих проблем;
В-четвертых, в том, что предусмотрены процедуры и их приложение на сотрудничество между сторонами, включая право собственности, гарантию, авторское право и конфиденциальность;
Виды тестирования. Уроки по тестированию ПО
В-пятых, в том, что предусмотрены критерии и процедуры приемки результатов разработки согласно требованиям.
Вторая задача верификации «Проверка процесса проектирования». При проверке процесса проектирования необходимо удостовериться в следующем:
Во-первых, в том, что требования проектного планирования адекватны и скоординированы во времени;
Во-вторых, в том, что процессы, выбранные для проекта, адекватны, реализуемы, выполняются, как запланировано и соответствуют контракту;
В-третьих, в том, что стандарты, процедуры и область функционирования адекватны для проектных процедур;
В-четвертых, в том, что проект укомплектован ресурсами, и персонал обучен, как требуется по контракту.
Третья задача верификации «Проверка требований». При проверке требований необходимо удостовериться в следующем:
Во-первых, в том, что требования системы непротиворечивы, выполнимы и проверяемы;
Во-вторых, в том, что требования системы распределены между компонентами аппаратных средств, компонентами программного средства и ручными операциями согласно критериям проекта;
В-третьих, в том, что требования к программному средству последовательны, выполнимы, тестируемы и точно отражают требования системы;
В-четвертых, в том, что требования к программному средству, связанные с безопасностью, защитой и критичностью правильны, как показано соответствующими точными методами анализа.
Четвертая задача верификации «Проверка проекта». При проверке проекта необходимо удостовериться в следующем:
Во-первых, в том, что проект корректен и не противоречит исходным требованиям контракта;
Во-вторых, в том, что проект реализует правильный ход событий, вводов, выводов, интерфейсов, логического потока, распределения временных и вычислительных ресурсов, определения ошибок, их обнаружения и восстановления работоспособности программного средства;
В-третьих, в том, что выбранный проект полностью исходит от требований;
Виды тестирования ,типы тестирования, подходы, уровни, методы тестирования, стратегии тестирования
В-четвертых, в том, что проект реализует безопасность, защищенность и другие критические требования, правильно, как показано соответствующими точными методами анализа.
Пятая задача верификации «Проверка программы». При проверке программы необходимо удостовериться в следующем:
Во-первых, в том, что текст программы удовлетворяет проекту и требованиям, тестируем, корректен и соответствует стандартам программирования;
Во-вторых, в том, что программа отражает истинный ход событий, последовательные интерфейсы, правильные данные и управляющий поток, завершенность, размещение временных и вычислительных ресурсов, определение ошибок, их обнаружение и восстановление работоспособности программного средства;
В-третьих, в том, что программа исходит из проекта и требований контракта;
В-четвертых, в том, что программа обеспечивает безопасность, защищенность и другие критические требования корректно, как показано соответствующими точными методами анализа.
Шестая задача верификации «Проверка интеграции». При проверке интеграции необходимо удостовериться в следующем:
Во-первых, в том, что компоненты программного средства и элементы каждого компонента программного средства полностью и правильно интегрированы в комплекс программ;
Во-вторых, в том, что компоненты аппаратных средств, компоненты программного средства и ручные операции полностью и правильно интегрированы в информационную систему;
В-третьих, в том, что интеграционные задачи выполнены согласно интеграционному плану.
Седьмая задача верификации «Проверка документации». При проверке документации необходимо удостовериться в следующем:
Во-первых, в том, что документация адекватна, полна и последовательна;
Во-вторых, в том, что подготовка документации выполнена своевременно;
В-третьих, в том, что схема управления документами следует определенным плановым процедурам.
Для повышения эффективности затрат при реализации проекта, верификация должна быть выполнена как можно раньше.
2. Задачи тестирования.
Тестирование является одним из видов верификации и направлено на определение того, соответствует ли программное обеспечение требованиям спецификации. Тестированием называется процесс выполнения программного изделия с целью определения содержащихся в нём ошибок. Определение процесса тестирования исходит из того, что всякое программное изделие содержит ошибки.
Задача тестирования сводится к обнаружению, как можно большего числа ошибок. В соответствии с определением тестирования, хорошим считается тест, который имеет высокую вероятность обнаружения еще не выявленных ошибок. Тестовый прогон, приведший к обнаружению ошибки, является удачным. Прогон теста, в результате которого ошибка не была обнаружена, является не удачным прогоном.
Тест, который с самого начала демонстрирует отсутствие ошибок, как правило, недостаточно хорошо разработан. Осуществляя тестирование необходимо исходить из следующей закономерности. Вероятность наличия необнаруженных ошибок на конкретном участке программы пропорциональна числу ошибок, уже обнаруженных на данном участке.
Указанная закономерность отражает неравномерность распределения ошибок на различных участках программы. Поэтому, если первые результаты тестирования позволяют выявить наиболее уязвимые участки программы, то на эти участки при дальнейшем тестировании необходимо обратить особое внимание.
Выполняя тестирование необходимо, во-первых, проверить, делает ли данный программный продукт то, для чего он предназначен; во-вторых, проверить, не делает ли данный программный продукт, то, что он не должен делать. При тестировании необходимо проверять возможность наличия неправильных и непредусмотренных входных данных.
Тесты, представляющие некорректные входные данные, обладают большой обнаруживающей способностью. При разработке тестов необходимо исходить из того, что исчерпывающее тестирование для всех входных данных невозможно. Поэтому каждый тест должен давать максимальную отдачу по сравнению с произведенными затратами.
Отдача теста измеряется вероятностью того, что тест выявит не обнаруженную прежде ошибку. Затраты измеряются стоимостью подготовки теста, стоимостью его выполнения, и стоимостью анализа результатов теста. При рассмотрении эффективности теста, учитывается в какой степени, данный тест обнаруживает ошибки, наибольшим образом снижающие надежность программы.
Разработка тестов должна соответствовать международным и российским стандартам. Можно выделить следующие стандарты: Стандарт ISO 12119 (“ Пакеты программ. Требования к качеству и тестирование”).
Данный стандарт содержит раздел, который кратко определяет порядок тестирования программного продукта на соответствие данного программного продукта требованиям к качеству. Данные указания охватывают как тестирование для характеристик, присущих всем аналогичным продуктам, так и тестирование для особых характеристик, декларированных в описании данного программного продукта.
ГОСТ Р ИСО/МЭК 15408 («Общие критерии»). Данный стандарт в отношении тестирования вводит понятия «Покрытие» и «Глубина». Покрытие показывает полноту охвата тестами (т.е. покрытие тестами) функциональных возможностей объекта оценки. Глубина характеризует уровень детализации тестирования.
В стандарте ANSI/IEEE 1008 (“Тестирование программных модулей и компонентов ПС”) рассмотрена методика отладки отдельных модулей и небольших групп программ. Целями данного стандарта являются создание единого подхода к тестированию компонентов программного средства, который может быть использован на практике в качестве основы для получения эффективных ПС, а также описание концепций и допущений, принимаемых при тестировании.
3. Принципы организации тестирования.
Эффективная организация тестирования должна основываться на соблюдении следующей совокупности принципов. Принцип сегментации основан на разделении сложной задачи на ряд небольших подзадач, которые в последующем рассматриваются как самостоятельные. Принцип проектирования тестирования.
Данный принцип требует рассмотрения вопросов тестирования на всех этапах проектирования программного обеспечения. Принцип моделирования. Данный принцип предусматривает предварительное построение моделей. Моделирование позволяет обеспечить разработку и проверку тестов до разработки основных элементов программного обеспечения. Принцип выборочного контроля.
Тестирование не может быть исчерпывающим, поэтому для контроля выбирают определенную совокупность данных. Принцип стандартизации. Стандартизация важна как средство для упрощения проблем тестирования и развития методологии получения надежных средств программного обеспечения.
4. Методы тестирования.
При разработке тестов исходят из невозможности создать тест, обеспечивающий всестороннее тестирование. Задача сводится к созданию максимально эффективного теста, обеспечивающего обнаружение ошибок наибольшим образом снижающих надежность программ. Можно выделить два вида тестирования:
Во-первых, структурное тестирование;
Во-вторых, функциональное тестирование.
Структурное тестирование означает тестирование, управляемое логикой программы. В этом случае, осуществляется тщательный анализ алгоритма программы и предусматривается разработка теста, обеспечивающего наиболее эффективным образом проверку различных участков программы. Структурное тестирование характеризуется степенью покрытия логики программы.
Полное покрытие всей логики программы, т.е. исчерпывающее тестирование, предполагает выполнение программы по всем маршрутам передач управления. Если программа содержит цикл, то полное тестирование предполагает необходимость расчета по каждому из вариантов цикла.
Например, если циклически повторяется обработка записей трех наборов данных, каждый из которых может содержать до 10 тысяч записей, то полное тестирование предполагает создание, по меньшей мере 10000*10000*10000 тестов. Если алгоритм будет содержать логическую обработку, то количество необходимых тестов при полном тестировании многократно возрастает.
Поэтому при тестировании путем покрытия логики программы при создании теста ориентируются не на полный тест, а на тест, отвечающий требуемому критерию. Для создания тестов при структурном тестировании могут быть использованы следующие методы: Во-первых, метод «покрытия операторов» (Statement Coverage – SC).
Данный метод, основан на критерии, который предполагает выполнение каждого оператора программы, хотя бы один раз. Во-вторых, метод «покрытия условий» (Decision Coverage – DC). Данный метод, основан на критерии, который предполагает запись числа тестов, достаточного для того, чтобы результаты каждого условия в решении выполнялись по крайней мере один раз.
В-третьих, метод «комбинаторного покрытия условий» (Modified Condition/Decision Coverage – MC/DC). Данный метод, основан на критерии, который требует создание такого числа тестов, чтобы все возможные комбинации результатов условия в каждом решении выполнялись по крайней мере один раз. Функциональное тестирование предусматривает тестирование с управлением по данным.
При использовании этой стратегии не учитываются знания о внутренней структуре программы. При данном подходе определяется поведение программы, которое не соответствует спецификации данной программы. Функциональное тестирование предполагает задание различных вариантов наборов входных данных в соответствии со спецификацией программы.
Полное тестирование с использованием управления по данным предполагает: во-первых, задание всех возможных корректных сочетаний входных данных; во-вторых, задание всех возможных не корректных сочетаний входных данных. Данное число тестов будет являться бесконечно большим.
Реальное тестирование с применением управления по данным ограничивается использованием небольшого подмножества всех возможных данных. Тесты, которые позволяют обнаружить ошибки одного типа, объединяются в классы эквивалентности. Можно выделить следующие методы функционального тестирования: Во-первых, метод «эквивалентного разбиения».
Разработка тестов методом эквивалентного разбиения осуществляется в два этапа. На первом этапе выполняется выделение классов эквивалентности. На втором этапе выполняется построение тестов. Классы эквивалентности выделяются путем анализа каждого входного условия. За входное условие, как правило, принимается конкретное предложение спецификации.
При выделении классов различают правильные классы эквивалентности и неправильные классы эквивалентности. Правильные классы эквивалентности представляют правильные входные данные программы. Неправильные классы эквивалентности представляют ошибочные входные данные. Во-вторых, метод «анализа граничных значений». Данный метод предполагает использование граничных условий.
Под граничными условиями понимаются условия, характеризующие ситуации, возникающие на границах входных и выходных классов эквивалентности, а также непосредственно выше или ниже этих границ. Отличительные особенности анализа граничных значений заключаются в следующем: Во-первых, в том, что элементы в класс эквивалентности выбираются таким образом, чтобы проверить тестом каждую границу класса эквивалентности; Во-вторых, при разработке тестов рассматриваются не только входные, но и выходные классы эквивалентности. Следует отметить следующие особенности функционального тестирования:
Во-первых, функциональное тестирование не заканчивается после передачи прикладного программного обеспечения. Каждый пользователь выполняет функциональное тестирование для своей конкретной ситуации. Иногда, производители прикладного программного обеспечения обговаривают, что предлагаемая версия программного продукта предполагает тестирование пользователями (бета версия).
Во-вторых, основные подходы функционального тестирования, в той или иной мере, могут эффективно использоваться не только при разработке прикладного программного обеспечения. Основные идеи функционального тестирования изложены в библии. В библии сказано, что отличать пророков от лжепророков следует по результатам их деятельности.
Очевидно, что принципы функционального тестирования выполняет любой покупатель бытовой техники. В развитых странах по результатам деятельности политических партий осуществляется голосование избирателей. Данный подход также можно рассматривать, как функциональное тестирование.
Рассмотренные методы тестирования прикладного программного обеспечения. отличаются целевыми задачами тестирования, проверяемыми компонентами программы и методами оценки результатов. В связи с этим, только совместное применение различных методов тестирования позволяет достигать высокое качество функционирования программных средств.
5. Инструментальные средства тестирования.
Тестирование представляет собой дорогой и трудоемкий этап разработки программных систем. Поэтому создан широкий спектр инструментальных средств для поддержки процесса тестирования, которые значительно сокращают расходы на него. Для выполнения тестирования создается программная среда, которая обеспечивает запуск и выполнение тестируемого модуля, передаёт ему входные данные, и собирает реальные выходные данные, полученные в результате работы системы на заданных входных данных. После этого, программная среда тестирования должна сравнить реальные выходные данные, с ожидаемыми данными, и на основании выполненного сравнения сделать вывод о готовности модуля. Программная среда тестирования может иметь следующий вид: Можно выделить следующие инструментальные средства программной среды тестирования:
Во-первых, «организатор тестов», который управляет выполнением тестов.
Во-вторых, «генератор тестовых данных», который генерирует тестовые данные для тестируемой программы, а именно, выбирает тестовые данные из базы данных или использует шаблоны для генерации случайных данных.
В-третьих, «программа оракул», которая генерирует ожидаемые результаты тестов.
В-четвертых, «компаратор файлов», который сравнивает результаты текущего тестирования с результатами предыдущего тестирования и составляет отчет об обнаруженных различиях.
В-пятых, «генератор отчетов тестирования», который формирует отчеты по тестам.
В-шестых, «динамический анализатор», который добавляет в программу код подсчета количества выполнения каждого оператора.
В-седьмых, «имитатор», который моделирует выполнение программы.
6. Валидация программных средств.
Под валидацией программного средства понимается доказательство того, что в результате разработки системы были достигнуты цели, которые планировали достичь благодаря применению данной системы. Таким образом, валидация представляет собой проверку соответствия программного средства ожиданиям заказчика. В стандарте ANSI/IEEE 1012 (“Планирование проверки (оценки) и подтверждения достоверности (валидация — аттестация) программных средств”) понятие валидации определено, как систематическое, поэтапное тестирование компонентов разного уровня интеграции в течение всего жизненного цикла программных средств. В стандарте оговорены единые требования, предъявляемые к формату и содержимому методик проверки программного средства и аттестации результатов тестирования. Данный стандарт обеспечивает всестороннюю оценку каждой фазы проекта программного средства и дает возможность гарантировать соблюдение следующих условий:
Во-первых, обнаружение и устранение ошибок на как можно более ранней стадии жизненного цикла ПС;
Во-вторых, снижение риска, связанного с проектом, затрат и действий, связанных с планированием разработки;
В-третьих, повышение качества и надежности ПС;
В-четвертых, улучшение обозримости организации проведения работ в процессе создания ПС;
В-пятых, возможность быстро подвергнуть оценке предлагаемые изменения и их значение.
Похожие ответы, выполненные работы
- Ответы к вопросам к экзамену по дисциплине «История…
- Помощь с заданием по праву для ИИТ, пример оформления
- Анализ требований к автоматизированным…
- Методы и средства инженерии программного обеспечения
- Лекция на тему: «Основные качественные и…
- Помощь с эссе по мировой экономике в ИМТП, пример оформления
- Процессы управления информационными технологиями
- Контрольная работа по иностранному языку для ТулГУ,…
- Контрольная работа по дисциплине «Английский…
- Лекция на тему: «Стандартизация разработки…
Источник: the-distance.ru
Тестирование ПО — Методы
Существуют различные методы, которые можно использовать для тестирования программного обеспечения.
Тестирование Black-Box
Методика тестирования без каких-либо знаний о внутренней работе приложения называется «черным ящиком». Тестер не обращает внимания на архитектуру системы и не имеет доступа к исходному коду. Как правило, при выполнении теста с «черным ящиком» тестер будет взаимодействовать с пользовательским интерфейсом системы, предоставляя входные данные и анализируя выходы, не зная, как и где обрабатываются входы.
В следующей таблице перечислены преимущества и недостатки тестирования черного ящика.
Хорошо подходит и эффективен для больших сегментов кода. | Ограниченное покрытие, поскольку на самом деле выполняется только выбранное количество тестовых сценариев. |
Кодовый доступ не требуется. | Неэффективное тестирование, из-за того, что тестер только имеет ограниченные знания о приложении. |
Четкое разделение перспективы пользователя с точки зрения разработчика с помощью явно определенных ролей. | Слепой охват, поскольку тестер не может ориентироваться на определенные сегменты кода или области ошибок. |
Большое количество умеренно квалифицированных тестировщиков может протестировать приложение без каких-либо знаний о реализации, языке программирования или операционных системах. | Тестовые примеры трудно разработать. |
Тестирование белого ящика
Проверка белого ящика — это подробное исследование внутренней логики и структуры кода. Тестирование с использованием белого ящика также называется тестированием стекла или открытым тестированием . Чтобы выполнить тестирование белого ящика в приложении, тестер должен знать внутреннюю работу кода.
Тестер должен заглянуть внутрь исходного кода и выяснить, какое устройство / блок кода ведет себя некорректно.
В следующей таблице перечислены преимущества и недостатки тестирования белого ящика.
Поскольку тестер знает исходный код, становится очень легко узнать, какой тип данных может помочь в эффективном тестировании приложения. | В связи с тем, что для тестирования белых ящиков требуется квалифицированный тестер, затраты увеличиваются. |
Это помогает в оптимизации кода. | Иногда невозможно заглянуть в каждый уголок и угол, чтобы обнаружить скрытые ошибки, которые могут создавать проблемы, так как многие пути будут непроверены. |
Дополнительные строки кода могут быть удалены, что может привести к скрытым дефектам. | Трудно поддерживать тестирование белых ящиков, поскольку для этого требуются специализированные инструменты, такие как анализаторы кода и инструменты отладки. |
Благодаря знаниям тестера о коде, максимальный охват достигается при написании сценария сценария. |
Тестирование серых ящиков
Тестирование на серой коробке — это метод тестирования приложения с ограниченным знанием внутренней работы приложения. При тестировании программного обеспечения фраза, чем больше вы знаете, тем лучше переносит массу при тестировании приложения.
Освоение домена системы всегда дает тестеру преимущество над кем-то с ограниченными знаниями домена. В отличие от тестирования черного ящика, где тестер тестирует только пользовательский интерфейс приложения; при тестировании в сером полете тестер имеет доступ к проектной документации и базе данных. Имея эти знания, тестер может подготовить лучшие тестовые данные и сценарии тестирования при составлении плана тестирования.
Предлагает комбинированные преимущества тестирования черного ящика и белого ящика, где это возможно. | Поскольку доступ к исходному коду недоступен, возможность пройти через код и зону тестирования ограничена. |
Тестировщики серого ящика не полагаются на исходный код; вместо этого они полагаются на определение интерфейса и функциональные спецификации. | Тесты могут быть излишними, если разработчик программного обеспечения уже выполнил тестовый пример. |
Основываясь на имеющейся ограниченной информации, тестер серого ящика может разработать отличные сценарии тестирования, особенно в отношении протоколов связи и обработки данных. | Тестирование всех возможных входных потоков нереально, поскольку для этого потребуется необоснованное количество времени;поэтому многие программные пути будут непроверены. |
Тест выполняется с точки зрения пользователя, а не дизайнера. |
Сравнение методов тестирования
В следующей таблице перечислены точки, которые различают тестирование «черного ящика», «серое окно» и «белый ящик».
Не нужно знать внутреннюю работу приложения. | Тестер имеет ограниченное знание внутренней работы приложения. | Тестер имеет полное представление о внутренней работе приложения. |
Также известен как тестирование с закрытым ящиком, тестирование с использованием данных или функциональное тестирование. | Также известен как прозрачное тестирование, поскольку тестер имеет ограниченное знание внутренних аспектов приложения. | Также известен как прозрачное тестирование, структурное тестирование или тестирование на основе кода. |
Выполняется конечными пользователями, а также тестировщиками и разработчиками. | Выполняется конечными пользователями, а также тестировщиками и разработчиками. | Обычно выполняются тестировщиками и разработчиками. |
Тестирование основано на внешних ожиданиях. Внутреннее поведение приложения неизвестно. | Тестирование выполняется на основе диаграмм базы данных высокого уровня и диаграмм потоков данных. | Внутренние работы полностью известны, и тестер может соответствующим образом создавать тестовые данные. |
Он является исчерпывающим и наименее трудоемким. | Частично трудоемкий и исчерпывающий. | Самый исчерпывающий и трудоемкий тип тестирования. |
Не подходит для тестирования алгоритмов. | Не подходит для тестирования алгоритмов. | Подходит для тестирования алгоритмов. |
Это можно сделать только методом проб и ошибок. | Домены данных и внутренние границы могут быть проверены, если они известны. | Домены данных и внутренние границы могут быть лучше проверены. |
Источник: unetway.com
Способы тестирования безопасности приложений
В этой статье мы рассмотрим основные способы тестирования безопасности приложений, выявим их преимущества и недостатки, а также расскажем, как их правильно использовать для достижения эффективной защиты приложений.
В современном мире программное обеспечение интегрируется в процессы автоматизации, и количество строк кода в приложениях увеличивается. В результате увеличивается количество возможных уязвимостей и ошибок. Это создает потребность в эффективной проверке и тестировании исходного кода.
Информационная безопасность
Согласно исследованию Positive Technologies, проведенному в 2019 году, 82% уязвимостей веб-приложений находятся в исходном коде. В среднем каждая вторая система содержит уязвимость с высоким уровнем опасности. Одна из основных причин этой проблемы — отсутствие проверки кода на наличие уязвимостей на этапе написания.
Также одним из факторов является то, что разработчики не уделяют должного внимания вопросу безопасности. Они больше сосредоточены на функциональности приложения. Увеличение количества уязвимостей и вероятность того, что злоумышленники воспользуются ими, заставляет рынок безопасности приложений стремительно развиваться.
По этой причине качество тестирования кода с годами значительно возросло, и разработано множество инструментов для тестирования кода. Старые ошибки исправлены, но появляются новые. Кроме того, киберпреступники также разрабатывают новые инструменты и методы для обнаружения уязвимостей в коде, чтобы использовать их в атаках.
AST (Application Security Testing)
- Статическое тестирование безопасности приложений (Static Application Security Testing, SAST);
- Динамическое тестирование безопасности приложений (Dynamic Application Security Testing, DAST);
- Интерактивное тестирование безопасности приложений (Interactive Application Security Testing, IAST);
SAST (Static Application Security Testing)
Статическое тестирование безопасности приложений — это тестирование на наличие ошибок и уязвимостей в исходном коде. SAST является одним из основных вариантов поиска уязвимостей в коде.
Статический анализ выполняется на этапе написания кода. Это позволяет разработчикам находить недостатки на ранних этапах разработки продукта и снижать затраты на их устранение. Кроме того, SAST работает с большинством языков программирования.
Другие преимущества SAST включают в себя:
- Возможность интегрировать статический анализ в процесс разработки;
- Обнаружение критических уязвимостей, таких как переполнение буфера, SQL-инъекция, межсайтовый скриптинг (XSS) и другие;
- Указание точного местоположения подозрительного фрагмента кода. Это особенно важно для больших проектов с тысячами и миллионами строк кода.
Однако, у технологии SAST есть свои недостатки, которые включают в себя большое количество ложных срабатываний. Из-за этого проверка результатов может занять много времени.
Потенциальные уязвимости в исходном коде могут привести к большим угрозам безопасности. Использование SAST-инструментов снижает эти риски и помогает контролировать качество разработки.
DAST (Dynamic Application Security Testing)
Динамическое тестирование безопасности приложений имитирует вредоносные атаки, которые используют распространенные уязвимости.
Основная задача DAST — выявить ошибки до того, как их обнаружит злоумышленник. Такие инструменты ищут уязвимые области, проверяя точки доступа и имитируя взаимодействие с пользователем.
DAST позволяет разработчикам выявлять недостатки, вызванные внедрениями кода (например, внедрение кода на веб-страницу) или связанные с некорректной настройкой (например, аутентификация с пустым паролем).
- В отличие от SAST, он позволяет разработчикам обнаруживать проблемы во время выполнения кода. Это могут быть недостатки аутентификации и настройки сети, либо проблемы, возникающие только после входа в систему;
- DAST находит ошибки, возникающие при работе пользователя с приложением;
- Позволяет разработчикам тестировать приложение и выявлять недостатки, которые не были обнаружены обычными тестами;
- DAST не привязан к языкам программирования.
Изначально DAST-инструменты использовались реже, чем SAST. Но в связи с распространением смартфонов, в которых появляется все больше приложений, связанных с конфиденциальной информацией, доля DAST-решений значительно увеличилась и продолжает расти. Исследование IndustryARC показало, что рынок DAST-решений увеличивается в среднем на 17,4% в год.
Согласно данным Grand View Research, по долям продаж на мировом рынке SAST и DAST практически равны.
Для большей безопасности исходного кода и продукта в целом разработчики используют SAST и DAST вместе, так как оба метода нейтрализуют слабые стороны друг друга:
- DAST работает с разными наборами входных данных, что позволяет выявить их некорректную или небезопасную обработку;
- SAST хорошо обнаруживает ошибки в исходном коде, но выдает большое количество ложных срабатываний;
- Технологии DAST не позволяют разработчикам отмечать ошибки в точности до номера строки кода;
- SAST легко интегрировать в работу над проектом и автоматизировать процессы;
- DAST понимает вызовы функций и аргументы;
- SAST может работать с вызовами функций и аргументами, но только частично.
IAST (Interactive Application Security Testing)
Интерактивное тестирование безопасности приложений – относительно новый (по сравнению с SAST и DAST) метод, который позволяет анализировать приложение изнутри во время его работы.
- SAST работает с кодом без запуска приложения.
- DAST может работать с запущенным приложением, но без доступа к коду.
- IAST работает с кодом в работающем приложении.
IAST отслеживает выполнение кода и ищет определенные события, которые могут привести к уязвимости. Эти события анализируются и проверяются на наличие ошибок.
IAST был разработан для устранения недостатков методов SAST и DAST путем их объединения. Технология IAST обнаруживает проблемы безопасности в режиме реального времени с помощью анализа трафика и потока выполнения приложений.
Поскольку IAST работает внутри приложения, он может анализировать:
- Код приложения;
- Поток данных;
- Конфигурации;
- HTTP-запросы и ответы;
- Библиотеки, фреймворки и т.д.;
- Информацию о внутреннем соединении.
Доступ ко всей этой информации позволяет IAST охватывать больший объем кода, давать более точные результаты и проверять более широкий набор правил безопасности, по сравнению с SAST и DAST. Кроме того, IAST выявляет больше уязвимостей без ложных срабатываний.
Однако, IAST имеет и недостатки. Одним из основных минусов является то, что IAST-инструменты могут замедлять работу приложения и снижать производительность кода.
Также крайне сложно подготовить входные данные и сценарии работы, позволяющие добиться широкого охвата кода. IAST позволяет охватить 100% кода, но на практике это может быть тяжело и трудозатратно. Поэтому, разработчики могут выбрать SAST-инструменты, так как SAST анализирует все ветки программы вне зависимости от их выполнения.
Вывод
Тестирование безопасности приложений является важной частью концепции DevSecOps, и мы не можем игнорировать его в современном мире разработки. Мы должны использовать AST для проверки исходного кода на наличие уязвимостей, безопасных входных данных, соединений и интеграции между внутренними системами.
Подводя итоги, мы можем выделить несколько важных аспектов статьи:
- Не существует универсального решения, обеспечивающего 100% безопасность разработки. Однако, если вы используете инструменты тестирования на ранних этапах разработки, вы легко найдете потенциальные уязвимости и предотвратите их использование в атаках.
- Совместное применение технологий SAST и DAST на соответствующих этапах разработки позволит добиться наилучших показателей защищенности исходного кода.
- SAST-инструменты предназначены для использования в непрерывной интеграции. Кроме того, современные DAST- решения успешно используются в производстве CI/CD многими предприятиями.
- Внедрение IAST-метода в разработку приложения часто бывает очень сложным. Однако, IAST эффективный из-за универсальности инструмента.
- IAST сочетает в себе плюсы и минусы SAST и DAST.
- Тестирование безопасности приложений следует применять к любому стороннему коду, который находится в разработке, поскольку мы не можем точно знать, является ли сторонний компонент (коммерческий или открытым исходным кодом) безопасным.
Хотите знать, как отслеживают ваше движение в интернете? Присоединяйтесь к нашему ТГ каналу и научитесь контролировать свои цифровые следы.
Источник: www.securitylab.ru