Тестирование и отладка программ
ТРЕБОВАНИЯ К ОФОРМЛЕНИЮ И СОДЕРЖАНИЮ ПРОГРАММНЫХ ДОКУМЕНТОВ
(ГОСТ 19.106-78)
Основными программными документами являются: спецификация, ведомость держателей подлинников, пояснительная записка, описание программы, текст программы, техническое задание, программа и методика испытаний и эксплуатационная документация.
ПД приведены (опустить):
Вид программного документа | Содержание программного документа |
Спецификация | Состав программы и документации на нее |
Ведомость держателей подлинников | Перечень предприятий, на которых хранят подлинники программных документов |
Текст программы | Запись программы с необходимыми комментариями |
Описание программы | Сведения о логической структуре и функционировании программы |
Программа и методика испытаний | Требования, подлежащие проверке при испытании программы, а также порядок и методы их контроля |
Техническое задание | Назначение и область применения программы, технические., технико-экономические и специальные требования, предъявляемые к программе, необходимые стадии и сроки разработки, виды испытаний |
Пояснительная записка | Схема алгоритма, общее описание алгоритма и (или) функционирования программы. а также обоснование принятых технических и технико-экономических решений |
Эксплуатационные документы | Сведения для обеспечения функционирования и эксплуатации программы |
Просто перечислить.
Что относится к технологической документации?
ТЕХНИЧЕСКОЕ ЗАДАНИЕ (ГОСТ 19.201-78) содержит основание для разработки, назначение разработки, требования к программе, требования к
программной документации, технико-экономические показатели, стадии
и этапы разработки, порядок контроля и приемки.
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА (ГОСТ 19.404-79) содержит схемы алгоритмов, подробное описание алгоритма функционирования программы, обоснование принятых технических и экономических решений.
ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ ГОСТ 19.301-79 включает:
1) сведения об области применения тестируемой программы;
2) определенную и достижимую цель испытания;
3) требования:
· к комплектности программной документации,
· характеристикам программы применительно к условиям эксплуатации,
· к информационной и программной совместимости;
4)порядок проведения и
5)используемые методы испытаний, где указывается последовательность испытаний, перечень необходимых технических и программных средств.
Приводятся описания применяемых методов испытаний с указанием
конкретных проверок и результатов этого испытания. Во всех случаях
при применении теста необходимо четко определить конкретные значе-
ния входных данных, ожидаемые выходные и промежуточные результаты.
В приложении к документу об испытаниях программы могут быть
включены тестовые примеры, их контрольные распечатки, аналитические
и другие материалы. Мы включаем это в ПД «Текст программы».
ТЕКСТ ПРОГРАМЫ ГОСТ 19.401-78 сотоит из символических записей на исходном языке с подробными комментариями, которые должны составлять около 30% текста программы. Рекомендуется в комментариях описывать назначение программы,основные особенности алгоритма отдельных участков, особенности ввода-вывода и т.д.
РУКОВОДСТВО ПРОГРАММИСТА (ГОСТ 19.504-79) содержит все сведения, необходимые для сопровождения программы.
РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА (ГОСТ 19.503-79) дополняется сведениями для проверки, обеспечения функционирования и настройки программы на условия конкретного применения с учетом используемых технических и вспомогательных системных программных средств.
К эсплуатационной документации относятся:
ОПИСАНИЕ ПРИМЕНЕНИЯ (ГОСТ 19.502-78) содержит сведения о назначении программы, области применения, применяемых методах, классе решаемых задач, ограничениях для применения, минимальной конфигурации технических средств, описание входных и выходных данных.
ОПИСАНИЕ ПРОГРАММЫ ГОСТ (19.402-78) включает:
- наименование программы,
- язык программирования,
- ПО, необходимое для функционирования программы,
- логическое строение, состоящее из:
1) алгоритмов модулей,
2) используемых методов,
3) структуры программы с описанием функций составных частей (модулей) и связи между ними,
4) связей программы с другими программами.
Оформление блок-схем см. ГОСТ 19.707-90
Здесь содержатся разделы: "Используемые технические средства",
где указаны типы ЭВМ и устройств, необходимых для эксплуатации прог-
раммы, "Входные и выходные данные"(характер, организация, предва-
рительная подготовка (для входных данных), формат способ кодирования
данных.
В РУКОВОДСТВЕ ОПЕРАТОРА (ГОСТ 19.505-79) дается вся необходимая информация для обеспечения процедуры общения (взаимодействия) оператора с ЭВМ в процессе выполнения программы.
Материалы любого программного документа располагаются в следующей последовательности (ГОСТ 19.105-78):
1) Титульная часть (ГОСТ 19.104-78):
- лист утверждения (не входит в общее число листов)
- титульный лист (первый лист документа)
2) Информационная часть:
- аннотация (сведения о назначении документа и краткое изложение его основной части);
- листы содержания.
3) Основная часть:
- текст документа с рисунками и таблицами;
- приложения;
- перечень терминов;
- перечь сокращений;
- перечень рисунков;
- перечень таблиц;
и т.д.
4) Часть регистрации изменений:
- лист регистрации изменений
Остальное изучить самостоятельно на кафедральном сайте. Некоторые требования висят в коридоре на кафедре.
Лента новостей. Сколько стоят ошибки?
В общем случае в программах ошибки могут быть следующих видов:
- системные;
- алгоритмические;
- программные;
- технологические.
СИСТЕМНЫЕ ошибки могут быть вызваны неполной информацией о предметной области, а тfкже о реальных процессах, происходящих в источниках и потребителях информации. Допускаются на этапе проектирования ПО, а именно при системном анализе.
АЛГОРИТМИЧЕСКИЕ(ЛОГИЧЕСКИЕ) ошибки (30%) - ошибки, обусловленные некорректной постановкой задачи, неполным учетом всех условий решения задачи, ошибки связей модулей, просчеты в использовании доступных ресурсов ЗВМ. Эти ошибки очень сложно устраняются.
ПРОГРАММНЫЕ ошибки (30%) - деление на 0, обработка отсутствующих данных, использование индекса за пределами массива, корень квадратный из отрицательного числа и т.д.
Причинами таких ошибок могут быть ошибки в программе, допущенные при разработке, ошибки при вводе исходных данных данных и т.д. Они могут быть обнаружены только при выполнении программы, т.к. как правило приводят к прекращению выполнения программы.
Всемирно известными примерами таких ошибок являются следующие.
1) Неудача при запуске первого американского спутника к Венере случилась вероятнее всего, из-за ошибки в программе - вместо требуемой в операторе точки была поставлена запятая.
Вот так был записан
DO 50 I = 12,525, а нужно
DO 50 I = 12.525.
2) Потеря связи с космической станцией "Фобос-1" (СССР) произошла из-за ошибочной команды, переданной с Земли на бортовой компьютер.
3) Причиной осложнений, возникших при возвращении на Землю советско-афганского и советско-французского экипажей, явились ошибки, допущенные в программном обеспечении бортовых компьютеров.
ТЕХНОЛОГИЧЕСКИЕ ошибки(5-10%) - связаны с вводом программы, ее копированием, редактированием и т.д. Ошибки, возникающие при вводе в компьютер неверных данных.
В 1983 г. произошло наводнение в юго-западной части США. Причина заключалась в том, что в компьютер были введены неверные данные о погоде, в результате чего он дал ошибочный сигнал шлюзам, перекрывающим реку Колорадо.
Досточно свежие примеры:
1) Программа виновна в гибели самолета (osp.ru Сводка новостей от 30.06.2000)
Федеральный суд Майами, рассмотревший дело о крушении самолета Boeing 757 авиакомпании American Airlines в Колумбии в 1995 году, вынес частное определение в отношении компании Honeywell Air Transport Systems и производителя программного обеспечения - Jeppesen Sanderson. Во время полета из Майами в Колумбию пилоты ввели в бортовой компьютер некорректный код, а тот выдал неправильную команду, из-за чего лайнер врезался в гору.
Жертвами катастрофы стали 159 человек.
2) Из-за хакера могли погибнуть астронавты
Сенсационное заявление сделала 3 июля 2000 года генеральный инспектор НАСА Roberta Gross в интервью программе "Панорама" телекомпании BBC.
Оказывается, в 1997 году из-за действий некоего хакера под угрозой оказались жизни астронавтов
на корабле "Шаттл", летевшем к российской космической станции "Мир". В результате неких манипуляций хакеру удалось вызвать перегрузку информационной системы, которая непрерывно передает информацию о состоянии здоровья космонавтов, что в итоге могло сказаться на
функционировании всей системы связи с космическим кораблем.
К счастью, удалось быстро переключить связь на резервную систему, так что обошлось без серьезных последствий.
Тестирование и отладка программ различаются тем, что при тестировании устанавливается факт ошибки, а отладка выявляет причину и предлагает способы ее устранения. Эти этапы создания правильных
программ чередуются и перекрывают друг друга.
Тестирование является одним из наиболее устоявшихся способов обеспечения качества разработки программного обеспечения и входит в набор эффективных средств современной системы обеспечения качества программного продукта.
Сущность тестирования состоит в том, что пользователь готовит систему тестов, с помощью которых проверяется работа программы во всех возможных режимах. Каждый тест содержит набор исходных данных, для которых известен результат. Если в результате работы программы с данным тестом получаются результаты, отличные от ожидаемых, то это говорит о наличии ошибок.
Выделяют две стратегии тестирования - структурное тестирование (стратегия "белого ящика") и функциональное (стратегия "черного ящика").
1) Структурное тестирование основывается на детальном изучении логики программы и подборе тестов, обеспечивающих максимально возможное число проверяемых операторов, логических ветвлений и условий. При построении тестов используют следующие критерии:
- покрытие операторов путем выбора набора данных, обеспечивающего выполнение каждого оператора в программе по крайней мере один раз.
- покрытие условий путем подбора наборов данных, обеспечивающих в узлах ветвления с более чем одним условием принятие каждым условием значения "истина" или "ложь" хотя бы по одному разу.
- комбинаторное покрытие условий путем подбора тестовых наборов данных, обеспечивающих в узлах ветвления с более чем одним условием перебор всех возможных сочетаний значений условий в одном узле ветвления.
Рассмотрим пример простой программы {Программа, вычисляющая выражение y=1/a +sqrt(25-b*b) или выдающая сообщение об ошибке}
program example;
{Программа, вычисляющая выражение y=1/a +sqrt(25-b*b)
или выдающая сообщение об ошибке}
var
y,a,b:real;
begin
writeln('Введите a и b');
readln(a,b);
if(a<>0) and (b*b<=25) then
begin
y:=1/a+sqrt(25-sqr(b));
writeln('Результат: ',y);
end
else
writeln('Некорректные данные!');
end.
При структурном тестировании учитывается логика программы.
Примеры тестов.
1) Для тестирования программы с помощью критерия покрытия операторов в ПРОСТЕЙШЕМ СЛУЧАЕ достаточно проверки программы на следующих тестах:
1) a = 1 b = 4 (b<5)
2) a = -1 b = 6 (b>5)
Видно, что в этих тестах ни разу не будет рассмотрен случай, когда а равно 0.
2) Для тестирования программы с помощью критерия покрытия условий можно использовать следующий набор тестов:
1) а = 1 b = 6
2) a = 0 b = 1
Видно, что в этих тестах ни разу не будет проверено выполнение вычисления, хотя тестовые наборы и удовлетворяют критерию.
3) Для тестирования программы с помощью критерия комбинаторного покрытия условий тестовые наборы данных могут выглядеть, например, следующим образом
1) a = 1 b = 4
2) a = 0 b = 4
3) a = 1 b = 6
5) a = 0 b = 6
При функциональном тестировании логика программы не учитывается, а обращается внимание лишь на входные и выходные данные.
К методам функционального тестирования относится:
1) метод эквивалетного разбиения и
2) анализ граничных значений.
В первом методе выделяются классы эквивалентности, а затем на основе
этих классов строятся сами тесты. Для разбиения на классы эквивалентности необходимо проанализировать входные условия и разбить их на два или более класса. Для любого условия существует правильный класс эквивалентности, содержащий корректные входные данные, и неправильный, содержащий ошибочные значения.
Рассмотрим классы эквивалентности для программы вычисления
y = 1/a +sqrt(25-b*b)
-------------------------------------------------------------------
Входное условие | Классы эквивалентности
|--------------------------------------
| правильные | неправильные
------------------------------------------------------------------
1) а не должно быть равным 0 | a < > 0 | a = 0
2) b должно находиться | |
в диапазоне от -5 до 5 | -5 <= b <= 5 | b < -5, b > 5
При построении тестовых наборов необходимо, чтобы каждый непра-
вильный класс эквивалентности участвовал в тесте хотя бы один раз.
Таким образом, тесты могут быть следующими
1) a = 0 b = 6
2) a = 1 b = -7
Во втором методе (анализ граничных значений) анализирются ситуации, возникающие на границах или вблизи границ классов эквивалентности.
Например, область корректных значений для переменной b - от -5 до 5.
Следовательно, необходимы тесты, в которых b примет значения -5, 5,
-5.01 и 5.01.
Напомню, тестирование - это процесс обнаружения ошибки - первый этап отладки. Однако даже эффективное тестирование хотя и обнаруживает ошибки, но не может гарантировать их отсутствие.
Следующие два этапа отладки - локализация ошибки и ее исправление. В этих случаях чаще всего используются:
1) точки прерывания,
2) пошаговое выполнение программы,
3) просмотр значений ряда переменных на различных шагах выполнения программы и т.д..
Для облегчения отладки в состав операционных систем и языковых интегрированных сред включают специальные сервисные программы - отладчики.
При отладке пользователь формулирует задание отладчику, который выполняет задание и выдает пользователю необходимую информацию о поведении отлаживаемой программы.
Можно выполнять программу по шагам, посмотреть на экране значения переменных и массивов, изменить значения переменных.
При отладке большая программа разбивается на части и отлаживаются
последовательно эти части.
Автоматизированное тестирование (АТ).
Существуют три типа тестирования, которые можно автоматизировать:
- функцуиональное, в т.ч. модульное;
- регрессионное, т.е. проверка работоспособности старого функционала и отсутствие ранее исправленных дефектов в новых версиях
- нагрузочное, т.е. поведение приложения под рабочей и стрессовой нагрузкой, влияние работающего приложения на системное окружение.
В настоящее время на рынке существует достаточное число инструментальных средств автомаптизированного тестирования.
Для инструментов функционального АТимеет место схема «с чем – что- как». Чтобы робот мог делать то, что нужно, ему надо «объяснить»,
1) с чем работать, т.е. построить репозитарий(библиотеку) с подробным описанием всех используемых в тесте объектов;
2) что конкретно делать – т.е. записать библиотеку функций, методов или элементарных действий с объектами
3) как делать, в какой последовательности, т.е. создать алгоритм(скрипт), содержащий описание тестовых шагов, логики теста и глобальных переменных.
Эту схему можно изобразить в виде треугольника со взаимосвязанными вершинами.
Для нагрузочного тестирования добавляются варианты многопользовательской и многопротокольной работы. Имеется возможность задавать последовательность доступа виртуальных пользователей, что и когда им нужно делать. Поэтому нагрузочные тесты часто называют сценариями.
Инструменты функционального тестирования.
Mercury QuickTest – имеет удобный и пнятный пользовательский интерфейс для создания тестов без ручной правки.
Mercury WinRunner –имеется возможность ручной работы с кодом, написанным на специальном языке TSL.