- •Содержание
- •2.3.1. Основные положения
- •2.3.4. Пример выполнения типового задания
- •2.6.1. Обзор методов упрощения условных выражений
- •1.Цель практических занятий
- •2. Основные положения
- •2.1. Тестирование на основе областей эквивалентности и структурное тестирование
- •2.1.1. Области эквивалентности
- •2.1.2. Структурное тестирование. Тестирование ветвей
- •2.1.3. Пример решения типового задания
- •2.2. Модульное тестирование программного обеспечения
- •2.2.1. Общий порядок тестирования по
- •2.2.2. Порядок тестирования классов
- •2.2.3. Пример выполнения типового задания
- •2.3. Интеграционное тестирование программного обеспечения
- •2.3.1. Основные положения
- •2.3.2. Идентификация взаимодействий
- •2.3.3. Выбор тестовых случаев
- •2.3.4. Пример выполнения типового задания
- •2.4. Рефакторинг программного кода. Составление методов
- •2.4.1. Основные идеи рефакторинга программного кода
- •2.4.2. Составление методов
- •2.4.2.1. Выделение метода (Extract Method)
- •Мотивация
- •Техника
- •Использование локальных переменных
- •2.4.2.2. Встраивание метода (Inline Method)
- •Мотивация
- •2.4.2.3. Встраивание временной переменной (Inline Temp)
- •Мотивация
- •Техника
- •2.4.2.4. Замена временной переменной вызовом метода (Replace Temp with Query)
- •Мотивация
- •Техника
- •2.4.2.5. Введение поясняющей переменной (Introduce Explaining Variable)
- •Мотивация
- •Техника
- •2.4.2.6. Расщепление временной переменной (Split Temporary Variable)
- •Мотивация
- •Техника
- •2.4.2.7. Удаление присваиваний параметрам (Remove Assignments to Parameters)
- •Мотивация
- •Техника
- •2.4.2.8. Замена метода объектом методов (Replace Method with Method Object)
- •Мотивация
- •Техника
- •2.4.2.9. Замещение алгоритма (Substitute Algorithm)
- •Мотивация
- •Техника
- •2.5. Рефакторинг программного кода. Перемещение функций между объектами
- •2.5.1. Обзор методов перемещения функций между объектами
- •2.5.2. Перемещение метода (Move Method)
- •2.5.3. Перемещение поля (Move Field)
- •2.5.4. Выделение класса (Extract Class)
- •2.5.5. Встраивание класса (Inline Class)
- •2.5.6. Сокрытие делегирования (Hide Delegate)
- •2.5.7. Удаление посредника (Remove Middle Man)
- •2.5.8. Введение внешнего метода (Introduce Foreign Method)
- •2.5.9. Введение локального расширения (Introduce Local Extension)
- •2.6. Рефакторинг программного кода. Упрощение условных выражений
- •2.6.1. Обзор методов упрощения условных выражений
- •2.6.2. Декомпозиция условного оператора (Decompose Conditional)
- •Мотивация
- •Техника
- •2.6.3. Консолидация условного выражения (Consolidate Conditional Expression)
- •Мотивация
- •Техника
- •2.6.4. Консолидация дублирующихся условных фрагментов (Consolidate Duplicate Conditional Fragments)
- •Мотивация
- •Техника
- •2.6.5. Удаление управляющего флага (Remove Control Flag)
- •Мотивация
- •Техника
- •2.6.6. Замена вложенных условных операторов граничным оператором (Replace Nested Conditional with Guard Clauses)
- •Мотивация
- •Техника
- •2.6.7. Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)
- •Мотивация
- •Техника
- •2.6.8. Введение объекта Null (Introduce Null Object)
- •Мотивация
- •Техника
- •3. Варианты заданий и порядок выполнения работы
- •Библиографический список
2.3.4. Пример выполнения типового задания
Продемонстрируем тестирование взаимодействий на примере класса TСommandQueue:
public class TCommandQueue : System.Windows.Forms.ListBox
{
public TCommandQueue()
// Добавляет команду в очередь команд на указанную позицию
public void AddCommand(int NameCommand, // Код команды
int Position) // Позиция в очереди
// Удаляет команду из очереди
public void DeleteCommand(int Position)
// Выполняет первую команду в очереди
public void ProcessCommand()
}
Класс реализует очередь FIFO объектов типа TCommand. Наследуется от System.Windows.Forms.ListBox библиотеки .NET. Количество команд в очереди не ограничено.
Операции:
- Конструктор TCommandQueue().
- Операция AddCommand(...) создает объект типа TCommand, присваивает ему переданные параметры и добавляет в очередь команд на указанную позицию. Значение позиции в очереди = -1 означает, что команда будет добавлена в конец очереди.
- Операция DeleteCommand(...) удаляет команду из очереди на указанной позиции.
- Операция ProcessCommand() при наличии команд в очереди посылает первую команду из очереди на выполнение.
С объектом TCommand осуществляется взаимодействие третьего типа, т. е. TCommandQueue создает объекты класса TCommand как часть своей внутренней реализации.
Для тестирования взаимодействия класса TCommandQueue и класса TСommand, так же, как и при модульном тестировании, разработаем спецификацию тестового случая:
1) Названия взаимодействующих классов: TСommandQueue, Tcommand.
2) Название теста: TCommandQueueTest1.
3) Описание теста: тест проверяет возможность создания объекта типа TCommand и добавления его в очередь при вызове метода AddCommand.
4) Начальные условия: очередь команд пуста.
5) Ожидаемый результат: в очередь будет добавлена одна команда.
На основе этой спецификации был разработан тестовый драйвер – класс TCommandQueueTester, который наследуется от класса Tester. Этот класс содержит:
- Метод Init(), в котором создается объект класса TcommandQueue. Этот метод необходимо вызывать в начале каждого теста, чтобы тестируемые объекты создавались вновь:
private void Init()
{
CommandQueue=new TCommandQueue();
}
- Методы, реализующие тесты. Каждый тест реализован в отдельном методе.
- Метод Run(), в котором вызываются методы тестов.
- Метод dump(), который сохраняет в log-файле теста информацию обо всех командах, находящихся в очереди в формате: «номер позиции в очереди: полное название команды».
- Точку входа в программу – метод Main(), в котором происходит создание экземпляра класса TCommandQueueTester и запуск метода Run().
Сначала создадим тест, который проверяет, создается ли объект типа TСommand, и добавляется ли команда в конец очереди.
private void TCommandQueueTest1()
{
Init();
LogMessage("///////// TCommandQueue Test1 /////////////");
LogMessage("Проверяем, создается ли объект типа TCommand");
// В очереди нет команд
dump();
// Добавляем команду
// параметр = -1 означает, что команда должна быть добавлена
//в конец очереди
CommandQueue.AddCommand(1, -1);
LogMessage("Command added");
// В очереди одна команда
dump();
}
Для выполнения этого теста в методе Run() необходимо вызвать метод TCommandQuеueTest1() и запустить программу на выполнение:
private void Run()
{
TCommandQueueTest1();
}
После завершения теста следует просмотреть текстовый журнал теста, чтобы сравнить полученные результаты с ожидаемыми результатами, заданными в спецификации тестового случая TCommandQueueTest1.
