맨위로가기

소프트웨어 고고학

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

소프트웨어 고고학은 기존 소프트웨어 시스템을 이해하고, 분석하며, 문서화하는 데 사용되는 기법과 도구의 집합을 의미한다. 2001년 OOPSLA 컨퍼런스에서 다뤄진 내용을 바탕으로, 정적 분석, 동적 분석, 그리고 다양한 소프트웨어 시각화 도구, 리버스 엔지니어링 도구, 디버거 등이 소프트웨어 고고학의 핵심 기법으로 제시되었다. 소프트웨어 고고학은 레거시 시스템의 유지보수, 시스템 개선, 그리고 새로운 개발 프로젝트의 기반 마련에 기여하며, 프로그래머가 코드의 구조와 개발 과정을 파악하도록 돕는다.

더 읽어볼만한 페이지

  • 소프트웨어 유지 보수 - 기술 부채
    기술 부채는 소프트웨어 개발에서 발생하는 개념으로, 현재의 편의적인 설계가 미래에 추가적인 비용을 발생시키는 것을 의미하며, 다양한 원인으로 발생하여 개발 비용 증가, 프로젝트 지연, 경쟁력 약화 등의 부정적인 결과를 초래할 수 있다.
  • 소프트웨어 유지 보수 - 소프트웨어 유지보수
    소프트웨어 유지보수는 개발 후 발생하는 변경 및 수정 활동으로, 소프트웨어 자산 가치 유지 및 시스템 수명 연장에 중요한 역할을 하며, 오류 수정, 기능 개선, 진화, 융합, 지속적인 개선 및 발전 등을 포함하고 수정, 예방, 적응, 완전화 유지보수 등으로 분류된다.
  • 컴퓨터 용어 - 중앙 처리 장치
    중앙 처리 장치(CPU)는 컴퓨터 시스템의 핵심 부품으로, 프로그램 명령어를 해석하고 실행하여 데이터를 처리하는 장치이다.
  • 컴퓨터 용어 - 운영체제 서비스 관리
소프트웨어 고고학
소프트웨어 고고학
소프트웨어 고고학오래된 소프트웨어 시스템에서 지식 검색 및 복구
개요
목적기존 시스템에 대한 이해 증진 및 유지 관리, 현대화, 재구축 지원
관련 분야리버스 엔지니어링
소프트웨어 유지보수
소프트웨어 재공학
지식 관리
접근 방법
방법론정적 분석
동적 분석
문서 분석
인터뷰
도구정적 분석 도구
동적 분석 도구
시각화 도구
데이터 마이닝 도구
과제
주요 어려움불완전하거나 오래된 문서
지식 부족
복잡한 코드베이스
기술적 부채
극복 전략자동화 도구 활용
협업 및 지식 공유
점진적 접근
도메인 전문가 활용
응용 분야
활용 분야소프트웨어 마이그레이션
시스템 현대화
보안 취약점 분석
지적 재산권 보호
참고 문헌
참고 문헌Gregorio Robles, Jesus M. Gonzalez-Barahona, Israel Herraiz, "An Empirical Approach to Software Archaeology", Poster Proceedings of the International Conference on Software Maintenance, 2005
Scott W. Ambler, "Agile Legacy System Analysis and Integration Modeling", agilemodeling.com
Bryon Moyer, "Software Archeology: Modernizing Old Systems", Embedded Technology Journal, 2009년 3월 4일
Richard Hopkins, Kevin Jenkins, Eating the IT Elephant: Moving from greenfield development to brownfield, Addison-Wesley, 2008, p. 93, Chapter 5. The Mythical Metaman
Diomidis Spinellis, Georgios Gousios, Beautiful Architecture, O'Reilly, 2009, p. 29, Chapter 2. A Tale of Two Systems § Lack of Cohesion
Judith E. Grass, "Object-Oriented Design Archaeology with CIA++", Computing Systems, Vol. 5, No. 1, Winter 1992
32nd ACM/IEEE International Conference on Software Engineering, 2010년 5월

2. 기법

2001년 OOPSLA(객체 지향 프로그래밍, 시스템, 언어 및 응용 프로그램) 컨퍼런스에서 열린 소프트웨어 고고학 워크숍에서는 다음과 같은 소프트웨어 고고학 기법을 확인했으며, 이 중 일부는 객체 지향 프로그래밍에 특화되어 있다.[8]


  • 정적 보고서를 작성하고 진단 출력을 필터링하기 위한 스크립트 언어
  • HTML 페이지 또는 위키에 지속적으로 문서화
  • 개요 시그니처 분석, 통계 분석 및 소프트웨어 시각화 도구
  • 리버스 엔지니어링 도구
  • truss 또는 strace를 통한 운영 체제 수준 추적
  • 소스 파일에서 키워드를 검색하는 검색 엔진 및 도구
  • IDE 파일 탐색
  • JUnit 및 CppUnit과 같은 단위 테스트 프레임워크
  • Javadoc 및 doxygen과 같은 도구를 사용한 API 문서 생성
  • 디버거


