Реорганизация кода

редактировать
Реструктуризация существующего компьютерного кода без изменения его внешнего поведения

В компьютерном программировании и разработка программного обеспечения, рефакторинг кода - это процесс реструктуризации существующего компьютерного кода - изменение факторинга - без изменения его внешнего поведения. Рефакторинг предназначен для улучшения дизайна, структуры и / или реализации программного обеспечения (его нефункциональных атрибутов ) при сохранении его функциональности. Потенциальные преимущества рефакторинга могут включать улучшенную читаемость кода и уменьшенную сложность ; они могут улучшить ремонтопригодность исходного кода и создать более простую, понятную или более выразительную внутреннюю архитектуру или объектную модель для улучшения расширяемость. Другая потенциальная цель рефакторинга - повышение производительности; Разработчики программного обеспечения постоянно сталкиваются с проблемой создания программ, которые работают быстрее или используют меньше памяти.

Обычно при рефакторинге применяется серия стандартизированных базовых микрорефакторингов, каждый из которых (обычно) представляет собой небольшое изменение в исходном коде компьютерной программы, которое либо сохраняет поведение программного обеспечения, либо, по крайней мере, не изменяет его соответствие функциональным требованиям. Многие среды разработки предоставляют автоматизированную поддержку для выполнения механических аспектов этих базовых рефакторингов. Если все сделано правильно, рефакторинг кода может помочь разработчикам программного обеспечения обнаружить и исправить скрытые или неактивные ошибки или уязвимости в системе за счет упрощения базовой логики и устранения ненужных уровней сложности. Если все сделано неправильно, это может привести к невыполнению требования о том, что внешние функции не должны быть изменены, появлению новых ошибок или и того, и другого.

Постоянно улучшая дизайн кода, мы делаем его проще и легче работать. Это резко контрастирует с тем, что обычно происходит: небольшой рефакторинг и большое внимание, уделяемое целесообразному добавлению новых функций. Если вы приобретете гигиеническую привычку к постоянному рефакторингу, вы обнаружите, что его легче расширять и поддерживать код.

— Джошуа Кериевски, Рефакторинг для шаблонов
Содержание
  • 1 Мотивация
  • 2 Преимущества
  • 3 Проблемы
  • 4 Тестирование
  • 5 Техники
  • 6 Аппаратный рефакторинг
  • 7 История
  • 8 Автоматический рефакторинг кода
  • 9 См. Также
  • 10 Ссылки
  • 11 Дополнительная литература
  • 12 Внешние ссылки
Мотивация

Рефакторинг обычно мотивируется обнаружением запаха кода. Например, рассматриваемый метод может быть очень длинным или может быть почти дубликатом другого ближайшего метода. После обнаружения такие проблемы можно решить путем рефакторинга исходного кода или преобразования его в новую форму, которая ведет себя так же, как и раньше, но больше не «пахнет».

Для длинной процедуры можно выделить одну или несколько более мелких подпрограмм; или для повторяющихся подпрограмм дублирование может быть удалено и заменено одной общей функцией. Невыполнение рефакторинга может привести к накоплению технического долга ; с другой стороны, рефакторинг - одно из основных средств погашения технического долга.

Выгоды

Есть две основные категории преимуществ рефакторинга.

  1. Ремонтопригодность. Ошибки исправлять легче, потому что исходный код легко читать, а намерения его автора легко понять. Этого можно достичь, сократив большие монолитные подпрограммы до набора индивидуально кратких, хорошо названных одноцелевых методов. Этого можно достичь, переместив метод в более подходящий класс или удалив вводящие в заблуждение комментарии.
  2. Расширяемость. Легче расширить возможности приложения, если оно использует узнаваемые шаблоны проектирования и обеспечивает некоторую гибкость там, где их раньше не было.

Разработка производительности может устранить неэффективность программ, известную как раздувание программного обеспечения, возникающие из традиционных стратегий разработки программного обеспечения, которые направлены на минимизацию времени разработки приложения, а не времени, необходимого для его выполнения. Разработка производительности также может адаптировать программное обеспечение к оборудованию, на котором оно работает, например, для использования преимуществ параллельных процессоров и векторных модулей.

Проблемы

