Це гарна ідея запланувати регулярний час для очищення коду? [зачинено]


42

Я керую невеликою командою розробників. Кожен так часто ми вирішуємо, що ми збираємось витратити день чи два, щоб очистити наш код.

Було б гарною ідеєю запланувати регулярний час, скажімо, 1 тиждень кожні 2 місяці, щоб просто очистити нашу кодову базу?


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

4
Було б краще запланувати регулярний час для перегляду коду
l46kok

1
Що ви маєте на увазі, коли говорите «очистіть»? Це вдосконалення коду чи поводження з усіма тегами FIXME та TODO чи отримання більшої продуктивності швидко написаного коду? Або щось інше? Будь-яке з них можна кваліфікувати як прибирання, але я б додав різні пріоритети до кожного з них.
paul

Ще один "закритий як занадто популярний", так, хлопці?
MGOwen

Відповіді:


100

Немає.

Виправте це, працюючи над ним:

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

2
Мої гроші на цю відповідь ..
Soner Gönül

2
+1 за відмінну відповідь. Ви не закінчите "позолоченням" коду, який ніколи не використовується, оскільки змінилися вимоги
Md Mahbubur Rahman

8
На ідеальний проект із ідеальним управлінням та командою рівномірно великих розробників ця відповідь буде стояти. На жаль, я ніколи не бачив і не чув такого проекту за свої десять років у цій галузі.
Бен-

3
Спробуйте це зробити, але коли ви не можете (а це станеться через тиск часу або через те, що ви просто не знаєте, як це зробити правильно), створіть квиток у вашій системі квитків. Таким чином, ви можете сподіватися повернутися до нього, поки проблема все ще свіжа у вашій свідомості, і не тільки тоді, коли вона врешті-решт почне викликати проблеми.
Саріен

1
Я думаю, що це добре порадити, але не стосується поставленого питання. Haivng керував командою з жахливою базою кодів (це було жахливо, перш ніж я туди потрапив). Час був дуже добре витрачений на вирішення рефакторингу та очищення конкретних функцій. Ми називали їх інфраструктурними проектами і вкладали їх у кожен спринт, який могли. Часто ці речі були предметами, які не були частиною іншої зміни, але були речами, які команда визначила проблемними. Ми робили квартальні ретроспективи і регулярно оновлювали цей список.
Білл Ліпер

21

Моя особиста думка: Це абсолютно потрібно для 90% проектів.

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

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

Зазвичай існує два типи питань, що створюються таким чином:

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

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


1
Я не розумію, що збільшення кількості великих поштовхів є спритною проблемою.
JeffO

2
@JeffO Ні, це не гнучка проблема. Це проблема управління. З огляду на те, що я бачив, компанії, на яких сильно впливають продажі, як правило, тяжіють до агресивних циклів випуску та великих наборів функцій. Агільні стратегії, як правило, сподобаються цим компаніям (незалежно від того, чи дійсно вони слідують стратегіям чи ні). Хоча мені подобається гнучка розробка, мій досвід показав, що коли компанія називає себе "спритним", це зазвичай означає, що я можу розраховувати на те, що у базі коду з'явиться достатня кількість технічної заборгованості.
pswg

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

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

На мій досвід, недосвідчені команди, починаючи з scrum, не дотримуючись хороших принципів кодування (наприклад, XP), іноді можуть бути занадто зосереджені на функціональності (історії). Натомість вони повинні сказати, що історія не робиться до тих пір, поки код не стане «хорошим», але не у всіх є достатня основа для цього в термін, що настає. І з Agile у вас, як правило, більше термінів за коротший час, тому я пов'язую це також з Agile методами, тоді як я прекрасно знаю, що вони не є причиною.
markijbema

11

У мене розробники прибирають свій код до реєстрації (Subversion) або об'єднання з основною галуззю розробки (Git).

У мене вони роблять наступне:

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

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

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


Просто з цікавості: навіщо ви використовуєте два різних VCS?
Ехорн

2
Була / є міграційна фаза. Зараз ми перемістили більшість сховищ SVN, я згадав обидва для певного контексту.
Сем

Це я і роблю. Очистіть код перед реєстрацією та поверніть його, якщо я повернусь до коду, щоб покращити функціональність.
Barfieldmv

1
Це не вирішить тих проблемних проблем, які ховаються в районах, які можуть не входити до запиту про функції від команди продуктів.
Білл Ліпер

9

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

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


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

2
@BillLeeper - enh. Коли я чую "регулярний час", це означає, що є деякий регулярний інтервал для роботи з прибирання. ІМО, це неправильно - весь час - це правильний час для роботи з прибирання.
Теластин

1
Хороший момент, я згоден, що звичайний час працює не так добре. Занадто часто пріоритети призводять до його скасування тощо.
Білл Ліпер

4

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

1 тиждень кожні 2 місяці, безумовно, недостатньо часто. Це говорить про більшість інших відповідей, які відповіли «Ні» на ваше запитання. Суть більшості цих відповідей полягає в тому, що якщо ви будете чекати занадто довго, ви більше не будете зв’язуватися з кодом, і це зазвичай займає набагато більше часу, щоб виправити / очистити / рефактор.


Ми робимо для цього «технічний борг вівторок». Її половина шляху кинула ізраїльський робочий тиждень і дозволяє нам зробити крок назад для вирішення питань
Захарій К

1

Це не так зрозуміло, якщо ви мали на увазі додаткову вправу чистого коду раз у раз. У цьому сенсі так. Те, що ми коли-небудь дотримуємось, завжди відбувається деградація.

Не слід використовувати це як привід не робити правильних дій [Застосування принципів SOLID, відповідних тестових одиниць, перевірок тощо].


1

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

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

  • дбайливі однолітки CRing
  • написання одиничних тестів разом із самим кодом
  • прийняття правил кодування
  • за допомогою автоматичних форматів та лінерів (але YMMV)
  • тощо.

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


1

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

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

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

Кожен предмет може здатися не великим, але так само, як і весь борг, він відображається.


1

Ідеальна відповідь «Ні», оскільки ви вживаєте заходів, необхідних для уникнення необхідності (прибирайте, як ви йдете разом з кількох випадків, які вже були зазначені).

Це може бути метою, врешті-решт, але у вас може бути команда, яка далеко не реалізує це на практиці.

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

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

Врешті-решт, вам не потрібно було встановлювати час.

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


-1

Ні, ви повинні робити це під час кодування. Це називається рефакторинг, якщо ви використовуєте TDD. Проблема, коли ви чекаєте місяць-два, щоб виправити та очистити код, полягає в тому, що ви можете змінити поведінку коду, оскільки ви не пам’ятаєте кожного фрагмента коду.

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


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