Запишите тестовый сценарий, который приводит к сбою взлом.
, Если Вы не можете записать тест, который взлом проваливает, тогда или нет ничего неправильно со взломом, в конце концов, или иначе Ваша среда тестирования является несоответствующей. Если первый, убегает быстрые перед тратой жизни на бесполезную оптимизацию. Если последний, ищите другой подход (или на отмечающие взломы, или на тестирование...)
Признание:
я использовал '#define частную общественность' в C++ для чтения данных с некоторого другого слоя кода. Это вошло как взлом, но работает хорошо, и фиксация его никогда не становилась приоритетом. Это теперь 3 года спустя...
Одна из главных причин взломы не становятся удаленными, риск, что каждый представляет новые ошибки при фиксации взлома. (Особенно при контакте с кодовыми базами перед TDD.)
Мы должны были сделать это, как только - делают краткосрочную демоверсию, что мы знали, что не хотели сохранять. Клиент хотел его на winTel поле, таким образом, мы разработали прототип в SGI/XWindows. (Мы бегло говорили на обоих, таким образом, это не была проблема).
Вы могли намеренно записать его способом, который чрезмерно строг, и ожог ставил целью и потребует, чтобы перезапись была изменена.
Попытайтесь ясно дать понять стоимость взлома бизнес-людям. Тогда они могут сделать обоснованное решение так или иначе.
Откладывание дебатов о том, необходимо ли сделать это, давайте предположим, что необходимо сделать это. Прием теперь должен сделать это способом, который минимизирует долгосрочное влияние, это легко сорвало позже и делает себя неприятностью, таким образом, Вы не забываете фиксировать его.
часть неприятности легка: заставьте его выпустить предупреждение каждый раз, когда Вы выполняете клудж.
сорванная часть может быть легкой: Мне нравится делать это поместить клудж позади имени подпрограммы. Это облегчает обновлять, так как Вы разделяете код. То, когда Вы получаете свое постоянное решение, Вы - подпрограмма, может или реализовать ее или быть нет. Иногда подкласс может работать приятно на это также. Не позволяйте другим людям зависеть от того, что Ваше быстрое исправление, все же. Трудно рекомендовать какую-то конкретную технику, не видя ситуации.
эффекты Уменьшения дальнего действия должны быть легкими, если остальная часть кода хороша. Всегда проходите опубликованный интерфейс и так далее.
Некоторые решения я видел в прошлом:
HACK
в коде (или подобная схема такой как XXX
) HACK
комментарии появляются , Это - превосходный вопрос. Одна вещь, которую я заметил, поскольку я получаю больше опыта: взломы покупают Вас очень короткий срок, и часто стоят Вам огромной суммы больше. Тесно связанный 'быстрое исправление', которое решает то, что Вы думаете, проблема - только для нахождения, когда это аварийно завершает это, что это не была проблема вообще.
Реальная цена представления быстрого исправления - то, что, когда кто-то еще должен представить 2-е быстрое исправление, они представят его на основе Вашего собственного быстрого исправления. Так, чем дольше быстрое исправление существует, тем более раскопанным это станет. Довольно часто взлом берет только немного дольше, чем делать правильно вещи, пока Вы не встречаетесь с 2-м взломом, который основывается на первом.
Так, очевидно, это (или, кажется), иногда необходимый для представления быстрого исправления.
Одно возможное решение, принимая Ваше управление версиями поддержки это, для представления ветвления из источника каждый раз, когда Вы делаете такой взлом. Если люди поощряются постараться не кодировать новые возможности в них особенных, "получают сделанные" ветвления, то это в конечном счете будет больше работы для интеграции новых возможностей с ветвлением, чем это будет для избавлений от взлома. Более вероятно, тем не менее, "хорошее" ветвление будет отброшено. И если Вы далеко достаточно вдали от выпуска, что создание такого ветвления не будет практично (потому что не стоит делать двойную упомянутую выше интеграцию), тогда Вы, вероятно, не должны даже использовать взлом так или иначе.
А очень идеалистический подход.
А более реалистическое решение, чтобы сохранить Вашу программу сегментированной на как можно больше ортогональных компонентов и иногда сделать полную перезапись некоторых компонентов.
А лучший вопрос состоит в том, почему hacky решение плохо. Если это плохо, потому что это уменьшает гибкость, проигнорируйте его, пока Вам не нужна гибкость. Если это плохо, потому что это влияет на поведение программ, проигнорируйте его, и в конечном счете это станет исправлением ошибки и будет обращено. Если это плохо, потому что это выглядит ужасным, проигнорируйте его, пока взлом локализуется.
Вы регистрируете вторую очень описательную ошибку против своей собственной "фиксации" и помещаете в - действительно комментируют прямо в зонах поражения, который говорит, "Этой области нужна большая работа. Посмотрите дефектный № 555" (используйте правильное число, конечно). Люди, которые говорят, "не вставляют взлом", кажется, не понимают вопроса. Предположите, что у Вас есть система, которая должна быть в порядке теперь, Вашим решением невзлома составляют 8 дней работы, Ваш взлом составляет 38 минут работы, взлом там для покупки Вас время, чтобы сделать работу и не потерять деньги при выполнении его.
Теперь все еще необходимо получить клиента, или управление соглашаются запланировать минуты N*100 времени, требуемого сделать, реальная фиксация в дополнение к минутам N должна была теперь зафиксировать его. Если необходимо отказаться реализовывать взлом, пока Вы не получаете такое соглашение, то, возможно, это - то, что необходимо сделать, но я работал с некоторыми понимающими людьми в том отношении.
Получают его в письменной форме (электронное письмо). Таким образом, когда это становится проблемой, более позднее управление не "забывает", что это, как предполагалось, было временным.
Делают его видимым пользователям. Более видимые это - менее вероятные люди, собираются забыть возвращаться и делать это правильный путь, когда кризис закончен.
Согласовывают, прежде чем временное решение существует для проекта, ресурсов и временных шкал для получения реальной фиксации в. Работа для действительного решения должна, вероятно, начаться, как только временное решение закончено.
Большой вопрос. Это беспокоит меня много, также - и большую часть времени я - единственный человек, ответственный за приоритизацию проблем в моих собственных проектах (да, малый бизнес).
я узнал, что проблемой, которая должна быть решена, является обычно просто подмножество проблемы. IOW, клиент, которому нужна срочная фиксация, не нужна целая проблема, которая будет решена, просто часть ее - меньший или больше. Это иногда позволяет мне создать обходное решение, которое не является решением полной проблемы, но только подмножества клиента, и это позволяет мне оставлять большую проблему открытой в системе отслеживания ошибок.
, Который не может, конечно, применяться вообще к Вашей рабочей среде: (
Это напоминает мне об истории "CTool". В начале CTool был выдвинут одним из наших devs, я назову его Don как один возможный способ решить проблему, которую мы имели. Будучи серьезным трудолюбивым типом, Don корпел и поставил рабочий прототип. Вы знаете, куда я иду с этим. В течение ночи CTool стал частью потока операций компании со всем отделом в зависимости от него. К второму или третьему дню горькие жалобы начали передавать потоком приблизительно в недостатках CTOOL. Пользователи подвергли сомнению компетентность Don, обязательство и IQ. Протесты Don, что это, как никогда предполагалось, не было производственным приложением, не нашли отклика. Это продолжалось для годы . Наконец, кто-то нашел время для перезаписи приложения, много позже того, как Don отбыл. К этому времени такая ненависть стала приложенной к имени CTool, что, называя его версия 2 CTool была вне рассмотрения. Были даже формальные похороны для CTool, несколько напоминающего о копировальном устройстве (или действительно ли это был принтер?) сцена выполнения в Офис .
Некоторые могли бы сказать, что Don заслужил петель и стрелок для того, чтобы не заставлять его пойти право зафиксировать CTool. Моя единственная точка - то, что высказывание Вас должно никогда , вырубают решение, вероятно, незаконно в Реальном мире. Но если Вы - тот, чтобы сделать это, шагать осторожно.
Мой ответ несколько отличается от других. Мой опыт состоит в том, что следующие методы помогают Вам остаться гибкими и переместить от hackey первые решения для повторения/альфы готовой беты/производства:
Разработка через тестирование
Небольшие единицы рефакторинга
И это должно обойтись без помощи высказывания, что Вы должны сделать, чтобы заинтересованная сторона поддерживала, чтобы сделать любой из них правильно. Но с этими продуктами на месте у Вас есть правильные инструменты и процессы для быстрого изменения продукта главными способами с уверенностью. Иногда Ваша способность измениться является Вашей способностью управлять риском изменений, и от ракурса разработки эти инструменты/методы дают Вам более верную опору.
Мы используем Java и Гудзон для непрерывной интеграции. 'Промежуточные решения' должны быть прокомментированы с:
// TODO: Better solution required.
Каждый раз, когда Гудзон выполняет сборку, он предоставляет сообщение о каждом объект TODO так, чтобы у нас была актуальная, очень видимая запись любых выдающихся объектов та улучшенная потребность.
Я пытаюсь создать hacky решение так, чтобы оно могло быть перемещено в долгосрочный путь максимально безболезненно. Скажите, что Вы получили парня, который создает базу данных в SQL Server, потому что это - его самый сильный DB, но Вашим корпоративным стандартом является Oracle. Создайте дб с как можно меньшим количеством непередаваемых функций (как Типы данных bit). В этом примере не трудно избежать разрядных типов, но это делает переход позже более легким процессом.
Удача. По моему опыту, этого почти невозможно достигнуть.
, Как только Вы спускаетесь по скользкому пути реализации взлома, потому что Вы испытываете давление тогда, Вы могли бы также привыкнуть к проживанию с ним навсегда. Существует почти НИКОГДА достаточно времени для переделывания чего-то, что уже работает, неважно, как плохо оно реализовано внутренне. Что заставляет Вас думать, что у Вас волшебно будет больше времени "в некоторую более позднюю дату" для фиксации взлома?
единственное исключение, о котором я могу думать к этому правилу, - то, если взлом полностью препятствует тому, чтобы Вы реализовали другую часть функциональности, которая необходима клиенту. Тогда у Вас нет выбора, кроме как сделать переделывание.
Обычно проблемы как это являются результатом плохой связи с управлением или клиентом. Если решение работает на клиента тогда, они не видят оснований, чтобы попросить его быть измененными. Таким образом, им нужно сказать о компромиссах, Вы сделали заранее, таким образом, они могут запланировать дополнительное время для решения проблем после реализации быстрого решения.
то, Как решить его, зависит немного от того, почему это - плохое решение. Если Ваше решение плохо, потому что трудно измениться, или поддержать тогда в первый раз, когда необходимо сделать обслуживание и иметь немного больше времени тогда, это - правильное время для обновления до лучшего решения. В этом случае помогает, говорите ли Вы клиенту или Вашему боссу, что срезали путь во-первых. Тем путем они знают, что не могут ожидать быстрое решение в следующий раз вокруг. Cripling UI может быть хорошим способом удостовериться клиент, возвращается для получения зафиксированного материала.
, Если решение плохо, потому что это опасно или нестабильно тогда, действительно необходимо говорить с человеком, делающим планирование, и иметь некоторое время, запланированное в решить проблему как можно скорее.
Это - твердый вызов. Я сделал взломы, лично вызывают, иногда Вы ИМЕЕТЕ для получения того продукта снаружи и в потребительские руки. Однако способ, которым я забочусь о нем, состоит в том, чтобы просто сделать это.
Говорят руководителю проекта или Вашему боссу или клиенту: существуют некоторые места, которые должны быть очищены и кодированы лучше. Мне требуется неделю, чтобы сделать это, и это собирается стоить меньше, чтобы сделать это теперь, тогда это должно будет сделать это 6 месяцев с этого времени, когда мы должны реализовать расширение на подсистему.
Внезапно Вы находите пребывание в течение пяти лет с помощью меньше идеального решения, проклиная его в то время как.
, Если Вы проклинаете его, почему это в нижней части Списка ожидающих выполнения задач?
ВЫ не ДЕЛАЕТЕ ПРОМЕЖУТОЧНЫХ РЕШЕНИЙ.
Иногда я думаю, что программистам просто нужно сказать это.
Извините за это, но серьезно - hacky решение бесполезно, и даже на первом повторении может занять больше времени, чем выполнение части решения правильно.
прекратите оставлять меня Вашим загаженным кодом для поддержания. Просто ВСЕГДА КОДИРУЙТЕ ПРАВО IT. Неважно, сколько времени это берет и кто вопит на Вас.
, Когда Вы сидите, там вертя Ваши ползунки после поставки рано, в то время как все остальные отлаживают их глупые взломы, Вы будете благодарить меня.
, Даже если Вы не думаете, что Вы - великий программист, всегда стремитесь сделать лучшее, Вы можете, никогда не срезать путь - это не стоит Вам НИКАКОГО времени, чтобы сделать его правильно. Я могу выровнять по ширине этот оператор, если Вы не верите мне.
Единственное время можно когда-либо выравнивать по ширине фиксацию этих вещей (потому что они действительно не повреждаются, просто ужасные) - когда у Вас есть другая функция или исправление ошибки, которое касается того же раздела кода, и Вы могли бы также переписать его.
необходимо сделать математику на том, чего стоит время разработчика. Если требования к программному обеспечению встречаются, и единственная вещь неправильно состоит в том, что код является смущающим под капотом, это не действительно стоит фиксировать.
Целые компании могут обанкротиться, потому что фанатичные инженеры настаивают на переархитектуре каждый год или поэтому когда они становятся беспокойными.
, Если это без ошибки и отвечает требованиям, это сделано. Поставьте его. Движение.
[Редактирование]
, Конечно, я не защищаю это все быть взломанным во все время. Необходимо разработать и записать код тщательно в нормальном ходе процесса разработки. Но когда Вы действительно заканчиваете со взломами, которые просто должны были быть сделаны быстро, необходимо сделать анализ рентабельности на том, стоит ли это того для чистки кода. За время жизни приложения при пребывании в течение большего количества времени, кодируя вокруг грязного взлома, чем у Вас была бы фиксация его, то, конечно, фиксируют его. Но в противном случае это слишком дорого и опасно, чтобы повторно кодировать работа, без ошибки приложение просто, потому что рассмотрение источника делает Вас плохо.
Это - главная проблема при выполнении крайнего срока управляемая работа. Я нахожу, что добавление очень подробных комментариев о том, почему этот путь был выбран и некоторые намеки, как он должен быть кодирован справка. Таким образом, люди, смотрящие на код, видят его и сохраняют его новым.
Другая опция, которая будет работать, добавляет bug.feature в Вашей платформе отслеживания (Вы действительно имеете один, правильно?) детализация переделывания. Тем путем это видимо и может вызвать проблему в какой-то момент.
Вот большая похожая статья о технический долг .
В основном, это - аналогия долга со всеми техническими решениями, которые Вы принимаете. Существует хороший долговой и безнадежный долг..., и необходимо выбрать долг, который собирается достигнуть целей, которые Вы хотите с наименее долгосрочной стоимостью.
худший вид долга является маленькими небольшими накапливающимися ярлыками, которые походят на задолженность по кредитной карте..., каждый не страдает, но довольно скоро Вы находитесь в плохом доме.
Стратегия 1 (почти никогда выбираемый): не реализуйте клудж. Даже не сообщайте людям, это - возможность. Просто сделайте это правильный путь в первый раз. Как я сказал, этот почти никогда не выбирается, не из-за ограничений времени.
(нечестная) Стратегия 2: Лгите и Обман. Скажите управлению, что существуют ошибки во взломе, и они могли вызвать основные проблемы позже. К сожалению, большую часть времени, менеджеры просто говорят для ожидания, пока ошибки не становятся проблемой, затем исправляют ошибки.
Стратегия 2a: То же как стратегия 2, кроме действительно существует ошибки. Та же проблема, все же.
Стратегия 3 (и мой любимый): Разработайте решение каждый раз, когда Вы можете, и делать это достаточно хорошо, что интерн или обезьяна кода могли сделать это. Легче выровнять по ширине расходы небольшого количества денег обезьяны кода, чем выровнять по ширине Вашу собственную зарплату, таким образом, это могло бы просто быть сделано.
Стратегия 4: Ожидайте перезаписи. Заставить ждать. Рано или поздно (вероятно, позже), кто-то оказывается перед необходимостью переписывать вещь. Мог бы также сделать это прямо тогда.
Обучите, кто бы ни отвечает за принятие окончательного решения, почему hacky способ сделать вещи плох в конечном счете.
В основном, люди, которые не понимают программное обеспечение, не получают понятие пересматривания вещей, это уже работает. Путем они смотрят на него, разработчики похожи на механику, кто хочет продолжать демонтировать и повторно собирать весь автомобиль каждый раз, когда кто-то хочет добавить опцию, которая звучит безумной им.
Это помогает сделать аналогии с повседневными вещами. Объясните им, как при создании промежуточного решения Вы сделали выбор, который удовлетворил зданию оно быстро, в противоположность тому, чтобы быть стабильным, удобным в сопровождении, и т.д. Это похоже на желание создать с древесиной вместо стали, потому что древесину легче сократить, и таким образом, Вы могли создать более быстрое промежуточное решение. Лес, однако, просто не может поддерживать основу 20-этажного здания.