- •Основы тестирования программного обеспечения
- •1.1 История развития тестирования программного обеспечения
- •Основные определения в области тестирования программного обеспечения. Цели и задачи тестирования
- •Классификация тестирования
- •Классификация ошибок
- •Список вопросов для выявления ошибок в начале процесса тестирования
- •Практическое применение
- •C чего начать?
- •Тестирование приложения «Определение типа треугольника»
- •Тестирование приложения «Библиотека»
- •Пример требований к приложению «Библиотека»
- •Категории тестов
- •Создание тестовых примеров
- •3. Тестирование при разработке программного обеспечения
- •Модульное тестирование
- •Цели создания тестов
- •Разработка тестов с помощью jUnit
- •Требования к приложению «Библиотека».
- •Категории тестов
- •Создание тестовых примеров
Основные определения в области тестирования программного обеспечения. Цели и задачи тестирования
Тестирование программного обеспечения (software testing) – это процесс анализа или эксплуатации программного обеспечения с целью выявления дефектов. Несмотря на всю простоту этого определения, в нем содержатся пункты, которые требуют дальнейших пояснений. Слово процесс (process) используется для того, чтобы подчеркнуть, что тестирование суть плановая, упорядоченная деятельность.[2]
Согласно этому определению, тестирование предусматривает "анализ" или "эксплуатацию" программного продукта. Тестовая деятельность, связанная с анализом результатов разработки программного обеспечения, называется статическим тестированием (static testing). Статическое тестирование предусматривает проверку программных кодов, сквозной контроль и проверку программы без запуска на машине, т.е. проверку за столом (desk checks). В отличие от этого, тестовая деятельность, предусматривающая эксплуатацию программного продукта, носит название динамического тестирования (dynamic testing). Статическое и динамическое тестирование дополняют друг друга, и каждый из этих типов тестирования реализует собственный подход к выявлению ошибок.
Последний пункт определения, требующий дополнительных пояснений – это понятие дефекта (bug). Дефект (ошибка) – это расхождение между вычисленным, наблюдаемым и истинным, заданным или теоретически правильным значением. [2] Говоря простыми словами, программная ошибка – не что иное, как изъян в разработке программного продукта, который вызывает несоответствие ожидаемых результатов выполнения программного продукта и фактически полученных результатов. Дефект может возникнуть на стадии кодирования, на стадии формулирования требований или на стадии проектирования, либо же его причина может крыться в некорректной конфигурации или данных.[3]
Задача тестирования – определение условий, при которых проявляются дефекты системы и протоколирование этих условий. В задачи тестирования обычно не входит выявление конкретных дефектных участков программного кода и никогда не входит исправление дефектов – это задача отладки, которая выполняется по результатам тестирования системы.
Цель применения процедуры тестирования программного кода – минимизация количества дефектов, в особенности существенных, в конечном продукте. Тестирование само по себе не может гарантировать полного отсутствия дефектов в программном коде системы.[4]
Классификация тестирования
По знанию внутренностей системы:
– черный ящик;
– серый ящик;
– белый ящик.
По объекту тестирования:
– функциональное тестирование;
– тестирование интерфейса пользователя;
– тестирование локализации;
– тестирование скорости и надежности;
– тестирование безопасности;
– тестирование опыта пользователя;
– тестирование совместимости.
По субъекту тестирования:
– альфа-тестировщик;
– бета-тестировщик.
По времени проведения тестирования:
– до передачи пользователю – альфа-тестирование;
– тест приемки;
– тестирование новых функциональностей;
– регрессивное тестирование;
– тест сдачи;
– после передачи пользователю – бета-тестирование.
По критерию "позитивности" сценариев:
– позитивное тестирование;
– негативное тестирование.
По степени изолированности тестируемых компонентов:
– компонентное тестирование;
– интеграционное тестирование;
– системное тестирование.
По степени автоматизированности тестирования:
– ручное тестирование;
– автоматизированное тестирование;
– смешанное/полуавтоматизированное тестирование.
По степени подготовки к тестированию:
– тестирование по документации;
– эд хок-тестирование.[5]
По знанию внутренностей системы
В терминологии профессионалов тестирования, фразы «тестирование белого ящика» и «тестирование чёрного ящика» относятся к тому, имеет ли разработчик тестов доступ к исходному коду тестируемого программного обеспечения, или же тестирование выполняется через пользовательский интерфейс либо прикладной программный интерфейс, предоставленный тестируемым модулем.[Error: Reference source not found]
Черный ящик. При тестировании чёрного ящика, тестировщик имеет доступ к программному обеспечению только через те же интерфейсы, что и заказчик или пользователь, либо через внешние интерфейсы, позволяющие другому компьютеру либо другому процессу подключиться к системе для тестирования. Как правило, тестирование чёрного ящика ведётся с использованием спецификаций или иных документов, описывающих требования к системе.
Белый ящик. При тестировании белого (прозрачного) ящика, разработчик теста имеет доступ к исходному коду программ и может писать код, который связан с библиотеками тестируемого программного обеспечения.
Серый ящик. При тестировании серого ящика разработчик теста имеет доступ к исходному коду, но при непосредственном выполнении тестов доступ к коду, как правило, не требуется.[Error: Reference source not found]
По субъекту тестирования
Альфа-тестировщик. Альфа-тестирование – имитация реальной работы с системой штатными разработчиками, либо реальная работа с системой потенциальными пользователями/заказчиком.[Error: Reference source not found] Альфа-тестировщик – это сотрудники компании, которые профессионально или непрофессионально проводят тестирование: тестировщики, программисты, продюсеры, бухгалтеры, сисадмины, секретарши. [5]
Бета-тестировщик. В некоторых случаях выполняется распространение версии с ограничениями (по функциональности или времени работы) для некоторой группы лиц, с тем, чтобы убедиться, что продукт содержит достаточно мало ошибок. Иногда бета-тестирование выполняется для того, чтобы получить обратную связь о продукте от его будущих пользователей.[Error: Reference source not found] Бета-тестировщик – это нередко баловень судьбы, который не является сотрудником компании и которому посчастливилось пользоваться новой системой до того, как она станет доступна всем остальным. За бета-тестирование иногда даже платят деньги.[5]
По степени изолированности тестируемых компонентов
Компонентное тестирование – это тестирование на уровне логического компонента. И это тестирование самого логического компонента.
Интеграционное тестирование – это тестирование на уровне двух или больше компонентов. И это тестирование взаимодействия этих двух или больше компонентов.
Системное тестирование – это проверка всей системы от начала до конца.[5]