Movatterモバイル変換


[0]ホーム

URL:


Перейти до вмісту
Вікіпедія
Пошук

Рефакторинг

Матеріал з Вікіпедії — вільної енциклопедії.

Рефакторинг (англ.refactoring) — процес редагуванняпрограмного коду, внутрішньої структурипрограмного забезпечення для полегшення розуміння коду та внесення подальших правок без зміни зовнішньої поведінки самої системи[1]. Слово «рефакторинг» пішло від терміна«факторинг» вструктурному програмуванні; цей термін означавдекомпозицію програми на максимально автономні та елементарні частини.

Причини рефакторингу

[ред. |ред. код]
Ця статтямістить текст, що не відповідаєенциклопедичному стилю. Будь ласка, допоможітьудосконалити цю статтю, погодивши стиль викладу зістилістичними правилами Вікіпедії. Можливо,сторінка обговорення містить зауваження щодо потрібних змін.(липень 2016)

Існує міф про те, що при правильно організованому процесі розробки продукту, треба методично дотримуватися поставлених вимог, визначати однозначний, стабільний список обов’язків програми, і при цьому програмний код може бути написаний майже лінійно: від початку до закінчення, кожна ділянка — написана, відтестована і забута один раз. Посилаючись на цей міф, єдиний випадок, коли наявний код може змінюватись, — це в процесі підтримки і адміністрування програми, коли початкова версія продукту уже здана замовнику.

Однак реальність є дещо інакшою. Насправді код еволюціонує в процесі розробки продукту. Як правило, кодування, дебагінг (відлагодження) тамодульне тестування займають в середньому 30–65% зусиль від загального часу існування проекту (залежно від величини проекту). Навіть на добре організованих проектах вимоги змінюються в середньому на 1–4% за місяць, що неминуче спричиняє зміни в програмному коді — як дрібні, так і досить серйозні.[2]

Також, на відміну від старіших методик розробки програмних продуктів, де основний акцент ставився на мінімізації змін до коду, сучасна методика вбачає великий потенціал у внесенні змін. Вона є більш сфокусованою на коді (code-centered) і під час розробки можна очікувати, що код буде вдосконалюватися більше, ніж зазвичай.

Підстави для проведення рефакторингу

[ред. |ред. код]
  1. Код дублюєтьсяCopy And Paste is a Design Error»).
    Це нерідко призводить до необхідності вносити однакові зміни до кількох скопійованих ділянок коду, що не відповідає принципам«DRY» (Don't Repeat Yourself).
  2. Підпрограма занадто довга.
    Хоча питання, яку максимальну довжину може мати підпрограма, є досить суперечливим, однак загальноприйнятим неофіційним стандартом є написання підпрограм довжиною не більше, ніж один екран коду.
  3. Тіло циклу занадто довге або рівень вкладеності циклів занадто великий.
  4. Клас має багато обов'язків, слабко пов'язаних між собою, що порушуєпринцип єдиного обов'язку (Single responsibility principle).
    У такому разі краще розділити клас на кілька атомарних.
  5. Інтерфейс класу не забезпечує достатній рівень абстракції.
  6. Назва класу чиметоду недостатньо точно відповідає його змісту.
  7. Пов'язані дані, які використовуються разом, не організовані в клас.
  8. Функція має занадто багато параметрів.
  9. У ланцюжку виклику методів передається багато зайвих даних.
  10. Потрібно одночасно змінювати кілька паралельних ієрархій класів.
    Для вирішення цієї проблеми можна, наприклад, скористатисяшаблоном «Міст».
  11. Клас не виконує ніякої роботи самостійно, а тільки передоручає її іншим класам.
  12. Клас має занадто багато відкритих (public) членів.
  13. Нестатичний клас складається тільки з даних або тільки з методів.
  14. Занадто широке застосування глобальних змінних.

Прийоми рефакторингу

[ред. |ред. код]
  1. Прийоми, що дозволяють розбити код на дрібніші, зрозуміліші частини.
  2. Прийоми, що дозволяють забезпечити додатковуабстракцію.
  3. Прийоми, що змінюють назви членів та їх розташування.
    • Переміщення методу (Move Method) або переміщення поля в інші класи або файли коду.
    • Перейменування члена (Rename) — зміна назви, з автоматичною заміною всіх посилань на стару назву в коді.
    • Переміщення члену до базового/дочірнього класу (Pull Up/Push Down).
    • Розщеплення змінної

Автоматизований рефакторинг

[ред. |ред. код]

Багатоінтегрованих середовищ розробки містять вбудовані механізми рефакторингу коду. Крім інтегрованої функціональності, існує також багато продуктів сторонніх виробників, які, як правило, реалізовані у вигляді додатків (plugins) до відповідного IDE. Приклади таких пакетів:

ПакетМоваСередовище
Microsoft Visual StudioC#Microsoft Visual Studio (вбудований)
Java Development TooklitJavaEclipse (вбудований)
IntelliJ IDEAJavaIntelliJ IDEA (вбудований)
NetBeansJava,PHPNetBeans (вбудований)
Visual AssistC#,C++,VB,VB.NETMicrosoft Visual Studio
PhotranFortranEclipse

Примітки

[ред. |ред. код]
  1. Martin Fowler, Refactoring: Improving the Design of Existing Code(Addison-Wesley, 1999)
  2. Steve McConnell. Code Complete, 2nd Edition (Redmond, WA: Microsoft Press, 2004).

Посилання

[ред. |ред. код]

Див. також

[ред. |ред. код]


Галузі
Поняття
Напрямки
Моделі
Моделі розробки
Інші моделі
Мови моделювання
Особистості
Пов'язані галузі
PROGЦе незавершена стаття пропрограмування.
Ви можетедопомогти проєкту,виправивши або дописавши її.
Отримано зhttps://uk.wikipedia.org/w/index.php?title=Рефакторинг&oldid=44268624
Категорії:
Приховані категорії:

[8]ページ先頭

©2009-2025 Movatter.jp