핵심 인사이트

  1. 소프트웨어 산출물 검사(Software Deliverables Inspection)는 개발 생명주기의 각 단계에서 작성되는 문서·코드·테스트 결과물을 체계적으로 검토하여 결함을 조기 발견하는 품질 보증 활동으로 — Fagan이 증명한 바와 같이 결함을 개발 단계에서 발견하면 운영 단계보다 100배 저렴하다.
  2. 검사 유형은 동료 검토(Peer Review), 워크스루(Walkthrough), 인스펙션(Inspection), 감사(Audit)로 구분되며 — Fagan 인스펙션은 가장 공식적인 절차(계획→개요→준비→검사→수정→추적)로 역할 분리(작성자, 검사자, 진행자, 기록자)를 통해 결함 발견율을 최대화한다.
  3. ISO/IEC 20246(소프트웨어 검토 표준)과 CMMI의 검증·확인(V&V) 활동은 산출물 검사를 조직 프로세스로 내재화하는 체계를 제공하며 — 코드 리뷰 도구(GitHub PR, Gerrit, Crucible)의 확산으로 과거 수작업 검사가 자동화·통합된 CI/CD 기반 품질 게이트로 발전했다.

Ⅰ. 산출물 검사 개요

소프트웨어 산출물 검사:

결함 발견 비용의 법칙:
  요구사항 단계 결함 발견: 1배 비용
  설계 단계: 5배
  구현 단계: 10배
  테스트 단계: 20배
  인도 후/운영: 100배
  
  → 조기 검사가 ROI 최대화

산출물 유형별 검사:
  요구사항 단계:
    요구사항 명세서 (SRS)
    유스케이스 다이어그램
    
  설계 단계:
    소프트웨어 아키텍처 문서 (SAD)
    DB 설계서, 인터페이스 정의서
    
  구현 단계:
    소스 코드 (Code Review)
    단위 테스트 케이스
    
  테스트 단계:
    테스트 계획서, 테스트 케이스
    테스트 결과 보고서
    
  인도 단계:
    사용자 매뉴얼, 운영 매뉴얼
    설치 가이드

검사 유형 분류:
  비공식 검토 → 공식 인스펙션 (공식성 증가)
  Informal Review → Walkthrough → Peer Review → Inspection → Audit

📢 섹션 요약 비유: 산출물 검사는 음식점 위생 점검 — 재료(요구사항)부터 조리(코딩), 서빙(테스트)까지 각 단계에서 검사. 재료가 상했을 때 바로 버리는 게, 손님이 먹은 후보다 훨씬 저렴해요.


Ⅱ. Fagan 인스펙션

Fagan 인스펙션 (Fagan Inspection):
  Michael Fagan (IBM), 1976년 제안
  가장 공식적인 소프트웨어 검사 방법

역할:
  작성자 (Author): 산출물 작성자 (수정 책임)
  진행자 (Moderator): 검사 프로세스 조율
  검사자 (Inspector): 결함 발견 (여러 명)
  기록자 (Recorder): 결함 목록 문서화

6단계 프로세스:
  1. 계획 (Planning):
     검사 범위, 참가자, 일정 결정
     검사 체크리스트 준비
     
  2. 개요 (Overview):
     작성자가 검사자에게 문서 배경 설명 (선택적)
     
  3. 준비 (Preparation):
     각 검사자가 문서 개별 검토
     결함, 의문점 사전 기록
     
  4. 검사 회의 (Inspection Meeting):
     1~2시간 집중 검사
     검사자별 발견 결함 발표
     진행자가 기록자에게 결함 정리 지시
     
     규칙: 수정 방법 논의 금지 (결함 발견만)
     
  5. 수정 (Rework):
     작성자가 발견된 결함 수정
     
  6. 추적 (Follow-up):
     진행자가 수정 완료 여부 확인
     재검사 여부 결정

