Программная археология — дисциплина, изучающая слабо документированное или недокументированное унаследованное программное обеспечение, в целях его сопровожденияGregorio Robles, Jesus M. Gonzalez-Barahona, and Israel Herraiz, «An Empirical Approach to Software Archaeology , „ Poster Proceedings of the International Conference on Software Maintenance, 2005.“Agile Legacy System Analysis and Integration Modeling » by Scott W. Ambler at agilemodeling.com, accessed 20 August 2010: "Without accurate documentation, or access to knowledgeable people, your last resort may be to analyze the source code for the legacy system.. Программная археология включает в себя обратную разработку приложений, использование специальных инструментальных средств и технологических процессов для извлечения и понимания структуры кода, восстановления замысла его разработчиковRichard Hopkins and Kevin Jenkins, Eating the IT Elephant: Moving from greenfield development to brownfield , Addison-Wesley, 2008, ISBN 0-13-713012-0, p. 93.. Программная археология помогает обнаружить проблемы, связанные с неудачной архитектурой приложения и отмершим (неиспользуемым) кодомDiomidis Spinellis and Georgios Gousios, Beautiful Architecture , O’Reilly, 2009, ISBN 0-596-51798-X, p. 29.. Термин используется уже несколько десятилетийAn early discussion is Judith E. Grass, "Object-Oriented Design Archaeology with CIA++, " Computing Systems, Vol. 5, No. 1, Winter 1992. и отражает следующую метафору: разработчик, читающий код унаследованного программного обеспечения, ощущает себя так же, как и археолог, исследующий памятники древней цивилизацииAndy Hunt and Dave Thomas, «Software Archaeology », IEEE Software, vol. 19, no. 2, pp. 20-22, Mar..

Инструменты и методы В 2001 году на конференции секция программной археологии определила следующие инструменты и методы программной археологии, некоторые из которых относятся к объектно-ориентированному программированию: Скриптовые языки для создания статических отчетов и фильтрации отладочного вывода Изучение существующей сопровождающей документации в формате HTML, PDF, CHM, MSHC или Wiki Создание сопровождающей документации на API (Javadoc, doxygen), добавление документирующих комментариев в кодовую базу приложения Сигнатурный анализ, статистический анализ, инструменты для визуализации ПО Инструменты обратной разработки Отслеживание системных вызовов (truss, strace) Инструменты для поиска ключевых слов в файлах Использование интегрированной среды разработки (IDE) для просмотра, поиска и редактирования файлов кода приложения Платформы для модульного тестирования (JUnit, CppUnit) Отладчики и профилировщики

В целях систематической трассировки вызовов функций без широкомасштабного редактирования кодовой базы исследуемого приложения можно успешно применять аспектно-ориентированное программирование (например, AspectJ для Java, MrAdvice для C# .NET), разработав аспектные классы для получения средствами рефлексии информации о состоянии стека вызовов, отфильтровывания из него нужной информации и записи её в журнальный файл или окно протокола работы (т. н. лога) приложения.

При сопровождении экспертной системы важным источником информации о логике её работы являются сообщения подсистемы объяснений.

Энди Хант и Дейв Томас указывают на важность использования системы контроля версий, контейнера управления зависимостями, инструментов индексирования текста (GLIMPSE, SWISH-E) и «[составления] карты исследования».

Подобно настоящей археологии, программная археология предполагает исследовательскую работу для понимания мыслительных процессов предшественников. На секции OOPSLA Уорд Каннингем предложил так называемый «синоптический сигнатурный анализ», который дает в первом приближении понимание «духа» программы путём показа разработчику только лишь пунктуации кода (двоеточия, операторные скобки)Ward Cunningham, «Signature Survey: A Method for Browsing Unfamiliar Code , „ Workshop Position Statement, Software Archeology: Understanding Large Systems, OOPSLA 2001.. Также Каннингем предложил рассматривать программы, напечатанные минимально возможным шрифтом, для понимания общей структуры программы“Software Archeology » on John D. Cook’s blog The Endeavour, November 10, 2009..

Методы сетевого и временно́го анализа, расширение Git Archaeology для Microsoft Visual Studio могут помочь обнаружить шаблоны совместной деятельности разработчиков унаследованного ПО, которые, в свою очередь, могут пролить свет на силы и слабости получившегося в итоге кодаCleidson de Souza, Jon Froehlich, and Paul Dourish, "Seeking the Source: Software Source Code as a Social and Technical Artifact , " Proceedings of the 2005 International ACM SIGGROUP Conference on Supporting Group Work, pp. 197—206..

Майкл Розлог из Embarcadero Technologies описал программную археологию как процесс из шести шагов, который позволяет разработчикам ответить на такие вопросы: «Что досталось мне в наследство?» и «В каких местах этот код ужасен?»Michael Rozlog, "Software Archeology: What Is It and Why Should Java Developers Care? , " article on java.sys-con.com, January 28, 2008. Эти шаги, как и обнаруженные секцией OOPSLA, включая визуализацию кода для понимания архитектуры приложения, используют метрики программного обеспечения для поиска нарушений принципов проектирования и стиля программирования, модульное тестирование и профилирование для поиска дефектов ПО (т. н. багов) и узких мест в производительности, а также сбор информации о структуре приложения, восстановленной в процессе программно-археологических раскопок. Программная археология может также быть услугой, предоставляемой штатным разрабочикам внешними консультантамиSimon Sharwood, Raiders of the Lost Code , ZDNet, November 3, 2004..

Митч Розенберг (InfoVentions.net) утверждает, что «первый закон программной археологии» звучит так:

См. также Ретрокомпьютинг Рефакторинг Abandonware

Примечания

Категория:Компьютерный сленг Категория:Сопровождение программного обеспечения Категория:Ретрокомпьютинг