Чи слід переробляти наявний код, який не порушений в проекті, орієнтованому на нові функції?


11

Враховуючи невеликий проект, спрямований на додавання нової функціональності в додаток, внесені зміни стосуються деякого існуючого коду, включаючи оновлення їх у певних областях. Під час впровадження я знайшов деякі з цих кодів, які були оновлені і мають кандидатів на рефакторинг.

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


2
Чи є у вас тести, які дозволяють вам зробити потрібний рефакторинг?

2
Ви відповіли на це самі, клієнти не будуть піклуватися про збереження коду, якщо сам код не доставить. Вони дбають про гроші і час і приймають якість як даність. Якість, час і вартість безпосередньо пов'язані з технічною заборгованістю, але вони також відносяться до того, що вони готові прийняти. Якщо ви НЕ включаєте рефакторинг під час поїздки, тоді ремонтоздатність коду погіршиться, а технічна заборгованість зросте без змін.
maple_shaft

Відповіді:


17

Абсолютно.

Реконструкція повинна здійснюватися на робочому та "прохідному" проекті. Коли всі ваші тести (на рівні блоку, системи та рівня приймання) пройдуть, ви знаєте, що ваш продукт відповідає вимогам. Після рефактора ви можете продовжувати підтверджувати, що всі тести продовжують проходити. Якщо якийсь тест починає виходити з ладу, значить, ви щось зробили не так і потрібно це виправити. Якщо у вас невдалі тести, слід виправити їх перед рефакторингом, щоб ви завжди могли переконатися, що рефакторинг не змінює функціональність системи.

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

Як в коментарях вказує Джоел Етертон , вам потрібно керувати сферою рефакторингу. Зосередьтеся на рефакторингу частин системи, до яких незабаром будете додавати функції, виконуючи рефактори, які полегшать роботу або додадуть нові функції. Використання статичного аналізу, інструментів метрики та огляду коду може допомогти вам визначити сфери, які є найбільш критичними. Ви не хочете пропускати терміни, оскільки ви займалися рефакторингом - вам все одно потрібно продовжувати додавати вартість клієнту.

Ви згадуєте, що клієнт не бачить цінності в рефакторингу. Зазвичай клієнт дбає не про якість коду, а про товар. Реконструкція дозволить вам простіше підтримувати високу якість продукції та продовжувати доставку товару, що відповідає мінливим потребам замовника. Спробуйте домовитись про час рефакторингу у свій графік (клієнт хоче X функцій за Y дні, спробуйте дізнатися, чи не можете ви отримати Y + Z днів або XN функції, щоб ви могли витратити час на розробку, рефакторинг та реалізацію), якщо ви може.


1
+1 особливо для абзацу про значення рефакторингу для клієнтів.
Мар'ян Венема

1
Якщо припустити, що у вас є гарний набір одиничних тестів, щоб підтвердити рефакторинг, це не змінює спостережувану поведінку. Враховуючи вибір тестів на рефракцію або блок. Спочатку додайте одиничні тести.
Мартін Йорк

5
@Thomas Owens: +1 Я погоджуюся, але я також додам ноту обережності щодо рефакторингу. Для рефакторингу дуже легко запустити каскад рефакторингу, який може роздути фактично необхідні роботи та призвести до збільшення термінів збільшення.
Джоел Етертон

@Joel Це хороший момент. Вам потрібно тримати обмежений обсяг рефакторингу, щоб скласти терміни.
Томас Оуенс

3

Розгляньте відповіді на запитання нижче, тоді вам було б легко прийняти рішення. Мудрість "не виправляй її, якщо вона не порушена" є спокусливою, але не завжди відповідає професійній роботі.

0-Чи є скарги клієнта на цей код?

1-чи це необхідно для функціональності програми

2 - Чи шкідливий поточний код?

3 - Чи варта вартість змін?

4-Чи можете ви дозволити собі витрати?

5 - Це найкраще використання ваших навичок в організації

6-Чи потребують ваші зміни, щоб ваш користувач перевстановив нову зміну - чи можете ви обґрунтувати це для замовника?

7-Чи можете ви терпіти ризик поганого виправлення?

8 - Чи впливає зміна на інший код поза вашим проектом?

9 - Це продукт, що розвивається, або стабільний продукт? Якщо вона розвивається, чи можете ви включити зміни до наступного випуску?


Ви читали мою думку! Я думав саме про те відоме правило "не виправляй його, якщо воно не порушено", щоб виправдати відкладення рефакторингу!
Карлос Хайме К. Де Леон

3

Рефактор незабаром, рефактор часто.

Якщо ви можете собі це дозволити (час, гроші тощо), ви повинні це зробити.

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

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

Не забувайте, що за допомогою системи контролю версій ви можете фактично перенести ваш проект у нову гілку, так що ви не вплинете на свій поточний код.


2

Якщо рефакторинг потрібен для впровадження нової функціональності, то це слід зробити і врахувати як частину нової розробки.

Дублювання коду обійдеться вам (як вам особисто, так і компанії) в довгостроковій перспективі, оскільки зміни будуть внесені в одне місце, а не в інше.

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

Якщо рефакторинг - це просто «приємно робити» - тобто це не в коді, на який безпосередньо впливає нова функціональність, то я б залишив його в спокої. Ви вносите зміну заради змін.


0

Здається, що рефакторинг коду полегшить додавання нових функцій; це теорія. Включіть це до сфери нових функцій. Ви, швидше за все, таким чином купуєте бізнес-користувачів. У цьому випадку ви повинні мати змогу зробити переконливу аргументацію та обґрунтувати час на рефакторинг. Сподіваємось, вони зрозуміють, що це необхідна частина процесу розробки та матимуть менше заперечень. Ви не завжди зможете продемонструвати цю пряму користь.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.