작업(기능/버그 수정) 완료 후 QA 시트(.xlsx)를 생성/갱신한다. 사용자가 명시적으로 지시하면 그 주제를 우선하고, 지시가 없으면 현재 브랜치 변경 사항의 영향 범위를 분석해 기존 qa-sheet.xlsx를 수정/추가/삭제로 업데이트한다. 목적/사전조건/기대결과는 사용자 관점으로 쓰고 코드/구현 용어는 배제한다...
.xlsx로 생성한다.ID / 우선 순위 / 목적/ 사전 조건 / 수행 절차 / 기대 결과 / QA 판정(공란)git status -sb, git diff --name-only --cached, git diff --name-only로 변경 파일을 수집한다.docs/specs/)을 확인한다.qa-sheet.xlsx가 있으면 내용을 읽어 케이스 목록으로 변환한다.openpyxl 또는 .xlsx 내부 XML 파싱으로 추출한다.qa-sheet.xlsx가 없으면 새로 생성한다.1) ..., 2) ...).purpose/preconditions에는 코드/구현 용어를 쓰지 않는다. (금지 예: await, result.fold, 함수/클래스/파일명, 내부 모듈명/커버리지명)qa_cases.json)을 만든다아래 포맷 중 하나를 사용한다.
주의:
qa_cases.json을 사용한다. (다른 파일명/경로는 스크립트가 거절함)cases{
"cases": [
{
"id": "AUTH-001",
"priority": "P0",
"feature": "로그인 > 이메일 로그인",
"platform": "공통",
"purpose": "이메일/비밀번호로 로그인하면 홈 화면으로 이동한다",
"preconditions": ["테스트 계정 준비", "네트워크 연결"],
"test_data": ["계정: qa@example.com / Passw0rd!"],
"steps": [
"앱 실행",
"로그인 화면에서 이메일 `qa@example.com` 입력",
"비밀번호 `Passw0rd!` 입력",
"로그인 버튼 탭"
],
"expected": ["홈 화면으로 이동한다", "사용자 이름이 표시된다"]
}
]
}
[
{ "priority": "P1", "feature": "…", "platform": "…", "purpose": "…", "steps": ["…"], "expected": ["…"] }
]
필드 규칙:
id(선택): 없으면 QA-001부터 자동 생성도메인-주제-### (대문자 + 하이픈 + 3자리 숫자). 동일 기능 그룹 내 연속 번호를 사용한다. 예: AUTH-SOCIAL-001priority(선택): 없으면 P2feature/screen/scope(권장): 화면/기능 경로. 목적/ 사전 조건 컬럼에 대상(화면/기능): ...로 들어감platform(선택): 목적/ 사전 조건 컬럼에 플랫폼: ...로 들어감purpose(권장) / preconditions(선택) / test_data(선택): 목적/ 사전 조건 컬럼에 들어감steps(필수): 문자열 또는 문자열 배열expected(필수): 문자열 또는 문자열 배열의존성 설치(필요 시, 권장: 가상환경):
python3 -m venv .venv && source .venv/bin/activate && pip install openpyxl
생성:
python3 $CODEX_HOME/skills/qa-sheet-maker/scripts/generate_qa_sheet.py --input qa_cases.json --output qa-sheet.xlsx --strict
주의:
qa_cases.json)을 자동으로 삭제한다. (다른 파일명은 입력 자체가 거절됨)--keep-input을 추가한다.빈 템플릿(헤더만) 생성:
python3 $CODEX_HOME/skills/qa-sheet-maker/scripts/generate_qa_sheet.py --template --output qa-sheet.xlsx