Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом ИПОВС 2002.doc
Скачиваний:
29
Добавлен:
16.04.2013
Размер:
2.31 Mб
Скачать

Общая структура отладки программ

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

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

  • тестирование программ,

  • диагностику и локализацию причин отклонения результатов тестирования от заданных эталонных значений и правил,

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

  • реализацию корректировки программы, обеспечивающую соответствие программы заданному эталону.

Основным методом обнаружения ошибок при отладке программ является их тестирование. При этом затраты на тестирование достигают 3040% общих затрат на разработку программ и в значительной степени определяют качество созданного программного продукта.

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

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

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

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

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

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

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

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

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

Пример отладки скриптов на основе общей структуры отладки программ

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

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

egosteva@zeta:~/lena.tvc.ru/cgi-bin$ perl -d test.pl

Default die handler restored.

Loading DB routines from perl5db.pl version 1.07

Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(test.pl:7): my $dbh = DBI->connect('dbi:mysql:lena','egosteva','password') or die;

Окно терминала с запущенной сессией отладки скрипта

С помощью команд «n» (next, выполнение до следующей конструкции текущей программы, без выполнения отладки вызовов подпрограмм), «s» (step into, выполнение до следующей конструкции языка, с заходом в подпрограммы) трассируем выполнение скрипта до интересующего нас места. Ввод пустой строки означает повторение предыдущей команды «n» или «s».

DB<1> n

main::(test.pl:8): printTalks($dbh,1);

DB<1> s

main::printTalks(common.cgi:154): my ( $dbh, $student) = @_;

DB<1> n

main::printTalks(common.cgi:156): my $sth = $dbh->prepare(

main::printTalks(common.cgi:157): 'select id,upper_id,creator_type,creator_id,descr,add_date from talks where student_id='.$student.' order by add_date'

main::printTalks(common.cgi:158): );

DB<1>

main::printTalks(common.cgi:159): unless( $sth && $sth->execute ) {

DB<1>

main::printTalks(common.cgi:164): my @talks=();

DB<1>

main::printTalks(common.cgi:165): my %admins=();

DB<1>

main::printTalks(common.cgi:166): my %studs=();

DB<1>

main::printTalks(common.cgi:167): while( my @arr=$sth->fetchrow_array ) {

DB<1>

main::printTalks(common.cgi:168): $arr[3] = int($arr[3]);

DB<1>

main::printTalks(common.cgi:169): push @talks, [ @arr ];

DB<1>

main::printTalks(common.cgi:170): if( $arr[2] eq 'S' ) {

DB<1>

main::printTalks(common.cgi:174): $admins{$arr[3]} = 1;

DB<1>

main::printTalks(common.cgi:167): while( my @arr=$sth->fetchrow_array ) {

DB<1> n

main::printTalks(common.cgi:168): $arr[3] = int($arr[3]);

DB<1>

main::printTalks(common.cgi:169): push @talks, [ @arr ];

DB<1>

main::printTalks(common.cgi:170): if( $arr[2] eq 'S' ) {

С помощью встроенной команды «x» печатаем содержимое интересующих нас переменных вместе с их типами. Нас интересует правильно ли заполнен массив @talks.

DB<1> x @talks

0 ARRAY(0x83ced88)

0 1

1 0

2 'A'

3 1

Соседние файлы в предмете Дипломная работа (подготовка и защита)