- •Введение
- •Общая постановка задачи
- •Детальная постановка задачи
- •Описание предметной области
- •Теоретическое введение
- •Что такое тестирование?
- •Преимущества
- •Ограничения
- •План модульного тестирования
- •План ют:
- •Абстрактный класс, его назначение и основные характеристики.
- •Приложения модульного тестирования Экстремальное программирование
- •Полиморфный класс, его назначение и основные характеристики
- •Указатели на базовый класс. Их свойства
- •Статический и динамический полиморфизм. Понятие о раннем и позднем связывании member-функций.
- •Статический и динамический полиморфизм
- •Понятие о раннем связывании member-функций.
- •Понятие о позднем связывании member-функций.
- •Использование позднего статического связывания
- •Файловый ввод-вывод.
- •Текстовые и двоичные файлы.
- •Архитектура проекта
- •Тестирование
- •Тестирование взаимодействия классов
- •5.1.1 Тесты
- •Тестирование взаимодействия классов в составе динамической коллекции
- •Тестирование всех задач заданных по варианту
- •Usability тестирование
- •Проведение тестирования
- •Приложение а. Листинги исходных кодов
- •Приложение б. Результат работы программы (режим debug)
- •Приложение в. Результат работы программы (режим release)
Приложения модульного тестирования Экстремальное программирование
Экстремальное программирование предполагает как один из постулатов использование инструментов автоматического модульного тестирования. Этот инструментарий может быть создан либо третьей стороной (например, Boost.Test), либо группой разработчиков данного приложения.
В экстремальном программировании используются модульные тесты для разработки через тестирование. Для этого разработчик до написания кода пишет тесты, отражающие требования к модулю. Очевидно, ни один из этих тестов до написания кода работать не должен. Дальнейший процесс сводится к написанию кратчайшего кода, удовлетворяющего данному набору тестов.
План модульного тестирования
Что тестирую?
Программу курсового проекта
Что буду тестировать?
функции и методы, входящие в проект
Как буду тестировать?
Буду использовать функциональное и не функциональное виды тестирования, а именно:
1)Юзабилити тестирование
2)Тестирование производительности, инструмент (UnitTest)
Метод - “Белый ящик”.
Когда буду тестировать?
подготовка (Test Preparation), тестирование (Testing), анализ результатов (Test Result Analisys) в разрезе запланированных фаз разработки
Критерии начала тестирования:
готовность тестовой платформы (тестового стенда)
законченность разработки требуемого функционала
Критерии окончания тестирования:
результаты тестирования удовлетворяют критериям качества продукта
требовния к количеству открытых багов выполнены
План ют:
Цель
Время и место
Продолжительность
Необходимое оборудование и софт
Дополнительные настройки оборудования и софта (начальные экраны, время реакции)
Ответственный за проведение тестирования
Количество и состав участников и где их взять
Количество и состав заданий
Возможность использования вспомогательных материалов для выполнения заданий
Признаки успешного и ошибочного выполнения заданий
Степень допустимого участия (подсказок) со стороны проводящего тестирование
Набор количественных данных и способы их сбора
Результаты тестирования выложены в 6-й главе.
Абстрактный класс, его назначение и основные характеристики.
Абстрактный класс в объектно - ориентированном программировании - базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может содержать (и не содержать) абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, то есть имеющие наибольший объём и наименьшее содержание.
Абстрактный класс - это класс, экземпляры которого не могут быть созданы. В курсовом проекте реализован транспортные средства. Ведь не возможно создать экземпляр типа "Vehicle". Это слишком абстрактно, не хватает конкретики. Однако от транспортного средства могут наследоваться конкретные средства передвижения – Bicycle, Car, Lorry. Вот их экземпляры создать уже можно.
Абстрактным может являться только класс, который содержит как минимум одну чисто виртуальную функцию (т.е. функцию, реализация которой в данном классе не предполагается, а предполагается в классах-наследниках).
Как видите, класс Vehicle - абстрактный, поскольку там объявлены две чисто виртуальные функции: getClass, toString. Зато в классах, которые наследуют от vehicle – bicycle, car и lorry функция toString уже имеет определение. Затем, в главной функции, создаётся массив указателей на Vehicle (в отличие от экземпляров абстрактного класса, создавать указатели на него мы можем). Затем каждый указатель инициализируется конкретным объектом – велосипедом, автомобилем или грузовиком (поскольку указатель на базовый класс является также указателем на любой производный класс). И затем, в цикле, не задумываясь, в какой ячейке массива какой объект находится, мы просто вызываем для каждого его метод toString, а он для каждого объекта выполнит свои действия.
Абстрактный класс определен, чтобы дать обобщенную форму, которая может быть разделена ее подклассами.
Таким образом подклассы согласно их потребности расширяют этот абстрактный класс и используют методы, объявленные со своим собственным настроенным выполнением метода.
Абстрактный метод указывает, что выполнение метода должно быть обеспечено в подклассе данного абстрактного класса.
Если класс абстрактный, то это указывает на то, что класс не может быть реализован. Если класс содержит один или больше абстрактных методов, то компилятор настаивает, чтобы класс был объявлен как abstract. Это - большое удобство людям, которые будут использовать класс: они должны смотреть только в одном месте (в объявлении класса), чтобы узнать, позволено ли им непосредственно реализовать класс или они должны создавать подкласс.
Класс становится абстрактным:
-Когда один или более методов класса абстрактны.
-Когда класс - подкласс абстрактного класса и не обеспечивает никаких деталей выполнения или тела метода по отношению к любому из абстрактных методов.
-Когда класс осуществляет интерфейс и не обеспечивает детали выполнения или тела метода по отношению к любому из абстрактных методов.
На языке программирования C++ абстрактный класс объявляется включением хотя бы одной чистой виртуальной функции, типа virtual _сигнатура_функции_= 0; , которая, как и другие, может быть заменена.
