Я великий віруючий у правило скаутського хлопчика :
Завжди перевіряйте модуль чистіше, ніж коли ви його перевіряли. "Незалежно від того, хто був оригінальним автором, що робити, якщо ми завжди докладали певних зусиль, не важливих, як малих, щоб удосконалити модуль. Який був би результат? Я думаю, якщо ми всі дотримувались цього простого правила, ми побачимо кінець невпинного погіршення наших програмних систем. Натомість наші системи поступово покращуватимуться та покращуватимуться, коли вони розвиваються. Ми також побачимо команди, які піклуються про систему в цілому, а не ніж просто люди, які піклуються про свою маленьку частину.
Я також дуже вірую у споріднену ідею опортуністичного рефакторингу :
Хоча є місця для певних запланованих зусиль по рефакторингу, я вважаю за краще заохочувати рефакторинг як опортуністичну діяльність, що робиться коли і де потрібно, коли код очищається - ким завгодно. Це означає, що в будь-який момент хтось бачить якийсь код, який не так зрозумілий, як це має бути, він повинен скористатися можливістю виправити його тут же, а потім - або принаймні протягом декількох хвилин
Зокрема, зверніть увагу на такий уривок із статті про рефакторинг:
Я з обережністю ставляться до будь-яких практик розвитку, які спричиняють тертя для опортуністичного рефакторингу ... Я відчуваю, що більшість команд недостатньо рефакторингують, тому важливо звертати увагу на все, що заважає людям робити це. Щоб уникнути цього, будьте в курсі будь-якого часу, коли ви відчуєте, що не бажаєте робити невеликий рефакторинг, той, на який ви впевнені, займе лише хвилину-дві. Будь-який такий бар’єр - це запах, який повинен спонукати до розмови. Тож зробіть зауваження щодо розгубленості та піднесіть це команді. Принаймні, це слід обговорити під час наступної ретроспективи.
Там, де я працюю, є одна практика розробки, яка викликає сильне тертя - Code Review (CR). Щоразу, коли я змінюю що-небудь, що не входить до мого "доручення", мене рецензенти докоряють, що я ускладнюю перегляд змін. Особливо це стосується рефакторингу, оскільки це робить "порівняння за рядком" різним порівнянням. Цей підхід є стандартом тут, що означає умовно-патологічний рефакторинг рідко робиться, і лише "плановий" рефакторинг (як правило, занадто мало, занадто пізно) має місце, якщо він взагалі є.
Я стверджую, що переваги того варті, і що 3 рецензенти працюватимуть трохи важче (насправді зрозуміти код до і після, а не дивитись на вузьку сферу зміни рядків - сам огляд був би кращим завдяки цьому ), так що наступні 100 розробників, які читають і підтримують код, отримають користь. Коли я презентую цей аргумент своїм рецензентам, вони кажуть, що вони не мають проблем з моїм рефакторингом, якщо це не в одній CR. Однак я стверджую, що це міф:
(1) У більшості випадків ви усвідомлюєте, що і як ви хочете зробити рефактор, коли ви знаходитесь в середині вашого завдання. Як стверджує Мартін Фаулер:
Коли ви додаєте функціональність, ви розумієте, що якийсь доданий вами код містить деяке дублювання з деяким наявним кодом, тому вам потрібно перефактурувати існуючий код, щоб очистити речі. краще, якщо взаємодія з існуючими класами було змінено. Скористайтеся можливістю зробити це, перш ніж вважати себе зробленим.
(2) Ніхто не збирається прихильно дивитись на те, щоб випустити "рефакторинг" CR, які ви не мали робити. У CR є певні накладні витрати, і ваш менеджер не хоче, щоб ви "витрачали час" на рефакторинг. Якщо це пов'язано зі змінами, які ви маєте зробити, ця проблема зводиться до мінімуму.
Проблема посилюється Resharper, оскільки кожен новий файл, який я додаю до зміни (і я не можу заздалегідь знати, які саме файли в кінцевому підсумку будуть змінені), зазвичай заповнений помилками та пропозиціями - більшість з яких є на місці та повністю заслуговують фіксація.
Кінцевим результатом є те, що я бачу жахливий код, і просто залишаю його там. Як не дивно, я відчуваю, що виправлення такого коду не тільки не покращить моє рейтинги, але насправді знизить їх і зобразить мене як "нефокусованого" хлопця, який витрачає час на виправлення речей, про які ніхто не переймається, замість того, щоб робити свою роботу. Мені це погано, тому що я справді зневажаю поганий код і не витримую його перегляду, не кажучи вже про те, щоб викликати його з моїх методів!
Будь-які думки про те, як я можу виправити цю ситуацію?
your manager doesn't want you to "waste your time" on refactoring