더 일반적으로, 앤디 헌트와 데이브 토마스는 버전 관리, 종속성 관리, GLIMPSE 및 SWISH-E와 같은 텍스트 인덱싱 도구, 그리고 "[탐험을 시작할 때] 지도를 그리는 것"의 중요성을 언급한다.[8]

진정한 고고학처럼, 소프트웨어 고고학은 선임자의 사고 과정을 이해하기 위한 탐구 작업을 포함한다.[8] OOPSLA 워크숍에서 워드 커닝햄은 세미콜론 및 중괄호와 같은 구두점만 표시하여 프로그램에 대한 전반적인 "느낌"을 제공하는 개요 시그니처 분석 기법을 제안했다.[9] 같은 맥락에서 커닝햄은 전체 구조를 이해하기 위해 2포인트 글꼴로 프로그램을 볼 것을 제안했다.[10] 워크숍에서 확인된 또 다른 기술은 기존 프로그램을 직접 편집하지 않고도 추적 코드를 체계적으로 도입하기 위해 AspectJ와 같은 관점 지향 프로그래밍 도구를 사용하는 것이었다.[8]

네트워크 및 시간 분석 기술은 레거시 소프트웨어 개발자의 협업 활동 패턴을 밝힐 수 있으며, 이는 결과적으로 생성된 소프트웨어 아티팩트의 강점과 약점을 파악하는 데 도움이 될 수 있다.[11]

엠바카데로 테크놀로지스(Embarcadero Technologies)의 마이클 로즐로그는 소프트웨어 고고학을 프로그래머가 "방금 무엇을 물려받았는가?" 및 "코드의 무서운 부분은 어디인가?"와 같은 질문에 답할 수 있도록 하는 6단계 프로세스로 설명했다.[12] OOPSLA 워크숍에서 확인된 단계와 유사하게, 시각화를 사용하여 프로그램의 디자인을 시각적으로 표현하고, 소프트웨어 메트릭을 사용하여 디자인 및 스타일 위반을 찾고, 단위 테스트 및 프로파일링을 사용하여 버그 및 성능 병목 현상을 찾고, 프로세스에서 복구된 설계 정보를 조립하는 것 등을 포함한다.[12] 소프트웨어 고고학은 또한 외부 컨설턴트가 프로그래머에게 제공하는 서비스가 될 수 있다.[13]

2. 1. 정적 분석 기법

정적 분석은 소프트웨어를 실행하지 않고 코드를 분석하는 기법이다.[8]

  • 소스 코드 분석 도구: 소스 코드의 구조, 복잡도, 잠재적 결함 등을 분석한다.
  • 개요 시그니처 분석: 워드 커닝햄이 제안한 기법으로, 세미콜론 및 중괄호와 같은 구두점만 표시하여 프로그램에 대한 전반적인 "느낌"을 파악한다.[9]
  • 소프트웨어 시각화 도구: 소프트웨어의 구조를 시각적으로 표현하여 이해를 돕는다. 워드 커닝햄은 전체 구조를 이해하기 위해 2포인트 글꼴로 프로그램을 볼 것을 제안했다.[10]
  • 리버스 엔지니어링 도구: 실행 파일로부터 소스 코드를 역으로 추적한다.
  • 검색 엔진 및 도구: 소스 파일에서 키워드를 검색한다.
  • IDE 파일 탐색: IDE의 기능을 활용하여 코드 구조를 파악한다.
  • API 문서 생성: Javadoc, doxygen 등의 도구를 사용하여 API 문서를 생성한다.[8]
  • 스크립트 언어: 정적 보고서를 작성하고 진단 출력을 필터링하는 데 사용된다.[8]
  • 문서화: HTML 페이지 또는 위키를 통해 지속적으로 문서화한다.[8]

2. 2. 동적 분석 기법

동적 분석은 소프트웨어를 실행하면서 동작을 분석하는 기법이다.[8]

  • 운영 체제 수준 추적: truss, strace 등을 통해 시스템 호출을 추적한다.[8]
  • 단위 테스트: JUnit, CppUnit 등의 프레임워크를 사용하여 개별 모듈의 동작을 검증한다.[8]
  • 디버거: 프로그램 실행 중 오류를 찾고 수정한다.[8]
  • 프로파일링: 프로그램의 성능 병목 현상을 찾는다.[12]
  • 관점 지향 프로그래밍(AOP): AspectJ 등을 사용하여 추적 코드를 체계적으로 삽입한다. (기존 코드 수정 없이)[8]

2. 3. 기타 기법

