본문으로 건너뛰기
고급약 35분

Test basis 현행화 — 요구사항명세서·화면설계서와 실제 구현의 어긋남을 AI로 찾아 갱신하기

개발은 코드가 곧 최신본이지만 요구사항명세서와 화면설계서는 오픈 이후 거의 갱신되지 않는다. 낡은 test basis로 설계한 테스트는 멀쩡한 기능을 결함으로, 진짜 결함을 정상으로 판정한다. 이 레슨은 ISTQB의 test basis 정의에서 출발해 문서와 구현이 어긋나는 유형을 나누고, 변경 이력·티켓·화면 캡처를 근거로 AI가 차이표를 만들게 하는 법, 문서를 고칠지 구현을 고칠지 판정하는 승인 절차, 그리고 갱신 후에도 추적성 매트릭스를 끊기지 않게 유지하는 법을 다룬다.

  • #testbasis
  • #문서드리프트
  • #요구사항현행화
  • #화면설계서
  • #추적성매트릭스
  • #변경관리

개념

Test basis — 테스트가 기대는 지식의 몸통

ISTQB 용어집은 test basis를 테스트 분석과 설계의 근거로 쓰이는 지식의 총체 로 정의한다. 덧붙인 설명이 중요하다. test basis는 요구사항명세서·설계명세서 같은 문서일 수도 있지만, 문서화되지 않은 요구 동작에 대한 이해 일 수도 있다.

이 정의를 현장에 대 보면 불편한 사실이 드러난다. 많은 조직에서 실제 test basis는 문서가 아니라 사람의 머릿속이다. 명세서에는 "비밀번호 8자 이상"이라고 되어 있지만 3년 전 보안 점검 이후 "10자 이상, 특수문자 포함"으로 바뀌었고, 그 사실은 개발자와 오래된 QA 담당자만 안다. 신입 QA나 AI 테스트 에이전트가 명세서를 test basis로 삼으면 틀린 기준으로 정확하게 테스트한다.

낡은 test basis가 만드는 오판예
정상을 결함으로명세서 "8자 이상" 기준으로 9자 비밀번호 거부를 결함 보고
결함을 정상으로명세서에 없는 새 할인 정책의 계산 오류를 아무도 검증하지 않음
커버리지 착시명세서 요구사항 100% 커버, 그러나 실제 기능의 30%는 명세서에 없음

AI 에이전트가 테스트를 설계하는 조직(레슨 1)에서는 문제가 더 커진다. 사람 QA는 이상하면 개발자에게 물어보지만, 에이전트는 문서를 믿고 수백 개 케이스를 펼친다. AI의 판정은 기준보다 정확할 수 없고, 기준은 test basis보다 정확할 수 없다.

왜 문서만 낡는가

개발 산출물은 현행화 압력을 받는다. 코드는 틀리면 돌아가지 않고, DB 스키마는 맞지 않으면 오류가 난다. 반면 명세서와 화면설계서는 틀려도 아무것도 멈추지 않는다. 그래서 변경은 이렇게 흘러간다.

요청(티켓) → 개발(코드 변경) → 배포           ← 여기까지는 반드시 일어난다
                    ↘ 명세서 갱신 ✗           ← 일정에 밀려 생략
                    ↘ 화면설계서 갱신 ✗       ← 디자인 도구 원본만 갱신, 문서는 그대로
                    ↘ 테스트 케이스 갱신 △    ← 실패한 케이스만 고침

결과적으로 변경의 진짜 기록은 티켓·커밋·PR·배포 노트 에 흩어지고, 문서는 오픈 시점의 사진으로 남는다. 개발에 비해 test basis의 현행화가 뒤처지는 구조적 이유다. 현행화는 흩어진 변경 기록을 다시 문서로 모으는 일이고, 이 수집과 대조가 AI가 잘하는 일이다.

드리프트 유형 — 어긋남에도 종류가 있다

문서와 구현의 어긋남을 드리프트(drift) 라고 부르자. 종류에 따라 찾는 방법과 처리가 다르다.