Рефакторинг требует извлечения структуры программной системы, моделей данных и т. Д. и зависимости внутри приложения, чтобы получить знания о существующей программной системе. Смена команд подразумевает отсутствие или неточное знание текущего состояния системы и проектных решений, принятых уходящими разработчиками. Дальнейшие действия по рефакторингу кода могут потребовать дополнительных усилий для восстановления этих знаний. Действия рефакторинга приводят к изменениям архитектуры, которые ухудшают структурную архитектуру программной системы. Такое ухудшение влияет на архитектурные свойства, такие как ремонтопригодность и понятность, что может привести к полной переработке программных систем.

Действия по рефакторингу кода защищены с помощью программного обеспечения при использовании инструментов и технических средств, предоставляющих данные об алгоритмах и последовательностях выполнения кода. Обеспечение понятного формата для внутреннего состояния структуры программной системы, моделей данных и внутрикомпонентных зависимостей является важным элементом для формирования высокоуровневого понимания, а затем уточненных представлений о том, что и как необходимо изменить.

Тестирование

Автоматические модульные тесты должны быть настроены до рефакторинга, чтобы гарантировать, что процедуры по-прежнему работают должным образом. Модульные тесты могут обеспечить стабильность даже крупным рефакторам, если они выполняются с одной атомарной фиксацией . Распространенной стратегией, позволяющей безопасным и атомарным рефакторам, охватывающим несколько проектов, является хранение всех проектов в едином репозитории, известном как monorepo.

. При модульном тестировании рефакторинг представляет собой итеративный цикл выполнение небольшого преобразования программы, проверка его правильности и выполнение еще одного небольшого преобразования. Если в какой-то момент тест не проходит, последнее небольшое изменение отменяется и повторяется другим способом. Пройдя множество маленьких шагов, программа переместится с того места, где она была, к тому месту, где вы хотите. Чтобы этот итеративный процесс был практичным, тесты должны выполняться очень быстро, иначе программисту придется тратить большую часть своего времени на ожидание завершения тестов. Сторонники экстремального программирования и другого гибкой разработки программного обеспечения описывают эту деятельность как неотъемлемую часть цикла разработки программного обеспечения.

Методы

Вот несколько примеров микрорефакторинга; некоторые из них могут относиться только к определенным языкам или типам языков. Более длинный список можно найти в книге и на сайте Мартина Фаулера по рефакторингу. Многие среды разработки обеспечивают автоматическую поддержку этих микрорефакторингов. Например, программист может щелкнуть имя переменной и затем выбрать рефакторинг «Инкапсулировать поле» в контекстном меню . Затем IDE запрашивает дополнительные сведения, обычно с разумными значениями по умолчанию и предварительным просмотром изменений кода. После подтверждения со стороны программиста он внесет необходимые изменения во весь код.

  • Методы, позволяющие лучше понять
    • График зависимости программы - явное представление зависимостей данных и управления
    • График зависимости системы - представление вызовов процедур между PDG
    • Программный интеллект - обратное проектирование исходного состояния для понимания существующих зависимостей внутри приложения
  • Методы, которые позволяют использовать больше абстракции
    • Инкапсулировать поле - принудительно использовать код для доступа к полю с помощью методов получения и установки
    • Обобщить тип - создать более общие типы, чтобы обеспечить большее совместное использование кода
    • Заменить код проверки типов на состояние / стратегию
    • Заменить условное выражение на полиморфизм
  • Методы для разбиение кода на более логические части
    • Компонентизация разбивает код на многоразовые семантические единицы, которые представляют четкие, четко определенные, простые в использовании интерфейсы.
    • Класс извлечения перемещает часть кода из существующий класс в новый класс.
    • Извлечь метод, чтобы превратить часть из более крупного метода в новый метод. Разбивая код на более мелкие части, он становится более понятным. Это также применимо к функциям.
  • Методы улучшения имен и местоположения кода
    • Переместить метод или поле перемещения - перейти к более подходящему классу или исходному файлу
    • Переименовать метод или поле переименования - изменение имени на новое, которое лучше раскрывает его цель
    • Подтягивание - в объектно-ориентированном программировании (ООП) перейти к суперкласс
    • Нажать вниз - в ООП перейти к подклассу
  • Автоматическое обнаружение клонов
