Улучшение действительно систем с ошибками

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
13
задан QuantumMechanic 2 May 2012 в 00:35
поделиться

9 ответов

  1. Потушенный пожары . Если существуют какие-либо проблемы критического приоритета, независимо от того, что они, необходимо обработать их сначала. Взломайте его в том, если Вы должны, с вонючей кодовой базой это в порядке. Вы знаете об улучшении его продвижение. Это - Ваш метод продаж, предназначенный для того, кому бы ни Вы сообщаете.
  2. Выбор некоторый низко висящий плод. я предполагаю, что Вы относительно плохо знакомы с этим конкретным программным обеспечением и что для Вас повторно определили задачу для контакта с ним. Найдите некоторые по-видимому легкие проблемы в связанной подсистеме кода, который не должен занимать больше чем день или два, чтобы решить за штуку и зафиксировать их. Это может включить рефакторинг, или он не может. Цель состоит в том, чтобы ознакомиться с системой и со стилем исходного автора. Вы не можете стать действительно удачливыми (Один из двух incompetents, кто работал над моей системой передо мной, всегда снабжал постфиксом его комментарии четыре знака пунктуации вместо одного, который сделал очень легким различать, кто записал конкретный сегмент кода.), но Вы разработаете понимание слабых мест автора, таким образом, Вы будете знать, что высматривать. Обширное, плотное соединение с глобальным состоянием по сравнению с плохим пониманием инструментов языка, например.
  3. Установленный большая цель. , Если Ваш опыт параллелен моему, Вы будете оказываться в конкретном бите запутанного кода все более часто, поскольку Вы выполняете предшествующий шаг. Это - первый узел, который необходимо распутать. С опытом Вы получили понимание компонента и знания о том, что исходный автор, вероятно, сделал неправильно (и таким образом, что необходимо не упустить), можно начать предполагать лучшую модель для этого подмножества системы. Не волнуйтесь, необходимо ли все еще поддержать некоторые грязные интерфейсы для поддержания функциональности, просто возьмите ее один шаг за один раз.

Пена, промывка, повторение!:)

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

Решение конкретных проблем Вы упоминаете:

, Когда Вы сталкиваетесь с ситуацией, что пользователи работают вокруг вручную, разговор с пользователями об изменении его. Проверьте, что они примут изменение, если Вы обеспечите его прежде, чем снизить время в него. Если они не хотят изменения, Ваше задание состоит в том, чтобы поддержать поврежденное поведение.

, Когда Вы сталкиваетесь с ошибочным компонентом, что несколько других компонентов работали вокруг, я поддерживаю параллельную технику компонента. Создайте счетчик, который работает, как существующий должен работа. Обеспечьте подобное (или, если практично, идентичный) соединяют интерфейсом и двигают новый компонент в кодовую базу. Когда Вы касаетесь внешних компонентов, которые работают вокруг поврежденного, пытаются заменить старый компонент новым. Подобное портирование простоты интерфейсов кода и старый компонент все еще вокруг, если новый перестал работать. Не удаляйте старый компонент, пока Вы не будете мочь.

14
ответ дан 1 December 2019 в 22:24
поделиться

Это - целая книга, которая в основном скажет что модульный тест и осуществит рефакторинг, но с более практическим советом относительно того, как сделать это

http://ecx.images-amazon.com/images/I/51RCXGPXQ8L._SL500_AA240_.jpg

http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052

2
ответ дан 1 December 2019 в 22:24
поделиться

Что спрашивают Вас прямо сейчас? Вы попросили реализовывать функциональность или исправлять ошибки? Они даже знают то, что они хотят, чтобы Вы сделали?

, Если у Вас нет рабочей силы, время или ресурсы для "зафиксированного" системы в целом, тогда все, которое можно сделать, вода залога. Вы говорите, что необходимо быть в состоянии сделать некоторые "видимые успехи" через несколько месяцев. Ну, так как система настолько плоха, как Вы описали, можно на самом деле сделать систему хуже. Под давлением, чтобы сделать что-то значимое, Вы просто добавите код и сделаете sysem еще более замысловатое.

необходимо осуществить рефакторинг в конечном счете. Нет никакого пути вокруг этого. Если можно найти способ осуществить рефакторинг, который видим к конечным пользователям, , который был бы идеален , даже если требуется 6-9 месяцев или год вместо "нескольких месяцев". Но если Вы не можете, тогда у Вас есть выбор сделать:

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

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

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

Никакие легкие ответы здесь, извините. Необходимо оценить на основе уникальной, отдельной ситуации.

3
ответ дан 1 December 2019 в 22:24
поделиться

Вы открываете каталог, который содержит эту систему с Windows Explorer. Затем нажмите Ctrl-A и затем Shift-Delete. Это походит на улучшение Вашего случая.

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

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

Удача, и может источник быть с Вами.

1
ответ дан 1 December 2019 в 22:24
поделиться

Выберите одну область, которая имела бы среднюю трудность осуществить рефакторинг. Создайте скелет исходного кода только с сигнатурами методов существующих; возможно, используйте Интерфейс даже. Тогда начните взламывать далеко. Можно даже указать на "новые" методы на старые, пока Вы не добираетесь до них.

Затем тестирование, тестирование, тестирование. С тех пор нет никаких модульных тестов, возможно, просто используют старый добрый, сформировал Тесты Voice-Activated-Unit (люди)? Или запишите свои собственные тесты, когда Вы идете.

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

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

у Joel есть несколько статей о перезаписи/рефакторинге:

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

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

1
ответ дан 1 December 2019 в 22:24
поделиться

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

0
ответ дан 1 December 2019 в 22:24
поделиться

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

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

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

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

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

1
ответ дан 1 December 2019 в 22:24
поделиться

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

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

Хотелось бы надеяться, Вы могли постепенно создавать команду, способную к перезаписи всех.

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

Удачи!

0
ответ дан 1 December 2019 в 22:24
поделиться

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

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

0
ответ дан 1 December 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: