Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Пена, промывка, повторение!:)
Данный время, считайте добавляющие модульные тесты на свою новую модель одним уровнем под Вашими интерфейсами с остальной частью системы. Не гравируйте плохие интерфейсы в коде через тесты, которые используют их, Вы будете изменять их в будущем повторении.
Решение конкретных проблем Вы упоминаете:
, Когда Вы сталкиваетесь с ситуацией, что пользователи работают вокруг вручную, разговор с пользователями об изменении его. Проверьте, что они примут изменение, если Вы обеспечите его прежде, чем снизить время в него. Если они не хотят изменения, Ваше задание состоит в том, чтобы поддержать поврежденное поведение.
, Когда Вы сталкиваетесь с ошибочным компонентом, что несколько других компонентов работали вокруг, я поддерживаю параллельную технику компонента. Создайте счетчик, который работает, как существующий должен работа. Обеспечьте подобное (или, если практично, идентичный) соединяют интерфейсом и двигают новый компонент в кодовую базу. Когда Вы касаетесь внешних компонентов, которые работают вокруг поврежденного, пытаются заменить старый компонент новым. Подобное портирование простоты интерфейсов кода и старый компонент все еще вокруг, если новый перестал работать. Не удаляйте старый компонент, пока Вы не будете мочь.
Это - целая книга, которая в основном скажет что модульный тест и осуществит рефакторинг, но с более практическим советом относительно того, как сделать это
http://ecx.images-amazon.com/images/I/51RCXGPXQ8L._SL500_AA240_.jpg
http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052
Что спрашивают Вас прямо сейчас? Вы попросили реализовывать функциональность или исправлять ошибки? Они даже знают то, что они хотят, чтобы Вы сделали?
, Если у Вас нет рабочей силы, время или ресурсы для "зафиксированного" системы в целом, тогда все, которое можно сделать, вода залога. Вы говорите, что необходимо быть в состоянии сделать некоторые "видимые успехи" через несколько месяцев. Ну, так как система настолько плоха, как Вы описали, можно на самом деле сделать систему хуже. Под давлением, чтобы сделать что-то значимое, Вы просто добавите код и сделаете sysem еще более замысловатое.
необходимо осуществить рефакторинг в конечном счете. Нет никакого пути вокруг этого. Если можно найти способ осуществить рефакторинг, который видим к конечным пользователям, , который был бы идеален , даже если требуется 6-9 месяцев или год вместо "нескольких месяцев". Но если Вы не можете, тогда у Вас есть выбор сделать:
то, Какой является самым выгодным для Вас лично, зависит от культуры Вашей компании. Они однажды решат нанять больше разработчиков или заменить эту систему полностью некоторым другим продуктом?
С другой стороны, если Ваши усилия "починить вещи" на самом деле повреждают другие вещи, они будут понимать о чудовище, которым Вас просят заняться единолично?
Никакие легкие ответы здесь, извините. Необходимо оценить на основе уникальной, отдельной ситуации.
Вы открываете каталог, который содержит эту систему с Windows Explorer. Затем нажмите Ctrl-A и затем Shift-Delete. Это походит на улучшение Вашего случая.
Серьезно, хотя: тот счетчик кажется, что имеет проблемы потокобезопасности. Я поместил блокировку вокруг возрастающих функций.
И относительно остальной части системы, Вы не можете сделать невозможного, так попытайтесь сделать возможное. Необходимо напасть систему от двух передних сторон. Заботьтесь о более явно проблематичных проблемах сначала, таким образом, можно показать прогресс. В то же время необходимо иметь дело с более инфраструктурными проблемами, так, чтобы у Вас был шанс при фактической фиксации этой вещи однажды.
Удача, и может источник быть с Вами.
Выберите одну область, которая имела бы среднюю трудность осуществить рефакторинг. Создайте скелет исходного кода только с сигнатурами методов существующих; возможно, используйте Интерфейс даже. Тогда начните взламывать далеко. Можно даже указать на "новые" методы на старые, пока Вы не добираетесь до них.
Затем тестирование, тестирование, тестирование. С тех пор нет никаких модульных тестов, возможно, просто используют старый добрый, сформировал Тесты Voice-Activated-Unit (люди)? Или запишите свои собственные тесты, когда Вы идете.
Документируют Ваш успех, поскольку Вы входите в некоторый репозиторий, включая разочарования и вопросы, так, чтобы, когда следующая бедная тупица, которая получает этот проект, не будет то, где Вы:).
, Как только Вы сделали первую часть, движение к следующему. Ключ должен создать сверх возрастающего прогресса, вот почему Вы не должны запускать с самой твердой части сначала; будет слишком легко быть деморализованным.
у Joel есть несколько статей о перезаписи/рефакторинге:
Хорошо необходимо запустить где-нибудь, и это кажется, что существуют ошибки та фиксация потребности. Я работал бы через те ошибки, делая быстрые рефакторинги победы, и пишущий любые модульные тесты, возможные по пути. Я также использовал бы инструмент как SourceMonitor, чтобы определить некоторые самые 'сложные' части кода в системе и видеть, мог ли я упростить их дизайн всегда. В конечном счете просто необходимо признать, что это будет медленным процессом и сделает маленькие шаги к лучшей системе.
Я работал с унаследованной системой с теми же характеристиками в течение почти трех лет теперь, и нет никаких ярлыков, о которых я знаю.
то, Что беспокоит меня больше всего нашей унаследованной системой, - то, что мне не разрешают исправить некоторые ошибки, так как много других функций могли повредиться, если бы я зафиксировал их. Это призывает к ужасным обходным решениям или созданию новых версий старых функций. Вызовы к старым функциям могут тогда быть заменены новым по одному (при тестировании).
я не уверен, какова цель Вашей задачи, но я настоятельно рекомендую Вам касаться как можно меньшего количества кода. Только сделайте то, что необходимо сделать.
можно хотеть стать как можно больше зарегистрированными путем интервьюирования людей. Это - огромная задача, так как Вы не знаете, какие вопросы спросить, и люди забудут много деталей.
Кроме этого: удостоверьтесь, что Вы становитесь заплаченными и достаточно моральной поддержки. Там будет плакать и скрежетать зубов...
Я попытался бы выбрать часть системы, которая могла быть извлечена и переписана в изоляции справедливо быстро. Даже если это не делает многого, Вы могли бы показать прогресс довольно быстро, и у Вас нет проблемы взаимодействия через интерфейс с унаследованным кодом непосредственно.
Хотелось бы надеяться, если Вы могли бы собрать несколько таких задач, они будут видеть, что Вы делаете видимые успехи, и Вы могли выдвинуть аргумент в пользу найма большего количества людей для перезаписи больших модулей. Когда части системы полагаются на поврежденное поведение, у Вас нет большого выбора, но отделяться перед фиксацией чего-либо.
Хотелось бы надеяться, Вы могли постепенно создавать команду, способную к перезаписи всех.
Все это должно было бы идти рука об руку с некоторым достойным обучением, иначе старые привычки людей будут придерживаться, и Ваша работа получит вину, когда вещи не будут работать как ожидалось.
Удачи!
Удержите от использования все, что в настоящее время существует, который имеет проблемы, и запишите новым ту работу правильно. Документ так, как Вы можете о том, что изменит и поместит большие красные знаки высвечивания, повсеместно указывающие на эту документацию.
Путем выполнения его тот путь, можно сохранить существующие ошибки (те, которые компенсируются где-то в другом месте), вокруг, не замедляя успех к получению фактической рабочей системы.