Файл: Отладка и тестирование программ: основные подходы и ограничения.pdf
Добавлен: 30.06.2023
Просмотров: 66
Скачиваний: 3
Это очень важно, например, при найме новых программистов, которые быстрее вливаются в рабочий процесс, заранее знакомятся с системами контроля версий и отслеживания ошибок. Его задача отслеживать весь путь над работой и изменениями в проекте. Но в идеальном варианте нет ничего лучше, чем качественная проектная документация, что не всегда так.
Эти две системы неразрывно связаны между собой. Система отслеживания ошибок исправляет все дефекты, требующие изменения исходного кода приложения, а система управления версиями регистрирует все сделанные изменения. Необходимо постоянно поддерживать связь между обнаруженными проблемами и изменениями в исходном коде. Это помогает определить причины и последствия исправления обнаруженных ошибок Если вы этого не сделаете, часто возникает недоразумение об изменениях, внесенных ранее в код приложения. Очень часто при разработке более поздней версии программы они начинают искать сотрудника, внесшего некоторые изменения в проект. Остается только надеяться, что он не забыл причину этих действий.
Существуют специализированные интегрированные инструменты, которые позволяют автоматически отслеживать подключение изменений к исходному коду приложения с ошибками. Если этот параметр не существует в системе, вы должны управлять соединением вручную. В этом случае комментарии указывают номер ошибки и как ее исправить. При регистрации исправленного модуля в системе контроля версий номер найденной ошибки указывается в соответствующем комментарии.
Система управления версиями существует для управления исходным кодом, а также для хранения всего, что непосредственно связано с проектом. Это разные планы тестирования, автоматизация тестирования, различная справочная информация, а также документация по обслуживанию проектовв. При необходимости вы можете включить здесь и инструменты для создания приложений: используемые файлы, библиотеки динамических вложений и компиляторы, т.е. все инструменты, необходимые для воссоздания требуемой версии приложения. Включите только то, что другим программистам может понадобиться в будущем для поддержки программного обеспечения.
Многие проблемы в разработке программных продуктов можно избежать, используя так называемые модульные тесты в системе управления версиями. Блок-тест или тестовое приложение представляет собой часть кода, которая контролирует выполнение основной программы. Этот особый код пишут программисты для проверки «белого ящика» который также контролирует исполнение программой главных процедур и операций приложения. Подробное описание блочных тестов. Блочные тесты в системе управления значительно облегчают работу разработчиков, которые сопровождают приложение, а также упрощают контроль над тестированием программы и фокусируются на более важных моментах: производительность, масштабируемость приложений, полное соответствие требованиям клиентов, то есть тестирование приемлемости - проверка соответствия программы требованиям пользователя. Использование блочных тестов - хороший показатель профессионализма разработчиков программного обеспечения.
Если мы говорим о системе отслеживания ошибок, она не только накапливает информацию об ошибках, но также очень удобна для хранения различных заметок и списка задач во время разработки исходного кода. Многие разработчики хранят списки задач в телефонах и часто теряют необходимую информацию в куче отладки и других файлов. Поэтому желательно хранить ваши заметки в системе отслеживания ошибок, чтобы они всегда находились под рукой и не тратили время на их поиск. Вся комфортность системы поиска ошибок заключается в том, чтобы любая информация об ошибках и запросах о реализации функций были вместе. Когда он хранится в разных местах - в электронной почте, в технических книгах, а не в системе отслеживания ошибок, будет гораздо труднее следовать.
Естественно, что система контроля версий должна соответствовать потребностям разработчика. Если компания разрабатывает продукт с высокими требованиями, поддерживая несколько платформ, скорее всего, будет необходимо использовать более дорогую систему или использовать решение с открытым исходным кодом, например, CVS.
Если команда разработчиков невелика и только выпускает приложения для Windows, вы можете выбрать более дешевые варианты. Для тщательной оценки системы, которая планируется реализовать, потребуется некоторое время, уделяя особое внимание прогнозированию будущих потребностей. Нужно убедиться в том, что она будет развиваться вместе с вашим проектом. Выбор правильной системы контроля версий очень важен. Важно использовать его в целом, потому что, хотя некоторые системы контроля версий всегда лучше, чем ничего.
2.2 Применение точек остановки и модификация локальных переменных
В коде любого созданного приложения обязательно будут ошибки. Если мы говорим о синтаксических ошибках, вызванных неправильным вводом команд в редактор или неправильной написанием идентификаторов и других неправильных действий программиста, они почти всегда исправляются самим компилятором Delphi. Вы всегда должны обращать внимание на различные сообщения и предупреждения, которые выдаются во время запуска программы, что может помочь найти ошибку в тексте кода. Но многие ошибки связаны с тем, что неточно реализована логика самого алгоритма. Данные дефекты обнаруживаются только во время выполнения тестовых случаев. Так бывает например, когда вместо символа "<" ошибочно введен символ "<=". Если каким-то образом исходный алгоритм не реализован правильно, то производительность приложения может быть одинаковой, а не нарушенной, но результаты будут отображаться некорректно или программа выполнит неправильные действия. Поэтому эти ошибки обнаруживаются только на этапе отладки. Наиболее распространенные сообщения об ошибках приведены в Приложении А.
Интегрированная среда разработки Delphi предоставляет разработчикам очень хороший инструмент для поиска и исправления ошибок в программе - отладчика. Отладчик дает возможность следить за значениями переменных, выполнять трассировку приложения, а также держать под контролем выводимые программой данные.
Из всех встроенных средств отладки наиболее часто используются BreakPoints. После того как вы поставите точку, приложение начнет работать до того момента, пока не достигнет ее, после этого работа программы остановится и управление перейдет к отладчику Delphi. Точки остановки удобнее всего снимать и ставить нажатием горячей клавиши «F5», либо зайти в меню «Debug->Toggle breakpoint», либодч другими способами.
После остановки программы значения локальных переменных процедуры анализируются в точке остановки программы. Кроме того, перед вызовом этой процедуры необходимо проверить стек вызовов. При необходимости вы можете сразу изменить значение переменных.
Появляется вопрос: где поставить эти точки? Однозначного ответа дать нельзя. Они предназначены только для облегчения изучения работы программного кода, если нет уверенности относительно его точности или если они содержат вопиющую ошибку, которая незаметна во время беглого экзамена. Конечно, гораздо проще поставить точку останова и систематически выполнять правильные строки, чем тратить много времени на изучение того же кода, пытаясь определить, где он начал работать.
Например, вы можете представить список, в котором значение переменной присваивается значению, затем мы добавляем единицу четыре раза, а затем добавляем 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;[1]
После прогона данной программы будут получаться совсем иные результаты, поскольку переменной не было присвоено единичное значение. В начале этой процедуры эта локальная переменная будет принимать разные значения из стека, или 0. Для того чтобы быстро выяснить, где же допущена ошибка установим точку и запустим программу:
Получается следующая картина: точка установки стоит на строчке Inc(A). В специальном окне «Локальные переменные» вы можете увидеть значения всех локальных переменных, используемых для создания формы, а также переменную Self, переданные неявно и всегда присутствующие в методах класса и параметре Sender.
Рассматривая значение переменной A, вы можете сразу понять, что код выполняется с ошибкой, и результат не соответствует желаемому значению. Так как два увеличения на единицу были сделаны и увеличение на 123, значение переменной A должно быть 126. Итак, мы имеем - 125, поэтому начальное значение переменной A не равно единице.
Для изучения и изменения даннных переменной в отладчике Delphi разработаны и даны два инструмента. Можно вызвать специальное окно «Evaluate/Modify» через меню или с помощью горячей клавиши «Ctrl+F7». Этот инструмент очень прост и в основном используется чаще всего. Выглядит он примерно так:
Чтобы изменить значение переменной A, необходимое нам значение вводится в поле «New value». Далее жмем «Enter» или кнопку «Modify».
Другой инструмент «Inspect» вызывается из диалога «Evaluate/Modify». Это уже более продвинутый редактор переменных значений. Вызвать его можно и через меню «Run».
Это более «расширенный» редактор свойств переменных, но его использование оправдано при изменении свойств объектов. Изменить обычную переменную немного неудобно, и именно поэтому. Когда вы вызываете его, появляется диалоговое окно, в котором вы можете увидеть описание переменной, адрес ячейки памяти, в которой она находится, и текущее значение переменной. Для внесения изменений необходимо нажать кнопку с троеточием, после чего откроется диалоговое окно окно:
В нем будет указано описание переменной, ее расположение в памяти и ее текущее значение, а для изменения нужно будет еще раз нажать на кнопку с троеточием, после чего появится дополнительное окно:
Изменив значение переменной A на правильное, можно продолжить выполнение нашей программы нажав «F9» или «Run». После того, как действие выполняется с помощью отладчика, процедура возвращает требуемые значения. Теперь можно спокойно исправлять код процедуры, т.е. присвоить переменной A значение 1 – «A:= 1».
Чтобы изменить значения обычных переменных, все это кажется слишком трудоемким, но если вам нужно изменить свойства объектов, инструмент «Осмотр» будет очень полезен.
Он предоставит доступ ко всем свойствам объекта, которые нуждаются в изменении.
2.3 Пошаговая трассировка приложения
Сущность трассировки заключается в пошаговой прогонке программного кода. Когда вы делаете трассировку, вы можете использовать команды, отображаемые в таблице.
Таблица 1
Наименование команды |
Горячая клавиша |
Действие отладчика |
«Trace Into» |
«F7» |
отладчик выполнит код текущей строчки кода и остановится на следующей. Если в этой строке вызывается процедура, следующая строка будет первой строкой вызываемой процедуры. |
«Step Over» |
«F8» |
аналогичен «Trace Into», но запись в теле вызываемой процедуры не происходит. |
«Trace to Next Source Line» |
«Shift+F7» |
полный аналог первой команды, но используется в окне «CPU-View» |
«Run to Cursor» |
«F4» |
отладчик будет выполнять код программы до той строчки, на которой сейчас находится курсор |
«Run Until Return» |
«Shift+F8» |
отладчик будет выполнять код текущей процедуры до тех пор, пока не произойдет выход из нее. |
«Set Next Statement» |
«Shift+F4» |
изменить ход выполнения программы, установив в качестве текущей любую строку кода. Кроме того, эта функция доступна в редакторе кода, где вы можете перетащить стрелку, указывающую на текущую активную строку в новой позиции. |
Компилятор среды разработки должен быть правильно настроен, так как открытые параметры зависят не только от поведения исполняемого кода, но и от отображаемой информации, доступной при отладке ожидаемого продукта.
Например, группа «Генерация кода», в которой параметр «Оптимизация» оказывает непосредственное влияние на оптимизацию программного кода. Данный параметр необходимо включить, и тогда он выполнит генерацию кода самым лучшим образом. Учитывает скорость выполнения кода, также его размер. Тем не менее, можно потерять доступ к некоторым локальным переменным, потому что, когда прерывание прерывается, из-за оптимизации кода они могут быть очищены из памяти.
Опция «Save Field Alignment» определяет выравнивание несжатых записей. Эту опцию можно изменять в процессе кодирования модуля при помощи директив «{$A x}», либо «{$Align x}».
Но в группе «Syntax options» лучше оставить все параметры по умолчанию, чтобы компилятор работал хорошо.
В группе параметров «Runtime errors» есть параметр «Проверка диапазона», что очень важно для отладки проектов. Этот параметр проверяет ограничения при доступе к наборам данных.
Это одна из наиболее важных настроек во время отладки приложений. Он отвечает за проверку границ при доступе к массиву данных. В случае ошибки в пределах блока при попытке записи на него возможно даже, что память программы повреждена. Кроме того, этот параметр управляет возможностью выхода за пределы допустимого диапазона значений для локальных переменных. Поэтому по-прежнему необходимо отлаживать проект с включенной опцией «Проверить диапазон». Параметр «переполнение» работает аналогичным образом, но только при использовании арифметических операций с переменными (также желательно включить).