Масштабируемый рефакторинг. Возвращаем контроль над кодом

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Поддерживать большие приложения сложно, а поддержка больших «неорганизованных» приложений превращается в непосильную задачу. Пришло время сделать паузу и задуматься о рефакторинге! Внесение значительных изменений в крупную и сложную кодовую базу — нетривиальная задача, которую практически невозможно успешно выполнить без рабочей команды, инструментов и планирования. Мод Лемер раскрывает все тайны рефакторинга на примере двух исследований. Вы научитесь эффективно вносить важные изменения в кодовую базу, разберетесь, как деградирует код и почему иногда это неизбежно.

Author(s): Мод Лемер
Series: Бестселлеры O’Reilly
Edition: 1
Publisher: Питер
Year: 2022

Language: Russian
Commentary: Vector PDF
Pages: 256
City: СПб.
Tags: Software Engineering; Management; Risk; Scalability; Best Practices; Refactoring; Software Requirements; Communication; Strategy; Team Management; Version Control Systems; Technical Debt; Code Degradation; Cyclomatic Complexity

Предисловие
Для кого предназначена книга
Почему я решила написать эту книгу
Структура издания
Условные обозначения
Примеры кода
Благодарности
От издательства
Часть I. Введение
Глава 1. Рефакторинг
Что такое рефакторинг
Что такое масштабируемый рефакторинг
Зачем нужен рефакторинг
Выгоды рефакторинга
Продуктивность разработчика
Обнаружение ошибок
Риски рефакторинга
Риск регрессии
«Спящие» ошибки
Неконтролируемый рост проекта
Ненужное усложнение
Когда начинать рефакторинг
Небольшой масштаб
Сложность кода мешает активному развитию
Изменение требований к продукту
Производительность
Переход к новой технологии
Когда не нужно делать рефакторинг
Для забавы или со скуки
Вы случайно проходили мимо
Чтобы обеспечить расширяемость кода
Когда не хватает времени
Первый пример рефакторинга
Упрощение условных операторов
Удаление волшебных чисел
Извлечение автономной логики
Глава 2. Как деградирует код
Почему важно понимать, что код деградирует
Изменение требований
Возможности масштабирования
Доступность
Совместимость с устройствами
Изменение среды
Внешние зависимости
Неиспользуемый код
Изменение требований к продукту
Технический долг
Обход выбранной технологии
Отсутствие привычки к систематизации
Слишком быстрое продвижение
Применение знаний
Часть II. Планирование
Глава 3. Количественная характеристика начального состояния
Почему сложно оценить последствия рефакторинга
Оценка сложности кода
Метрики Холстеда
Цикломатическая сложность
NPath-сложность
Строки кода
Метрики покрытия кода
Документация
Официальная документация
Неофициальная документация
Управление версиями
Комментарии к коммитам
Коммиты
Репутация
Составляем полную картину
Глава 4. Составление плана
Определение конечного состояния
В путешествии
На работе
Поиск кратчайшего расстояния
В путешествии
На работе
Промежуточные шаги
В путешествии
На работе
Выбор стратегии развертывания
Темный/светлый режим
Развертывание гипотетического кода
Очистка кода
Ссылка на метрики
Промежуточные этапы
Метрики промежуточных этапов
Оценка
Обсуждение планов с другими командами
Информационная открытость
Взгляд со стороны
Уточненный план
Глава 5. Получение одобрения
Причины несогласия руководителей
Руководители не пишут код
Работа руководителя оценивается иначе
Руководители понимают риски
Необходимость координировать усилия
Поиск убедительной аргументации
Как убедить коллегу
Приобретение поддержки сверху и снизу
Опора на доказательства
Жесткие меры
Заинтересованность в рефакторинге
Глава 6. Подбор команды
Выбор экспертов
Подбор специалистов
Многопрофильные специалисты
Еще немного про активных участников
Необъективность при составлении списка
Типы команд, выполняющих рефакторинг
Владельцы
Рекомендуемый подход
Группы очистки
Предложение
Метрики
Великодушие
Возможности
Обмен
Повторные попытки
Возможные результаты
Реалистичный сценарий
Что делать в худшем случае
Создание сильных команд
Часть III. Выполнение
Глава 7. Коммуникация
Внутри команды
Стендапы
Еженедельная синхронизация
Ретроспективы
Вне команды
При запуске проекта
Во время выполнения проекта
Экспериментируйте
Глава 8. Стратегии выполнения
Формирование команды
Парное программирование
Сохранение мотивации
Учет результатов
Промежуточные измерения
Обнаруженные ошибки
Удаление артефактов
Элементы, выходящие за рамки проекта
Продуктивное программирование
Прототипирование
Движение вперед маленькими шагами
Тестирование
«Глупые» вопросы
Заключение
Глава 9. Закрепление результатов рефакторинга
Содействие принятию рефакторинга
Образование
Активное образование
Пассивное образование
Закрепление
Прогрессивный линтинг
Инструменты анализа кода
Ворота и ограды
Интеграция улучшений в культуру
Часть IV. Разборы примеров
Глава 10. Избыточные схемы базы данных
Slack 101
Архитектура Slack 101
Проблемы масштабирования
Загрузка клиента Slack
Видимость файла
Упоминания
Консолидация таблиц
Сбор разрозненных запросов
Разработка стратегии миграции
Количественная оценка нашего прогресса
Попытка получить помощь
Сообщения об успехах
Заключительные шаги
Извлеченные уроки
Разработка четкого плана выполнения
Анализ истории кода
Обеспечение адекватного тестового покрытия
Сохранение мотивации
Концентрация на стратегических этапах
Выбор метрик
Ключевые моменты
Глава 11. Переход к новой базе данных
Распределение по рабочим пространствам
Миграция таблицы channels_members на Vitess
Схема шардирования
Разработка новой схемы
Разбиение запросов с оператором JOIN
Сложности развертывания
Режим Backfill
Режим Dark
Режим Light
Режим Sunset
Заключительные шаги
Извлеченные уроки
Реалистичные оценки
Коллеги, которые вам нужны
Планирование объема работ
Выбор места коммуникации
План развертывания
Основные моменты
Об авторе
Об обложке