SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Работа с унаследованным кодом.
 Есть ли жизнь после коммита?


                      Вадим Крючков [Long]
              Бюро Информационных Решений
Почему тема поднята
  именно сейчас?
Условия использования

• Внедрена любая CVS
• Иметь (хотя бы поверхностные
  представления) о тестировании
Вспомните — вы открываете код нового
            проекта и ...
Что такое "унаследованный код"?


• Не понятный код
• Трудноизменяемый код
• Код без тестов — без тестов мы не можем контролировать
  изменение кода.
Чем он плох?

• До 70% рабочего времени мы читаем код
• Требования меняются — код должен отвечать новым
  требованиям
• Мы не можем гарантировать:
   – измененный код работает так, как предполагалось
   – изменения не поломали работающую систему


           А изменения вносить надо!
Вариант альфа




Это не наш метод!
Откуда берется унаследованный код?

• Достается в «наследство»
• Мы сами его пишем




         Почему код начинает загнивать?
Теория разбитых окон

              • В 1982 году Джейм
                Уилсон и Джордж
                Келлинг
              • Проверка — 6
                экспериментов
                (подробнее — см.
                wikipedia.org)
Как бороться?
                Основной метод —
                воспользоваться
                принципом бойскаутов
                - покидая место, оставь
                его более чистым, чем
                оно было до твоего
                прихода
• Читаете код - если стало понятно что
  он делает — откомментируйте его

• Встретили метод без phpDoc -
  остановитесь, напишите его

• Если нужно внести изменение в метод
  - сначала напишите тест, который
  проверяет только этот метод, а потом
  вносите изменения
Главная проблема при коллективном
             владении кодом -


   сделает кто-то другой

Код - это дом, в котором вам придется жить!
От теории к практике


• Общий подход
• Несколько сложных случаев
Общий подход - условия

• Имеется унаследованный код
• Необходимо в него внести изменения
• Тестов нет. Ужас-ужас-ужас.
Общий подход - решение
  Характеристические тесты — тесты, требующиеся для
  сохранения поведения системы

  Особенности:
• Пишутся по готовому работающему коду (anti-TDD)
• Принцип белого ящика
• Что делать с найденными ошибками? Сохранять поведение +
  помечать на исправление.
Алгоритм построения характеристического
                   теста

(1) Выбираем участок кода в методе (тестируем не весь метод!)
(2) Пишем утверждение, которое заведомо противоречит этому
   участку
(3) Запускаем тест — тест провален
(4) Изменяем тест — тест проходит
(5) Возвращаемся к шагу (1)
Общий подход — правило применения

                Прежде чем использовать
                любой метод — напишите
                на него
                характеристические
                тесты
Два характерных случая
Огромные методы
• Методы имеют тенденцию расти — в них
  вводят новую логику
• Метод начинает выполнять не одну, а много
  разных функций

  Решение:
• Реорганизация - извлечение метода
• Извлекайте не большие, но логически
  цельные фрагменты кода
• Оставить только скелет — логику работы —
  от изначального метода
Класс слишком крупный

• Принцип единственной ответственности — единственное
  назначение в системе, единственная причина для изменений

  Извлечение класса:
• Сгруппируйте сходные по именам методы — возможно они
  группируются в отдельный класс
• Анализ скрытых методов — наличие большого кол-ва приватных
  и защищенных методов скорей всего означает, что требуется
  новый класс
• Существуют ли поля, которые используются в одних методах и
  не используются в других? Возможно их стоит объединить в
  отдельный класс?
Подробнее?



    Мартин Фаулер.
    Рефакторинг. Улучшение
    существующего кода
Несколько советов
   из практики
Распространение изменений




1. Возвращаемые значения — используются в вызывающей части
2. Изменение объектов, передаваемых в параметрах
3. Изменения данных, используемых в дальнейшем
Разбиение команд и запросов

• Командный метод — изменяет состояние объекта (данных)
• Запросный метод — только возвращает значение

  Метод должен быть либо командным, либо запросным, но не
  тем и не другим одновременно.

  Запросный метод без проблем может быть использован
  повторно. Командный — можно получит не желательный
  эффект
Правка с единственной целью

• Часто изменяя один метод, возникает потребность исправить
  другой.
• Не поддавайтесь этому искушению.
• Делайте все по порядку.
• Запишите что хотели менять и вернитесь к первоначальной
  задаче
Код (метод) слишком большой
                 для понимания
• Распечатайте этот участок кода
• Запаситесь маркерами
• Если код глубоко вложенный — читайте его не опускаясь на
  следующий уровень, после закрытой скобки поставьте
  комментарий. Повторите на новом уровне вложенности.
