Перепишите [закрытого] унаследованного кода

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

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

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

18
задан Mechanical snail 6 August 2012 в 07:48
поделиться

17 ответов

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

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

другой фактор к opetion № 3 - то, что Вы добираетесь для хранения всего старого bugfixes, у Вас есть doen за эти годы. Каждый переписывать всегда представляет все больше ошибок, частично потому что Вы захотите сделать переписывание быстро, частично потому что Вы будете писать это на новом, незнакомом языке, и частично потому что весь новый код имеет ошибки.

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

9
ответ дан 30 November 2019 в 06:02
поделиться

Я поддержал бы старое приложение, но затем, я - программист Кобола....

2
ответ дан 30 November 2019 в 06:02
поделиться

Другое решение могло быть:

Переводят код на современный язык по Вашему выбору.

Как правило, который включил бы несколько больших блоков:

  • Переписывают части приложения прежней версии, которое не может быть переведено. По крайней мере, используйте конструкции структурного программирования везде.
  • Реализация внутренний DSL, который помогает отобразить конструкции со старого языка на новом языке.
  • Реализация одноразовый переводчик исходного кода для 90% кода.
  • Переводят остающиеся 10% хитрого кода вручную.
  • Проводят много времени, получая проклятую вещь скомпилировать.
  • Получают все это посредством некоторого серьезного тестирования и фиксации.
  • Медленно очищают получающееся животное для создания этого идиоматичным.

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

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

Комментарий Jim Denver

Разве не будет очень трудно записать переводчика, которые переводят в код, который несколько читаем и удобен в сопровождении? Наша проблема состоит в том, что приложение КОБОЛа является maintenence кошмаром. Мы не хотим, чтобы это стало тем же кошмаром на другом языке.

я не могу сказать, как трудно это будет. Легче, если код, с которого Вы запускаете, обычен. Но в любом случае Вы закончите с "КОБОЛом, записанным в $LANG". Это - просто начальная точка возрастающего, переписывает, пока кошмар обслуживания не фиксируется.

Это - просто альтернатива для "перезаписи с нуля", и "поддерживают в КОБОЛе". Могло бы просто случиться так, что значение накопленного знания в кодовой базе является меньше, чем ожидаемая стоимость возрастающей очистки.

2
ответ дан 30 November 2019 в 06:02
поделиться

Честно, помогая "портировать" приложение от ColdFusion 5 до PHP к ColdFusion 8, которые, как я сказал бы, идут с № 1. Оставьте старое приложение на месте и разработку замораживания. Встретьте с клиентом и спецификацией, каковы новые возможности, в дополнение к тому, как старая система работает / предполагаемая работать и представить хороший документ требований. Это просто оставляет конструкцию и детали дизайна, которые можно затем разумно выбрать лучший язык и платформу для приложения.

, Где я работаю теперь, мы на самом деле поддерживаем старое приложение CF при создании замены приложение.NET. Можно ли вообразить код, который парни.NET оказываются перед необходимостью писать после того, как они заканчивают основное приложение? Вот почему я рекомендую заморозить разработку.

2
ответ дан 30 November 2019 в 06:02
поделиться

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

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

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

2
ответ дан 30 November 2019 в 06:02
поделиться

Перемещать приложение постепенно?

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

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

не предполагают, что компетентный программист не сможет изучить КОБОЛ, если потребность возникнет - один язык программирования во многом как другой. Если Вы нанимаете кого-то компетентного в (говорят), что C++ или Java, они смогут изучить КОБОЛ.

4
ответ дан 30 November 2019 в 06:02
поделиться

Я поддержал бы старый код и добавил бы новую функциональность к нему с помощью части большого материала от Microfocus/AcuCOBOL. Можно сделать приложения для GUI и назвать.NET и материал Java прямо из кода "прежней версии".

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

, Таким образом, я предполагаю, что моим выбором была бы опция № 3, потому что существует решение там как этот.

3
ответ дан 30 November 2019 в 06:02
поделиться

Опции № 2 и № 3 являются Вашим лучшим выбором. Если Ваше приложение КОБОЛа хранит, это - данные в DB SQL или некотором другом нормальном формате, к которому можно легко получить доступ с современного языка, который является самым дешевым/самым легким решением.

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

КОБОЛ Поддержания, в конечном счете, только собирается стать более трудным. Чем дольше Вы ожидаете, тем тяжелее это будет.

5
ответ дан 30 November 2019 в 06:02
поделиться

