Файл: Отладка и тестирование программ: основные подходы и ограничения (Основные принципы отладки и тестирования).pdf
Добавлен: 29.03.2023
Просмотров: 701
Скачиваний: 2
СОДЕРЖАНИЕ
1. Основные принципы отладки и тестирования
1.1 Общая методика отладки программного обеспечения
1.2 Современное состояние технологии отладки программного обеспечения
Цели и задачи тестирования программного обеспечения
1.3 Современное состояние технологии тестирования программного обеспечения
2. Стратегии тестирования программного обеспечения
3. Механизмы отладки и тестирования на конкретных примерах
3.1 Особенности современных сред разработки программ
3.3 Механизм отладки в Dev-C++
- Dev-C++, написанная на языке программирования Delphi для Windows, которая является легковесной средой, бесплатной и с открытым исходным кодом, которой требуется всего пару минут для установки;
- Visual Studio Community 2017, современная свободно распространяемая интегрированная среда, предназначенная для разработки программного обеспечения в учебных целях. Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и отладчик машинного уровня. Присутствует удобный редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода.
Выбор сред разработки для отладки и тестирования программного обеспечения был мотивирован тем, что выбираемая среда должна быть простой в использовании, чтобы позволить сосредоточиться на изучении концепций программирования, а также многофункциональной для того, чтобы научиться создавать простые программы для решения прикладных задач.
3.3 Механизм отладки в Dev-C++
Проект – это центр для управления исходными файлами и опциями внутри интегрированной среды разработки. Он помогает перемещаться по коду и легко устанавливать различные параметры, например, тип программы, которую необходимо создать (GUI, консоль, DLL ...).
Проект группирует несколько файлов с общей целью. Создаваемый в этом разделе проект будет включать файл с метаданными о проекте (.dev для Dev-C++ или .sln для Visual Studio), несколько проектных файлов (объектный код, файлы связывания и т.д.) и файл с исходным кодом (только этот файл должен быть явно создан программистом, остальные файлы автоматически генерируются средой разработки.
При создании проекта интегрированная среда спрашивает пользователя, где должны храниться файлы. Для каждого проекта удобно использовать разные папки. Тип проекта определяет тип приложения, которое будет разработано. В примерах, рассматриваемых в этом разделе, будут созданы консольные проекты. Это проекты, которые выполняются на экране в текстовом режиме без окон или графики. Взаимодействие с пользователем осуществляется путем ввода информации на клавиатуре (ввод) и печати символов на экране (вывод) с правильными инструкциями чтения и записи.
После запуска среды необходимо создать проект соответствующими командами меню, после чего ввести его название, выбрать язык программирования, а также тип создаваемого приложения. На рисунке 2 создается консольное приложение на языке Си в среде разработки Dev-C++.
Необходимо также выбрать папку для хранения файлов в следующем окне. Каждый проект удобно хранить в отдельной папке.
После указания папки, в которой будет сохранен файл конфигурации проекта (.dev), в среде создается базовый файл исходного кода (по умолчанию main.c). Эти файлы не сохраняются в папке проекта, пока программист не сохранит или не скомпилирует программу.
Окно среды разработки включает в себя три вложенных окна: проводник файлов проекта, вкладки результатов и редактор исходного кода. Эти окна могут быть изменены и свернуты.
В окне проводника файлов отображается название проекта и включенные файлы. Вкладка Project (Проект) обычно содержит один файл с исходным кодом программы. На этой панели можно найти две дополнительные вкладки: Классы (Classes) и Отладка (Debug). Вкладка Classes отображает функции программы. Вкладка Debug показывает наблюдаемые переменные в процессе отладки.
Рисунок 2 – Параметры создания проекта в среде Dev-C++
Окно «Результаты» используется для представления результатов действий среды: ошибок компиляции, директив компиляции, команд отладки и т.д. Редактор исходного кода показывает код программы.
Файлы проекта сохраняются при сохранении файла исходного кода. Остальные файлы проекта сохраняются при компиляции приложения в папке проекта.
Как только проект будет создан, можно начать писать программу. Например, программа HelloWorld на языке Си продемонстрирована на рисунке 3.
Рисунок 3 – Программа HelloWorld на языке Си в среде Dev-C++
Для запуска программы исходный код должен быть скомпилирован и скомпонован. Dev-C++ выполняет весь процесс после нажатия на кнопку компиляции «Compile» (или Ctrl + F9).
Во время выполнения процесса компиляции и компоновки в среде IDE отображается диалоговое окно со связанной информацией. Если процесс успешен, в окне отображается сообщение «Готово».
Лог компиляции продемонстрирован на рисунке 4. После этого процесса легко убедиться, что все описанные ранее файлы проекта были созданы, в том числе исполняемый (exe) файл программы.
Ошибки компиляции – это ошибки, обнаруженные компилятором. Их также называют ошибками времени выполнения. Чтобы исправить все ошибки компиляции, рекомендуется исправить первую и затем заново скомпилировать программу, поскольку следующие ошибки часто являются неправильными разделами кода, которые компилятор не может интерпретировать как результат первой ошибки. Dev-C++ подчеркивает красной строкой кода, где была обнаружена ошибка компиляции. Вкладка «Компиляция» окна «Результаты» содержит подробное описание ошибки. Журнал компиляции показывает сообщение об ошибке, выданное программой компиляции (рисунок 5).
Распространенные типы ошибок: выбор неверного типа проекта (вместо консоли), выбор неправильного типа языка (вместо C) или ошибки включения библиотеки (неправильный синтаксис, отсутствие библиотеки и т.д.).
В результате процесса линковки создается исполняемая программа. Чтобы запустить эту программу, необходимо нажать кнопку «Выполнить» (Ctrl + F10). Кроме того, можно найти exe-файл в папке проекта и дважды щелкнуть по нему.
Рисунок 4 – Лог компиляции Dev-C++
Рисунок 5 – Сообщение об ошибке компиляции в среде Dev-C++
Разработка синтаксически правильной программы не означает, что она выполняет необходимые процедуры. Сложные программы подвержены ошибкам, и обычно логика, реализованная в исходном коде, не приводит к ожидаемому поведению. Эти ошибки называются ошибками выполнения или логики, так как они обнаруживаются при запуске программы. Поэтому может потребоваться изменить исходный код и повторить процедуру компиляции и компоновки. В IDE имеется отладчик, который является вспомогательным инструментом для поиска ошибок времени выполнения. Чтобы использовать отладчик, необходимо изменить параметры компилятора, включив в него отладочную информацию и исполняемые файлы («Инструменты» -> «Параметры компилятора» -> «Компилятор»). Это делается путем добавления параметра –g к вызовам компилятора и компоновщика (рисунок 6).
Рисунок 6 – Опции компилятора для включения отладки в среде Dev-C++
После того, как программа откомпилируется и слинкуется с этими параметрами, можно запустить ее в режиме отладки, нажав кнопку «Отладка» (F8). Этот режим позволяет запускать программу шаг за шагом (инструкции выполняются одна за другой), останавливать выполнение в точках останова или наблюдать за значением переменной в любой момент выполнения.
3.4 Юнит-тестирование в Visual Studio
Юнит-тестирование, или модульное тестирование, является одним из наиболее популярных способов, применяемых для тестирования программ в учебных целях. Разбивая свой код на небольшие тестируемые единицы, разработчики могут создавать и запускать юнит-тесты. Юнит-тесты увеличивают вероятность того, что написанный код продолжит работать должным образом, даже если в него были внесены изменения.
В этом подразделе рассматривается пример простейшего юнит-теста для кода, написанного на языке C#, в среде разработки Visual Studio. Пусть имеется метод, который рассчитывает температуру в градусах Фаренгейта для заданной температуры в градусах Цельсия. Код, для которого необходимо создать модульный тест, приведен в листинге 1.
Листинг 1. Исходный код класса с методом перевода температуры из градусов Фаренгейта в градусы Цельсия
public static class ConversionHelpers
{
private const double F_MULTIPLIER = 1.8;
private const int F_ADDITION = 32;
public static double ToFahrenheit(double celsius)
{
return celsius * F_MULTIPLIER + F_ADDITION;
}
}
Для создания юнит-теста необходимо его добавить в решение. На рисунке 7 показано, что в среде Visual Studio Community есть возможность добавить шаблон проекта Unit Test.
Рисунок 7 – Создание проекта юнит-тестирования в среде Visual Studio
После того, как проект был добавлен в решение, он появится в нем с иконкой, указывающей, что это проект юнит-тестирования (рисунок 8).
Рисунок 8 – Проект юнит-тестирования в созданном решении
Чтобы эффективно протестировать класс, содержащий метод, который конвертирует градусы Цельсия в градусы Фаренгейта, нужно сослаться на этот класс в проекте юнит-тестирования. Для этого необходимо щелкнуть правой кнопкой мыши по проекту Unit Test и добавить ссылку на проект, содержащий класс, который нужно протестировать (рисунок 9).
Когда ссылка будет добавлена в тестовый проект, необходимо создать тест, код которого приведен в листинге 2.
Листинг 2. Исходный код юнит-теста
[TestClass]
public class ConversionHelperTests
{
[TestMethod]
public void Test_Fahrenheit_Calc()
{
var celsius = -7.0;
var expectedFahrenheit = 19.4;
var result = ConversionHelpers.ToFahrenheit(celsius);
Assert.AreEqual(expectedFahrenheit, result);
}
}
Рисунок 9 – Ссылка на тест
В коде из листинга 2 выполняется три действия: настройка теста, непосредственное тестирование кода и проверка фактического результата в сравнении с ожидаемым.
Для запуска в меню необходимо выбрать «Windows», а затем «Test Explorer» или удерживать нажатыми клавиши «Ctrl E, T». В «Text Explorer» нужно далее нажать на зеленую кнопку воспроизведения, чтобы запустить тест и увидеть его результаты (Рисунок 10).
Рисунок 10 – Запуск юнит-теста
Из результатов, отображаемых в «Test Explorer», можно легко увидеть, какие тесты не были пройдены, а какие пройдены. Из рассмотренного выше довольно простого теста в листинге 2 можно понять, что тест прошел легко и что ожидаемый результат действительно был реальным результатом теста. Этот юнит-тест сравнивает два типа двойных значений для точного равенства. Метод Assert.AreEqual имеет перегрузку, которая принимает в качестве параметра значение ошибки.
ЗАКЛЮЧЕНИЕ
Тестирование и отладка программного обеспечения являются наиболее часто используемыми методами проверки и подтверждения качества программного обеспечения. Отладка представляет собой процедуру, состоящую в том, чтобы найти и исправить код, нарушающий программную спецификацию. В данной работе рассмотрена общая методика отладки приложений, изучено современное состояние этой технологии.
Тестирование программного обеспечения – это процедура выполнения программы или программной системы с целью обнаружения неисправностей. Тестирование программного обеспечения является важной деятельностью жизненного цикла разработки программного обеспечения. Обе этих процедур помогают разработчику обрести уверенность в том, что программа делает именно то, для чего она предназначена, уменьшить риски и затраты на разработку и внедрение. Другими словами, можно сказать, что это процесс выполнения программы с намерением найти ошибки. Цели и задачи тестирования вместе с современным состоянием также рассмотрены в этой работе.
На языке верификации и валидации тестирование черного ящика часто используется для валидации, а тестирование белого ящика – для верификации программного обеспечения. Тестирование по методу черного ящика основано на предположении, что тестер не знает содержимого и алгоритмов программного обеспечения, подразумевая только набор входных данных и предсказуемые выходные данные. Тестирование белого ящика в основном сфокусировано на внутренней логике и структуре кода. Выполнение этого метода предполагает, что программист обладает методиками, полностью знающими структуру программы. Промежуточным звеном между двумя этими методами выступает тестирование серого ящика, которое подразумевает прямой подход к тестированию по методу черного ящика, но также использует некоторые ограниченные знания о внутренней работе приложения. В данной работе были подробно описаны и изучены все вышеперечисленные методы, а также рассмотрены техники (виды) тестирования, которые относятся к стратегиям каждого из этих методов.
Кроме того, в работе были рассмотрены механизмы отладки и тестирования на простейших примерах. В качестве интегрированных сред были использованы Dev-C++ с языком программирования Си для отладки; Visual Studio 2017 Community с языком программирования C# для юнит-тестирования.
Таким образом, цели и задачи курсовой работы выполнены в полном объеме.