1. Постановка проблем
- Знакомство и сбор проблем участников
- Обзор тренинга
- Разбивка на команды и пары
2. Практика локализации и обоснования проблем в коде: итерация 1
- Предусловие:
- Кодовая база в системе контроля версий - Критерий приемки:
- Код покрыт тестами >30%
- Выписаны файндинги по унаследованному коду
- Обоснована природа проблем
3. Как рефакторинг обеспечивает внутреннее качество продукта
- Какие знаете внутренние атрибуты качества?
- Какие важные в Вашем проекте?
- Отобразите найденные файндинги на атрибуты качества
4. Типовые проблемы кода (code smells) и их системы для установки общего словаря
- Какие можете выделить типовые конкретные проблемы в коде?
- Какие системы проблем знаете?
5. Как влияют типовые проблемы кода (code smells) на внутреннее качество продукта
- Предусловие: дана система smells Фаулера
- Для каждого smell:
- Опишите симптомы
- Почему это проблема? Обоснование в терминах атрибутов качества.
- Когда это не будет проблемой?
6. Практика локализации и обоснования проблем в коде с использованием вспомогательных утилит: итерация 2
- Предусловие:
- У каждой команды своя ветка от унаследованного кода
- По веткам команд настроена система CI
- По веткам команд настроен Sonar с профилем PMD + CheckStyle + FindBugs - Критерий приемки:
- Код покрыт тестами >50%
- Выписаны файндинги в унаследованном коде по словарю smells
- Выписаны файндинги в унаследованном коде по словарю Sonar с профилем PMD + CheckStyle + FindBugs
- Обоснована природа проблем
7. Как не позволить техническому долгу загнать проект в «точку Ж»
- Как Вы сформулируете понятие технического долга?
- Когда проводить рефакторинг?
- Что именно рефакторить?
- Как обосновать ресурсному менеджменту необходимость рефакторинга?
8. Live coding demo: использование IDE для ускорения и повышения качества рефакторингов
9. Практика рефакторинга малыми шагами для обеспечения внутреннего качества: итерация 3
- Предусловие:
- Код покрыт тестами >50% по ветвлениям
- Файндинги обоснованы и приоритезированы через атрибуты качества - Критерий приемки:
- Исправлены ключевые файндинги
- Изменилась к лучшему статистика в Sonar - Каков был размер изменений?
- Какие именно изменения проводились (в терминах ООП)?
10. Как сделать рефакторинг осмысленным и направить его на повышение внутреннего качества, а не делать ненужную работу
- Опишите последний рефакторинг
- Обоснуйте, почему он полезен
11. Системы приемов рефакторинга для установки общего словаря
- Обобщите операции, сделанные на практике в терминах ООП
- Как эти рефакторинги меняют метрики дизайна и кода?
12. Конкретные виды рефакторинга и как их правильно проводить
- Предусловие: дана система рефакторингов Фаулера
- Для ключевых рефакторингов:
- Опишите действие
- Как меняются метрики дизайна?
- Как меняются атрибута качества?
13. Практика рефакторинга для обеспечения внутреннего качества: итерация 4
- Критерий приемки:
- Исправлены ключевые файндинги
- Изменилась к лучшему статистика в Sonar
- Рефакторинги обоснованы - Какие рефакторинги проведены?
- Как изменились атрибуты качества?
14. Практика рефакторинга для обеспечения внутреннего качества: итерация 5
- Действительно ли код стал поддерживаемым?
- Общие проблемы, которые остались.
15. Как проводить рефакторинг проблемного, нетестопригодного унаследованного кода с минимальными затратами
- Обобщите проблемы, возникшие при рефакторинге унаследованного кода
- Предложите шаблоны работы с унаследованным кодом