Файл: Отладка и тестирование программ: основные подходы и ограничения (Виды тестирования).pdf
Добавлен: 28.03.2023
Просмотров: 156
Скачиваний: 1
Планир ование тестирования необх одимо производить совме стно с планиро ванием отладки. Пр и этом, в ходе планир ования ставится зад ача придумать раз ные способы ускор ения и оптими зации обоих проце ссов. В цел ях соблюдения предосто рожности следует паралл ельно писать и использовать всевоз можные утилиты дл я анализа дам па файлов и верификации внутр енних структур и бинарных фай лов. Если прило жение оперирует двоич ными данными и файлами, т о нужно предусм отреть написание специа льной тестовой утил иты, преобразующей и представляющей дан ные в удоб ном формате. Прило жение для дам па должна так же проверять дан ные и и х зависимости в бинарных фай лах. Подобные ме ры значительно упро стят процесс тестир ования и отла дки.
При планир овании и проектировании необходимо встраивать достаточное количество отладочного кода в свои программы, чтобы именно этот код подсказывал программисту, где возникают ошибки. Именно код, а не отладчик.
2. Практика отладки приложений в среде Delphi
2.1 Два важных инструмента
Двумя важне йшими структурными элеме нтами являются специа льные системы управ ления версиями прило жения и отслеж ивания ошибок. Эт и инструменты регист рируют всю проек тную историю. Мно гие программисты пыта ются хранить нуж ные сведения в уме. Одн ако если он и работают в компании, т о желательно, что бы и он а имела вс ю информацию. Оче нь часто докуме нтация о требов аниях к прод укту и проек тная документация веду тся плохо н а всем протя жении проектирования прило жения. В резул ьтате этого единств енными полезными докуме нтами становятся контро льные журналы сис тем управления верс иями проектов и отслеживания оши бок.
Наблюдение з а частотой обнару жения и реше ния проблем, приме нение системы отслеж ивания ошибок, позво ляет намного точ нее планировать да ту завершения раб оты над прогр аммой. Кроме это го, система управ ления версиями да ет представление о степени измен ения кода, благо даря чему мож но определить: скол ько потребуется внед рить дополнительного тестир ования. Этот инструм ентарий дает на м единственный хоро ший способ оце нки того, наско лько эффективны измен ения, вносимые в ходе разра ботки программного обеспе чения.
Это оче нь важно, напр имер, при най ме новых програм мистов, которые быст рее вливаются в рабочий проц есс, знакомясь предвар ительно с систе мами управления верс иями и отслежи ванием ошибок. О н сможет просл едить весь пу ть создания и изменения прое кта. Но в идеале не т ничего луч ше качественной проек тной документации, чт о имеет мес то далеко н е всегда.
Эт и две системы неразрывно связаны между собой. Система отслеживания ошибок фиксирует все дефекты, требующие изменения исходного кода приложения, а система управления версиями проводит регистрацию всех внесенных изменений. Необходимо постоянно поддерживать связь между обнаруженными проблемами и изменениями исходных текстов. Это помогает выявить причины и последствия исправления обнаруженных ошибок. Если это не делать, то будут часто возникать непонимания внесенных ранее изменений кода приложения. Очень часто при разработке более поздней версии программы начинают отыскивать сотрудника, который вносил те или иные изменения в проект. При этом остается только уповать на то, что он не забыл причину этих действий.
Существуют специализированные интегрированные средства, которые позволяют автоматически следить за связью изменений исходных кодов приложения с ошибками. В случае отсутствия такой возможности в системе, то нужно поддерживать связь вручную. При этом в комментариях указывается номер ошибки и способ ее исправления. При регистрации исправленного модуля в системе управления версиями номер найденной ошибки указывается в соответствующем комментарии.
Система управления версиями существует для контроля над исходным кодом, а также для хранения всего, что непосредственно относится к проекту. Это разные планы тестирования, автоматизацию тестов, различную справочную информацию, а также проектную служебную документацию. Если нужно, то можно включить сюда и средства для сборки приложений: используемые файлы, динамические присоединяемые библиотеки и компиляторы, т.е. все необходимые средства для воссоздания необходимой версии приложения. Включать надо только то, что может потребоваться другим программистам в будущем для сопровождения программного обеспечения.
Многих проб лем при разра ботке программных проду ктов можно избе жать используя в системе управ ления версиями, та к называемых, блоч ных тестов (unit test). Блоч ный тест, ил и тестовое прило жение, представляет соб ой фрагмент ко да, управляющей выполн ением основной прогр аммы. Этот специа льный код созда ется программистами дл я тестирования «бел ого ящика» и контролирует выпол нение программой осно вных процедур и операций прило жения. Подробное опис ание блочных тес тов. Блочные тес ты в сист еме управления значит ельно облегчает раб оту разработчикам, сопрово ждающим приложение, а также упро щает контрольное тестир ование программы и сосредоточить вним ание на бол ее важных моме нтах: производительности, масштаби руемости приложения, полн ому соответствию требо ваний заказчика, т.е. тестир ование приемлемости - пров ерка соответствия прогр аммы требованиям пользо вателя. Использование блоч ных тестов эт о хороший показ атель профессионализма разрабо тчиков программ.
Ес ли говорить о системе отслеж ивания ошибок, т о она н е только накапл ивает информацию о б ошибках, н о и оче нь удобна дл я хранения раз ных заметок и списка зада ний на эта пе разработки исход ного кода. Мно гие разработчики хра нят списки зада ний в телеф онах и час то теряют нуж ную информацию в куче отлад очных и дру гих файлов. Поэт ому желательно вс е-таки хран ить свои заме тки в сист еме отслеживания оши бок для то го, чтобы все гда они бы ли под рук ой и н е тратить вре мя на и х поиск. Вс е удобство сист емы отслеживания оши бок заключается в том, что бы вся инфор мация об ошиб ках и запр осы, о реали зации функций наход ились в одн ом месте. Пр и ее хран ении в раз ных местах — в электронной поч те, в запи сных книжках инжен еров, а н е в сист еме отслеживания оши бок, то усле дить за не й будет гора здо сложнее.
Естест венно, что сист ема управления верс иями должна соответс твовать потребностям разраб отчика. Если разраба тывает продукт комп ания с требов аниями класса «high-end», с поддержкой неско льких платформ, т о, скорее все го, придется приме нять более доро гую систему ил и использовать реше ние с откр ытым кодом, напр имер, CVS.
Если ж е группа разрабо тчиков небольшая и выпускающая прило жения только дл я Windows, можно выбр ать и бол ее дешевые вари анты. Придется потра тить некоторое вре мя на тщате льную оценку сист емы, которую планир уется внедрить, уде лив особое вним ание прогнозированию буду щих потребностей. Нуж но убедиться в том, чт о она буд ет развиваться вме сте с ваш им проектом. Выб ор правильной сист емы управления верс иями очень важ ен. Важно воо бще ее исполь зовать, т.к. хоть как ая-то сист ема управления верс иями все ж е лучше, че м вообще ника кой.
2.2 Применение точек остановки и модификация локальных переменных
В коде любого созданного приложения обязательно будут ошибки. Если говорить о синтаксических ошибках, которые вызваны неверным вводом команд в редакторе, либо неверной записью идентификаторов и иными неверными действиями программиста, то они почти всегда фиксируются самим компилятором Delphi. Следует постоянно обращать внимание на различные сообщения и предупреждения, выдаваемые при прогоне программы, это может помочь обнаружить найти ошибку в тексте кода. Но многие ошибки связаны с тем, что неточно реализована логика самого алгоритма. Такие дефекты обнаруживаются только во время выполнения контрольных примеров. Так бывает например, когда вместо символа "<" ошибочно введен символ "<=". Если вдруг исходный алгоритм реализуется неправильно, то работоспособность приложения может быть даже, и не нарушено, но результаты будут выдаваться неверные или программой будут выполняться неверные действия. Поэтому и обнаруживаются подобные ошибки лишь на этапе отладки.
Интегрированная среда разработки Delphi предоставляет разработчикам очень хорошее средство поиска и исправления ошибок в программе – отладчик. Отладчик позволяет наблюдать значения переменных, производить трассировку приложения, а также контролировать выводимые программой данные.
Из всех инструментов встроенного отладчика наиболее часто используются точки остановки - BreakPoint. После установки точки, приложение будет работать до тех пор, пока не достигнет ее, после чего работа программы будет остановлена и управление переходит к отладчику Delphi. Точки остановки удобнее всего снимать и ставить нажатием горячей клавиши «F5», либо зайти в меню «Debug->Toggle breakpoint», либо другими способами.
После остановки работы программы, анализируются значения локальных переменных процедуры, в точке прерывания работы программы. Кроме этого необходимо изучить стек вызовов, производимых до вызова данной процедуры. Если потребуется, то сразу можно изменить значение переменных.[[9]]
Возникает вопрос: где ставить эти точки? Однозначного ответа дать нельзя. Они предназначаются лишь для того, чтобы облегчить нам изучение работы программного кода, если нет уверенности в его корректности, или содержащего явную ошибку незаметную при беглом просмотре. Конечно куда проще поставить точку остановки и последовательно выполнить нужные строчки, чем потратить кучу времени на изучение этого же самого кода, пытаясь определить, где же он начал работать неправильно.
В качестве примера можно представить листинг, в котором значению переменной присваивается значение равное единице, а затем четыре раза будем прибавлять единицу и после этого прибавим 123. Результат будет представлен в виде десятичного и шестнадцатеричного значения, т.е. должно получиться 128 и 00000080. При этом в программном коде будет допущена ошибка.
var
Form1: TForm1;
A: Integer;
B: Integer = 123;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Inc(A);
Inc(A);
Inc(A, B);
Inc(A);
Inc(A);
ShowMessage(IntToStr(A));
ShowMessage(IntToHex(A, 8));
end;[[10]]
После прогона данной программы будут получаться совсем иные результаты, поскольку переменной не было присвоено единичное значение. В начале выполнения данной процедуры, эта локальная переменная будет брать различные значения из стека, либо 0. Для того чтобы быстро выяснить, где же допущена ошибка установим точку и запустим программу:
Получается следующая картина: точка установки стоит на строчке Inc(A). В специальном окне «Local Variables», можно видеть значения всех используемых локальных переменных процедуры создания формы, а также переменной Self, передающейся неявно и всегда присутствующей в методах класса и параметра Sender.
Взглянув на значение переменной A можно сразу уяснить, что код выполняется с ошибкой, а результат не соответствует нужному значению. Так как выполнялись два инкремента на единицу и еще одно увеличение на число 123, должно было появиться значение переменной A равное 126. У нас получилось – 125, следовательно, исходное значение переменной A было не равно единице.
Для просмотра и изменения значения переменной в отладчике Delphi существуют два инструмента. Можно вызвать специальное окно «Evaluate/Modify» через меню или с помощью горячей клавиши «Ctrl+F7». Этот инструмент очень простой и используется в большинстве чаще всего. Выглядит он примерно так:
Чтобы изменить значение переменной A, необходимое нам значение вводится в поле «New value». Далее жмем «Enter» или кнопку «Modify».
Другой инструмент «Inspect» вызывается из диалога «Evaluate/Modify». Он является уже более продвинутым редактором значений переменных. Вызвать его можно и через меню «Run».
Это более «продвинутый» редактор свойств переменных, но его использование оправдано при изменении свойств объектов. Для изменения обычной переменной он несколько не удобен, и вот почему. При вызове его появится диалоговое окно, в котором можно увидеть описание переменной, адрес ячейки памяти, где она располагается, а также текущее значение переменной. Для внесения изменений необходимо нажать кнопку с троеточием, после чего откроется диалоговое окно окно: