Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию.doc
Скачиваний:
186
Добавлен:
02.05.2014
Размер:
1.64 Mб
Скачать

5.2. Тестирование

Тестирование (testing) - любой вид деятельности, в рам­ках которого путем реального выполнения каких-либо задач прове­ряется соответствующая работа либо системы в целом, либо состав­ной ее части.

Тестирование программы (program testing) - проверка, которая проводится в ходе прогона программы с целью убедиться, работает ли она так, как требуется. Это осуществляется при выполнении од­ного или нескольких тестовых прогонов, при которых в программ­ную систему подаются входные (тестовые данные), а реакция сис­темы фиксируется для последующего анализа. Может осуществ­ляться как с ЭВМ, так и без ЭВМ.

Один из главных законов тестирования гласит: «Тестирование программы или ее отдельных модулей не должен осуществлять программист (группа программистов), создавший эту программу или модуль».

Для обеспечения достаточной степени надежности тестирова­ния должен быть специальный отдел в фирме или привлечены про­граммисты из сторонних организаций. Первоначально разработчик сам устраняет мелкие ошибки. Когда компиляция модуля заверша­ется, и компилятор выдает соответствующее сообщение «Compile successful", программист обычно запускает откомпилированный фрагмент и производит несколько тестов.

После такого поверхностного тестирования разработчиком за­конченный модуль должен быть протестирован другим программи­стом. Дело в том, что разработчик изначально настраивается на ка­кой-то один вид возможной ошибки и, не обнаружив ее при пред­варительном тестировании, не склонен проверять другие участки модуля. Сторонний программист рассматривает модуль, подклю­ченный к программе как своего рода «черный ящик» и пытается запускать его на предельных нагрузках.

Статистика свидетельствует, что стоимость тестирования со­ставляет не менее 50% всей стоимости начальной разработки.

Сколько бы сил, времени и денег не было потрачено на тести­рование, один из главных законов программирования действует с неотвратимостью рока: «Тесты могут доказать наличие ошибок в программе, но они не могут доказать их отсутствия» (Э. Дейкстра «Заметки по структурному программированию»).

При тестировании могут возникать следующие вопросы:

  1. Искать все ошибки или грубейшие?

  2. Если не все, то как установить порог допустимости ошибки?

  3. Когда завершать тестирование?

  1. Что делать, если сроки поджимают или нет ресурсов на дальнейшее тестирование?

  1. Где остановиться в документировании тестов?

Ответы на них во многом зависят от того, что считать качест­венной программой?

Качественная программа - это программа, выполняющая зара­нее объявленные действия известным способом и не выполняющая никаких необъявленных действий.

Под объявленными действиями понимаются, в том числе, и ал­горитмы обработки данных. Таким образом, тестирование должно выполняться до тех пор, пока программа не избавится от всех не­объявленных действий (частным случаем которых является невер­ная обработка, то есть, в сущности, просто порча данных).

5.3. Ход тестирования

В процессе тестирования программного обеспечения осуществляются следующие виды деятельности:

Ручной прогон. На этом шаге программист с помощью ка­рандаша и листа бумаги моделирует прохождение данных через программу. При изучении текста программы от начала до конца, трудно проверить всевозможные комбинации данных. Самое боль­шее, что можно сделать на практике, - проверить всевозможные типы или наиболее вероятные наборы комбинаций данных. Если они дают правильные результаты, предполагается, что непроверен­ные комбинации также дадут правильные результаты.

Проектирование тестов. Является наиболее ответст­венным процессом. Очень часто тест создается вручную. Иногда применяют генераторы тестовых данных - специальные програм­мы, формирующие данные в соответствии со спецификациями, задаваемыми программистом. Тестовые данные могут систематиче­ски или случайно выбираться из другого заданного набора данных для уменьшения их общего количества.

Выполнение тестов. На этом этапе осуществляется про­верка всех возможных алгоритмов специально подготовленными тестами, а также выявляется, насколько интерфейс программы вы­держит реальную нагрузку. Проблема заключается в том, что тес­тирование происходит на очень ограниченных объемах данных. Когда база данных будет насчитывать десятки, а то и сотни тысяч записей, скорость выполнения запросов пользователей может стать неприемлемой.

Изучение результатов тестирования. Выявление и устранение ошибок часто имеет циклический характер. Устране­ние одной ошибки может порождать другие ошибки. Особенно это касается работы с глобальными переменными, которые коварны тем, что нельзя сказать с полной уверенностью, что где-то на ниж­нем уровне подпрограмм изменение состояния переменной не при­ведет к новой ошибке.