1. 소프트웨어 기술 부채 (Technical Debt)의 개요
(1) 기술 부채의 개념 및 특징
| 개념 | 특징 |
|---|---|
| 현 시점에서 장기적으로 더 나은 접근 방식 대신 쉽고 제한된 솔루션을 채택함으로써 발생되는 추가적인 재작업의 비용을 반영하는 소프트웨어 개발 관점 | – 단기적 이익, 장기적 불이익 – 부채 측정이 어려움 – 부채 채무자 ≠ 상환자 – 누적 시 품질 비용 급상승 |
(2) 소프트웨어 영역 내 기술 부채의 위치
- 촉박한 개발 일정 등 단기적 문제 해결을 위해 장기적으로 선택하지 말아야할 방안을 선택함으로써 미래의 비용을 먼저 사용하여 부채 발생
2. 기술 부채의 원인 및 유형
(1) 기술 부채의 원인
| 구분 | 원인 | 영향도 |
|---|---|---|
| 시간/자원 제약 측면 | 빠른 개발 일정 압박 | – 제품 출시나 마감 일정 촉박 시 임시방편 코딩, 테스트 부족 |
| 예산 또는 인력 부족 | – 제한 자원 내 최소 기능, 결과추구로 부적합 설계, 문서화 부족 | |
| 정보/기술 역량 부족 측면 | 경험/기술 역량 부족 | – 지식, 경험, 트렌드 이해 부족으로 낮은 코드/설계 품질 반복 |
| 리팩토링 인식 부족 | – 구조 변경 시 리팩토링 미수행, 설계 악취, 스파게티 코드 발생 | |
| 프로세스 미흡 측면 | 커뮤니케이션 부족 | – 팀원 간 소통 부족으로 코드 스타일 및 아키텍처 일관성 저하 |
| 테스트/문서화 부족 | – 테스트 및 문서화 부족으로 코드의 신뢰성, 재사용성 저하 |
(2) 기술 부채 유형과 주요 사례
| 유형 | 주요 사례 | 사례 상세 설명 |
|---|---|---|
| 설계 부채 | 설계 악취, 설계 규칙 위반 | – 모듈성 부족(결합도 상승, 응집도 저하) – 개발 일정 초점을 맞추어 잦은 규칙 위반 |
| 코드 부채 | 정적 분석 도구 위반 code convention 위반 | – code review 무시하거나 생략 – 개발 가이드라인 미준수 또는 Formatter 기능 미활용 |
| 테스트 부채 | 테스트 방법론 부재 불충분한 테스트 커버리지 | – DevOps나 Agile 방법론에 따른 테스트 방법론 부재 – 전문 QA 계획서 부재 / 일정 부족 |
| 문서 부채 | 문서 산출물 누락 신기술 문서화 미수행 | – 주요 산출물(화면설계서, 인터페이스설계서 등) 누락 – 신기술 도입에 따른 현행 버전 문서화 미수행 |
- 상기 유형 외에도 인프라 부채, 보안 부채 등의 소프트웨어 환경 측면 부채 유형 존재
- 기술 부채 발생 시 소프트웨어 품질 및 안정성 저하에 따른 위험 비용과 향후 개발비용이 증가되므로 프로젝트에서 관리하고 소프트웨어를 개선하여 기술 부채 허용 범위 내 관리 필요
3. 기술 부채 관리 방안
| 구분 | 관리 방안 | 주요 활동 내용 |
|---|---|---|
| 프로젝트 관리 측면 | 기술 부채 추정 및 평가 | – 기술 부채의 정량적 파악 및 문서화 – 정기적 리뷰 수행, 부채 총량을 수치화 |
| 부채 우선순위 및 상환방안 수립 | – 무중단 운영 방안 통한 부채 상환 – DevOps 도입, 측정 가능한 산출물 작성 | |
| 프로젝트 위험관리 | – 잠재 위험 식별 및 분석 수행 – 민감도 분석, 의사결정나무 | |
| 소프트웨어 개선 측면 | Agile 방법론 적용 | – 민첩성 높은 방법론, XP, SCRUM, Kanban – TDD (Test Driven Development) |
| 리팩토링 수행 | – 코드의 Bad smell 식별 및 제거 – 메소드 추출, 신규 클래스 생성, Renaming | |
| 자동화 테스트 및 배포 도구 적용 | – 자동화 스크립트 작성 및 무중단 배포 – Coverity, SonarQube, 카나리 배포 |
- 기술 부채가 무조건 나쁜 것만은 아니고 빠른 시장 변화에 맞추어 신속한 서비스 오픈 등 비즈니스 전략을 위해 관리 가능한 범위 내에서 의도적으로 기술 부채를 발생시켜 시장 선점에 활용 가능
[참고]
- Tim Mucci, IBM, 기술 부채란 무엇인가요
- 기리쉬 서야나라야나 외, 길벗, 소프트웨어 악취를 제거하는 리팩토링, 2015