Тема 6. Определение тестирования программного обеспечения
Одним из основных методов оценки качества ПО является тестирование.
Одна из ключевых проблем кроется в правильном определении понятия тестирования, так как это далеко не тривиальная и не однозначная задача. Для того, чтобы убедиться в этом, обратимся к рассуждениям основоположника теории тестирования Гленфорда Майерса (Glenford Myers).
Но, прежде всего, приведем два главных закона теории тестирования программных продуктов:
- Невозможно отыскать абсолютно все ошибки в программном продукте. Ошибки остаются всегда.
- Построение исчерпывающего входного теста невозможно.
Иными словами, невозможно полностью протестировать программу: даже для самой простейшей программы это займет настолько большое количество времени, которое никогда не будет восполнено выгодой от производства «идеально оттестированной» программы. При тестировании современных сложных программных систем исчерпывающее тестирование становится невыполнимой задачей.
Майерс приводит следующие наиболее распространенные определения тестирования с комментариями к ним:
1) Тестирование – это процесс, позволяющий убедиться в том, что в программе нет ошибок.
Комментарий : Все бы хорошо, но только данный результат недостижим, исходя из первого закона теории тестирования, приведенного выше. Но, если следовать данному определению и преследовать именно такую цель в тестировании, то можно искусственно показать, что ошибок нет. Что заранее будет неверно, поэтому проведение тестирование с целью демонстрации отсутствия ошибок приведет лишь к провалу проекта.
2) Цель тестирования – показать, что программа корректно выполняет предусмотренные функции, т.е. программа соответствует спецификации. Или, более детально, цель тестирования – показать, в каких ситуациях программа не соответствует спецификации, в то время как тестовые данные используются в соответствии со спецификацией программы.
Комментарий : Приведенное определение является определением одного из критериев тестирования программы по методу «черного ящика». Но, как мы уже определили ранее, у тестирования есть набор методов и критериев, а метод «черного ящика» – лишь частный случай. В общем случае, обнаружение всех ошибок в программе является критерием «исчерпывающего входного тестирования», но построение исчерпывающего входного теста невозможно (см. второй закон теории тестирования, приведенный выше).
3) Тестирование – это процесс, позволяющий убедиться в том, что программа выполняет свое назначение.
Комментарий: Данное определение звучит логично: если программа не делает того, что от нее требуется, то ясно, что она содержит ошибки. Но как быть с тем, что она дополнительно делает еще и то, чего от нее не требуется. Появляется необходимость проводить так называемое “негативное” тестирование. Следовательно, данное определение тестирования не совсем корректно.
Далее Майерс дает собственное определение тестирования: Тестирование ПО – это процесс выполнения программы с целью обнаружения ошибок.
Майерс считает тест удачным, если в процессе его выполнения были обнаружены ошибки. Именно в этом и состоит задача тестирования.
Немного модифицируем определение тестирование, данное Майерсом, которое на сегодняшний день является слегка устаревшим.
Тестирование ПО (software testing) – это процесс анализа и эксплуатации программного обеспечения с целью выявления дефектов. Где под дефектом, в соответствии с RUP, будем понимать невыполнение требования, связанного с предполагаемым или установленным использованием. В определении стоит обратить внимание на ключевое слово «процесс». Тестирование – это плановая и упорядоченная деятельность. Этот момент очень важен, поскольку в условиях, зачастую очень ограниченного времени выделенного на разработку и тестирование, хорошо продуманный и систематический подход быстрее приводит к обнаружению программных ошибок, чем плохо спланированное тестирование, проводимое в спешке.
Определение тестирования, выведенное Майерсом, следует помнить при выполнении тестирования. Но, все же понимать современное тестирование следует несколько шире. Поэтому при описании технологии тестирования мы будем придерживаться более официального определения тестирования, приведенного в международных стандартах по тестированию
В 1990 году стандартом ISO принято следующее определение тестирования:
Тестирование — это наблюдение за функционированием ПО в специфических условиях с целью определения степени соответствия ПО требованиям к нему.При переходе к современным методологиям разработки ПО наблюдается более системный подход в определении тестирования ПО. В соответствии с RUP, тестирование — одна из дисциплин RUP. Она ориентирована в первую очередь на оценку качества с помощью следующих методов:
- поиск и документирование дефектов качества;
- общие рекомендации относительно качества;
- проверка выполнения основных предположений и требований на конкретных примерах;
- проверка, что продукт функционирует так, как было запроектировано;
- проверка, что требования выполнены соответствующим образом.
CC-BY-CA Цыганенко В.Н., 12.01.2012