X

소프트웨어 기술 부채 (Technical Debt)

1. 소프트웨어 기술 부채 (Technical Debt)의 개요

(1) 기술 부채의 개념 및 특징

개념 특징
현 시점에서 장기적으로 더 나은 접근 방식 대신 쉽고 제한된 솔루션을 채택함으로써 발생되는 추가적인 재작업의 비용을 반영하는 소프트웨어 개발 관점 – 단기적 이익, 장기적 불이익
– 부채 측정이 어려움
– 부채 채무자 ≠ 상환자
– 누적 시 품질 비용 급상승

(2) 소프트웨어 영역 내 기술 부채의 위치

  • 촉박한 개발 일정 등 단기적 문제 해결을 위해 장기적으로 선택하지 말아야할 방안을 선택함으로써 미래의 비용을 먼저 사용하여 부채 발생

 

2. 기술 부채의 원인 및 유형

(1) 기술 부채의 원인

구분 원인 영향도
시간/자원
제약 측면
빠른 개발 일정 압박 – 제품 출시나 마감 일정 촉박 시 임시방편 코딩, 테스트 부족
예산 또는 인력 부족 – 제한 자원 내 최소 기능, 결과추구로 부적합 설계, 문서화 부족
정보/기술
역량 부족 측면
경험/기술 역량 부족 – 지식, 경험, 트렌드 이해 부족으로 낮은 코드/설계 품질 반복
리팩토링 인식 부족 – 구조 변경 시 리팩토링 미수행, 설계 악취, 스파게티 코드 발생
프로세스
미흡 측면
커뮤니케이션 부족 – 팀원 간 소통 부족으로 코드 스타일 및 아키텍처 일관성 저하
테스트/문서화 부족 – 테스트 및 문서화 부족으로 코드의 신뢰성, 재사용성 저하

(2) 기술 부채 유형과 주요 사례

유형 주요 사례 사례 상세 설명
설계 부채 설계 악취, 설계 규칙 위반 모듈성 부족(결합도 상승, 응집도 저하)
– 개발 일정 초점을 맞추어 잦은 규칙 위반
코드 부채 정적 분석 도구 위반
code convention 위반
– code review 무시하거나 생략
– 개발 가이드라인 미준수 또는 Formatter 기능 미활용
테스트 부채 테스트 방법론 부재
불충분한 테스트 커버리지
DevOpsAgile 방법론에 따른 테스트 방법론 부재
– 전문 QA 계획서 부재 / 일정 부족
문서 부채 문서 산출물 누락
신기술 문서화 미수행
– 주요 산출물(화면설계서, 인터페이스설계서 등) 누락
– 신기술 도입에 따른 현행 버전 문서화 미수행
  • 상기 유형 외에도 인프라 부채, 보안 부채 등의 소프트웨어 환경 측면 부채 유형 존재
  • 기술 부채 발생 시 소프트웨어 품질 및 안정성 저하에 따른 위험 비용과 향후 개발비용이 증가되므로 프로젝트에서 관리하고 소프트웨어를 개선하여 기술 부채 허용 범위 내 관리 필요

 

3. 기술 부채 관리 방안

구분 관리 방안 주요 활동 내용
프로젝트
관리 측면
기술 부채 추정 및 평가 – 기술 부채의 정량적 파악 및 문서화
– 정기적 리뷰 수행, 부채 총량을 수치화
부채 우선순위 및
상환방안 수립
– 무중단 운영 방안 통한 부채 상환
DevOps 도입, 측정 가능한 산출물 작성
프로젝트 위험관리 – 잠재 위험 식별 및 분석 수행
– 민감도 분석, 의사결정나무
소프트웨어
개선 측면
Agile 방법론 적용 – 민첩성 높은 방법론, XPSCRUM, Kanban
TDD (Test Driven Development)
리팩토링 수행 코드의 Bad smell 식별 및 제거
– 메소드 추출, 신규 클래스 생성, Renaming
자동화 테스트 및
배포 도구 적용
– 자동화 스크립트 작성 및 무중단 배포
– Coverity, SonarQube, 카나리 배포
  • 기술 부채가 무조건 나쁜 것만은 아니고 빠른 시장 변화에 맞추어 신속한 서비스 오픈 등 비즈니스 전략을 위해 관리 가능한 범위 내에서 의도적으로 기술 부채를 발생시켜 시장 선점에 활용 가능

 

[참고]

  • Tim Mucci, IBM, 기술 부채란 무엇인가요
  • 기리쉬 서야나라야나 외, 길벗, 소프트웨어 악취를 제거하는 리팩토링, 2015
도리: