Рефакторинг неприятных устаревших систем с помощью АОП или других автоматизированных средств? - PullRequest
3 голосов
/ 09 октября 2009

Я недавно поиграл с PostSharp, и это напомнило мне о проблеме, с которой я столкнулся несколько лет назад: разработчик клиента создал веб-приложение, но они не очень задумывались над тем, как им управлять состоянием. хранение информации (не спрашивайте меня, почему) статически в экземпляре приложения в IIS. Само собой разумеется, что система не масштабировалась и была глубоко дефектной и нестабильной. Но это была большая и очень сложная система, и поэтому затраты на ее перестройку были непомерно высокими. В то время я хотел попытаться провести реорганизацию кодовой базы, чтобы наладить правильное разделение между компонентами.

В то время я пытался использовать какой-то механизм абстракции, чтобы позволить мне перехватывать все вызовы статического ресурса и перенаправлять их на компонент, который должным образом управлял бы данными состояния. Проблема заключалась в том, что было перенаправлено около 1000 сложных ссылок (и у меня не было много времени, чтобы сделать это). Ручное кодирование (даже с R #) оказалось слишком трудоемким - мы удалили базу кода и переписал это правильно. переписывание заняло более года.

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

Кто-нибудь использовал PostSharp или подобные системы для реабилитации патологических наследственных систем? Насколько успешными были проекты? Вы нашли после того, как усилия стоили того? Вы бы сделали это снова?

UPDATE : См. это сообщение в блоге для дальнейшего обсуждения.

1 Ответ

4 голосов
/ 09 октября 2009

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

Я не могу говорить за ваше веб-приложение, но у меня есть два конкретных примера, где я успешно применил это.

1) Boeing необходимо радикально реструктурировать до 6000 компонентов, каждый из которых закодирован как набор взаимодействующих классов C ++ (часто на общую сумму 3-10 тыс. SLOC) от унаследованной распределенной архитектуры до той, в которой каждый взаимодействующий элемент стал функцией в фасете CORBA. , Используя мою компанию DMS Software Reengineering Toolkit , система преобразования программ, способная точно преобразовывать C ++, мы внедрили инструмент для осуществления этих изменений. Инструмент изменял в среднем одну строку из трех, но мог преобразовать компонент примерно за 5 минут. Получившееся преобразование было завершено на 98% и потребовало некоторой скромной доработки, но оказалось гораздо более эффективным, чем предполагаемый 1 человеко-месяц, для ручной модификации каждого компонента. Это лучше всего рассматривать как масштабную реархитектуру структуры программного обеспечения с помощью инструментов. Вы можете прочитать об этом в технической статье:

Акерс Р., Бакстер И., Мелих М., Эллис Б., Люк К., Практический пример: реинжиниринг моделей компонентов C ++ с помощью автоматического преобразования программ, информационно-программных технологий 49 (3) : 275-291 2007. Доступно с издателя.

2) У ВВС США есть устаревшие системы, которые летают. Одним из них является бомбардировщик B-2, в котором установлены лучшие в мире микропроцессоры 1975 года. Код, используемый в этих программах, - это / был JOVIAL, одобренный язык ВВС до того, как Ада стала излюбленным языком (до того, как все ослабли, и теперь военные рассматривают только ужасные языки для разработки программного обеспечения). Код запускает самолет. OTOH, им нужно было выйти из JOVIAL, потому что поддержка микропроцессоров (например, физической доступности процессоров, инструментов разработки и даже людей, желающих изучать JOVIAL) быстро уменьшалась. Мы создали для них переводчик JOVIAL-C, используя ту же DMS, и выполнили 100% преобразование, даже не увидев оригинальный код (черная программа ...) См. Преобразование бомбардировщика B-2 для получения дополнительной информации. B-2 модернизируются с преобразованным программным обеспечением, как мы говорим.

Теперь в обоих случаях потребовалось некоторое время для ручной настройки преобразований. Но усилия по настройке были крошечными по сравнению с оценочной стоимостью выполнения работы вручную.

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

...