💡 핵심 인사이트
백파이어링(Backfiring) 기법은 이미 측정된 소스 코드의 줄 수(LOC)를 이용해 기능점수(FP)로 역산하거나, 반대로 FP를 LOC로 변환할 때 사용하는 **'환산 비율 기법'**입니다.
서로 다른 프로그래밍 언어로 작성된 레거시 시스템들의 규모를 통일된 척도(FP)로 재평가할 때 유용합니다.
Ⅰ. 백파이어링 기법의 개념
자동차의 속도를 마일(mph)에서 킬로미터(km/h)로 변환하듯, 소프트웨어의 규모를 측정하는 두 가지 핵심 지표인 **LOC(Line of Code)**와 FP(Function Point) 사이를 넘나들며 변환하는 수학적 추정 기법입니다.
- 이름의 유래: 내연기관 엔진에서 불꽃이 거꾸로 튀는 현상(역화, Backfire)처럼, 완성된 코드의 결과물(LOC)을 보고 거꾸로 설계 단계의 기능 규모(FP)를 추적해 낸다는 의미에서 붙여진 이름입니다.
Ⅱ. 왜 변환이 필요한가?
- 레거시 시스템 유지보수 비용 재산정 수십 년 된 은행 시스템은 C언어로 100만 줄(LOC)이 짜여 있고, 최근에 만든 시스템은 Java로 10만 줄이 짜여 있습니다. 두 시스템의 유지보수 예산을 공정하게 배분하려면 줄 수가 아니라 "사용자에게 제공하는 기능(FP)이 몇 점인가?"로 통일해야 합니다. 이때 수백만 줄의 코드를 보고 일일이 FP를 다시 세는 것은 불가능하므로, 백파이어링을 통해 환산합니다.
- COCOMO II 모델에서의 활용 COCOMO II 초기 설계 단계에서는 FP로 산정하다가, 코딩 단계로 넘어가면 정밀한 계산을 위해 FP를 LOC로 역산해야 할 때 사용합니다.
Ⅲ. 환산 원리와 기어비 (Gear Ratio)
백파이어링의 핵심은 프로그래밍 언어마다 1개의 기능점수(1 FP)를 구현하는 데 필요한 평균적인 코드 라인 수가 다르다는 통계(QSM 등)를 이용하는 것입니다. 이를 **언어별 환산 계수(Gear Ratio)**라고 부릅니다.
대표적인 언어별 환산 계수 (예시)
| 프로그래밍 언어 | 1 FP 구현에 필요한 평균 LOC | 언어 레벨 |
|---|---|---|
| 어셈블리어 (Assembly) | 320 LOC | 초저급 (길고 복잡함) |
| C 언어 | 128 LOC | 저급 |
| Java / C++ | 53 LOC | 고급 (객체지향) |
| SQL | 13 LOC | 최고급 (비절차적) |
계산 예시
문제: C언어로 12,800 라인(LOC)으로 작성된 프로그램이 있다. 이를 기능점수(FP)로 환산하면?
- 계산: 12,800 LOC ÷ 128 (C언어 환산 계수) = 100 FP
- 해석: 이 C언어 프로그램은 사용자 관점에서 100점짜리 규모의 기능을 제공하는 소프트웨어입니다. 이를 향후 Java로 재개발한다면 대략
100 FP × 53 = 5,300 LOC정도의 코드가 나올 것이라 예측할 수 있습니다.
📢 섹션 요약 비유: 백파이어링은 환율 계산기와 같습니다. 100만 원(LOC)과 1,000달러(LOC)가 있을 때, 각각의 통화 환율(언어별 환산 계수)을 적용해 '금 10돈(FP)'이라는 절대적인 가치 기준으로 통일시켜 누구의 자산이 더 큰지 비교하는 작업입니다.