• Выделяйте группы ответственности одним цветом
• Части кода, которые можно вынести в отдельный метод
  обведите
• Вернитесь в редактор и выполните изменения в коде
Код не понятен для его
        изменения


• Рисуйте эскизы — отмечайте связи между объектами
• Совсем не обязательно использовать формальный UML — эскиз
  нужен прежде всего вам!
• Найдите на них объекты, на которые изменением будет оказано
  воздействие
TDD и унаследованный код

  Как использовать практику TDD?

  Решение — разделите задачи:
• Для нового кода — используйте TDD
• Для унаследованного — пишите характеристические тесты

  В результате — пишем новый код независимо от старого
Не пишите унаследованный код :)




    Спасибо!

            • l-o-n-g.livejournal.com
            • @v_kruchkov
Вопросы?

Contenu connexe

Tendances

Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Vyacheslav Lyalkin
 
Метод No-Test-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Test-Cases: избавьтесь от тест-кейсов в тестированииМетод No-Test-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Test-Cases: избавьтесь от тест-кейсов в тестированииSQALab
 
ковалев нестандатное нт
ковалев    нестандатное нтковалев    нестандатное нт
ковалев нестандатное нтAlexei Lupan
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированиюAPostovalova
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированиюAPostovalova
 
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)sqadays8
 
Тест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писатьТест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писатьSQALab
 
андрей дмитриев взгляд со стороны разработчика
андрей дмитриев взгляд со стороны разработчикаандрей дмитриев взгляд со стороны разработчика
андрей дмитриев взгляд со стороны разработчикаAlexei Lupan
 
юнит тестирование Fork
юнит тестирование Forkюнит тестирование Fork
юнит тестирование ForkSergey Oreshkov
 
Автотесты и образ мышления
Автотесты и образ мышленияАвтотесты и образ мышления
Автотесты и образ мышленияAndrei Zubov
 
Высоцкий Неортодоксальный дизайн тестов
Высоцкий Неортодоксальный дизайн тестовВысоцкий Неортодоксальный дизайн тестов
Высоцкий Неортодоксальный дизайн тестовqasib
 
Unit Testing The Begining
Unit Testing The BeginingUnit Testing The Begining
Unit Testing The BeginingMikalai_Kardash
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
 

Tendances (17)

Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)
 
Метод No-Test-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Test-Cases: избавьтесь от тест-кейсов в тестированииМетод No-Test-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Test-Cases: избавьтесь от тест-кейсов в тестировании
 
ковалев нестандатное нт
ковалев    нестандатное нтковалев    нестандатное нт
ковалев нестандатное нт
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированию
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированию
 
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
 
Тест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писатьТест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писать
 
лекция4 qa
лекция4 qaлекция4 qa
лекция4 qa
 
андрей дмитриев взгляд со стороны разработчика
андрей дмитриев взгляд со стороны разработчикаандрей дмитриев взгляд со стороны разработчика
андрей дмитриев взгляд со стороны разработчика
 
QA Лекция2
QA Лекция2QA Лекция2
QA Лекция2
 
лекция3 QA
лекция3 QAлекция3 QA
лекция3 QA
 
Exploratory testing
Exploratory testingExploratory testing
Exploratory testing
 
юнит тестирование Fork
юнит тестирование Forkюнит тестирование Fork
юнит тестирование Fork
 
Автотесты и образ мышления
Автотесты и образ мышленияАвтотесты и образ мышления
Автотесты и образ мышления
 
Высоцкий Неортодоксальный дизайн тестов
Высоцкий Неортодоксальный дизайн тестовВысоцкий Неортодоксальный дизайн тестов
Высоцкий Неортодоксальный дизайн тестов
 
Unit Testing The Begining
Unit Testing The BeginingUnit Testing The Begining
Unit Testing The Begining
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 

En vedette

Nastachku slideshttp://www.slideshare.net/squadette/2012-45697461
Nastachku slideshttp://www.slideshare.net/squadette/2012-45697461Nastachku slideshttp://www.slideshare.net/squadette/2012-45697461
Nastachku slideshttp://www.slideshare.net/squadette/2012-45697461Alexey Mahotkin
 
Rubinius: Ruby написанный на Ruby
Rubinius: Ruby написанный на RubyRubinius: Ruby написанный на Ruby
Rubinius: Ruby написанный на RubyIvan Samsonov
 
Алан Милц - семинар по финансовому потоку
Алан Милц - семинар по финансовому потокуАлан Милц - семинар по финансовому потоку
Алан Милц - семинар по финансовому потокуAndrew Artishchev
 
