DATA FLOW: СТАТИЧЕСКИЙ АНАЛИЗ ПОТОКА ДАННЫХ
В теории любая переменная в программе может быть:
Символьное выполнение
Символьное выполнение представляет собой середину между запуском отдельных групп тестов через программу и проведением положительных тестов с использованием аргумента строгой правильности.
Он включает в себя выполнение (интерпретацию) программы посимвольно. Во время выполнения значения переменных хранятся в алгебраической форме, а результат программы представляется в виде одного или нескольких выражений.
Решения принимаются, следуя обоим результатам, учитывая значение условия, соответствующего каждому из путей, по которым теперь следует идти отдельно.
В конце теста будут представлены два результата о каждом пути через программу: Список результатов решений, принятых на этом пути, и окончательное выражение всех переменных, выраженных алгебраически.
Вместе они определяют функцию программы и могут быть сопоставлены с требуемым результатом - это и есть тест.
Эти результаты затем можно использовать в качестве основы для тестов покрытия условий и анализа пути. Циклы требуют внешней помощи для определения количества итераций, вызовы модулей можно обрабатывать либо путем отдельного решения для устройства и последующего предоставления уравнений для параметров вызова, либо путем включения всего блока в коде, который необходимо решить. Условные циклы требуют, чтобы каждый возможный путь решался отдельно.
Анализ мутаций
Когда все скрипты тестирования готовы и выполняются в тестах, можно встретить очень частую проблему - это недостаток уверенности в том, что скрипты обнаружат все ошибки. Анализ мутаций помогает выявить упущения.
Анализ мутаций проверяет тесты и их данные, запуская их во множестве копий программы, каждая из которых содержит отдельное, намеренно внесённое изменение.Если тесты регистрируют изменения, они считаются хорошими. Типичные мутации заменяют все + и -. В основе этого подхода лежат две теории:
1. Большое количество ошибок вызвано простейшими опечатками программиста, такими как использование AND вместо OR, + вместо - и SQRT (X) вместо X ** 2, или наоборот.
Это называется теорией грамотного программиста.
2. Вторая теория называется теорией эффекта связи, которая значит что если тестовый пример может найти простую ошибку, то он найдёт и сложную.
Мутационное тестирование создает одну или несколько копий некоторого исходного кода и изменяет его так, чтобы один или несколько скриптов изменяли свой результат выполнения.
При мутационном тестировании было выявлено несколько багов:
- Виды внесённых изменений могут не отражать ошибки в программе напр, множественные или временные ошибки), которые тесты могут не обнаружить. Также может потребоваться большое количество тестов. Однако их можно просто создать, используя несколько команд операционной системы и генератор случайных чисел.
Создание всех возможных мутантов очень затратно даже с помощью такого инструмента, как Mothra, С помощью него проводится тестирование слабой мутации, при котором состояние после мутации сравнивается с неизмененным состоянием. На практике из 22 операторов, используемых в Mothra, только 5 являются важными:
- ABS: заставляет каждое арифметическое выражение принимать 0, положительное и отрицательное значения.
- AOR: заменяет каждый арифметический оператор всеми синтаксически допустимыми операторами по очереди.
- LCR: заменяет каждый логический оператор (И и ИЛИ) на несколько типов логических соединителей.
- ROR: заменяет реляционные операторы другими реляционными операторами.
- UOI: вставляет унарные операторы перед .
- На практике, то есть через набор тестов.
- Мутированный код также может исправить ошибку в исходном коде и таким образом скрыть ее.
- Если код просто несовершенен, но работает, то никакое количество тестов на мутации не выявит этого.
- Инструментирование измененного кода для выявления ошибок, которые должны обнаружить, сгенерировать большие объемы кода, и мутант-тест, помещенный в начале кода, может сам заблокировать выполнение более позднего теста.
- В тестируемой системе может использоваться самописанный язык программирования.
Если тесты не обнаруживают внесенных изменений, тогда они дорабатываются. Мутационные тесты полезны для выявления незначительных, но важных ошибок в коде, допускаемые даже опытными разработчиками.
Внедрение ошибок
Цель внедрения ошибок - ответить на вопрос "насколько хорошо это ПО будет работать?"
Результат достигается путем моделирования ошибок программиста, сбоев модулей (таких как неисправные датчики), делая исходный код более "хрупким", чтобы увеличить вероятность появления бага. Выявление ошибки путем ее "распространения" "хрупкости" программного обеспечения также зависит от количества изменений, необходимых для выявления ошибки.
Вот пара примеров:
- Ввод (либо из «нормального» источника, такого как клавиатура или файл, либо из искусственно введенного, который умышленно повреждает некоторые данные во время выполнения программы) вызывает сбой.
- Ошибка влияет на состояние данных после выполнения (если бага не произойдет, то его не будет видно - это особенно проблема с отказоустойчивым кодом)
- Состояние повреждённых данных распространяется на некоторые выходные данные.
Можно сказать, что ошибки распространяются вместе с эффектами в состоянии программ, в которых ошибка воспроизводилась.
Если ошибка заключается в обработке недопустимого значения - ввод этого значения должен положить систему.
Если ошибка заключается в невозможности передать или получить какой-либо (входной/выходной) формат системы - искусственное создание ошибки может привести к её отображению на вводе или выводе системы. Распространенные ошибки наблюдаются как сбои на уровне системы, приложения и вывода.
Внедрение ошибок может использоваться для демонстрации тестируемости (или нет) кода с помощью анализа чувствительности.
Код, который демонстрирует несколько сбоев (напр, очень отказоустойчивый код), может все еще иметь ошибки, но они не проявляются в используемом наборе тестовых данных.
Ответ - использовать внедрение ошибок для искусственного создания ошибок,
чтобы определить, насколько эффективно ПО сдерживает сбой.
Наш твитр: @derkodierer
Comments
Post a Comment