Содержание
- Современные технологии тестирования
3
- Программы для компьютерного
перевода текста
11
Список использованных источников
18
Вариант 7
Современные технологии
тестирования
Тестирование является одним
из наиболее устоявшихся способов обеспечения
качества разработки программного обеспечения.
С технической точки зрения
тестирование заключается в выполнении
приложения на некотором множестве исходных
данных и сверке получаемых результатов
с заранее известными (эталонными) с целью
установить соответствие различных свойств
и характеристик приложения заказанным
свойствам. Как одна из основных фаз процесса
разработки программного продукта,
тестирование характеризуется достаточно
большим вкладом в суммарную трудоемкость
разработки продукта.
С точки зрения математики тестирование
можно рассматривать как интерпретацию
некоторой формулы и проверки ее истинности
на некоторых множествах. Действительно,
программу можно представить в виде формулы f
= f1* f2* f3*... * fn, где f1, f 2, ... fn – операторы языка
программирования, а их суперпозиция
– программа.
Существует два метода обоснования истинности
формул:
1) Формальный подход или доказательство применяется, когда
из исходных формул-аксиом с помощью формальных
процедур (правил вывода) выводятся искомые
формулы и утверждения (теоремы).
Преимущество формального подхода заключается
в том, что с его помощью удается избегать
обращений к бесконечной области значений
и на каждом шаге доказательства оперировать
только конечным множеством символов.
2) Интерпретационный подход применяется,
когда осуществляется подстановка констант
в формулы, а затем интерпретация формул,
как осмысленных утверждений в элементах
множеств конкретных значений. Истинность
интерпретируемых формул проверяется
на конечных множествах возможных значений.
Сложность подхода состоит в том, что на
конечных множествах комбинации возможных
значений для реализации исчерпывающей
проверки могут оказаться достаточно
велики.
Интерпретационный подход используется
при экспериментальной проверке соответствия
программы своей спецификации
Применение интерпретационного подхода
в форме экспериментов над исполняемой
программой составляет суть отладки и
тестирования.
Если программа не содержит синтаксических
ошибок и может быть выполнена на компьютере,
она обязательно вычисляет какую-либо
функцию, осуществляющую отображение
входных данных в выходные. Это означает,
что компьютер на своих ресурсах доопределяет
частично определенную программой функцию
до тотальной определенности. Следовательно,
судить о правильности или неправильности
результатов выполнения программы можно,
только сравнивая спецификацию желаемой
функции с результатами ее вычисления,
что и осуществляется в процессе тестирования.
Основы тестирования.
Классы критериев тестирования.
Структурные критерии используют информацию о структуре
программы (критерии так называемого «белого
ящика»), что предполагает знание исходного
текста программы или спецификации программы
в виде потокового графа управления. Структурные
критерии базируются на основных элементах
графа управления – операторах, ветвях
и путях.
- Условие критерия тестирования команд (критерий
С0) – набор тестов в совокупности должен обеспечить прохождение каждой команды не менее одного раза.
Условие критерия тестирования
ветвей (критерий С1) – набор тестов в совокупности должен обеспечить прохождение каждой ветви не менее одного раза.
Условие критерия тестирования путей (критерий
С2) – набор тестов в совокупности должен обеспечить прохождение каждого пути не менее 1 раз.
Функциональные
критерии формулируются в описании требований
к программному изделию (критерии так
называемого «черного ящика») Они обеспечивают,
прежде всего, контроль степени выполнения
требований заказчика в программном продукте.
Поскольку требования формулируются к
продукту в целом, они отражают взаимодействие
тестируемого приложения с окружением.
Проблема функционального тестирования
– это прежде всего трудоемкость; дело
в том, что документы, фиксирующие требования
к программному изделию, как правило, достаточно
объемны, тем не менее соответствующая
проверка должна быть всеобъемлющей.
Выделяют следующие частные
виды функциональных критериев:
- тестирование пунктов спецификации;
тестирование классов входных
данных;
тестирование правил – набор тестов в совокупности должен обеспечить проверку каждого правила, если входные и выходные значения описываются набором правил некоторой грамматики;
тестирование классов выходных
данных;
тестирование функций;
комбинированные критерии для
программ и спецификаций.
Критерии стохастического
тестирования формулируются в терминах
проверки наличия заданных
свойств у тестируемого приложения, средствами
проверки некоторой статистической гипотезы.
Применяется при тестировании сложных
программных комплексов – когда набор
детерминированных тестов (X, Y) имеет громадную
мощность.
Мутационные критерии ориентированы на проверку
свойств программного изделия на основе
подхода Монте-Карло.
Метод мутационного тестирования
состоит в том, что в разрабатываемую программу
P вносят мутации (мелкие ошибки), т.е. искусственно
создают программы-мутанты P1, P2...
. Затем программа P и ее мутанты тестируются
на одном и том же наборе тестов (X, Y).
Если на наборе (X, Y) подтверждается
правильность программы P и, кроме того,
выявляются все внесенные в программы-мутанты ошибки, то набор
тестов (X, Y) соответствует мутационному
критерию, а тестируемая программа объявляется
правильной. Если некоторые мутанты не
выявили всех мутаций, то надо расширять
набор тестов (X, Y) и продолжать тестирование.
Фазы тестирования.
При тестировании как правило
выделяют три фазы: модульное, интеграционное
и системное тестирование.
Модульное тестирование – это тестирование программы
на уровне отдельно взятых модулей, функций
или классов. Цель модульного тестирования
состоит в выявлении локализованных в
модуле ошибок в реализации алгоритмов,
а также в определении степени готовности
системы к переходу на следующий уровень
разработки и тестирования. Модульное
тестирование проводится по принципу
«белого ящика», то есть основывается
на знании внутренней структуры программы,
и часто включает те или иные методы анализа
покрытия кода.
Интеграционное
тестирование – это тестирование части системы,
состоящей из двух и более модулей. Основная
задача интеграционного тестирования
– поиск дефектов, связанных с ошибками
в реализации и интерпретации интерфейсного
взаимодействия между модулями. Основная
разница между модульным и интеграционным
тестированиями состоит в целях, то есть
в типах обнаруживаемых дефектов, которые,
в свою очередь, определяют стратегию
выбора входных данных и методов анализа.
Системное тестирование качественно отличается от
интеграционного и модульного уровней.
Оно рассматривает тестируемую систему
в целом и оперирует на уровне пользовательских
интерфейсов. Основная задача
системного тестирования состоит в выявлении
дефектов, связанных с работой системы
в целом, таких как неверное использование
ресурсов системы, непредусмотренные
комбинации данных пользовательского
уровня, несовместимость с окружением,
непредусмотренные сценарии использования,
отсутствующая или неверная функциональность,
неудобство в применении и тому подобное.
Системное тестирование производится
над проектом в целом с помощью метода
«черного ящика». Структура программы
не имеет никакого значения, для проверки
доступны только входы и выходы, видимые
пользователю. Тестированию подлежат
коды и пользовательская документация.
Кроме того, выделяют регрессионное тестирование –
цикл тестирования, который производится
при внесении изменений на фазе системного
тестирования или сопровождения продукта.
Главная проблема регрессионного тестирования
– выбор между полным и частичным перетестированием и
пополнением тестовых наборов. При частичном перетестировании контролируются
только те части проекта, которые связаны
с измененными компонентами.
Этапы тестирования.
Каждая фаза тестирования включает
в себя следующие этапы:
Определение целей (требований к тестированию), включающее следующую конкретизацию: какие части системы будут тестироваться, какие аспекты их работы будут выбраны для проверки, каково желаемое качество и т. п.
Планирование: создание графика (расписания) разработки тестов для каждой тестируемой подсистемы; оценка необходимых человеческих, программных и аппаратных ресурсов; разработка расписания тестовых циклов. Важно отметить, что расписание
тестирования обязательно должно быть
согласовано с расписанием разработки
создаваемой системы.
Разработка тестов (тестового кода для тестируемой системы).
Выполнение тестов: реализация тестовых циклов.
Анализ результатов.
Тестовый цикл – это цикл исполнения тестов,
включающий фазы 4 и 5 тестового процесса. Тестовый
цикл заключается в прогоне разработанных
тестов на некотором однозначно определяемом
срезе системы (состоянии кода разрабатываемой
системы).
Тестовый план – это документ, или набор документов,
который содержит тестовые ресурсы, перечень
функций и подсистем, подлежащих тестированию, тестовую
стратегию, расписание тестовых
циклов, фиксацию тестовой конфигурации
(состава и конкретных параметров аппаратуры
и программного окружения), определение
списка тестовых метрик, которые на тестовом
цикле необходимо собрать и проанализировать.
Тесты разрабатывают на основе
спецификаций как вручную, так и с помощью
автоматизирующих средств. Помимо собственно
кода, в понятие «тест» включается его
общее описание и подробное описание шагов,
выполняемых в данном тесте.
Вся информация об обнаруженных
в процессе тестирования дефектах (тип, условия
обнаружения, причина, условия исправления,
время, затраченное на исправление) заносятся
в базу дефектов.
Информация о тестовом
плане, тестах и дефектах используется
в конце каждого цикла тестирования для
генерации тестового отчета и корректирования
системы тестов для следующей итерации.
Типы тестов.
В тестовом плане определяются
и документируются различные типы тестов.
Типы тестирования по виду подсистемы
или продукта таковы:
Тестирование основной функциональности,
когда тестированию подвергается собственно
система, являющаяся основным выпускаемым
продуктом.
Тестирование инсталляции включает
тестирование сценариев первичной инсталляции
системы, сценариев повторной инсталляции
(поверх уже существующей копии), тестирование
деинсталляции, тестирование инсталляции
в условиях наличия ошибок в инсталлируемом
пакете, в окружении или в сценарии и т.
п.