Beyond Ruby (RubyConf Argentina 2011)
Beyond Ruby (RubyConf Argentina 2011)Beyond Ruby (RubyConf Argentina 2011)
Beyond Ruby (RubyConf Argentina 2011)Konstantin Haase
 
Amplifr deck as it was june 2013
Amplifr deck as it was june 2013Amplifr deck as it was june 2013
Amplifr deck as it was june 2013Nate Gadgibalaev
 

En vedette (7)

Nastachku slideshttp://www.slideshare.net/squadette/2012-45697461
Nastachku slideshttp://www.slideshare.net/squadette/2012-45697461Nastachku slideshttp://www.slideshare.net/squadette/2012-45697461
Nastachku slideshttp://www.slideshare.net/squadette/2012-45697461
 
Rubinius: Ruby написанный на Ruby
Rubinius: Ruby написанный на RubyRubinius: Ruby написанный на Ruby
Rubinius: Ruby написанный на Ruby
 
Алан Милц - семинар по финансовому потоку
Алан Милц - семинар по финансовому потокуАлан Милц - семинар по финансовому потоку
Алан Милц - семинар по финансовому потоку
 
О ThinkWith.Me за 2 минуты
О ThinkWith.Me за 2 минутыО ThinkWith.Me за 2 минуты
О ThinkWith.Me за 2 минуты
 
About downloads
About downloadsAbout downloads
About downloads
 
Beyond Ruby (RubyConf Argentina 2011)
Beyond Ruby (RubyConf Argentina 2011)Beyond Ruby (RubyConf Argentina 2011)
Beyond Ruby (RubyConf Argentina 2011)
 
Amplifr deck as it was june 2013
Amplifr deck as it was june 2013Amplifr deck as it was june 2013
Amplifr deck as it was june 2013
 

Similaire à Работа с унаследованным кодом. Есть ли жизнь после коммита.

XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeDmytro Mindra
 
Working with legacy code
Working with legacy codeWorking with legacy code
Working with legacy codeMihail Lebedev
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияzheldak
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...HappyDev
 
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивностиJS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивностиGeeksLab Odessa
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java DeveloperOlexandra Dmytrenko
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
AgileCamp’11 Новосибирск - Test Driven Development (TDD)
AgileCamp’11 Новосибирск - Test Driven Development (TDD)AgileCamp’11 Новосибирск - Test Driven Development (TDD)
AgileCamp’11 Новосибирск - Test Driven Development (TDD)Anton Katkov
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаIgor Lyubin
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
Виталий Стрелюк
Виталий СтрелюкВиталий Стрелюк
Виталий СтрелюкSQALab
 
Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?DataArt
 
SOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSQALab
 
Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3Denis Umnov
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QAFest
 

Similaire à Работа с унаследованным кодом. Есть ли жизнь после коммита. (20)

XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy code
 
Working with legacy code
Working with legacy codeWorking with legacy code
Working with legacy code
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы применения
 
Do you speak TDD
Do you speak TDDDo you speak TDD
Do you speak TDD
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивностиJS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java Developer
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
AgileCamp’11 Новосибирск - Test Driven Development (TDD)
AgileCamp’11 Новосибирск - Test Driven Development (TDD)AgileCamp’11 Новосибирск - Test Driven Development (TDD)
AgileCamp’11 Новосибирск - Test Driven Development (TDD)
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя система
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Виталий Стрелюк
Виталий СтрелюкВиталий Стрелюк
Виталий Стрелюк
 
Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?
 
SOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработка
 
Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3
 
Pandoras white box
Pandoras white boxPandoras white box
Pandoras white box
 
Design principles
Design principles Design principles
Design principles
 
запахи кода
запахи кодазапахи кода
запахи кода
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
 