유형정의예주로 찾는 근거
누락구현에는 있고 문서에 없음간편 로그인 추가, 문서는 아이디 로그인만화면 캡처, 라우트 목록, 티켓
잔존문서에는 있고 구현에서 사라짐팩스 번호 입력 필드 삭제화면 캡처, 코드 검색
값 불일치같은 항목의 수치·조건이 다름비밀번호 8자 vs 10자검증 코드, API 명세
흐름 불일치단계 순서·분기가 다름본인인증이 가입 마지막에서 처음으로 이동E2E 녹화, 화면 전이 로그
문구 불일치메시지·라벨이 다름"주문 완료" vs "주문 접수"화면 캡처, 다국어 리소스 파일
용어 불일치같은 대상을 다른 이름으로문서 "회원", 화면 "고객", DB "user"용어 사전, 스키마
정책 불일치업무 규칙이 다름반품 기한 7일 vs 14일약관, 정책 문서, 설정 값

용어 불일치를 먼저 정리하지 않으면 차이표가 거짓 드리프트로 가득 찬다(레슨 4).

근거의 위계 — 무엇을 믿고 비교하는가

드리프트를 찾으려면 문서와 비교할 현재 상태의 근거 가 필요하다. 근거마다 신뢰도가 다르다.

순위근거장점한계
1운영 환경 화면 캡처·E2E 녹화사용자가 실제로 보는 것권한·데이터에 따라 다르게 보임
2코드·설정·API 명세(OpenAPI)정확한 값과 조건업무 의미는 없음
3승인된 티켓·PR 설명변경의 이유가 있음반려·롤백 여부 확인 필요
4배포 노트·운영 공지사용자에게 공개된 변경세부 조건 생략
5회의록·메신저맥락이 풍부결정이 번복됐을 수 있음

규칙은 이렇다. "구현이 지금 어떤가"는 1·2순위로, "왜 바뀌었나"는 3·4순위로 확인한다. 5순위만으로 드리프트를 확정하지 않는다. 티켓은 특히 주의한다. "비밀번호 정책 강화" 티켓이 있어도 반려되었거나 배포 후 롤백됐을 수 있다. 티켓 상태와 해당 커밋의 배포 여부를 함께 확인해야 근거가 된다.

AI로 차이표 만들기 — 입력과 출력의 계약

AI에게 "명세서와 실제 화면 비교해 줘"라고 하면 그럴듯한 목록이 나오지만 검증할 수 없다. 입력과 출력을 계약으로 정한다.

[입력]
1. 대상 문서 단위: 요구사항 ID 목록 (예: REQ-MEM-001 ~ 045), 화면 ID (SCR-MEM-01 ~ 08)
2. 현재 상태 근거: 화면 캡처(운영, 기준일 명시), 검증 코드 경로, OpenAPI 파일
3. 변경 이력: 문서 최종 갱신일 이후의 티켓·PR 목록(상태 포함)
4. 용어 사전: 문서 용어 ↔ 화면 용어 ↔ 코드 식별자 대응표
 
[출력 — 차이 한 건마다]
- 차이 ID, 요구사항/화면 ID, 드리프트 유형
- 문서 내용 (원문 인용)
- 현재 구현 (근거 위치와 함께 인용)
- 변경 근거 후보 (티켓/PR 번호, 없으면 "없음")
- 판정 제안: 문서 갱신 / 결함 후보 / 확인 필요
- 신뢰도와 그 이유
 
[금지]
- 근거 인용 없이 차이를 주장하지 않는다
- 변경 근거 티켓이 없는 차이를 "문서 갱신"으로 제안하지 않는다

마지막 금지 조항이 핵심이다. 티켓 없이 구현만 바뀐 경우는 누군가 승인 없이 바꿨거나 결함일 수 있다. AI가 이를 "문서를 현재에 맞춰 고치자"로 제안하면 결함이 문서로 세탁된다(레슨 2와 같은 구조).

출력된 차이표는 이런 모양이다.

