На сегодня тестирование программного обеспечения — один из самых дорогих этапов жизненного цикла ПО, на него отводится от 50% до 65% общих расходов. Давайте разберемся, что же такое тестирование?
Тестирование — это процесс технического исследования, который выполняется по требованию заказчиков, и предназначен для проявления информации о качестве продукта относительно контекста, в котором он должен использоваться. В этот процесс входит выполнение программы с целью обнаружения ошибок.
Обычно, понятие качества ограничивается такими понятиями, как корректность, полнота, безопасность, но может содержать больше технических требований, которые описаны в стандарте ISO 9126.
Качество не является абсолютной, это субъективное понятие. Поэтому тестирование не может полностью обеспечить корректность программы. Оно только сравнивает состояние и поведение продукта спецификации. При этом надо различать тестирования программного обеспечения и качества программного обеспечения, к которому относятся все составляющие делового процесса, а не только тестирование.
Существует много подходов к тестированию программного обеспечения, но эффективное тестирование сложных продуктов — это по сути исследовательский процесс, а не только создание и выполнение рутинной процедуры. Вообще существуют следующие виды тестирования:
Модульное тестирование тестирует минимальный компонент программы, или модуля. Каждый модуль тестируется для проверки правильности его реализации.
Интеграционное тестирование выявляет дефекты в интерфейсах и во взаимодействии между компонентами (модулями).
Системное тестирование тестирует интегрированную систему для проверки соответствия всем требованиям.
Системное интеграционное тестирование проверяет, система интегрируется в любую внешнюю систему (или системы) в соответствии с системных требований.
Приемное тестирование может проводиться конечного пользователя заказчиком, или клиентом для проверки, может ли продукт быть принят к использованию.
альфа-тестирование — это симулированной или реальное операционное тестирование потенциальными пользователями / заказчиком или команде тестировщиков на стороне разработчика.
бета-тестирование идет после альфа-тестирования. Версии программы, известные как бета-версии, предоставляются в пользование ограниченному количеству людей вне компании для того, чтобы удостовериться, что программа не содержит большого количества ошибок.
В области кодирования ПО широкое распространение получили различные CASE-средства (Computer Aided Software Engineering), которые позволяют ускорить процессы создания кода. К сожалению, в области тестирования ощущается нехватка таких средств и большинство усилий тратится на ручное тестирование.
Обычно, для проведения тестирования применяются методы структурного («белый ящик») и функционального («черный ящик») тестирования. Рассмотрим их подробнее.
При функциональном тестировании исходный код программы не доступен. Суть заключается в проверке соответствия поведения программы ее внешней спецификации. Критерием полноты тестирования считается перебор всех возможных значений входных данных, что осуществить на практике чрезвычайно трудно.
При структурном тестировании текст программы открыт для анализа. Суть данного метода заключается в проверке внутренней логики ПО. Полным тестированием в этом случае будет такое, что приведет к перебору всех возможных путей на графе передач управления программы. Число таких путей может достигать десятков тысяч. Кроме того, возникает вопрос о создании тестов, обеспечивающих данное покрытие. Осуществить полное всеохватывающее тестирование даже простой программы крайне трудно, а порой и невозможно в силу ограниченности времени и ресурсов. Следовательно, необходимо иметь определенные критерии по которым должны избираться контрольные примеры и критерии остановки процесса тестирования.