Работа с унаследованным кодом. Есть ли жизнь после коммита.

  • 1. Работа с унаследованным кодом. Есть ли жизнь после коммита? Вадим Крючков [Long] Бюро Информационных Решений
  • 2. Почему тема поднята именно сейчас?
  • 3. Условия использования • Внедрена любая CVS • Иметь (хотя бы поверхностные представления) о тестировании
  • 4. Вспомните — вы открываете код нового проекта и ...
  • 5.
  • 6.
  • 7.
  • 8. Что такое "унаследованный код"? • Не понятный код • Трудноизменяемый код • Код без тестов — без тестов мы не можем контролировать изменение кода.
  • 9. Чем он плох? • До 70% рабочего времени мы читаем код • Требования меняются — код должен отвечать новым требованиям • Мы не можем гарантировать: – измененный код работает так, как предполагалось – изменения не поломали работающую систему А изменения вносить надо!
  • 11. Откуда берется унаследованный код? • Достается в «наследство» • Мы сами его пишем Почему код начинает загнивать?
  • 12. Теория разбитых окон • В 1982 году Джейм Уилсон и Джордж Келлинг • Проверка — 6 экспериментов (подробнее — см. wikipedia.org)
  • 13.
  • 14. Как бороться? Основной метод — воспользоваться принципом бойскаутов - покидая место, оставь его более чистым, чем оно было до твоего прихода
  • 15. • Читаете код - если стало понятно что он делает — откомментируйте его • Встретили метод без phpDoc - остановитесь, напишите его • Если нужно внести изменение в метод - сначала напишите тест, который проверяет только этот метод, а потом вносите изменения
  • 16. Главная проблема при коллективном владении кодом - сделает кто-то другой Код - это дом, в котором вам придется жить!
  • 17. От теории к практике • Общий подход • Несколько сложных случаев
  • 18. Общий подход - условия • Имеется унаследованный код • Необходимо в него внести изменения • Тестов нет. Ужас-ужас-ужас.
  • 19. Общий подход - решение Характеристические тесты — тесты, требующиеся для сохранения поведения системы Особенности: • Пишутся по готовому работающему коду (anti-TDD) • Принцип белого ящика • Что делать с найденными ошибками? Сохранять поведение + помечать на исправление.
  • 20. Алгоритм построения характеристического теста (1) Выбираем участок кода в методе (тестируем не весь метод!) (2) Пишем утверждение, которое заведомо противоречит этому участку (3) Запускаем тест — тест провален (4) Изменяем тест — тест проходит (5) Возвращаемся к шагу (1)
  • 21. Общий подход — правило применения Прежде чем использовать любой метод — напишите на него характеристические тесты
  • 23. Огромные методы • Методы имеют тенденцию расти — в них вводят новую логику • Метод начинает выполнять не одну, а много разных функций Решение: • Реорганизация - извлечение метода • Извлекайте не большие, но логически цельные фрагменты кода • Оставить только скелет — логику работы — от изначального метода
  • 24. Класс слишком крупный • Принцип единственной ответственности — единственное назначение в системе, единственная причина для изменений Извлечение класса: • Сгруппируйте сходные по именам методы — возможно они группируются в отдельный класс • Анализ скрытых методов — наличие большого кол-ва приватных и защищенных методов скорей всего означает, что требуется новый класс • Существуют ли поля, которые используются в одних методах и не используются в других? Возможно их стоит объединить в отдельный класс?
  • 25. Подробнее? Мартин Фаулер. Рефакторинг. Улучшение существующего кода
  • 26. Несколько советов из практики
  • 27. Распространение изменений 1. Возвращаемые значения — используются в вызывающей части 2. Изменение объектов, передаваемых в параметрах 3. Изменения данных, используемых в дальнейшем
  • 28. Разбиение команд и запросов • Командный метод — изменяет состояние объекта (данных) • Запросный метод — только возвращает значение Метод должен быть либо командным, либо запросным, но не тем и не другим одновременно. Запросный метод без проблем может быть использован повторно. Командный — можно получит не желательный эффект
  • 29. Правка с единственной целью • Часто изменяя один метод, возникает потребность исправить другой. • Не поддавайтесь этому искушению. • Делайте все по порядку. • Запишите что хотели менять и вернитесь к первоначальной задаче
  • 30. Код (метод) слишком большой для понимания • Распечатайте этот участок кода • Запаситесь маркерами • Если код глубоко вложенный — читайте его не опускаясь на следующий уровень, после закрытой скобки поставьте комментарий. Повторите на новом уровне вложенности. • Выделяйте группы ответственности одним цветом • Части кода, которые можно вынести в отдельный метод обведите • Вернитесь в редактор и выполните изменения в коде
  • 31. Код не понятен для его изменения • Рисуйте эскизы — отмечайте связи между объектами • Совсем не обязательно использовать формальный UML — эскиз нужен прежде всего вам! • Найдите на них объекты, на которые изменением будет оказано воздействие
  • 32. TDD и унаследованный код Как использовать практику TDD? Решение — разделите задачи: • Для нового кода — используйте TDD • Для унаследованного — пишите характеристические тесты В результате — пишем новый код независимо от старого
  • 33. Не пишите унаследованный код :) Спасибо! • l-o-n-g.livejournal.com • @v_kruchkov