결함 분류:
  Major: 기능 요건 미충족
  Minor: 표준 위반, 명확성 부족
  Fatal: 심각한 오류 (즉시 중단)

효과 (IBM 연구):
  결함 발견율: 60~90%
  결함 제거 비용: 테스트보다 3~5배 저렴

📢 섹션 요약 비유: Fagan 인스펙션은 신문 교정 팀 — 기자(작성자), 교열 담당자(검사자), 편집장(진행자)이 각자 역할을 맡아 오탈자(결함)를 체계적으로 잡아내요. 혼자 교정보다 훨씬 정확.


Ⅲ. 코드 검토

코드 검토 (Code Review):

현대적 코드 검토 방법:

1. 동료 검토 (Peer Review):
   1명 작성자 + 1~3명 검토자
   GitHub Pull Request 기반
   
   GitHub PR 워크플로우:
   작성자: 기능 브랜치 → PR 생성
   검토자: 라인별 코멘트
   작성자: 수정 → 리뷰 재요청
   승인 후 머지
   
2. Gerrit (Google 내부 → 오픈소스):
   코드 변경 단위로 검토
   +2 (승인), +1 (동의), -1 (반대), -2 (거부)
   두 명의 +2 필요 → 머지

코드 검토 체크리스트:
  기능 정확성:
  - 요구사항 충족 여부
  - 엣지 케이스 처리
  - 에러 처리 완전성
  
  코드 품질:
  - 가독성 (변수명, 함수명)
  - 단일 책임 원칙 준수
  - 중복 코드 없음 (DRY)
  
  보안:
  - SQL 인젝션, XSS 취약점
  - 인증/인가 처리
  - 민감 정보 하드코딩 없음
  
  성능:
  - N+1 쿼리 문제
  - 불필요한 반복 연산
  
  테스트:
  - 단위 테스트 포함 여부
  - 테스트 커버리지

자동화 도구:
  SonarQube: 정적 분석 (버그, 취약점, 코드 스멜)
  ESLint/Pylint: 린트 (코딩 스타일, 잠재 오류)
  Snyk: 의존성 보안 취약점
  Codacy: 자동 코드 검토
  
  CI/CD 통합:
  PR 생성 시 자동 품질 게이트
  문제 있으면 머지 차단

📢 섹션 요약 비유: 코드 검토는 동료 출판 전 검수 — 혼자 쓴 논문(코드)을 동료(검토자)가 교정하고, 편집장(CI/CD)이 형식 검사. 서로 봐주면 실수가 적어요.


Ⅳ. 감사

소프트웨어 감사 (Software Audit):

소프트웨어 감사 유형:
  프로세스 감사 (Process Audit):
    개발 프로세스가 표준(CMM, ISO) 준수하는가?
    
  제품 감사 (Product Audit):
    산출물이 기준을 충족하는가?
    
  형상 감사 (Configuration Audit):
    형상 관리가 올바른가?
    소프트웨어 베이스라인 무결성 확인

FCA vs PCA (형상 감사):
  FCA (Functional Configuration Audit):
    소프트웨어가 기능 요건을 충족하는가?
    테스트 결과 검토
    
  PCA (Physical Configuration Audit):
    산출물이 승인된 문서와 일치하는가?
    소스코드 vs 설계서 일치 확인
    버전 관리 정확성

감사 프로세스:
  1. 감사 계획
  2. 감사 기준 정의 (체크리스트)
  3. 산출물 수집
  4. 현장 감사 (인터뷰, 문서 검토)
  5. 결과 보고 (결함, 권고사항)
  6. 후속 조치 확인

ISO 15504 (SPICE):
  소프트웨어 프로세스 성숙도 평가
  1~5단계:
  1. 수행됨 (Performed)
  2. 관리됨 (Managed)
  3. 확립됨 (Established)
  4. 예측됨 (Predictable)
  5. 최적화됨 (Optimizing)

