Археоло́гія програ́много забезпе́чення — вивчення погано, чи взагалі не документованої успадкованої системи, як елементу супроводження програмного забезпечення. [1] [2] Програмна археологія, названа по аналогії з археологією, [3] включає в себе обернену інженерію програмних модулів, і застосування різноманітних інструментів та процесів для виокремлення інформації розуміння інформації про проектування системи. [1] [4] Програмна археологія може розкрити дисфункціональні процеси в команді, які створили погано спроектовані чи навіть невикористовувані програмні модулі [5] Термін використовується протягом кількох десятиліть, [6] і відображає досить природну метафору: програміст що читає успадкований код може відчувати себе в ситуації аналогічній до тієї що відчуває себе археологом який досліджує нашарування стародавньої цивілізації [7]
Майстер-клас по програмній археології на конференції OOPSLA (Object-Oriented Programming, Systems, Languages & Applications) в 2001 виокремив наступні підходи в програмній археології, деякі з яких є специфічними для ООП:[7]
Узагальнюючи, Енді Хант та Дейв Томас відмітили важливість керування версіями, менеджменту залежностей, інструментів для індексування текстів на зразок GLIMPSE та SWISH-E, і «креслення карти на самому початку розвідки»[7]
Як і справжня археологія, програмна археологія включає дослідження для того щоб зрозуміти мисленнєві процеси попередників.[7] На семінарі OOPSLA, Вард Каннінгам запропонував спосіб що дозволяє «відчути» загальну організацію програми, показуючи тільки пунктуацію, наприклад лише крапки з комою та фігурні дужки.[8] В тому ж настрої Каннінгам запропонував переглядати код програми шрифтом розміром два пункти, щоб побачити структуру загалом.[9] Інший підхід запропонований на семінарі — використовувати аспектно-орієнтоване програмування, наприклад такі інструменти як AspectJ щоб систематично додавати код трасування не редагуючи успадковану програму на пряму.[7]
Програмна археологія продовжує бути предметом дискусії й на більш недавніх конференціях з розробки програмного забезпечення.[10]