OOPSLA(객체 지향 프로그래밍, 시스템, 언어 및 응용 프로그램) 컨퍼런스에서 열린 소프트웨어 고고학 워크숍에서는 다음과 같은 소프트웨어 고고학 기법들이 확인되었다.[8]

  • 정적 보고서 작성 및 진단 출력을 필터링하기 위한 스크립트 언어
  • HTML 페이지 또는 위키에 지속적으로 문서화
  • 개요 시그니처 분석, 통계 분석 및 소프트웨어 시각화 도구
  • 리버스 엔지니어링 도구
  • truss 또는 strace를 통한 운영 체제 수준 추적
  • 소스 파일에서 키워드를 검색하는 검색 엔진 및 도구
  • IDE 파일 탐색
  • JUnit 및 CppUnit과 같은 단위 테스트 프레임워크
  • Javadoc 및 doxygen과 같은 도구를 사용한 API 문서 생성
  • 디버거


일반적으로 앤디 헌트와 데이브 토마스는 버전 관리(소프트웨어 변경 이력을 추적), 종속성 관리(소프트웨어 구성 요소 간의 의존성을 관리), GLIMPSE 및 SWISH-E와 같은 텍스트 인덱싱 도구(코드를 빠르게 검색)를 언급한다.[8]

워드 커닝햄은 세미콜론 및 중괄호와 같은 구두점만 표시하여 프로그램에 대한 전반적인 "느낌"을 제공하는 개요 시그니처 분석 기법을 제안했다.[9] 또한 전체 구조를 이해하기 위해 2포인트 글꼴로 프로그램을 볼 것을 제안했다.[10] 기존 프로그램을 직접 편집하지 않고도 추적 코드를 체계적으로 도입하기 위해 AspectJ와 같은 관점 지향 프로그래밍 도구를 사용하는 기법도 확인되었다.[8]

네트워크 및 시간 분석 기술은 레거시 소프트웨어 개발자의 협업 활동 패턴을 밝혀 엠바카데로 테크놀로지스(Embarcadero Technologies)와 같은 소프트웨어 아티팩트의 강점과 약점을 파악하는 데 도움을 줄 수 있다.[11]

3. 단계

4. 대중 문화

버너 빈지의 1999년 SF 소설 스카이의 심연에는 "프로그래머-고고학자"라는 직업이 주요하게 등장한다.

5. 한국 IT 산업에서의 중요성

6. 관련 도구

참조

[1] 웹사이트 An Empirical Approach to Software Archaeology http://herraiz.org/p[...] 2005
[2] 웹사이트 Agile Legacy System Analysis and Integration Modeling http://www.agilemode[...] agilemodeling.com 2010-08-20
[3] 간행물 Software Archeology: Modernizing Old Systems http://adm.omg.org/d[...] 2009-03-04
[4] 서적 Eating the IT Elephant: Moving from greenfield development to brownfield Addison-Wesley
[5] 서적 Beautiful Architecture O'Reilly
[6] 간행물 Object-Oriented Design Archaeology with CIA++ http://www.usenix.or[...] 1992
[7] 웹사이트 32nd ACM/IEEE International Conference on Software Engineering http://portal.acm.or[...] 2010-05
[8] 간행물 Software Archaeology http://media.pragpro[...] 2002-03
[9] 웹사이트 Signature Survey: A Method for Browsing Unfamiliar Code http://c2.com/doc/Si[...] 2001
[10] 웹사이트 Software Archeology http://www.johndcook[...] 2009-11-10
[11] 서적 Proceedings of the 2005 International ACM SIGGROUP Conference on Supporting Group Work
[12] 웹사이트 Software Archeology: What Is It and Why Should Java Developers Care? http://java.sys-con.[...] java.sys-con.com 2008-01-28
[13] 웹사이트 Raiders of the Lost Code https://www.zdnet.co[...] ZDNet 2004-11-03
[14] 웹사이트 Software archaeology and technical debt http://garethrees.or[...] 2013-06-12
[15] 웹사이트 소프트웨어 고고학에 대한 경험적 접근 http://herraiz.org/p[...] 2005
[16] 문서 Agile Legacy System Analysis and Integration Modeling http://www.agilemode[...] agilemodeling.com 2010-08-20
[17] 문서 소프트웨어 고고학 : 오래된 시스템 현대화 http://adm.omg.org/d[...] Embedded Technology Journal 2009-03-04
[18] 서적 IT 코끼리 먹기 : 그린 필드 개발에서 브라운 필드로 이동 https://books.google[...] Addison-Wesley
[19] 서적 Beautiful Architecture https://books.google[...] O'Reilly
[20] 문서 CIA ++의 객체 지향 디자인 고고학 http://www.usenix.or[...] Computing Systems 1992
[21] 문서 Software Archeology http://media.pragpro[...] IEEE Software 3월



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com