- •Содержание
- •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.4. Рефакторинг программного кода. Составление методов
2.4.1. Основные идеи рефакторинга программного кода
Рефакторинг представляет собой процесс такого изменения программной системы, при котором не меняется внешнее поведение кода, но улучшается его внутренняя структура. Это способ систематического приведения кода в порядок, при котором шансы появления новых ошибок минимальны. В сущности, при проведении рефакторинга кода улучшается его дизайн уже после того, как он написан.
Рефакторинг – это изменение во внутренней структуре программного обеспечения, имеющее целью облегчить понимание его работы и упростить модификацию, не затрагивая наблюдаемого поведения.
Основными результатами проведения рефакторинга являются:
- улучшение композиции программного обеспечения;
- облегчение понимания программного кода;
- упрощение поиска ошибок;
- ускорение разработки программ.
2.4.2. Составление методов
Важную роль при проведении рефакторинга играет составление методов, которые правильно структурируют программный код. Почти всегда проблемы возникают из-за слишком длинных методов, часто содержащих массу информации, погребенной под сложной логикой, которую они обычно в себе заключают. Основным типом рефакторинга здесь служит «Выделение метода» (Extract Method), в результате которого фрагмент кода превращается в отдельный метод. «Встраивание метода» (Inline Method), по существу, является противоположной процедурой: вызов метода заменяется при этом кодом, содержащимся в теле. «Встраивание метода» может использоваться после проведения нескольких выделений, когда видно, что какие-то из полученных методов больше не выполняют свою долю работы или требуется реорганизовать способ разделения кода на методы.
Самая большая проблема «Выделения метода» связана с обработкой локальных переменных и, прежде всего, с наличием временных переменных. Работая над методом, с помощью «Замены временной переменной вызовом метода» (Replace Temp with Query) следует избавиться от возможно большего количества временных переменных. Если временная переменная используется для разных целей, сначала следует применить «Расщепление временной переменной» (Split Temporary Variable), чтобы облегчить последующую ее замену.
Однако иногда временные переменные оказываются слишком сложными для замены. Тогда требуется «Замена метода объектом метода»
(Replace Method with Method Object). Это позволяет разложить даже самый запутанный метод, но ценой введения нового класса для выполнения задачи.
С параметрами меньше проблем, чем с временными переменными, при условии, что им не присваиваются значения. В противном случае требуется выполнить «Удаление присваиваний параметрам» (Remove Assignments to Parameters).
Когда метод разложен, значительно легче понять, как он работает. Иногда обнаруживается возможность улучшения алгоритма, позволяющая сделать его более понятным. Тогда применяется «Замещение алгоритма» (Substitute Algorithm).
2.4.2.1. Выделение метода (Extract Method)
Есть фрагмент кода, который можно сгруппировать. Преобразуйте фрагмент кода в метод, название которого объясняет его назначение.
