Археология программного обеспечения или археология исходного кода — это исследование плохо документированных или недокументированных устаревших реализаций программного обеспечения в рамках обслуживания программного обеспечения . [1] [2] Археология программного обеспечения, названная по аналогии с археологией , [3] включает в себя обратный инжиниринг программных модулей и применение различных инструментов и процессов для извлечения и понимания структуры программы и восстановления проектной информации. [1] [4] Археология программного обеспечения может выявить дисфункциональные командные процессы, в результате которых были созданы плохо спроектированные или даже неиспользуемые программные модули, а в некоторых случаях может быть обнаружен намеренно запутанный код. [5] Этот термин используется уже несколько десятилетий. [6]
Археология программного обеспечения продолжает оставаться темой обсуждения на последних конференциях по разработке программного обеспечения. [7]
Семинар по археологии программного обеспечения на конференции OOPSLA (Объектно-ориентированное программирование, системы, языки и приложения) 2001 года выявил следующие методы археологии программного обеспечения, некоторые из которых специфичны для объектно-ориентированного программирования : [8]
В более общем плане Энди Хант и Дэйв Томас отмечают важность контроля версий , управления зависимостями , инструментов индексирования текста, таких как GLIMPSE и SWISH-E , и «[рисования] карты, когда вы начинаете исследовать». [8]
Как и настоящая археология, программная археология включает в себя исследовательскую работу, направленную на понимание мыслительных процессов своих предшественников. [8] На семинаре OOPSLA Уорд Каннингем предложил метод синоптического анализа сигнатур, который давал общее «ощущение» программы, показывая только знаки препинания, такие как точки с запятой и фигурные скобки . [9] В том же духе Каннингем предложил просматривать программы шрифтом в 2 пункта, чтобы понять общую структуру. [10] Еще одним методом, выявленным на семинаре, было использование инструментов аспектно-ориентированного программирования , таких как AspectJ, для систематического внедрения кода трассировки без прямого редактирования устаревшей программы. [8]
Методы сетевого и временного анализа могут выявить закономерности совместной деятельности разработчиков устаревшего программного обеспечения, что, в свою очередь, может пролить свет на сильные и слабые стороны создаваемых программных артефактов. [11]
Майкл Розлог из Embarcadero Technologies описал археологию программного обеспечения как шестиэтапный процесс, который позволяет программистам отвечать на такие вопросы, как «Что я только что унаследовал?» и «Где страшные участки кода?» [12] Эти шаги, аналогичные тем, которые были определены на семинаре OOPSLA, включают использование визуализации для получения визуального представления дизайна программы, использование показателей программного обеспечения для поиска нарушений дизайна и стиля, использование модульного тестирования и профилирования для поиска ошибок и производительности. узкие места и сбор проектной информации, полученной в ходе процесса. [12] Археология программного обеспечения также может быть услугой, предоставляемой программистам внешними консультантами. [13]
Профессия « программист-археолог » занимает видное место в научно-фантастическом романе Вернора Винджа 1999 года «Глубина в небе» . [14]
Без точной документации или доступа к знающим людям последним средством может стать анализ исходного кода устаревшей системы... Эту попытку часто называют археологией программного обеспечения.