Археология программного обеспечения или археология исходного кода — это изучение плохо документированных или недокументированных реализаций устаревшего программного обеспечения в рамках обслуживания программного обеспечения . [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]
Без точной документации или доступа к знающим людям вашим последним средством может стать анализ исходного кода унаследованной системы... Эти усилия часто называют программной археологией.