Каковы хорошие подходы к очистке старых проектов?

11

У меня есть программное обеспечение, которое я написал около 2 лет назад, и мне нужно добавить некоторые функции. Я понял, что это ужасный беспорядок, и у меня есть желание все переместить, привести в порядок и т. Д. Я прочитал статью Джоэла о программном обеспечении о том, чтобы не начинать снова , так каков лучший путь вперед?

billy.bob
источник
С какими решениями тогда вы не согласны сегодня?

Ответы:

21

У вас есть три основных варианта:

  1. Если приложение очень маленькое и в нем беспорядок , запуск снова может стать вашим лучшим выбором.

  2. Рефакторинг .

  3. Жить с беспорядком и взломать дополнительные функции.

Как правило, вариант (2) является вашей лучшей ставкой.

То, сколько вы на самом деле делаете рефакторинг, будет зависеть от ресурса, который вы вкладываете, в зависимости от того, какое значение вы получаете. Вопросы будут включать в себя:

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

По моему опыту, во время сеанса рефакторинга очень легко попасть в правильную путаницу. Самые важные уроки, которые я выучил, это:

  1. Делай одну вещь за раз.
  2. Делай маленькие шаги.
  3. Эффективно используйте свой источник контроля (проверьте часто + включать комментарии).
  4. Используйте автоматизированные инструменты рефакторинга.
  5. Знай IDE.
Kramii
источник
6
Я также хотел бы добавить, чтобы не иметь сломанного состояния слишком долго. Я видел много проектов с открытым исходным кодом, быстро умирающих во время амбициозного переписывания / редизайна. Нефункциональный проект быстро убивает мотивацию.
LennyProgrammers
2
Абсолютно. Что касается амбициозных переписываний / дизайнов, я уже несколько раз нарушал это. Теперь я стараюсь делать вещи небольшими шагами. Я добавил это предложение в свой ответ.
Kramii
Я также добавил бы, что вы не должны рефакторировать что-либо, для чего не написан тест. Не поддавайтесь желанию исправить все и просто сосредоточиться на тех областях, которые необходимо изменить, чтобы добавить новые функции. Как только вы это сделаете, решите, сколько дополнительных усилий вы хотите приложить для рефакторинга остальных.
TMN
1
@ TMN: в идеале, да. Однако вам не всегда нужен автоматический тест. (1) Если код был разработан без автоматизированных тестов, то может быть нелегко / невозможно модернизировать модульные тесты, пока вы не выполнили какой-либо рефакторинг (2) Написание тестов может быть дорогостоящим до внесения тривиальных, локализованных изменений. (3) Инструменты автоматического рефакторинга + возможности IDE могут помочь предотвратить взлом кода в результате рефакторинга.
Kramii
2
Я бы добавил - в вашем управлении исходным кодом поместите весь рефакторинг в отдельную ветку. Это помогает делать разумные пошаговые, а также сравнения больших блоков. Это может быть неоценимо, если все превратится в заварной крем (ЧТО ОНИ БУДУТ).
quick_now
5

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

user281377
источник
1
Это, конечно, знаменитое правило Boyscout: всегда оставляйте код в лучшем состоянии, чем вы его нашли.
Йорг Миттаг
2

На этот раз, исправляя вещи, обязательно запишите это. В следующий раз, когда вы увидите код, вам будет намного легче вспоминать вещи.

Маной Р
источник
1

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

Черный лед
источник