Главная Теоретический материал Лабораторные работы Задачи Тесты Контакты

Узбекское Агентство
Связи и Информатизации



Ташкентский Университет Информационных Технологий


Кафедра
«Программное обеспечение информационных технологий»

Направления:

5521900Информатика и
информационные технологии,
5523500Защита информации,
5523600Электронная коммерция,
5811200Сервис (информационный сервис),
5811300Сервис (электронные и
компьютерные технологии),
5320200Информатика и
библиотековедение,
5140900Профессиональное образование
(по направлению
информатика и
информационные технологии).


Преподаватель дисциплины



Доцент
Чернев Дмитрий Алексеевич

Тестирование программного обеспечения

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

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

Основным методом обнаружения ошибок в программном обеспечении является его тестирование. Эффективность тести­рования — важнейший фактор, определяющий стоимость и длительность разработки больших программных изделий с задан­ным качеством. Затраты на тестирование для обнаружения оши­бок в программном обеспечении достигают 30—40% общих затрат на его разработку и в значительной степени определяют его качество.

Тестирование — это процесс выполнения программного обеспечения с намерением найти в нем ошибку - довольно необычный процесс (и поэтому трудный), т.к. этот процесс разрушительный.

Цель проверяющего (тестовика) — заставить программное обеспечение сбиться. Он доволен, если это ему удается.

Если программное изделие правильно ведет себя для солид­ного набора тестов, нет оснований утверждать, что в нем нет ошибок. Просто неизвестно, когда оно не сработает и можно говорить лишь о некотором уровне уверенности в его правиль­ности.

Тесты, не способствующие обнаружению ошибок и только подтверждающие корректность функционирования программного изделия, являются не эффективными, т.к. приводят к беспо­лезным затратам ресурсов и времени.

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

Необходимо с самого начала не допускать ошибок в прог­раммном обеспечении. Тогда роль тестирования будет состоять в том, чтобы определить местонахождение немногочисленных ошибок, оставшихся в хорошо спроектированном программном обеспечении.

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

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

Тесты составляются после разработки алгоритма, но до программирования.

Комплект тестов должен быть таким, чтобы проверить все варианты внешнего эффекта программного изделия и варианты его внутренней работы — алгоритма.

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

В некоторых случаях тестирования рекомендуется производить «миниатюризацию» программы, т.е. разумно сокращать объём данных по сравнению с реальным. Например, создать укоро­ченную базу данных. Проверить матрицу 50x50 вручную невоз­можно. Поэтому в качестве теста может быть использована матрица 5x5. Точно так же, если некоторая подпрограмма рабо­тает в цикле 5 раз, она сможет работать и 105 раз. Правда, при миниатюризации программы могут произойти ситуации: либо существующие в программе ошибки в результате упрощающих изменений станут неявными или временно исчезнут, либо поя­вятся новые ошибки.

Тестовые данные должны подбираться таким образом, чтобы программист был в состоянии вычислить правильный результат еще до начала тестового прогона. Если этого не сделать забла­говременно, то потом очень легко поддаться соблазну считать машинный результат достоверным.

В целом составление тестов — большое искусство, т.к. пол­ностью этот процесс формализации не поддается.

Программные изделия как объекты тестирования имеют ряд особенностей, которые отличают процесс их тестирования от традиционного, применяемого для проверки аппаратуры и других технических изделий.

Для больших программных изделий практически всегда от­сутствует полностью определенный и точный эталон для всех тестовых наборов.

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

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

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

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

Для ускорения отладки не безразличен порядок пропуска тестов: сначала пропускаются простые тесты...

Простые тесты проверяют начальную цель тестирования - работает ли программное обеспечение вообще.

Тест, который используется для проверки основной ветви программы, должен обнаружить грубые ошибки.

Усложнение тестовых данных должно происходить посте­пенно.

Процесс тестирования программного обеспечения можно разделить на три этапа:

  - проверка в нормальных условиях;

-   проверка в экстремальных условиях;

-   проверка в исключительных ситуациях.

Каждый из этих трех этапов проверки должен гарантировать получение верных результатов при правильных входных данных и/или выдачу сообщений об ошибках при неправильных входных данных.

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

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

Типичные примеры — очень большие числа, очень малые числа или отсутствие информации.

Проверка в исключительных ситуациях.Используются исходные данные, значения которых лежат за пределами допустимой области их изменения.

Наихудшая ситуация когда программное обеспечение воспри­нимает неверные данные как правильные и выдаёт неверный, но правдоподобный результат.

Программное обеспечение должно самоотвергать любые дан­ные, которые оно не в состоянии обрабатывать верно.

Пример тестов. Пусть требуется вычислить длину диагонали параллелепипеда

Необходимо сформировать тестовые данные для нормаль­ных, экстремальных и исключительных условий.

Стороны параллелепипеда

Примечание

1

1

1

Хороший начальный тест d=v3 = 1,7320508

1

2

3

Нормальные условия d=v14 = 3,74165773

0

0

0

Результат должен быть равен нулю

0

1

2

Не параллелепипед. Что произойдет?

1

0

3

Неверные данные

2

1

0

Неверные данные

1

-6

3

Неверные данные

А

В

C

Неверные данные

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

Различают еще так называемые «Альфа»- и «Бета» - тестирования.

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

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

Любые обнаруженные проблемы должны протоколироваться, чтобы  хронология проблем и их устранения были доступны при возникновении последующих вопросов о ранее существовавших проблемах.

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

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

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

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


Назад


Главная Теоретический материал Лабораторные работы Тесты Контакты