Соблюдают 80/20 правило. Садятся с клиентом и пишут спецификации для 20% приложения, которое получает 80% использования. Запишите это в современной системе. Затем или сохраните старую систему для количества уменьшения особых случаев или постепенно сократите ее, поскольку Вы излагаете в деталях новую систему.

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

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

6
ответ дан 30 November 2019 в 06:02
поделиться

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

6
ответ дан 30 November 2019 в 06:02
поделиться

Это - изменение Опции 3:

Микрофокус обеспечивает инструмент под названием Сервер для предприятия, который позволяет КОБОЛу взаимодействовать с веб-сервисами.

, Если у Вас есть программа A КОБОЛа и другая программа B КОБОЛа и вызовы B через интерфейсный раздел, инструмент позволяет, Вы для представления B соединяете интерфейсом с разделом как с веб-сервисом.

Для программы A, Вы затем генерируете клиентский прокси, и A может теперь назвать B через веб-сервис.

, Конечно, потому что B теперь имеет веб-сервис, который любой другой тип программы (командная строка, Приложение Windows, Java, ASP и т.д.) может теперь также назвать им.

Используя этот подход, можно "грызть далеко в краях" для перемещения GUI в современный, подход на базе браузера с помощью чего-то как ASP, все еще используя механизм бизнеса КОБОЛа.

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

7
ответ дан 30 November 2019 в 06:02
поделиться

Компания, которую я знаю, много лет боролась с одним и тем же вопросом; в конце концов они отказались от приложения COBOL и перешли на SAP. Это был огромный проект, на завершение которого потребовалось несколько лет, но он сработал хорошо.

1
ответ дан 30 November 2019 в 06:02
поделиться

В COBOL замечательно то, что требования к данным прописаны прямо в верхней части кода. Также помогает то, что COBOL был разработан для написания с использованием (относительно) простого делового английского языка (TXTSPKers не нужны).

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

1
ответ дан 30 November 2019 в 06:02
поделиться

Недостаточно данных для определения правильного курса.

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

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

Тем не менее, ответ многих технологов будет быть №1, в то время как ответ многих деловых людей будет №4. Не зная ничего, кроме того, что было представлено, я бы подтолкнул команду к тщательному исследованию № 3, поскольку это, вероятно, самый низкий риск. №1 имеет подтвержденный послужной список неудач, а №2 - это просто №1 с меньшими ресурсами. # 4, вероятно, не является долгосрочным решением, ЕСЛИ вы не закончили

3
ответ дан 30 November 2019 в 06:02
поделиться

А как насчет использования одного из сторонних приложений, которые принимают cobol и конвертируют его в C #, например:

http://www.softwaremining.com/index.jsp

Или перенос это должно быть проще на COBOL.net, тогда все, что вы добавляете, может быть на одном из других языков .net.

2
ответ дан 30 November 2019 в 06:02
поделиться

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

1
ответ дан 30 November 2019 в 06:02
поделиться
[

] Я сам осуществил миграцию старой системы на новую (хотя и в гораздо меньшем масштабе).[

] [

]Для системы клиент/сервер мы достаточно успешно использовали подход "постепенной замены" (#2) (небольшая, написанная собственными силами система отчетности). На самом деле мы сделали это с изюминкой, используя "проксирование":[

] [
    ] [
  • ]Сначала мы внедрили новый сервер, который предлагал весь функционал/интерфейс вызова старого сервера, а внутри просто делегировали все старому серверу, который был запущен. [
  • ] [
  • ] Затем все клиенты были переключены на новую систему; это было относительно безболезненно, так как новая система, по сути, была просто оберткой.[
  • ] [
  • ] Наконец, мы постепенно переписали новый сервер для реализации функциональности, не обращаясь к старой системе.[
  • ] [
] [

] Такой подход придал много гибкости и позволил реализовать новые вещи, не касаясь старого кода. Переналадка продолжалась более года, и последние части приложения были перенесены на новую систему только потому, что старый сервер работал на выделенном, стареющем оборудовании, которое должно было быть отключено.[

] [

]Я фактически спустился в серверную комнату, чтобы лично отключить старый сервер, когда все было перенесено. Это было забавно :-).[

] [

] По сути, этот подход "постепенного перехода" также позволил нам внедрить некоторые протоколы в новую систему, чтобы решить, какой функционал используется как часто. Таким образом, часть старой функциональности сервера могла быть утилизирована, так как оказалось, что клиенты ее больше не используют. Это было существенным преимуществом "проксирования".[

].
4
ответ дан 30 November 2019 в 06:02
поделиться
Другие вопросы по тегам:

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