Аппаратный рефакторинг

Хотя термин рефакторинг первоначально относился исключительно к рефакторингу программного кода, в последние годы код, написанный на языках описания оборудования (HDL), также подвергся рефакторингу. Термин аппаратный рефакторинг используется как сокращенный термин для рефакторинга кода на языках описания оборудования. Поскольку большинство инженеров по аппаратному обеспечению не считают HDL языками программирования, рефакторинг оборудования следует рассматривать как отдельную область от традиционного рефакторинга кода.

Автоматический рефакторинг описаний аналогового оборудования (в VHDL-AMS ) был предложен Зенгом и Хусом. В их подходе рефакторинг сохраняет смоделированное поведение конструкции оборудования. Нефункциональное измерение, которое улучшается, заключается в том, что реорганизованный код может обрабатываться стандартными инструментами синтеза, а исходный код - нет. Рефакторинг цифровых HDL, хотя и ручной рефакторинг, также исследовал сотрудник Synopsys Майк Китинг. Его цель - облегчить понимание сложных систем, что повысит продуктивность дизайнеров.

История

Хотя рефакторинг кода неофициально проводился на протяжении десятилетий, Уильям Грисволд в 1991 г. Диссертация - одна из первых крупных научных работ по рефакторингу функциональных и процедурных программ, за которой следует диссертация Уильяма Опдайка 1992 года по рефакторингу объектно-ориентированных программ, хотя вся теория и механизмы уже давно доступны в виде программная трансформация систем. Все эти ресурсы предоставляют каталог общих методов рефакторинга; в методе рефакторинга есть описание того, как применять метод, и индикаторы того, когда вы должны (или не должны) применять этот метод.

Книга Мартина Фаулера «Рефакторинг: улучшение дизайна существующего кода» является каноническим справочником.

Первое известное использование термина «рефакторинг» в опубликованной литературе было в сентябре 1990 г. статья Уильяма Опдайка и Ральфа Джонсона. Доктор философии Гризвольда. кандидатскую диссертацию Опдыка. В диссертации, опубликованной в 1992 г., также использовался этот термин.

Термины «факторинг» и «факторинг» использовались таким образом в сообществе Forth по крайней мере с начала 1980-х годов. Шестая глава книги (1984) посвящена этой теме.

В экстремальном программировании метод рефакторинга Extract Method имеет по существу то же значение, что и факторинг в Forth; для разбивки «слова» (или функции ) на более мелкие, более простые в обслуживании функции.

Рефакторинг также может быть реконструирован posthoc для получения кратких описаний сложных изменений программного обеспечения, записанных в программных репозиториях, таких как CVS или SVN.

Автоматический рефакторинг кода

Многие программы и IDE поддерживают автоматический рефакторинг. Код приложения можно рефакторировать так же, как и тестировать код. Вот список некоторых из этих редакторов, или так называемых браузеров рефакторинга.

См. Также
Ссылки
Дополнительная литература
  • Уэйк, Уильям К. (2003). Рефакторинг Workbook. Эддисон-Уэсли. ISBN 978-0-321-10929-3.
  • Mens, T.; Tourwe, T. (нет данных). «Обзор рефакторинга программного обеспечения». IEEE Transactions по разработке программного обеспечения. 30 (2): 126–139. doi : 10.1109 / tse.2004.1265817. ISSN 0098-5589. S2CID 206778272.
  • Feathers, Майкл С. (2004). Эффективная работа с устаревшим кодом. Прентис Холл. ISBN 978-0-13-117705-5.
  • Кериевский, Джошуа (2004). Рефакторинг под шаблоны. Эддисон-Уэсли. ISBN 978-0-321-21335-8.
  • Арсеновский, Даниел (2008). Профессиональный рефакторинг в Visual Basic. Wrox. ISBN 978-0-470-17979-6.
  • Арсеновский, Даниел (2009). Профессиональный рефакторинг в C # и ASP.NET. Wrox. ISBN 978-0-470-43452-9.
  • Ричи, Питер (2010). Рефакторинг с помощью Visual Studio 2010. Packt. ISBN 978-1-84968-010-3.
Внешние ссылки
Последняя правка сделана 2021-05-15 13:41:22
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте