2009-08-22 1 views
2

У меня появилось новое задание, в котором я перепроектировал некоторые устаревшие COM-приложения в .Net WPF. Если возможно, мне нужно повторно использовать функциональность или существующий код, однако я подозреваю, что возможности для этого ограничены.Stategies для восстановления устаревших приложений

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

Есть ли у кого-нибудь общие рекомендации для подхода к проекту такого типа? Есть ли хорошие ресурсы на эту тему?

Есть ли какие-либо проверенные методы или обычные пифаллы?

ответ

2

В настоящее время я делаю почти эту точную вещь.

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

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

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

+0

Будучи там, сделал это - я участвовал в перезаписи миллионной строки программы кода (смесь из 4GL и C) из «спецификации» (ну, вроде): она не дешевле или быстрее, и результат был (потребовалось другое переписывание для достижения достойного результата). – MaD70

+0

Также: перенос устаревшего кода не всегда выполняется, поскольку система не отвечает текущим требованиям, как прелюдия к изменению/улучшению. Иногда перенос выполняется, потому что платформа ниже устарела и стоит дорого, но ваша программная система по-прежнему имеет большое значение. – MaD70

4

Важнейшей вещью будет автоматическая проверка (ака/функциональные тесты). См. this question. Как много советов будет simillar.

Под этим я не имею в виду письменные тесты для новой системы, я имею в виду письменные тесты, которые проходят по старой системе и будут проходить через новую систему. Это будет так, как вы убедитесь, что вы воссоздали оригинальную функциональность. Я думаю, что в системе, которая уже существует, вы могли бы легко (хотя и утомительно) создать functional specs that could be executed в стиле BDD.

+1

+1: Испытательная обратная инженерия. –

+0

ИТ-индустрия полагается на процесс проверки, который является исключительно динамичным, очень неполным, не обоснованным (т. Е. Тем, как обычно выполняется тестирование) является катастрофическим для качества его продуктов. BDD подходит для * проверки * (из Википедии: «Мы пытаемся сделать правильные вещи?», Т.е. делает ли продукт то, что действительно требует пользователь?), Но слабое для * проверки * («Мы сделали то, что мы пытались сделать? », т. е. соответствует ли продукт спецификациям?). Я знаю, модные подходы пренебрегают спецификациями, но я утверждаю, что они неправильно поняли, что такое спецификация. – MaD70

+0

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

3

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

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

2

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

3

Michael Feathers: Working effectively with legacy code предлагает ряд методов для работы и замены устаревшего кода. Я нашел его вполне читаемым; некоторые из методов (и многие из хаков) были для меня новыми.

+0

Автор Michael Feathers - в противном случае я согласен, что книга хорошая, но она относится конкретно к тестированию устаревшего кода, а не к способам переписывания с нуля. –

+0

спасибо за примечание, я исправил это имя. – mfx

3

Рассмотрите все свои цели внимательно. Вы просто хотите заменить фонды COM? Вы также собираетесь изменять реализации базы данных (например, от индексированных до SQL?) Экранов (от GUI к Web?) ...?

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

Для таких масштабных изменений вы можете рассмотреть возможность автоматизации изменений. Инструмент для реализации таких изменений можно найти здесь: DMS Software Reengineering Toolkit. Используя DMS, для клиента с 800K SLOC кода C++, , мы реализовали большую часть C++-C# -трансетератора, который заменил COM-интерфейсы эквивалентными средствами C# (управление перемещением с птичьей клеткой около 3/4 пути через проект вызвало интерес к переводчик, несмотря на его близкую полноту).

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