📢 섹션 요약 비유: 소프트웨어 감사는 회사 재무 감사 — 장부(소스코드)와 설계서(계획)가 일치하는지, 프로세스(개발 방법)가 기준(표준)에 맞는지 외부 시각으로 점검.


Ⅴ. 실무 시나리오 — CI/CD 품질 게이트

CI/CD 통합 산출물 품질 게이트:

구성:
  GitHub PR → CI/CD 파이프라인 자동 검사

파이프라인 단계:
  1. 코드 정적 분석 (SonarQube):
     버그: 0개 (배포 차단)
     취약점: 0개 (Critical)
     코드 스멜: 10개 이하 (경고)
     커버리지: 80% 이상
     
  2. 보안 스캔 (Snyk):
     Critical 취약점 0개
     의존성 라이선스 검사
     
  3. 성능 테스트 (JMeter):
     API 응답 P99 < 500ms
     
  4. 코드 검토 승인:
     시니어 개발자 1명 이상 Approve

Quality Gate 구성 예:
  sonar-project.properties:
  sonar.qualitygate.wait=true
  
  조건:
  - Coverage < 80% → FAILED
  - New Bugs > 0 → FAILED
  - Security Hotspots Reviewed < 100% → FAILED

자동 검사 + 수동 검토 조합:
  자동화 (도구): 형식, 취약점, 커버리지
  수동 검토 (인간): 비즈니스 로직, 아키텍처 결정
  
  80/20 법칙: 자동화 80% + 수동 20%로
  최대 효과 달성

팀 성과 지표:
  PR 평균 검토 시간: 4시간 이내
  PR 통과율: 85% (처음 시도에서)
  배포 후 버그: 스프린트 당 2개 이하

📢 섹션 요약 비유: CI/CD 품질 게이트는 공항 보안 검색대 — 체크인(PR 생성) → 보안 검사(SonarQube/Snyk) → 탑승구 확인(코드 검토 승인) → 이륙(배포). 기준 미달은 탑승 거부!


📌 관련 개념 맵

소프트웨어 산출물 검사
+-- 검사 유형
|   +-- Walkthrough, Peer Review
|   +-- Fagan Inspection (공식)
|   +-- 감사 (Audit)
+-- 단계별 산출물
|   +-- SRS, SAD, 코드, 테스트 케이스
+-- 현대적 도구
|   +-- GitHub PR, Gerrit
|   +-- SonarQube, Snyk, ESLint
+-- 표준
|   +-- ISO 20246 (소프트웨어 검토)
|   +-- CMMI V&V

📈 관련 키워드 및 발전 흐름도

[Fagan Inspection (1976)]
IBM: 공식 소프트웨어 검사 방법론
역할 분리, 6단계 프로세스
      |
      v
[Walkthrough 표준화 (1980s)]
IEEE 표준
비공식 검토 체계화
      |
      v
[도구 지원 (1990s~)]
정적 분석 도구 (Lint)
버전 관리 + 코드 비교
      |
      v
[GitHub PR 문화 (2010s)]
오픈소스 코드 검토 표준화
분산 팀 협업 코드 검토
      |
      v
[현재: AI 코드 검토]
GitHub Copilot, CodeRabbit
자동 결함 탐지 + 개선 제안

👶 어린이를 위한 3줄 비유 설명

  1. 산출물 검사는 단계별 음식 품질 검사 — 재료 검사(요구사항), 조리 중 맛 보기(코드 검토), 최종 시식(테스트). 일찍 발견할수록 고치기 쉬워요!
  2. Fagan 인스펙션은 역할 분리 교정 팀 — 기자(작성자), 교열(검사자), 편집장(진행자)이 각자 역할로 더 많은 오류를 잡아내요.
  3. 현대는 CI/CD 자동 품질 게이트 — SonarQube, Snyk이 코드 공항 보안검색대. 기준 미달은 배포 자동 차단!