차이 ID대상유형문서구현(근거)변경 근거제안
D-012REQ-MEM-007값 불일치비밀번호 8자 이상10자 이상·특수문자 (PasswordPolicy.kt:14)SEC-2231 완료·배포문서 갱신
D-013SCR-MEM-03누락(없음)간편 로그인 버튼 3종 (운영 캡처 09-30)MEM-880 완료문서 갱신
D-014REQ-MEM-019정책 불일치탈퇴 후 30일 재가입 제한제한 없음 (MemberService.kt:203 분기 없음)없음결함 후보
D-015SCR-MEM-05문구 불일치"가입을 축하합니다""환영합니다" (ko.json:88)없음확인 필요

D-014가 이 작업의 진짜 수확이다. 재가입 제한은 부정 가입 방지 정책일 가능성이 높은데, 구현에서 빠져 있고 변경 근거가 없다. 현행화 작업이 결함 발견 작업 이 되는 순간이다.

문서를 고칠 것인가, 구현을 고칠 것인가

차이 한 건에는 두 가지 해결 방향이 있다. 이것을 정하는 것은 AI가 아니라 사람이다. 판정 기준을 미리 합의해 둔다.

변경 근거 티켓이 있고, 배포되었고, 기획 승인이 있다     → 문서 갱신
변경 근거가 없고, 정책·약관·법규와 어긋난다            → 결함 등록 (구현 수정)
변경 근거가 없고, 정책 근거도 없다                     → 기획에 확인 요청 (보류)
문구·용어만 다르고 의미가 같다                         → 용어 사전 갱신 후 일괄 문서 갱신

갱신 승인 절차 — 상태를 가진 차이

차이표는 한 번 만들고 끝나는 보고서가 아니라 상태를 가진 작업 목록 이다. 이슈 트래커에 차이 하나를 하나의 항목으로 올리고 상태를 옮긴다.

발견(AI 제안) → 검토 중(QA) → 판정 대기(기획) → 문서 갱신 완료 / 결함 등록 / 보류
                     ↓
              근거 부족 → 반려 (AI 오탐으로 기록)

QA는 근거와 드리프트의 진위를 검토하고, 기획은 문서 갱신인지 결함인지 판정하며, 문서 담당은 갱신 후 문서 버전을 차이 항목에 남긴다. 반려된 차이는 지우지 않고 AI 오탐 으로 기록한다. 오탐 유형이 쌓이면 입력 계약이나 용어 사전을 고칠 근거가 된다(예: 권한별 화면 차이를 드리프트로 잘못 잡는 경우).

추적성 매트릭스 — 갱신해도 끊기지 않게

모듈 2 레슨 5에서 배운 추적성 매트릭스는 요구사항 ↔ 테스트 조건 ↔ 테스트 케이스 ↔ 결함을 잇는다. 현행화의 가장 큰 부작용은 이 연결이 끊어지는 것이다. 문서를 새로 쓰면서 요구사항 ID를 다시 매기면 기존 테스트와 결함이 모두 고아가 된다.

원칙방법
ID는 바꾸지 않는다내용이 바뀌어도 REQ-MEM-007은 REQ-MEM-007. 버전만 올린다
삭제는 표시로잔존 드리프트로 삭제된 요구사항은 "폐기" 상태로 두고 연결된 테스트를 폐기 검토로 넘긴다
신규는 새 ID누락 드리프트로 추가된 요구사항은 새 ID, 출처 차이 ID를 기록
영향 전파값이 바뀐 요구사항에 연결된 테스트 케이스는 자동으로 "재검토 필요" 표시
REQ-MEM-007 v1 → v2 (D-012, SEC-2231)
  ├─ TC-MEM-021 비밀번호 8자 허용      → 재검토 필요 → 기대값 수정 (10자)
  ├─ TC-MEM-022 비밀번호 7자 거부      → 재검토 필요 → 경계 수정 (9자 거부)
  └─ BUG-5520 (종결) 8자 비밀번호 거부 → "명세 낡음으로 인한 오보고" 태그

