AI checkout test cases: correct-looking tables, wrong expected totals
We gave ChatGPT, Gemini and Claude the same coupon-and-shipping specification. WekeyLab AI would use Claude’s answer as the starting draft: all nine required totals were correct, and it included recalculation after changing coupon and delivery selections. Gemini missed one won in a required row. ChatGPT’s second displayed answer added an unnecessary ₩3,000 shipping charge in an extra case. An unchecked expected result is a poor reference for finding bugs.
Our choice: Claude’s structure, with independently checked values
Claude separated required cases, additional boundaries, invalid inputs and unresolved requirements. Its coupon-removal and delivery-region changes turned a calculation exercise into a useful interaction checklist. That is the main reason for our choice in this run.
ChatGPT also calculated all nine required rows correctly. A single submission automatically produced two side-by-side alternatives. We preserved both rather than selecting only the better-looking one; this was not two independent test runs.
Gemini’s shorter table and three-stage priorities were easy to scan. But a wrong expected total can mark a correct implementation as defective. The table needs an arithmetic check before it becomes a test fixture.
The rule that matters: eligibility before discount, shipping after it
The fictional store accepts positive whole-won merchandise totals. With the coupon selected, a subtotal of at least ₩30,000 earns 10% off, rounded down to a whole won and capped at ₩5,000. Standard shipping is free only when the discounted merchandise amount reaches ₩50,000; otherwise it costs ₩3,000. A remote-area surcharge adds ₩3,000 even when standard shipping is free.
A ₩50,000 basket with a coupon therefore costs ₩45,000 plus ₩3,000 shipping: ₩48,000. A ₩55,000 basket becomes ₩50,000 after discount and qualifies for free standard shipping. These are two different thresholds applied to two different amounts.
This English edition localizes a Korean-language test. We retain KRW rather than converting to dollars: changing currency precision would change the rounding cases being tested. The required nine rows and validation criteria were fixed before any response arrived.
Gemini got the discount right, then subtracted incorrectly
For TC-03, Gemini correctly rounded 10% of ₩49,999 down to ₩4,999. It then wrote a net amount of ₩44,999 and a payable total of ₩47,999. The correct subtraction is 49,999−4,999=45,000, giving a final total of ₩48,000. Eight of the other mandatory rows matched our independent calculation.
The one-won discrepancy is not a measured loss in a live store. It is an error in the proposed test oracle: a correct implementation returning ₩48,000 would fail against the uncorrected table.
Gemini correctly rejected zero and fractional amounts, but supplied exact UI error sentences that the specification never approved. Treat that wording as proposed copy, not a requirement to assert literally.
Gemini TC-03: discount ₩4,999 → net ₩44,999 → total ₩47,999 (translated excerpt).
ChatGPT’s required rows passed; an extra row did not
Both displayed alternatives got the mandatory nine-row table right. The first expanded coupon and region combinations; the second listed useful invariants for automation. More rows were valuable only when their expected results remained correct.
In response 2, TC-23 assigned ₩57,999 to a ₩54,999 basket with no coupon and a standard address. It already exceeds the free-shipping threshold without any discount. The correct total is ₩54,999, so the extra ₩3,000 should not be there.
Response 2 also said the raw 10% first exceeds ₩5,000 at a subtotal of ₩50,000. It equals the cap there. A stronger cap test is ₩50,010: without a cap the rounded discount becomes ₩5,001, while the specified discount stays ₩5,000. At ₩50,001, rounding alone still gives ₩5,000, so that case cannot by itself expose a missing cap.
ChatGPT response 2, TC-23: 54,999 / coupon off / standard / 57,999 (translated excerpt).
Claude added useful transitions and separated open questions
All nine mandatory Claude rows matched. Removing the coupon from a ₩55,000 basket changes the total from ₩50,000 to ₩55,000. Switching the same discounted basket from standard to remote delivery changes it from ₩50,000 to ₩53,000. These are useful designs for detecting stale totals after a selection changes.
Claude separately flagged the representation “30000.0”, comma-separated input and an upper amount limit. A numerically integral value and an accepted input string are different specification questions.
Its claims that one defect is “most common” and input-validation mistakes are relatively rare were not supported by data in this run. WekeyLab AI does not use those frequency claims to set priorities. We put invalid-input rejection and shipping boundaries early because the stated requirements make their consequences clear.
WekeyLab AI’s checked reference values
These are our independently calculated reference values, not additional model outputs. For coupon on and a standard address, read each line as subtotal → discount / standard shipping / payable total, all in KRW.
29,999 → 0 / 3,000 / 32,999 30,000 → 3,000 / 3,000 / 30,000 49,999 → 4,999 / 3,000 / 48,000 50,000 → 5,000 / 3,000 / 48,000 54,999 → 5,000 / 3,000 / 52,999 55,000 → 5,000 / 0 / 50,000 55,001 → 5,000 / 0 / 50,001
The ₩55,000 coupon-on remote case totals ₩53,000. With no coupon and standard delivery, ₩50,000 stays ₩50,000 and ₩54,999 stays ₩54,999. The cap-discriminating ₩50,010 coupon-on case has a ₩5,000 discount and a ₩48,010 final total.
Inputs 0, −1 and 30,000.5 must produce an error without calculating a payable amount. Agree input-string parsing and UI wording separately.
How to run the checklist and reuse the prompt
Start with the ₩50,000 no-coupon normal path and rejection of zero, negative and fractional amounts. Then check the 54,999↔55,000 shipping boundary, remote surcharge, 29,999↔30,000 coupon eligibility, rounding at49,999 and the cap at50,010. Finish by changing coupon and delivery selections.
Keep input, expected discount, expected shipping, expected total, observed result, pass/fail and evidence location in separate fields. Do not mistake an AI-generated expected-result column for an executed test.
Turn these requirements into test cases and expected results. Explain which rule supports each expectation. Separate unspecified UI behavior and input formats into questions to resolve. Include recalculation when the user changes a selection. [Paste requirements]
Related work
Use the document-version comparison before testing a changed specification. For cancellation, duplicate and missing-price handling after orders exist, see the order-CSV comparison.
Sources and actual records
Collected21September2026,12:04–12:08KST: one identical unrestricted Korean prompt per service. ChatGPT Free,Thinkoff,specific model not shown,automatic A/B both retained; GeminiFlash,planunverified; ClaudeFree,Sonnet5Medium. EN/ZH localize that Korean run and retain KRW for reproducible rounding. Thirty precommitted manual checks plus36 numeric mandatory-row comparisons across four displayed alternatives; ChatGPT9/9 each,Gemini8/9,Claude9/9 only for mandatory rows. Extra-row errors are discussed separately. Independent Python arithmetic, not a live checkout/UI/API test. Official workflow documentation supports the task’s relevance, not a verified search-volume claim.
Katalon官方:从需求生成AI测试用例 / Generate test cases from requirements
문서 변경점 비교 / Document version comparison
CSV 주문 매출 비교 / Order CSV comparison
ChatGPT · 2026-09-21 12:04–12:08 KST
쇼핑몰의 쿠폰·배송비 기능을 출시하기 전에 QA 테스트 케이스를 만들고 싶어. 아래는 우리가 만든 가상 요구사항이야. 상품 합계는 0보다 큰 정수 원 단위여야 해. 0, 음수, 소수 금액은 오류로 처리하고 결제 금액을 계산하지 않아. 쿠폰을 선택했을 때 할인 전 상품 합계가 30,000원 이상이면 10% 할인하되 할인액은 원 미만을 버리고 최대 5,000원까지만 적용해. 30,000원 미만에서는 쿠폰을 선택해도 할인은 0원이야. 쿠폰을 선택하지 않으면 할인은 없어. 다른 할인이나 세금은 없어. 기본 배송비는 쿠폰 할인 후 상품 금액이 50,000원 이상이면 0원, 그 미만이면 3,000원이야. 도서산간 지역은 무료배송 여부와 관계없이 3,000원을 추가해. 최종 결제 금액은 할인 후 상품 금액에 기본 배송비와 도서산간 추가비를 더한 값이야. 담당자가 바로 실행할 수 있는 테스트 케이스와 예상 결과를 만들어줘. 쿠폰을 선택한 일반 지역의 상품 합계 29,999 / 30,000 / 49,999 / 50,000 / 54,999 / 55,000 / 55,001원, 쿠폰을 선택한 도서산간 지역 55,000원, 쿠폰을 선택하지 않은 일반 지역 50,000원은 꼭 포함해줘. 잘못된 금액 입력과 놓치기 쉬운 경계값도 함께 검토하고, 무엇부터 테스트할지 네 판단도 알려줘. 응답 1 요구사항을 기준으로 금액 검증 → 쿠폰 할인 → 배송비 → 최종 결제금액 순서로 계산되도록 테스트 케이스를 구성했습니다. 특히 30,000원, 50,000원, 55,000원 주변을 집중적으로 잡았습니다. 1. 핵심 QA 테스트 케이스 ID 상품 합계 쿠폰 지역 예상 할인 할인 후 상품금액 기본 배송비 도서산간 추가 최종 결제금액 TC-01 29,999 선택 일반 0 29,999 3,000 0 32,999 TC-02 30,000 선택 일반 3,000 27,000 3,000 0 30,000 TC-03 49,999 선택 일반 4,999 45,000 3,000 0 48,000 TC-04 50,000 선택 일반 5,000 45,000 3,000 0 48,000 TC-05 54,999 선택 일반 5,000 49,999 3,000 0 52,999 TC-06 55,000 선택 일반 5,000 50,000 0 0 50,000 TC-07 55,001 선택 일반 5,000 50,001 0 0 50,001 TC-08 55,000 선택 도서산간 5,000 50,000 0 3,000 53,000 TC-09 50,000 미선택 일반 0 50,000 0 0 50,000 계산상 중요한 점: 무료배송 기준은 쿠폰 할인 후 금액에 적용됩니다. 따라서 50,000원 상품에 쿠폰을 적용하면 45,000원이 되어 기본 배송비 3,000원이 붙습니다. 2. 할인액 버림과 최대 5,000원 경계 위 필수 케이스 외에 다음도 실행하는 것이 좋습니다. ID 상품 합계 쿠폰 예상 할인 할인 후 기본 배송비 최종 TC-10 30,001 선택 3,000 27,001 3,000 30,001 TC-11 30,009 선택 3,000 27,009 3,000 30,009 TC-12 30,011 선택 3,001 27,010 3,000 30,010 TC-13 49,999 선택 4,999 45,000 3,000 48,000 TC-14 50,001 선택 5,000 45,001 3,000 48,001 TC-15 55,000 선택 5,000 50,000 0 50,000 30,011 × 10% = 3,001.1원이므로 할인액은 3,001원이어야 합니다. 소수점 이하를 반올림하면 안 됩니다. 또한 50,000원 자체는 할인액이 정확히 5,000원이지만, 50,001원부터도 10% 계산값이 5,000원을 넘으므로 5,000원으로 상한 적용되는지 확인해야 합니다. 3. 쿠폰 미선택 / 지역 조합 쿠폰과 배송비 로직이 서로 섞이지 않는지도 확인합니다. ID 상품 합계 쿠폰 지역 예상 할인 기본 배송비 추가비 최종 TC-16 49,999 미선택 일반 0 3,000 0 52,999 TC-17 50,000 미선택 일반 0 0 0 50,000 TC-18 50,000 미선택 도서산간 0 0 3,000 53,000 TC-19 55,000 미선택 도서산간 0 0 3,000 58,000 TC-20 49,999 선택 도서산간 4,999 3,000 3,000 51,000 특히 도서산간 추가 3,000원은 무료배송이어도 붙어야 하므로 50,000원 이상 + 도서산간 조합을 반드시 포함하는 것이 좋습니다. 4. 잘못된 상품 금액 입력 요구사항상 오류가 되어 결제 금액 자체를 계산하지 않아야 합니다. ID 입력값 예상 결과 TC-21 0 금액 오류 / 결제금액 미계산 TC-22 -1 금액 오류 / 결제금액 미계산 TC-23 -10,000 금액 오류 / 결제금액 미계산 TC-24 0.1 금액 오류 / 결제금액 미계산 TC-25 29,999.9 금액 오류 / 결제금액 미계산 TC-26 30,000.5 금액 오류 / 결제금액 미계산 TC-27 "30000" 등 숫자가 아닌 문자열 입력 형식 오류 처리 확인 TC-28 공백/빈값 입력 오류 처리 확인 가능하다면 999,999,999, 아주 큰 정수도 넣어 금액 범위 초과나 오버플로가 없는지 별도 확인하는 것이 좋습니다. 요구사항에 최대 금액이 정의되어 있지 않으므로 이 경우에는 구체적인 기대 금액을 임의로 정하기보다 시스템의 허용 범위와 오류 처리 정책을 확인하는 것이 맞습니다. 5. 제가 먼저 테스트할 순서 1순위: 금액 유효성 0, 음수, 소수 정상적인 양의 정수 여기서 실패하면 이후 계산 테스트의 의미가 떨어집니다. 2순위: 쿠폰 임계값 29,999 → 30,000 → 30,001 쿠폰이 정확히 30,000원부터 적용되는지 확인합니다. 3순위: 할인액 버림 + 5,000원 상한 30,011 같은 소수점이 생기는 금액 50,000, 50,001처럼 상한에 걸리는 금액 4순위: 무료배송 임계값 할인 후 상품금액이 49,999 → 50,000 → 50,001이 되는 조합을 확인합니다. 여기서 중요한 것은 원래 상품 합계가 아니라 할인 후 금액이라는 점입니다. 5순위: 도서산간 무료배송 상태에서도 +3,000원이 붙는지 확인합니다. 6순위: 쿠폰 미선택 및 조합 회귀 테스트 쿠폰을 선택하지 않았을 때 할인 0원인지 일반/도서산간 조합이 모두 정상인지 확인합니다. QA에서 특히 놓치기 쉬운 포인트 30,000원 기준은 할인 전 상품 합계입니다. 50,000원 무료배송 기준은 할인 후 상품금액입니다. 할인액의 소수점은 버림입니다. 할인은 최대 5,000원입니다. 도서산간 +3,000원은 무료배송이어도 면제되지 않습니다. 잘못된 상품 금액은 배송비까지 계산하지 말고 전체 결제금액 계산을 중단해야 합니다. 쿠폰을 선택했지만 30,000원 미만이면 할인 0원이어야 합니다. 따라서 실제 QA 실행에서는 TC-01~09 → TC-10~15 → TC-21~28 순으로 먼저 돌리는 것을 권합니다. 이 순서면 핵심 비즈니스 규칙과 가장 위험한 경계값을 초기에 빠르게 검증할 수 있습니다. 이 응답이 더 좋아요 ChatGPT 응답 2 아래처럼 규칙별 경계값 → 할인/배송 상호작용 → 잘못된 입력 → 조합 테스트 순서로 만들면 담당자가 바로 실행하기 좋습니다. 1. 우선 테스트할 순서 상품 합계 입력 검증 — 잘못된 값이면 이후 계산을 하지 않는지 먼저 확인 쿠폰 할인 경계값 — 29,999 ↔ 30,000, 그리고 할인 상한 5,000원 경계 기본 배송비 경계값 — 쿠폰 할인 후 금액이 49,999 ↔ 50,000인지 확인 도서산간 추가비 — 무료배송과 별개로 항상 +3,000원인지 확인 쿠폰 미선택 및 주요 조합 — 정상 흐름과 회귀 테스트 특히 상품 합계 50,000원이 아니라 "쿠폰 할인 후 상품 금액"이 배송비 기준이라는 점이 이번 QA에서 가장 놓치기 쉬운 부분입니다. 2. 핵심 테스트 케이스 ID 상품 합계 쿠폰 지역 할인액 할인 후 상품금액 기본 배송비 도서산간 추가 최종 결제금액 TC-01 29,999 선택 일반 0 29,999 3,000 0 32,999 TC-02 30,000 선택 일반 3,000 27,000 3,000 0 30,000 TC-03 49,999 선택 일반 4,999 45,000 3,000 0 48,000 TC-04 50,000 선택 일반 5,000 45,000 3,000 0 48,000 TC-05 54,999 선택 일반 5,000 49,999 3,000 0 52,999 TC-06 55,000 선택 일반 5,000 50,000 0 0 50,000 TC-07 55,001 선택 일반 5,000 50,001 0 0 50,001 TC-08 55,000 선택 도서산간 5,000 50,000 0 3,000 53,000 TC-09 50,000 미선택 일반 0 50,000 0 0 50,000 TC-04와 TC-05가 특히 중요합니다. 쿠폰 할인은 각각 5,000원으로 상한에 도달하지만, 할인 후 금액이 50,000원에 못 미치므로 배송비 3,000원이 붙습니다. 반면 55,000원에서는 할인 후 정확히 50,000원이 되어 무료배송입니다. 3. 원 미만 버림 검증 요구사항상 할인액은 10% 계산 후 원 미만을 버려야 합니다. ID 상품 합계 쿠폰 계산된 10% 실제 할인액 할인 후 금액 TC-10 30,001 선택 3,000.1 3,000 27,001 TC-11 30,009 선택 3,000.9 3,000 27,009 TC-12 49,999 선택 4,999.9 4,999 45,000 TC-13 50,001 선택 5,000.1 5,000 45,001 TC-12는 원 미만 버림과 50,000원 배송 기준을 함께 확인할 수 있어서 좋은 경계 테스트입니다. 4. 할인 상한 경계값 10%가 5,000원을 처음 초과하는 지점은 50,000원입니다. 따라서 다음을 별도로 확인하는 것이 좋습니다. 상품 합계 기대 할인액 49,999 4,999 50,000 5,000 50,001 5,000 여기서 50,001원에 대해 5,000.1원을 그대로 적용하거나 5,001원으로 반올림하면 오류입니다. 5. 잘못된 상품 금액 입력 ID 입력값 기대 결과 TC-14 0 오류, 결제금액 계산하지 않음 TC-15 -1 오류, 결제금액 계산하지 않음 TC-16 -30,000 오류, 결제금액 계산하지 않음 TC-17 0.1 오류, 결제금액 계산하지 않음 TC-18 30,000.5 오류, 결제금액 계산하지 않음 TC-19 49,999.99 오류, 결제금액 계산하지 않음 TC-20 빈 값 입력 오류 처리 TC-21 숫자가 아닌 값(abc) 입력 오류 처리 요구사항에 따르면 유효한 상품 합계는 0보다 큰 정수 원 단위뿐이므로, 소수는 0.1뿐 아니라 30,000.5, 49,999.99 등도 모두 거부해야 합니다. 6. 추가로 놓치기 쉬운 조합 ID 상품 합계 쿠폰 지역 기대 최종금액 TC-22 30,000 미선택 일반 33,000 TC-23 54,999 미선택 일반 57,999 TC-24 55,000 미선택 일반 55,000 TC-25 55,000 선택 도서산간 53,000 TC-26 55,001 선택 도서산간 53,001 TC-27 54,999 선택 도서산간 55,999 특히 TC-25는 "무료배송이면 도서산간 추가비도 없어지는 것 아닌가?"라는 구현 실수를 잡습니다. 요구사항상 무료배송 여부와 무관하게 도서산간 추가비 3,000원이 붙습니다. 7. QA에서 확인할 핵심 불변조건 자동화 테스트까지 고려한다면 다음 규칙을 체크하면 좋습니다. 상품 합계가 유효하지 않으면 결제금액을 계산하지 않는다. 쿠폰 미선택 → 할인액 0 쿠폰 선택 + 상품 합계 < 30,000 → 할인액 0 쿠폰 선택 + 상품 합계 ≥ 30,000 → floor(상품합계 × 10%) 위 할인액은 최대 5,000원 기본 배송비의 판단 기준은 원래 상품 합계가 아니라 할인 후 상품 금액 할인 후 상품 금액 ≥ 50,000 → 기본 배송비 0 할인 후 상품 금액 < 50,000 → 기본 배송비 3,000 도서산간 → 위 결과와 관계없이 추가 3,000 최종금액 = 할인 후 상품금액 + 기본 배송비 + 도서산간 추가비 실행 우선순위를 딱 5개로 줄인다면: TC-01 → TC-02 → TC-05 → TC-06 → TC-08을 먼저 돌리겠습니다. 이 다섯 개만으로 쿠폰 적용 시작점, 할인 상한 근처, 무료배송 시작점, 도서산간 추가비라는 핵심 경계와 상호작용을 가장 빠르게 검증할 수 있습니다. 이 응답이 더 좋아요
Gemini · 2026-09-21 12:04–12:08 KST
쇼핑몰의 쿠폰·배송비 기능을 출시하기 전에 QA 테스트 케이스를 만들고 싶어. 아래는 우리가 만든 가상 요구사항이야. 상품 합계는 0보다 큰 정수 원 단위여야 해. 0, 음수, 소수 금액은 오류로 처리하고 결제 금액을 계산하지 않아. 쿠폰을 선택했을 때 할인 전 상품 합계가 30,000원 이상이면 10% 할인하되 할인액은 원 미만을 버리고 최대 5,000원까지만 적용해. 30,000원 미만에서는 쿠폰을 선택해도 할인은 0원이야. 쿠폰을 선택하지 않으면 할인은 없어. 다른 할인이나 세금은 없어. 기본 배송비는 쿠폰 할인 후 상품 금액이 50,000원 이상이면 0원, 그 미만이면 3,000원이야. 도서산간 지역은 무료배송 여부와 관계없이 3,000원을 추가해. 최종 결제 금액은 할인 후 상품 금액에 기본 배송비와 도서산간 추가비를 더한 값이야. 담당자가 바로 실행할 수 있는 테스트 케이스와 예상 결과를 만들어줘. 쿠폰을 선택한 일반 지역의 상품 합계 29,999 / 30,000 / 49,999 / 50,000 / 54,999 / 55,000 / 55,001원, 쿠폰을 선택한 도서산간 지역 55,000원, 쿠폰을 선택하지 않은 일반 지역 50,000원은 꼭 포함해줘. 잘못된 금액 입력과 놓치기 쉬운 경계값도 함께 검토하고, 무엇부터 테스트할지 네 판단도 알려줘. 쇼핑몰 쿠폰·배송비 기능 출시 전 QA 담당자가 즉시 활용할 수 있는 **테스트 케이스(TC)** 및 **우선순위 가이드**입니다. --- ## 1. QA 테스트 케이스 (Test Cases) ### A. 필수 포함 및 주요 경계값 테스트 케이스 (정상/할인/배송비 조건) | TC ID | 쿠폰 여부 | 배송지 | 입력 상품 합계 | 할인액 계산 과정 | 할인 후 상품 금액 | 기본 배송비 | 도서산간 추가비 | **예상 최종 결제 금액** | 비고 / 검증 포인트 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | **TC-01** | 선택 | 일반 | **29,999원** | 3만원 미만 $\rightarrow$ 0원 | 29,999원 | 3,000원 | 0원 | **32,999원** | 쿠폰 적용 최소 금액 미달 경계값 | | **TC-02** | 선택 | 일반 | **30,000원** | $30,000 \times 10\% = 3,000$원 | 27,000원 | 3,000원 | 0원 | **30,000원** | 쿠폰 할인 조건 진입 경계값 | | **TC-03** | 선택 | 일반 | **49,999원** | $49,999 \times 10\% = 4,999.9 \rightarrow$ 버림 **4,999원** | 44,999원 | 3,000원 | 0원 | **47,999원** | 소수점 버림 처리 검증 | | **TC-04** | 선택 | 일반 | **50,000원** | $50,000 \times 10\% = 5,000$원 | 45,000원 | 3,000원 | 0원 | **48,000원** | 최대 할인 적용 / 무료배송 금액 미달 | | **TC-05** | 선택 | 일반 | **54,999원** | 최대 한도 제한 $\rightarrow$ **5,000원** | 49,999원 | 3,000원 | 0원 | **52,999원** | 무료배송 조건 미달 경계값 (49,999원) | | **TC-06** | 선택 | 일반 | **55,000원** | 최대 한도 제한 $\rightarrow$ **5,000원** | 50,000원 | 0원 | 0원 | **50,000원** | 할인 후 5만원 달성 $\rightarrow$ 기본 무료배송 조건 경계값 | | **TC-07** | 선택 | 일반 | **55,001원** | 최대 한도 제한 $\rightarrow$ **5,000원** | 50,001원 | 0원 | 0원 | **50,001원** | 할인 후 5만원 초과 무료배송 유지 | | **TC-08** | 선택 | **도서산간** | **55,000원** | 최대 한도 제한 $\rightarrow$ **5,000원** | 50,000원 | 0원 | 3,000원 | **53,000원** | 기본 무료배송 + 도서산간 추가비 부과 검증 | | **TC-09** | 미선택 | 일반 | **50,000원** | 쿠폰 미선택 $\rightarrow$ 0원 | 50,000원 | 0원 | 0원 | **50,000원** | 쿠폰 미선택 시 할인 없음 및 무료배송 | --- ### B. 예외 처리 및 입력값 유효성 테스트 케이스 (오류 처리) | TC ID | 입력 상품 합계 | 예상 결과 (오류 처리 및 결제 금액) | 비고 / 검증 포인트 | | --- | --- | --- | --- | | **TC-10** | **0원** | 결제 금액 계산 불가. "상품 금액은 0원보다 커야 합니다." 에러 문구 노출 및 결제 진행 차단 | 0원 입력 처리 | | **TC-11** | **-10,000원** | 결제 금액 계산 불가. 에러 문구 노출 및 결제 진행 차단 | 음수 입력 처리 | | **TC-12** | **35,000.5원** | 결제 금액 계산 불가. "소수점 금액은 입력할 수 없습니다." 에러 문구 노출 및 결제 진행 차단 | 소수점 입력 처리 | | **TC-13** | **문자/공백/Special Code** | 결제 금액 계산 불가. 입력 필드 차단 또는 즉시 유효성 에러 처리 | 비정상 입력값 방어 | --- ### C. 놓치기 쉬운 추가 경계값 및 엣지 케이스 | TC ID | 조건 | 입력 상품 합계 | 할인 및 배송비 계산 logic | 예상 최종 결제 금액 | 검증 포인트 | | --- | --- | --- | --- | --- | --- | | **TC-14** | 쿠폰 선택 / 일반 | **1원** | 최소 금액 정상 입력값 / 쿠폰 할인 0원 / 기본 배송비 3,000원 | **3,001원** | 0보다 큰 최소 정수(1원) 처리 | | **TC-15** | 쿠폰 선택 / 일반 | **30,001원** | $30,001 \times 10\% = 3,000.1 \rightarrow$ 버림 **3,000원** | **30,001원** | 소수점 발생 시 원 미만 버림 처리 ($30,001 - 3,000 + 3,000$) | | **TC-16** | 쿠폰 선택 / 도서산간 | **29,999원** | 쿠폰 할인 0원 / 기본 배송비 3,000원 / 도서산간 3,000원 | **35,999원** | 유료 배송 조건 + 도서산간 추가비 이중 부과 | --- ## 2. 우선순위 가이드 (무엇부터 테스트할 것인가?) QA 진행 시 아래 **3단계 순서**로 실행하는 것을 권장합니다. 1. **1단계: 예외 처리 및 결제 차단 검증 (Blocker 방지)** * **대상:** TC-10 ~ TC-13 (0원, 음수, 소수점 입력) * **이유:** 잘못된 입력값이 시스템에 들어갔을 때 결제 연동 에러가 발생하거나 서버 장애로 이어질 수 있으므로, 입구 단계에서 올바르게 차단되는지 최우선 확인해야 합니다. 2. **2단계: 단올림/버림 및 경계값 이중 조건 검증 (핵심 로직)** * **대상:** TC-03, TC-05, TC-06, TC-08, TC-15 * **이유:** 특히 54,999원(TC-05)과 **55,000원(TC-06)** 구간은 쿠폰 최대 할인 한도(5,000원)와 무료배송 기준(5,000원 할인 후 50,000원)이 동시에 맞물리는 지점입니다. 1원 차이로 배송비 3,000원이 변동되므로 오차가 발생하기 가장 쉬운 핵심 구간입니다. 3. **3단계: 기본 정상 흐름 및 일반 지역/도서산간 조합 검증** * **대상:** TC-01, TC-02, TC-04, TC-07, TC-09, TC-14, TC-16 * **이유:** 쿠폰 선택 유무 및 도서산간 3,000원 추가 수수료가 무료배송 수수료 계산 결과에 영향을 주지 않고 독립적으로 정확히 가산되는지 확인합니다.
Claude · 2026-09-21 12:04–12:08 KST
쇼핑몰의 쿠폰·배송비 기능을 출시하기 전에 QA 테스트 케이스를 만들고 싶어. 아래는 우리가 만든 가상 요구사항이야.
상품 합계는 0보다 큰 정수 원 단위여야 해. 0, 음수, 소수 금액은 오류로 처리하고 결제 금액을 계산하지 않아. 쿠폰을 선택했을 때 할인 전 상품 합계가 30,000원 이상이면 10% 할인하되 할인액은 원 미만을 버리고 최대 5,000원까지만 적용해. 30,000원 미만에서는 쿠폰을 선택해도 할인은 0원이야. 쿠폰을 선택하지 않으면 할인은 없어. 다른 할인이나 세금은 없어.
기본 배송비는 쿠폰 할인 후 상품 금액이 50,000원 이상이면 0원, 그 미만이면 3,000원이야. 도서산간 지역은 무료배송 여부와 관계없이 3,000원을 추가해. 최종 결제 금액은 할인 후 상품 금액에 기본 배송비와 도서산간 추가비를 더한 값이야.
담당자가 바로 실행할 수 있는 테스트 케이스와 예상 결과를 만들어줘. 쿠폰을 선택한 일반 지역의 상품 합계 29,999 / 30,000 / 49,999 / 50,000 / 54,999 / 55,000 / 55,001원, 쿠폰을 선택한 도서산간 지역 55,000원, 쿠폰을 선택하지 않은 일반 지역 50,000원은 꼭 포함해줘. 잘못된 금액 입력과 놓치기 쉬운 경계값도 함께 검토하고, 무엇부터 테스트할지 네 판단도 알려줘.
**핵심:** 아래 케이스는 유효값 20건(필수 9건 + 추가 11건)과 오류 입력 10건입니다. 가장 먼저 볼 곳은 **쿠폰 할인 후 금액 기준의 무료배송 경계(54,999 / 55,000)** 입니다. 무료배송 판정을 할인 전 금액으로 잘못 구현하는 실수가 가장 흔하고 금액 영향도 크기 때문입니다.
**계산 기준:** 할인 = 쿠폰 선택 시, 합계 ≥ 30,000이면 min(⌊합계×10%⌋, 5,000), 아니면 0. 배송비 = 할인 후 금액 ≥ 50,000이면 0, 아니면 3,000. 최종 = 할인 후 금액 + 배송비 + 도서산간 3,000(해당 시).
## 1. 필수 케이스 (요청 항목)
| ID | 쿠폰 | 지역 | 상품 합계 | 할인 | 할인 후 | 기본 배송비 | 도서산간 | **최종 결제** | 확인 포인트 |
|---|---|---|---|---|---|---|---|---|---|
| TC-01 | O | 일반 | 29,999 | 0 | 29,999 | 3,000 | 0 | **32,999** | 쿠폰 최소금액 직전 |
| TC-02 | O | 일반 | 30,000 | 3,000 | 27,000 | 3,000 | 0 | **30,000** | 쿠폰 최소금액 경계 (이상) |
| TC-03 | O | 일반 | 49,999 | 4,999 | 45,000 | 3,000 | 0 | **48,000** | 원 미만 절사, 상한 직전 |
| TC-04 | O | 일반 | 50,000 | 5,000 | 45,000 | 3,000 | 0 | **48,000** | 할인 상한 정확히 도달 |
| TC-05 | O | 일반 | 54,999 | 5,000 | 49,999 | 3,000 | 0 | **52,999** | 할인 후 49,999 → 유료배송 |
| TC-06 | O | 일반 | 55,000 | 5,000 | 50,000 | 0 | 0 | **50,000** | 할인 후 50,000 → 무료배송 경계 |
| TC-07 | O | 일반 | 55,001 | 5,000 | 50,001 | 0 | 0 | **50,001** | 무료배송 경계 직후 |
| TC-08 | O | 도서산간 | 55,000 | 5,000 | 50,000 | 0 | 3,000 | **53,000** | 무료배송이어도 추가비 부과 |
| TC-09 | X | 일반 | 50,000 | 0 | 50,000 | 0 | 0 | **50,000** | 미선택 시 할인 없음, 무료배송 |
## 2. 추가 경계값 (유효 입력)
| ID | 쿠폰 | 지역 | 상품 합계 | 할인 | 할인 후 | 기본 배송비 | 도서산간 | **최종 결제** | 확인 포인트 |
|---|---|---|---|---|---|---|---|---|---|
| TC-10 | O | 일반 | 1 | 0 | 1 | 3,000 | 0 | **3,001** | 최소 유효 금액 |
| TC-11 | O | 일반 | 30,009 | 3,000 | 27,009 | 3,000 | 0 | **30,009** | 3,000.9 → 절사(반올림 아님) |
| TC-12 | O | 일반 | 50,001 | 5,000 | 45,001 | 3,000 | 0 | **48,001** | 상한 직후 (5,000.1 → 5,000) |
| TC-13 | O | 일반 | 1,000,000 | 5,000 | 995,000 | 0 | 0 | **995,000** | 고액에서도 상한 유지 |
| TC-14 | O | 도서산간 | 29,999 | 0 | 29,999 | 3,000 | 3,000 | **35,999** | 쿠폰 미달 + 추가비 합산 |
| TC-15 | O | 도서산간 | 54,999 | 5,000 | 49,999 | 3,000 | 3,000 | **55,999** | 배송비 + 추가비 중복 부과 |
| TC-16 | X | 일반 | 30,000 | 0 | 30,000 | 3,000 | 0 | **33,000** | 쿠폰 최소금액 충족이어도 미선택이면 할인 없음 |
| TC-17 | X | 일반 | 49,999 | 0 | 49,999 | 3,000 | 0 | **52,999** | 미선택 시 무료배송 직전 |
| TC-18 | X | 도서산간 | 50,000 | 0 | 50,000 | 0 | 3,000 | **53,000** | 미선택 + 도서산간 |
| TC-19 | O→X | 일반 | 55,000 | 0 | 55,000 | 0 | 0 | **55,000** | 쿠폰 선택 후 해제 시 재계산 (선택 상태 50,000 → 해제 후 55,000) |
| TC-20 | O | 일반→도서산간 | 55,000 | 5,000 | 50,000 | 0 | 0→3,000 | **50,000 → 53,000** | 지역 변경 시 재계산 |
## 3. 잘못된 금액 입력
**공통 기대 결과:** 오류 표시, 할인·배송비·최종 결제금액 모두 계산·표시하지 않음, 결제 진행 불가.
| ID | 입력 | 쿠폰 / 지역 | 비고 |
|---|---|---|---|
| TC-E01 | 0 | O / 일반 | 명세 |
| TC-E02 | -1 | X / 일반 | 명세 |
| TC-E03 | -30,000 | O / 일반 | 쿠폰 조건을 절댓값으로 처리하지 않는지 |
| TC-E04 | 0 | O / 도서산간 | 오류가 쿠폰·추가비보다 우선하는지 (3,000 등이 남지 않아야 함) |
| TC-E05 | 30,000.5 | O / 일반 | 소수 (명세) |
| TC-E06 | 0.5 | X / 일반 | 0 < x < 1 소수 |
| TC-E07 | 54,999.99 | O / 일반 | 소수, 무료배송 경계 근처 |
**명세에 없어 확인이 필요한 입력** (기대 결과는 제 가정입니다):
| ID | 입력 | 가정한 기대 결과 | 확인할 점 |
|---|---|---|---|
| TC-E08 | 빈 값 / null | 오류 | 요구사항에 명시 필요 |
| TC-E09 | "abc", "3만원" | 오류 | 입력 UI가 숫자 전용이면 N/A |
| TC-E10 | 30000.0 | 불명확 | "소수 금액"에 포함되는지. 정수값이면 허용할지 정해야 함 |
## 4. 명세 공백 (테스트 전 확인 권장)
1. 상품 합계의 상한이 있는가 (TC-13보다 큰 값, 정수 오버플로 포함)
2. 쉼표 포함 입력("30,000")을 허용하는가
3. 쿠폰 선택 + 30,000원 미만일 때 "적용 불가" 안내가 필요한가 (현재는 할인 0원만 명시)
## 5. 테스트 우선순위 (제 판단)
| 순서 | 대상 | 이유 |
|---|---|---|
| 0 | TC-09 (스모크) | 미선택 기본 경로가 깨져 있으면 이후 결과를 신뢰할 수 없음 |
| 1 | TC-05, 06, 07, 08, 15 | 무료배송 판정 기준이 "할인 후 금액"인지 확인. 오류 시 매 주문 금액이 틀어짐 |
| 2 | TC-01, 02, 16 | 쿠폰 발동 경계(30,000)와 선택 여부 의존성 |
| 3 | TC-03, 04, 12, 11 | 절사와 5,000원 상한 경계 |
| 4 | TC-E01~E07 | 입력 검증 (오류 시 결제 자체가 막히므로 영향은 크지만 구현 실수는 상대적으로 드묾) |
| 5 | TC-19, 20, 10, 13, 14, 17, 18 | 재계산과 나머지 조합 |
| 6 | TC-E08~E10 | 명세 확정 후 |
한 가지 가정: 최종 결제금액과 할인 후 금액을 화면에 각각 노출한다고 보고 검증 포인트를 잡았습니다. 결제금액만 노출되는 화면이라면 중간값 검증은 API 응답이나 로그로 바꿔야 합니다.