Рефакторинг кода: когда и зачем Наталья Белозёрова веб-разработчик [email protected] Определение Рефакторинг – процесс такого изменения программной системы, при котором не меняется внешнее поведение кода, но улучшается его внутренняя структура. Это способ систематического приведения кода в порядок, при котором шансы появления новых ошибок минимальны. Цель рефакторинга модификацию ПО. – упростить понимание ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет и Применение Приступая к рефакторингу, необходимо построить набор тестов для перерабатываемой части кода. Применение рефакторинга в разработке ПО подразумевает переключение между двумя видами работы: рефакторинг и добавление нового функционала. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет Зачем нужно проводить рефакторинг? Р. улучшает композицию ПО Чем сложнее разобраться во внутреннем устройстве кода, тем труднее его сохранить и тем быстрее происходит его распад. Р. облегчает понимание ПО Код адресован не только компьютеру. Спустя некоторое время кому-то придётся его читать. Р. помогает найти ошибки После прояснения структуры программы некоторые ошибки становятся очевидными. Р. позволяет быстрее писать программы Без хорошего дизайна системы время тратится не на добавление функционала, а на поиск ошибок. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет Когда следует проводить рефакторинг? Надо не решать проводить рефакторинг, а проводить его! Правило трёх ударов Применяйте рефакторинг при добавлении новой функции Применяйте рефакторинг, если требуется исправить ошибку Применяйте рефакторинг при разборе кода ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет Как объяснить необходимость рефакторинга руководству? Руководитель действительно ориентирован на качество? Подчёркивайте аспекты качества Никак ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет Проблемные области для проведения рефакторинга Базы данных Изменение интерфейсов Проблема с опубликованными интерфейсами. Не публикуйте интерфейсы раньше срока. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет Когда рефакторинг не нужен? Когда нужно переписывать программу с нуля Явный признак: неработоспособность кода. Близость даты завершения проекта. Рост производительности, достигаемый благодаря рефакторингу, проявит себя слишком поздно. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет Bad Smells Дублирование кода Длинный метод Большой класс Длинный список параметров Расходящиеся модификации «Стрельба дробью» Завистливые функции Группы данных Одержимость элементарными типами ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет Bad Smells (продолжение) Операторы типа switch Параллельные иерархии наследования Ленивый класс Теоретическая общность Временное поле Цепочки сообщений Посредник Неуместная близость ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет Материалы, использованные при подготовке презентации Мартин Фаулер. Рефакторинг: улучшение существующего кода. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет Спасибо за внимание! Вопросы аа [email protected] ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ● СЕРВИСЫ ● ОБУЧЕНИЕ ● КОНСАЛТИНГ Россия, Азербайджан, Армения, Беларусь, Грузия, Казахстан, Кыргызстан, Таджикистан, Туркменистан, Узбекистан, Украина, Монголия, Турция, Венесуэла, Вьетнам, Иран, Египет