Які хороші підходи до прибирання старих проектів?


11

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


З якими рішеннями ви тоді не згодні?

Відповіді:


21

У вас є три основні варіанти:

  1. Якщо додаток дуже маленький і справжній безлад , запуск знову може стати найкращим вибором.

  2. Рефактор .

  3. Живіть з безладом і рубайте в додаткових функціях.

Зазвичай варіант (2) - найкраща ставка.

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

  1. Який час / бюджет доступний?
  2. Скільки змін ви передбачаєте в майбутньому?
  3. Хто ще побачить код? (тобто, брудний код пошкодить вашу репутацію?)
  4. Чи очікується, щоб хтось підтримував код?
  5. Які інструменти рефакторингу доступні, щоб допомогти вам?
  6. Який у вас досвід рефакторингу?
  7. Який досвід ви отримаєте від рефакторингу?
  8. Які види рефакторингу принесуть вам найбільшу користь?
  9. Які автоматизовані тести вже існують? Вам потрібно писати?
  10. Скільки знадобиться ручне тестування?
  11. Як ви будете почувати себе, якщо залишите код таким, який він є?

На мій досвід, дуже легко потрапити в належну каламутність під час сеансу рефакторингу. Найважливіші уроки, які я навчився:

  1. Робіть по одній справі.
  2. Робіть невеликі кроки.
  3. Скористайтеся своїм джерелом контролю (заходьте часто + включайте коментарі).
  4. Скористайтеся інструментами автоматичного рефакторингу.
  5. Знайте IDE.

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

2
Абсолютно. Щодо амбітних перезаписів / дизайнів, то я вже не один раз помилявся над цим. Зараз я намагаюся робити більш дрібні кроки. Цю пропозицію я додав до своєї відповіді.
Крамій

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

1
@TMN: В ідеалі, так. Однак вам не завжди потрібен автоматизований тест. (1) Якщо код розроблений без автоматизованих тестів, то, можливо, буде непросто / можливо встановити ретро-тести, поки ви вже не зробили деякий рефакторинг (2) Писати тести перед тим, як внести тривіальні, локалізовані зміни, може бути дорого. (3) Автоматизовані інструменти рефакторингу + функції IDE можуть запобігти злому коду в результаті рефакторингу.
Крамій

2
Я додам - ​​у вашому контролі джерела поставте весь рефакторинг на окремий BRANCH. Це допомагає робити розумні поетапні, а також великі блоки порівняння. Це може бути неоціненним, якщо все обернеться заварним кремом (КОГО БУДЕ).
quick_now

5

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


1
Це, звичайно, відоме правило Boyscout: завжди залишайте код у кращому стані, ніж ви його знайшли.
Йорг W Міттаг

2

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


1

Це залежить, чи буде витрачати більше часу на його підтримання, тому що це безлад, чи переписати його, щоб він не був безлад та легко підтримувався. Я особисто переживаю це зараз, я перетворюю інтранет-сайт на ASP.Net MVC3, тому що старий код був купою лайна (що я написав), тому що він мав бути одноразовим (так, я повинен знати краще ). Стара куча лайна все ще тут, і це головний біль, що додає функції та виправляє помилки. MVC прекрасний і робить роботу над ним насправді приємною, тому отримує перезапис.

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