마지막 줄을 보라. 과거에 "결함"으로 보고됐다가 종결된 항목 중 일부는 사실 낡은 test basis가 만든 오보고였다. 현행화하면서 이런 항목을 태그해 두면 "명세 낡음으로 낭비된 비용"을 숫자로 보여 줄 수 있고, 현행화에 예산을 받는 근거가 된다. 연구 쪽에서도 요구사항 변경이 제대로 전파되지 않아 생기는 잘못되거나 빠진 추적 링크를 LLM과 검색 증강 생성(RAG)으로 검증·복구하는 접근이 산업 데이터로 평가되고 있다. 다만 연구의 높은 정확도 수치는 특정 도메인·데이터에서 나온 것이므로, 우리 조직에서는 샘플을 사람이 검수해 오탐률을 직접 재야 한다.

한 번이 아니라 계속 — PR 단위 드리프트 검사

현행화를 분기에 한 번 하는 큰 작업으로 두면 다시 낡는다. 목표는 드리프트가 생기는 순간 잡는 것이다.

  • PR 단위 검사: 화면·검증 로직·API 명세가 바뀌는 PR에 연결된 요구사항 ID가 있는지, 그 요구사항 문서가 같이 바뀌었는지 확인한다. 문서 변경이 없으면 "test basis 갱신 필요" 라벨을 단다.
  • 스펙 주도 개발과의 연결: GitHub Spec Kit처럼 명세를 먼저 쓰고 에이전트가 명세에서 계획·작업·코드를 만드는 방식은 명세를 "살아 있는 산출물"로 다루려 한다. 이런 조직에서는 명세가 코드보다 먼저 바뀌므로 드리프트 방향이 반대(명세는 바뀌었는데 구현이 안 따라옴) 가 되고, QA는 그 반대 방향 드리프트를 검사한다.
  • 정기 전수 대조: PR을 거치지 않는 변경(설정 값, 외부 시스템)이 있으므로 월 단위로 화면 캡처 기반 대조를 돌린다.

실무에서 왜 필요한가

AI 테스트 설계 에이전트를 도입한 조직이 가장 먼저 겪는 실망은 "AI가 만든 케이스가 엉뚱하다"는 것이다. 원인을 파면 대개 에이전트가 아니라 입력이다. 3년 묵은 명세서를 넣었으니 3년 전 시스템의 테스트가 나온다. test basis 현행화는 AI 도입의 전제 작업 이다.

또한 현행화 작업은 그 자체로 결함을 찾는다. 근거 없이 바뀐 구현, 빠진 정책, 문서에만 남은 기능은 대부분 누군가 놓친 것이다. QA가 차이표를 들고 기획·개발과 마주 앉는 회의는, 테스트 실행보다 앞 단계에서 결함을 막는 가장 싼 품질 활동 중 하나다.

실습 과제

과제 1 — 드리프트 유형 분류 (15분)

다음 관찰 8건을 개념 절의 일곱 유형으로 분류하고, 각각 확인에 쓸 근거 1·2순위를 적는다.

1. 명세서: 장바구니 최대 50개 / 화면: 99개까지 담김
2. 화면설계서에 있는 "선물 포장" 체크박스가 운영 화면에 없음
3. 명세서는 "주문 취소", 화면은 "주문 철회", DB 상태값은 CANCELED
4. 명세서에 없는 "최근 본 상품" 영역이 상품 상세 하단에 있음
5. 명세서: 결제 후 배송지 변경 불가 / 실제: 출고 전까지 변경 가능
6. 오류 메시지 "잠시 후 다시 시도해 주세요" 가 "일시적인 오류입니다" 로 표시
7. 명세서: 주소 입력 → 결제수단 선택 / 화면: 결제수단 선택 → 주소 입력
8. 약관: 반품 14일 / 설정 값 RETURN_DAYS=7

과제 2 — 차이표 입력 계약 쓰기 (20분)

본인 서비스(또는 가상의 회원가입 기능)를 대상으로 개념 절 형식의 입력·출력·금지 계약을 작성한다. 근거 위계에서 어떤 근거를 몇 순위로 쓸지, 문서 최종 갱신일을 어떻게 정할지도 적는다. 가능하면 실제 AI 도구로 차이 5건을 뽑고 근거 인용이 틀린 건수를 센다.

과제 3 — 판정과 추적성 갱신 (20분)

