В наши дни информационные технологии
развиваются стремительно. Но мало кто задумывается, что, прежде чем новому ИТ
продукту выйти в свет, необходимо пройти жизненный цикл его разработки. Одним
из важных этапов которого является тестирование.
Что такое тестирование?
Из чего оно состоит? На сколько необходимо? Мало тех, кто действительно хорошо
знаком с тестированием, и знает всю сложность этого процесса.
Что
же понимается под словом тестирование? Тестирование
программного обеспечения — процесс анализа программного средства и
сопутствующей документации с целью выявления дефектов и повышения качества
продукта.
Процесс тестирования
состоит из:
- планирование и
управление;
- анализ и
проектирование;
- внедрение и
реализация;
- оценка критериев выхода
и создание отчетов;
- действия по
завершению тестов.
В процесс тестирования
также входит рецензирование документации (включая исходный код) и проведение
статического анализа.
Планирование
тестирования включает в себя определение целей тестирования и описание задач
тестирования для достижения этих целей. А управление тестированием представляет
собой постоянный контроль текущего положения дел и соответствие их с планом, и
отчетность о состоянии дел, включая отклонения от плана.
Анализ и проектирование
тестов состоит из воплощения общих целей тестирования в тестовые условия и
тестовые сценарии.
Хорошим считается тест,
который имеет высокую вероятность обнаружения еще не выявленной ошибки. Удачным
– обнаруживает еще не выявленную ошибку.
Реализация и выполнение
тестов – это деятельность, где процедуры тестирования или автоматизированные
сценарии задаются последовательностью тестовых сценариев, а также собирается
любая информация, необходимая для выполнения тестов, разворачивается окружающая
среда, и запускаются тесты.
Оценка критериев выхода
состоит из оценивания выполнения тестов согласно определенным целям и выполняется
для каждого уровня тестирования.
Действия по завершению
тестирования осуществляются для сбора данные о
завершенных испытаниях для объединения
опыта, тестового обеспечения, фактов и цифр.
Само по себе
тестирование – это не отдельный процесс. Он связан с другими работами по
разработке ПО. Из этого следует, что различным моделям разработки ПО необходимы
также различные подходы к тестированию.
Исходя из выше сказанного
понятно, что тестирование состоит из нескольких уровней:
- Компонентное
(модульное). Основывается на поиске
дефектов и подтверждении функционирования программных модулей, программ,
объектов, классов и т.п., которые можно протестировать отдельно.
- Интеграционное
тестирование. Осуществляется проверка интерфейсов между компонентами,
взаимодействий различных частей системы (операционная системы, файловая
система, аппаратное обеспечение, и интерфейсы между системами.)
- Системное
тестирование. Сконцентрировано на поведении тестового объекта как целостной
системы или продукта.
- Приёмочное
тестирование. Основная цель - проверка
работоспособности системы, частей системы или отдельных нефункциональных
характеристик системы.
Прочитав маленький
кусочек теории тестирования, можно уже сделать вывод, что данный процесс не так
прост, как казалось. Тестируя продукт, необходимо понимать всю важность процесса,
и осознавать какую ответственность тестировщик берет на себя.
Существует ошибочное
мнение, что программу можно полностью протестировать. Ниже приведены 3 причины,
по которым полное тестирование невозможно:
- Количество всех
возможных комбинаций входных данных слишком велико, чтобы его можно было
проверить полностью.
- Количество всех
возможных последовательностей выполнения кода
программы также слишком велико, чтобы
его можно было проверить полностью.
- Пользовательский
интерфейс программы (включающий все возможные комбинации действий пользователя
и его перемещений по программе) обычно слишком сложен для полного тестирования.
Тестирование имеет
достаточно большое количество видов, каждый из которых выбирается в зависимости
от преследуемой цели:
· Функциональные виды тестирования (ФТ). ФТ
базируются на функциях и особенностях, а также взаимодействии с другими
системами, и могут быть представлены на всех уровнях тестирования.
Функциональные виды тестирования рассматривают внешнее поведение системы. Одни
из самых распространенных видов функциональных тестов:
- Функциональное
тестирование;
- Тестирование
безопасности;
- Тестирование
взаимодействия.
· Нефункциональные виды тестирования
(НФТ). НФТ описывает тесты, необходимые для определения характеристик
программного обеспечения, которые могут быть измерены различными величинами. В
целом, это тестирование того, "Как" система работает. Основные виды
нефункциональных тестов:
- Все виды тестирования
производительности (нагрузочное тестирование, стрессовое тестирование,
тестирование стабильности или надежности, объемное тестирование);
- Тестирование
установки;
- Тестирование удобства
пользования;
- Тестирование на отказ
и восстановление;
- Конфигурационное
тестирование.
· Связанные с изменениями виды
тестирования. После проведения необходимых изменений, таких как исправление
бага/дефекта, программное обеспечение должно быть пере тестировано для
подтверждения того факта, что проблема была действительно решена.
· Тестирование после установки программ
(Дымовое, Регрессионное, Тестирование сборки, Санитарное тестирование или
проверка согласованности/ исправности.
· Модульное тестирование – тестирование
программы на уровне отдельно взятых модулей, функций или классов.
· Интеграционное тестирование – тестирование
части системы, состоящей из двух и более модулей. (интерфейсное взаимодействие
между модулями)
· Системное тестирование - тестируется
интегрированная система на ее соответствие требованиям. (Альфа – тестирование, Бета-тестирование)
· Тестирование производительности -
тестирование, которое производится с целью определения, как быстро работает
вычислительная система или ее часть под определенной нагрузкой.
Также
тестирование делят на методы: при тестировании "белого ящика"
разработчик теста имеет доступ к исходному коду программ и может писать код,
который связан с библиотеками тестируемого ПО; при тестировании "черного
ящика" тестировщик имеет доступ к программе только через интерфейсы,
позволяющие другому компьютеру либо другому процессу подключиться к системе для
тестирования; при тестировании "серого ящика" разработчик теста имеет
доступ к исходному коду, но при непосредственном выполнении тестов доступ к
коду, как правило, не требуется.
Для подробно изучения и
погружения в тестирование следует прочитать массу книг на эту тему, но руководствуясь тем,
что изложено в данной статье, можно дать ответ на последний вопрос, что был
задан в самом начале: На сколько необходимо тестирование?
Ответ таков: без тестирования все
разрабатываемые продукты потерпели бы крах, так как любой пользователь
заинтересован в качестве и стабильности продукта, а без тестирования этого не
добиться.
Этот комментарий был удален автором.
ОтветитьУдалитьЗачем 2 раза писать про модульное, интеграционное и системное тестирование?
ОтветитьУдалитьФорматирование текста так себе (об этом стоить задуматься, при чтении раздражает не много)
И где ссылки на источники интересные, ведь в статье черным по белому написано "Для подробно изучения и погружения в тестирование следует прочитать массу книг на эту тему", вам, как разбирающемуся человеку в теме, следовало бы порекомендовать что-нибудь.
Уважаемый читатель. Если вы обратили внимание, то первый раз про модульное, интеграционное и системное тестирование говорится в рамках уровней тестирования. Второй раз в рамках ВИДОВ тестирования.
УдалитьЕсли вам необходима литература, то я могу вам посоветовать Канер, Фолк -
тестирование ПО, Савин - Тест dot com, Куликов - тестирование ПО. ISTQB и protesting из электронного.
Спасибо за ваше мнение.