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

 

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

Процесс отладки программ включает:

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

– статическое тестирование текстов разработанных программ и данных на выполнение всех заданных правил построения и описания без исполнения объектного кода;

–тестирование программы без её исполнения в объектном коде и с разными уровнями детализации: детерминированное, стохастическое и тестирование в реальном масштабе времени; – диагностику и локализацию причин отклонения результатов тестирования от заданных эталонных значений и правил;

– разработку изменения программы с целью исключения причин отклонения результатов от эталонных;

– реализацию корректировки программы заданному эталону.

 

Различают две группы методов отладки:

· аналитические – базируются на анализе выходных данных для тестовых прогонов;

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

 

Общая стратегия отладки – обратное прохождение от замеченного симптома ошибки к исходной аномалии (месту в программе, где ошибка совершена). В простейшем случае место проявления симптома и ошибочный фрагмент совпадают. Но чаще всего они далеко отстоят друг от друга.

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

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

В экспериментальных методах для прослеживания выполняется:

1. Выдача значений переменных в указанных точках.

2. Трассировка переменных (выдача их значений при каждом изменении).

3. Трассировка потоков управления (имен вызываемых процедур, меток, на которые передается управление, номеров операторов перехода).

 

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

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

 

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

Для определения задач тестирования целесообразно выделить три стадии:

– тестирование для обнаружения ошибок в программе;

– тестирование для диагностики и локализации причин обнаруженных искажений результатов;

– тестирование для контроля выполненных корректировок.

 

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

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

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