과제 1의 1·5·8번 차이에 대해 "문서 갱신 / 결함 등록 / 보류" 판정을 내리고 이유를 쓴다(변경 근거 티켓 유무는 직접 가정한다). 그리고 각 요구사항에 테스트 케이스 2개씩이 연결되어 있다고 가정하고, 개념 절의 트리 형식으로 요구사항 버전 변경과 테스트 케이스 재검토 결과를 적는다.

자가 체크리스트

  • ISTQB의 test basis 정의와, 문서화되지 않은 이해도 포함된다는 점을 설명할 수 있다
  • 개발 산출물에 비해 문서만 낡는 구조적 이유를 말할 수 있다
  • 드리프트 일곱 유형을 구분하고 유형별 근거를 고를 수 있다
  • 근거 위계에서 "현재 상태"와 "변경 이유"를 각각 무엇으로 확인하는지 안다
  • AI 차이표의 입력·출력·금지 계약을 쓸 수 있다
  • 변경 근거 없는 차이를 문서 갱신으로 처리하면 결함이 세탁된다는 것을 안다
  • 차이를 상태를 가진 작업으로 관리하고 AI 오탐을 기록한다
  • 요구사항 ID를 유지하며 버전을 올리고 연결된 테스트에 재검토를 전파할 수 있다
  • PR 단위 검사와 정기 전수 대조를 함께 운영해야 하는 이유를 설명할 수 있다

흔한 실수

구현에 맞춰 문서를 일괄 갱신한다. 근거 없이 바뀐 구현까지 문서에 반영하면 결함이 정답이 된다.

회의록만 보고 드리프트를 확정한다. 결정은 번복된다. 현재 상태는 화면·코드로, 변경 이유는 승인된 티켓으로 확인한다.

현행화하면서 요구사항 ID를 다시 매긴다. 테스트·결함과의 연결이 전부 끊긴다.

용어 불일치를 그대로 둔 채 차이표를 돌린다. 거짓 드리프트가 쏟아져 진짜 차이가 묻힌다.

참고 자료

낯선 말 풀이

이 레슨에 나온 약어입니다. 본문에서도 처음 나올 때 점선으로 표시해 두었습니다 (제목과 링크 글자는 그대로 둡니다).

ISTQB — 국제 소프트웨어 테스팅 자격 위원회
테스터 자격 시험을 만들고 용어를 정리하는 국제 단체.
QA — 품질보증
만든 것이 쓸 만한지 확인하고, 애초에 덜 망가지게 만드는 방법을 정하는 일. "테스트"는 그 일의 일부다.
AI — 인공지능
사람이 규칙을 일일이 적지 않아도 데이터에서 규칙을 찾아 판단하는 소프트웨어.
DB — 데이터베이스
데이터를 넣어 두고 꺼내 쓰는 저장소. 보통 표 여러 개가 서로 연결된 형태다.
PR — 풀 리퀘스트
"내가 고친 코드를 본체에 합쳐 달라"고 올리는 요청. 합치기 전에 사람들이 보고 의견을 단다.
API — 응용 프로그램 인터페이스
프로그램끼리 주고받는 창구. 사람이 화면 버튼을 누르는 대신, 프로그램이 정해진 주소로 요청을 보내 답을 받는다.
E2E — 끝에서 끝까지
화면 한 조각이 아니라 사용자가 밟는 전체 흐름을 처음부터 끝까지 한 번에 돌려 보는 시험.
OpenAPI — 오픈에이피아이 명세
창구가 어떤 주소로 무엇을 받고 무엇을 돌려주는지 정해진 형식으로 적어 둔 문서.
ID — 식별자
무엇 하나를 다른 것과 구별하기 위해 붙인 이름이나 번호.
LLM — 대규모 언어 모델
엄청난 양의 글을 학습해 말을 이어 쓰는 모델. 대화형 인공지능의 바탕이다.
RAG — 검색 결합 생성
모델이 답하기 전에 믿을 수 있는 문서를 먼저 찾아와 그것을 근거로 답하게 하는 방식.
ISO/IEC/IEEE — 세 단체 공동 표준
세 국제 단체가 함께 낸 표준이라는 표시.

이 레슨에 나온 나머지 1개를 포함해 용어집 전체 보기