2010-07-13 2 views
2

Я разрабатываю систему, с которой сложно работать. Это 99% недокументированных, не соответствует передовым методам и довольно трудно понять (глобалы в изобилии, методы, охватывающие 50 строк, злоупотребление служебным положением и т. Д.). К сожалению, я довольно новичок в базе кода, и мне нужно добавить функциональность.Добавление функций в базы кода, которые крайне необходимы для рефакторинга

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

Спасибо!

ответ

4

http://www.joelonsoftware.com/articles/fog0000000069.html

http://discuss.joelonsoftware.com/default.asp?design.4.469415.13

http://www.joelonsoftware.com/articles/fog0000000007.html

http://www.paulgraham.com/hp.html

Это, как говорится, если есть небольшие участки по очистке, которые, как правило, хорошо. После того, как вы некоторое время работаете над этим, вы поймете, где стратегическая локализованная переработка будет наиболее эффективной и наименее опасной.

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

+0

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

+0

лучшее, что я мог предложить, не глядя на базу кода, - это узнать о старой базе кода. в первой статье мне очень нравится, потому что это напоминает мне, сколько времени и усилий исправления ошибок ушло в устаревшие вещи. почему этот-то странный случай? вероятно, потому, что кто-то провел неделю, разыгрывая непонятную ошибку. не злоупотребляйте глобальными переменными, если вам не нужно - и иногда унаследовательность настолько изобилует ими, что вам нужно, потому что глобалы теперь являются частью «интерфейса». возвращая много воспоминаний о 20-летнем fortran 2 работах назад. :-) – eruciform

+0

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

2

Я бы пошел своим инстинктом: напишите так, как вы знаете, как это сделать. TDD, если это ваш подход; во всяком случае, убедитесь, что ваш новый материал достаточно хорошо проверен (и, конечно, меньше беспорядка, чем то, что сейчас есть).

В дороге вы можете получить возможность рефакторинга, найти дублируемую функциональность и выбрать, какие методы следует использовать для классов &; вполне вероятно, что в этих случаях вы найдете своих владельцев.

И, конечно, вполне возможно, что «по дороге» никогда не придет. По крайней мере, ваш новый материал работает, читабельный и многоразовый - и это лучше, чем если бы вы потратили время на поиск функции в существующей базе кода (как вы ее описали) и повторное использование.

1

Все, что вы испытываете, можно преодолеть, прочитав Работу Effectively With Legacy Code. Я знаю, что вы сказали, что находитесь в сжатом сроке, но спешат и не совсем понимают, что базовая база кода может (и, вероятно,) иметь некоторые отрицательные побочные эффекты.

Кроме того, вы упомянули о планировании рефакторинга, как только позволит время. Я сказал это много раз и позвольте мне сказать вам, что почти всегда это время никогда не приходит. Сделайте это правильно в первый раз и сделайте себе одолжение для следующего разработчика или когда вы добавите новые функции позже.

+0

Спасибо за рекомендацию книги. Я понимаю, что отношение «Я сделаю это позже» опасно, я думаю, что это большая причина, по которой я не решаюсь просто пойти с ним. –

0

Мы находимся в этой же лодке в моем бизнесе: первая фаза прошла в направлении, которое сработало, но не было идеальным. Вторая фаза изменила бизнес-модель и логику ..... эта фаза была офшоринга, что само по себе не было бы проблемой, если бы компания действительно поняла рамки, которые они решили использовать.Итак, здесь мы пытаемся закончить фазу 3 (отменив беспорядок фазы 2, правильно используя структуру, как она была задумана), в то же время оплакивая работу над такой плохо написанной кодовой базой. Существовали серьезные проблемы - использование двух javascript-фреймворков, неуклюжий пользовательский интерфейс, нежелательный код и большое обновление для фреймворка, которое делает версию, на которую мы устарели и почти невозможна, перейти на новую версию.

Вот что мы решили сделать ... это может быть не идеально для вашей ситуации. Во-первых, наш вице-президент по разработке продукта занял две недели и полностью переработал структуру базы данных. Он решил, что наш персонал по программированию может изменить существующий код, если это необходимо, чтобы разместить надлежащие эффективные структуры БД. Как только этот (болезненный) шаг был сделан, мы сделали двухнедельный перерыв, чтобы добиться прогресса в новых функциях. Затем я отступил от своих обязанностей, чтобы полностью реорганизовать пользовательский интерфейс, не используя одну структуру Javascript, так что мы находимся на одной общей платформе (какая концепция, подсказка - ужасная оффшорная компания ...) и эффективное использование современных, эффективных, текущих элементов пользовательского интерфейса. Мы будем следовать задаче 80% -20%, пока продукт не будет готов к бета-тестированию - 80% достигнут окончательных требований, 20% -ный код рефакторинга и очистку прежнего беспорядка. Каждому сотруднику была предоставлена ​​область, в которой они отвечают за «очистку» или повышение эффективности. Документация процессов также является задачей, которая была делегирована и является необходимым процентом рабочей недели каждого сотрудника.

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

Трудно оправдать руководство, что вам нужно идти назад, чтобы идти вперед. Это еще сложнее, когда будущее вашей компании зависит от продукта, который застрял в бета-версии, как и мы. Я сравниваю это с тем, чтобы тратить больше денег на экономичное топливо ... теперь это будет стоить дороже, но в конечном итоге это принесет огромные финансовые награды. Я думаю, что хитрость к успеху в этой ситуации - найти медианную для вашего продукта, где она «достаточно хороша», чтобы стоять в одиночестве, пока вы тратите время, чтобы сделать продукт отличным. Разработка стратегии для решения этой медианной проблемы будет препятствовать тому, чтобы бизнес-единица была терпеливой, и в конечном итоге сделает вас героем, когда ему это удастся. Разработайте прочный план, сообщите этот план, хорошо поработайте с другими и отработайте свой хвост. В мгновение ока вы снова будете наслаждаться жизнью!

0

Не беспокойтесь об этой небольшой функциональности, которую вы добавляете. Сделайте это быстро и грязно.

Если ваша команда планирует рефакторинг исходного кода, убедитесь, что у вас есть поддержка вашего руководства. Сообщите своему руководству о проблеме, с которой вы сейчас сталкиваетесь: текущая база кода не соответствует лучшим практикам. Чем больше неструктурировано приложение, тем больше времени потребуется для добавления функциональности. Построение новой функциональности не будет стоить больше времени, но убедитесь, что она будет вести себя так, как ожидалось в любой ситуации, и устранение проблем, когда что-то пойдет на foobar, также будет стоить дорогостоящее время.

Если бы вы были реорганизовать приложения, подумайте о прибыли вы бы, если бы вы выбрали некоторые легко доступные решения для более эффективной реализации части вашего приложения:

  • MVC рамки, как Zend Framework
  • Библиотека классов Zend Framework для часто используемых компонентов, таких как Auth/ACL/OAuth/etc.
  • абстракции базы данных или ORM, как доктрина или Propel
  • Только один Javascript библиотека: JQuery (возможно, в сочетании с JQuery UI)
  • Автоматического развертыванием системы как Phing и Ant тестирования Unit
  • для классов
  • Приемочные испытания, основанные на использовании Случаи с использованием Selenium
  • хорошо продуманная система и стратегия контроля версий

Я мог бы пойти на какое-то время. Иногда полная перестройка приложения выполняется в два шага назад, но четыре или пять шагов вперед.