@educa-corp/sdd-framework 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/qc-base-map.json +595 -0
- package/bin/self-check.js +146 -0
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/propose-scenario.md +1 -1
- package/core/commands/qc-analyze.md +260 -22
- package/core/commands/qc-design-test.md +1 -1
- package/core/commands/qc-plan.md +7 -4
- package/core/commands/qc-run-test.md +1 -1
- package/core/commands/refine-prd.md +47 -20
- package/core/commands/report-bug.md +1 -1
- package/core/commands/review-context.md +27 -1
- package/core/skills/qc/qa-analyst/DOC_GAP.template.md +117 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +4 -2
- package/core/skills/qc/qa-analyst/business-rules.md +38 -4
- package/core/skills/qc/qa-analyst/data-flow.md +5 -3
- package/core/skills/qc/qa-analyst/exhaustive-gap-scanner.md +174 -0
- package/core/skills/qc/qa-analyst/spec-breakdown.md +9 -7
- package/core/skills/qc/qa-analyst/spec-issue-reporter.md +100 -0
- package/core/skills/qc/qa-designer/e2e/journey.md +2 -2
- package/core/skills/qc/qa-designer/exploratory/charter.md +1 -1
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +1 -1
- package/core/skills/qc/qa-designer/functional/api.md +2 -2
- package/core/skills/qc/qa-designer/functional/gui-feature.md +2 -2
- package/core/skills/qc/qa-designer/functional/gui-screen.md +2 -2
- package/core/skills/qc/qa-designer/integration/api.md +2 -2
- package/core/skills/qc/qa-designer/integration/db.md +2 -2
- package/core/skills/qc/qa-designer/integration/gui.md +2 -2
- package/core/skills/qc/qa-designer/integration/kafka.md +2 -2
- package/core/skills/qc/qa-designer/non-functional.md +2 -2
- package/core/skills/qc/qa-planner/risk-model.md +106 -0
- package/core/skills/qc/qa-planner/test-plan.md +13 -10
- package/core/skills/qc/qa-reviewer/script/e2e.md +1 -1
- package/core/skills/qc/qa-reviewer/script/exploratory.md +1 -1
- package/core/skills/qc/qa-reviewer/script/functional.md +1 -1
- package/core/skills/qc/qa-reviewer/script/integration.md +1 -1
- package/core/skills/qc/qa-reviewer/script/non-functional.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/functional.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/integration.md +2 -2
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +1 -1
- package/core/skills/qc/qa-runner/e2e.md +1 -1
- package/core/skills/qc/qa-runner/exploratory/session.md +1 -1
- package/core/skills/qc/qa-runner/functional/api.md +1 -1
- package/core/skills/qc/qa-runner/functional/gui-feature.md +1 -1
- package/core/skills/qc/qa-runner/functional/gui-screen.md +1 -1
- package/core/skills/qc/qa-runner/integration.md +1 -1
- package/core/skills/qc/qa-runner/non-functional.md +1 -1
- package/core/skills/qc/qa-runner/report/report.md +1 -1
- package/core/steps/gap-verify.md +231 -0
- package/core/steps/review-fanout.md +27 -1
- package/core/templates/project-context.yaml +2 -2
- package/docs/02-concepts/pipeline-steps/08-qc-automation.md +2 -2
- package/docs/04-reference/commands.md +1 -1
- package/docs/explain/03-refine-prd.md +8 -6
- package/docs/explain/15-qc-analyze.md +10 -7
- package/docs/explain/16-qc-plan.md +2 -2
- package/docs/plans/qc-implementation-log.md +1446 -0
- package/docs/plans/qc-merge-plan.md +502 -0
- package/docs/plans/qc-sync-command.md +358 -0
- package/package.json +1 -1
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +0 -63
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
|
-
updated: 2026-
|
|
4
|
-
ported_from:
|
|
3
|
+
updated: 2026-08-25
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
|
+
upstream_path: skills/qa-tc-analyst/spec-breakdown.md
|
|
6
|
+
upstream_sha: 4a5fb9334fef1fdc3ac5e899e0463c643af80dad
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
# Spec Breakdown — Bóc tách yêu cầu
|
|
@@ -27,7 +29,7 @@ Bóc tách spec/PRD/user story thô thành mô tả yêu cầu có cấu trúc c
|
|
|
27
29
|
vào phân tích/BR/AC. Với file Confluence/HTML/MHTML: phát hiện qua thẻ `<s>`,
|
|
28
30
|
`<strike>`, `<del>` hoặc style `text-decoration: line-through`.
|
|
29
31
|
3. Xác định: feature name, actor/role, mục tiêu nghiệp vụ, phạm vi (in/out scope).
|
|
30
|
-
4. Đánh dấu phần MƠ HỒ / THIẾU → ghi vào `
|
|
32
|
+
4. Đánh dấu phần MƠ HỒ / THIẾU → ghi vào `DOC_GAP.md` (gap GAP-xx).
|
|
31
33
|
|
|
32
34
|
---
|
|
33
35
|
|
|
@@ -37,7 +39,7 @@ Tách yêu cầu thành các khối:
|
|
|
37
39
|
|
|
38
40
|
A. TỔNG QUAN: mục tiêu, actor, giá trị nghiệp vụ.
|
|
39
41
|
B. CHỨC NĂNG: list từng chức năng (visible + ẩn + integration point).
|
|
40
|
-
C. INPUT/OUTPUT: mỗi chức năng có input gì, output gì, ràng buộc field.
|
|
42
|
+
C. INPUT/OUTPUT: mỗi chức năng có input gì, output gì, ràng buộc field. Với **mỗi field input** (kể cả tuỳ chọn): kiểm tra đủ `minlength`/`maxlength`, ký tự cho phép, trim, format. Field thiếu bất kỳ mục nào → ghi gap MISSING vào `DOC_GAP.md`.
|
|
41
43
|
D. TRẠNG THÁI & LUỒNG: các state, điều kiện chuyển, happy path + alternate flow.
|
|
42
44
|
E. PHỤ THUỘC: hệ thống/API/module liên quan.
|
|
43
45
|
F. GIẢ ĐỊNH & CÂU HỎI MỞ: điều suy ra được vs điều cần dev/BA xác nhận.
|
|
@@ -48,14 +50,14 @@ F. GIẢ ĐỊNH & CÂU HỎI MỞ: điều suy ra được vs điều cần dev
|
|
|
48
50
|
|
|
49
51
|
⚠️ `/qc-analyze` chỉ ghi **ĐÚNG 2 FILE** cho mỗi UC, đặt trong thư mục QC **lộ ra ngoài**
|
|
50
52
|
`{paths.qc_dir}/{UC-ID}/` (mặc định `docs/{UC-ID}/` — KHÔNG để trong `.agent/` ẩn):
|
|
51
|
-
`REQUIREMENT_ANALYSIS.md` + `
|
|
53
|
+
`REQUIREMENT_ANALYSIS.md` + `DOC_GAP.md`. KHÔNG tách mỗi bước phân tích thành file riêng.
|
|
52
54
|
|
|
53
55
|
Phần spec-breakdown là **mục đầu tiên** của `REQUIREMENT_ANALYSIS.md`:
|
|
54
56
|
- Bảng chức năng + input/output/constraint
|
|
55
57
|
- Sơ đồ/list luồng chính & phụ
|
|
56
58
|
- Danh sách giả định và câu hỏi mở (đánh dấu rõ điều CHƯA chắc)
|
|
57
59
|
|
|
58
|
-
Đồng thời ghi mọi khoảng trống phát hiện vào `{paths.qc_dir}/{UC-ID}/
|
|
59
|
-
(theo `{paths.qc_skills_dir}/qa-analyst/
|
|
60
|
+
Đồng thời ghi mọi khoảng trống phát hiện vào `{paths.qc_dir}/{UC-ID}/DOC_GAP.md`
|
|
61
|
+
(theo `{paths.qc_skills_dir}/qa-analyst/DOC_GAP.template.md`), mỗi gap có ID `GAP-xx`.
|
|
60
62
|
|
|
61
63
|
Kết thúc bằng gợi ý: feature đã đủ rõ để chuyển sang `qa-planner` (phân tích rủi ro) chưa.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-08-25
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
|
+
upstream_path: skills/qa-tc-analyst/spec-issue-reporter.md
|
|
6
|
+
upstream_sha: 5b5c0c886e92b474e0a5a8157ba58a7c3ce4b3f8
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Spec Issue Reporter — gom mọi điểm mơ hồ thành báo cáo gửi PO/BA/Dev
|
|
10
|
+
|
|
11
|
+
Gom mọi điểm mơ hồ / thiếu / mâu thuẫn phát hiện được trong lúc phân tích thành **một** báo cáo
|
|
12
|
+
có cấu trúc, đủ thông tin để người nhận trả lời được ngay.
|
|
13
|
+
|
|
14
|
+
> **`/qc-analyze` nạp file này** *(B9 — hợp nhất 2026-08-25)*. Nó là luật viết cho
|
|
15
|
+
> `DOC_GAP.template.md` — template **duy nhất** của file gap. Bản 9 cột cũ đã bỏ.
|
|
16
|
+
>
|
|
17
|
+
> **Một chỗ cố ý khác upstream:** mức nặng nhất dùng `🔴 Blocker`, không phải `Critical` —
|
|
18
|
+
> `/qc-run-test` đọc đúng từ đó để đặt *"scenario đang chờ PO"* vào sổ trace.
|
|
19
|
+
|
|
20
|
+
## Đầu vào
|
|
21
|
+
|
|
22
|
+
Mọi dấu `?`, chỗ thiếu mapping, chỗ mâu thuẫn mà các skill phân tích khác đã ghi nhận.
|
|
23
|
+
|
|
24
|
+
## Đầu ra
|
|
25
|
+
|
|
26
|
+
> ⛔ **BẮT BUỘC theo template — tự-validate trước khi lưu.** Đây là skill hay xuất **sai
|
|
27
|
+
> template** nhất: tự chế cột, gộp `Trạng thái` với `Câu trả lời`, thiếu `Giao cho đội` /
|
|
28
|
+
> `Người trả lời`, dùng Loại phi chuẩn (`SYNC` / `Drift` / `FEASIBILITY`), quên section
|
|
29
|
+
> *Ưu tiên xử lý* + *Chú thích*.
|
|
30
|
+
>
|
|
31
|
+
> TRƯỚC khi lưu: mở `{paths.qc_skills_dir}/qa-analyst/DOC_GAP.template.md`, chạy hết
|
|
32
|
+
> **"⚠️ Checklist bắt buộc trước khi lưu file"** ở cuối template, sửa cho khớp 100%.
|
|
33
|
+
|
|
34
|
+
Một file gap gồm:
|
|
35
|
+
|
|
36
|
+
1. **Section `Tài liệu đầu vào đã đọc để phân tích`** — BẮT BUỘC, đặt ngay sau metadata,
|
|
37
|
+
**trước** bảng gap. Bảng liệt kê **đầy đủ** mọi file đã đọc (spec chính + mọi ref-link +
|
|
38
|
+
transitive 1-hop): `# | Đường dẫn | Vai trò | Phiên bản`, kèm tổng số.
|
|
39
|
+
KHÔNG bỏ sót file nào đã mở — đây là **căn cứ độ phủ**: không có nó thì không ai phân biệt
|
|
40
|
+
được *"đã đọc và không thấy"* với *"chưa đọc"*.
|
|
41
|
+
2. **Bảng gap 10 cột**, đúng thứ tự:
|
|
42
|
+
`ID | Loại | Vấn đề cần confirm | Câu hỏi / Lý do cần confirm & Gợi ý | Trích đoạn tài liệu (Evidence) | Giao cho đội | Mức độ | Người trả lời | Trạng thái | Câu trả lời`
|
|
43
|
+
|
|
44
|
+
## Quy tắc
|
|
45
|
+
|
|
46
|
+
- **Evidence bắt buộc** — dẫn **nguyên văn** in nghiêng + tham chiếu vị trí cụ thể
|
|
47
|
+
(`〔file §section〕`). Dùng ✕ khi mâu thuẫn giữa hai chỗ. Không phán đoán chủ quan.
|
|
48
|
+
- **Cột 4 phải đủ bốn mục**, tách bằng `<br/>` thành từng dòng riêng trong cell:
|
|
49
|
+
```
|
|
50
|
+
**Bối cảnh:** …<br/>**Vấn đề:** …<br/>**Tại sao quan trọng:** …<br/>**Gợi ý:** …
|
|
51
|
+
```
|
|
52
|
+
Không viết bốn mục liên tiếp trên một dòng. Ngôn ngữ dễ hiểu cho PO/Design/Dev.
|
|
53
|
+
*"Tại sao quan trọng"* là thứ cho phép người nhận **xếp ưu tiên**; *"Gợi ý"* là thứ cho phép
|
|
54
|
+
họ **trả lời nhanh** thay vì nghĩ lại từ đầu.
|
|
55
|
+
- **Tham chiếu BR/AC dùng ID GỐC trong PRD** (vd `FT-001-UC4-BR11`), **không** dùng ID nội bộ
|
|
56
|
+
do bước phân tích tự đánh số lại (vd `BR-UC4-12`). Hai hệ ID khác nhau; trộn vào là người
|
|
57
|
+
đọc không tra ngược được về PRD.
|
|
58
|
+
- **Mức độ bắt buộc có emoji**: `🔴 Blocker` · `🟠 High` · `🟡 Medium` · `⚪ Low`.
|
|
59
|
+
- **Pipe trong cell**: escape thành `\|` (vd `{a\|b\|c}`), nếu không sẽ vỡ bảng.
|
|
60
|
+
- **Thêm hàng vào bảng đã có**: nối **ngay liền sau hàng cuối**, TUYỆT ĐỐI không chèn dòng
|
|
61
|
+
trắng giữa các hàng — dòng trắng làm Markdown tách thành hai bảng riêng và các gap mới
|
|
62
|
+
**không render** trong bảng chính. Thêm xong cập nhật luôn *Tổng số gap* ở header và bảng
|
|
63
|
+
*Ưu tiên xử lý*.
|
|
64
|
+
- **KHÔNG thêm section "Change log"** và **KHÔNG thêm section "AI Assumptions"** — mọi giả định
|
|
65
|
+
AI tự suy là gap loại `ASSUMPTION` trong bảng, không tách thành section riêng.
|
|
66
|
+
|
|
67
|
+
## Trạng thái hợp lệ
|
|
68
|
+
|
|
69
|
+
`Open` · `Resolved` · `Out of Scope` · `Re-scoped → Covered`
|
|
70
|
+
|
|
71
|
+
**Khi một trường hợp đã đánh dấu `Out of Scope` được yêu cầu viết test:**
|
|
72
|
+
|
|
73
|
+
1. Kiểm PRD xem có ghi chú thay đổi phạm vi không — một change request có thể **dời trách
|
|
74
|
+
nhiệm kiểm tra** từ UC này sang UC khác.
|
|
75
|
+
2. Có ghi chú rõ ràng → đổi trạng thái `Out of Scope` → `Re-scoped → Covered`, ghi test-case
|
|
76
|
+
mới vào cột *Câu trả lời*.
|
|
77
|
+
3. Không tìm thấy ghi chú nhưng QC vẫn yêu cầu → **vẫn viết test** (QC chốt phạm vi), đồng
|
|
78
|
+
thời ghi chú lại để truy vết.
|
|
79
|
+
|
|
80
|
+
## Xác định IN-SCOPE vs NGOÀI PHẠM VI — căn cứ SPEC, không dùng artifact tự sinh
|
|
81
|
+
|
|
82
|
+
> ⚠️ **Nguồn quyết định phạm vi là SPEC, không phải tài liệu do chính pipeline QC sinh ra.**
|
|
83
|
+
|
|
84
|
+
- Khi phán một hạng mục là in-scope hay ngoài phạm vi, phải trích **spec authority**: mục
|
|
85
|
+
*Scope/Phạm vi* của PRD, `@trace.platform` của file `.feature`, hoặc design-spec nêu rõ nền
|
|
86
|
+
tảng áp dụng.
|
|
87
|
+
**TUYỆT ĐỐI KHÔNG** lấy `TEST_PLAN.md` / `*.Test.md` dưới `{paths.qc_dir}` làm căn cứ — chúng
|
|
88
|
+
do chính pipeline này sinh ra, nên dùng chúng là **vòng lặp**: lấy *hệ quả* của phạm vi làm
|
|
89
|
+
*nguồn* của phạm vi.
|
|
90
|
+
- **Bố cục file gap:** chỉ gap **in-scope** nằm trong bảng chính và tính vào *Ưu tiên xử lý*
|
|
91
|
+
(đây là gap sẽ chặn hoặc đẻ ra test). Gap **thật nhưng ngoài phạm vi** (thuộc feature khác)
|
|
92
|
+
và gap **lệch đồng bộ tài liệu** → gom vào section **"Ghi chú ngoài phạm vi"** riêng, không
|
|
93
|
+
trộn vào bảng chính, không tính ưu tiên. **Giữ audit trail, đừng xoá.**
|
|
94
|
+
- Phân vân in hay out → mặc định **giữ in-scope + hỏi lại**. Loại nhầm ra ngoài phạm vi làm
|
|
95
|
+
**mất coverage trong im lặng** — nguy hiểm hơn hẳn việc thừa một gap ngoài lề.
|
|
96
|
+
|
|
97
|
+
## Sau khi sinh file gap — BẮT BUỘC thẩm định
|
|
98
|
+
|
|
99
|
+
Chạy `steps/gap-verify.md` trên tập gap vừa sinh trước khi bàn giao. Skill này **tìm** gap;
|
|
100
|
+
nó không có cơ chế nào tự phát hiện gap mình vừa bịa ra. Xem `gap-verify` §"Nguyên tắc tối thượng".
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — E2E Journey
|
|
@@ -18,7 +18,7 @@ Skill **tự chứa** để viết TC end-to-end: hành trình đầu→cuối x
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
## Format file TC (bắt buộc)
|
|
21
|
-
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](
|
|
21
|
+
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](DOC_GAP.md)`.
|
|
22
22
|
- **Test Data** dạng list (tài khoản/role, dữ liệu lớp/buổi…) · **Steps** `[Action]`/`[Verify]` xuyên các màn ·
|
|
23
23
|
**Expected** 1 bullet = chuỗi verify point (tạo thành công, mã đúng, định tuyến đúng, đồng bộ đúng, hiển thị danh sách).
|
|
24
24
|
- ID journey `E2E-<FEATURE>-NN` · cuối file: Trace matrix + bảng TC block · bỏ nội dung gạch ngang.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Functional API (không qua UI)
|
|
@@ -22,7 +22,7 @@ Chỉ cần load file này.
|
|
|
22
22
|
- 1 file/feature · mỗi TC **1 concept** · metadata **list** (không bảng/emoji): Title · Feature ·
|
|
23
23
|
Priority(P0/P1/P2) · Status(Draft) · Author(AI) · Tags · Trace · 🚫 Block(nếu có).
|
|
24
24
|
- **Trace:** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)`; không có BR → `⚠️ Chưa có Business Rule`.
|
|
25
|
-
- **🚫 Block:** TC phụ thuộc gap vẫn viết đủ + `[GAP-xx](
|
|
25
|
+
- **🚫 Block:** TC phụ thuộc gap vẫn viết đủ + `[GAP-xx](DOC_GAP.md) — lý do`.
|
|
26
26
|
- **Test Data:** dạng **list** (request cụ thể: method/path/headers/body). **Steps:** `[Action]`/`[Verify]`.
|
|
27
27
|
**Expected:** 1 bullet nêu rõ **status code + field response cần chốt** (không ✅/❌).
|
|
28
28
|
- Cuối file: **Trace matrix** (BR↔TC, ⚠️ TC thiếu BR) + **bảng TC bị block** · bỏ nội dung gạch ngang.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Functional GUI Feature (đa màn hình)
|
|
@@ -22,7 +22,7 @@ Skill **tự chứa** để viết TC functional cho feature có luồng span
|
|
|
22
22
|
- 1 file/feature · mỗi TC **1 concept** · metadata **list** (không bảng/emoji): Title · Feature ·
|
|
23
23
|
Priority(P0/P1/P2) · Status(Draft) · Author(AI) · Tags · Trace · 🚫 Block(nếu có).
|
|
24
24
|
- **Trace:** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)`; không có BR → `⚠️ Chưa có Business Rule`.
|
|
25
|
-
- **🚫 Block:** TC phụ thuộc gap vẫn viết đủ + `[GAP-xx](
|
|
25
|
+
- **🚫 Block:** TC phụ thuộc gap vẫn viết đủ + `[GAP-xx](DOC_GAP.md) — lý do`.
|
|
26
26
|
- **Test Data:** dạng **list** (không bảng). **Steps:** `[Action]`/`[Verify]`, không `*Expected:*`/bước. **Expected:** 1 bullet cụ thể.
|
|
27
27
|
- Cuối file: **Trace matrix** (BR↔TC, ⚠️ TC thiếu BR) + **bảng TC bị block** · không `#### Python Test Mapping` · bỏ nội dung gạch ngang.
|
|
28
28
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Functional GUI Screen (1 màn hình)
|
|
@@ -22,7 +22,7 @@ Skill **tự chứa** để viết TC functional cho 1 màn hình đơn lẻ (we
|
|
|
22
22
|
- 1 file/feature · mỗi TC **1 concept** · metadata **list** (mỗi trường 1 dòng, không bảng/emoji):
|
|
23
23
|
Title · Feature · Priority(P0/P1/P2) · Status(Draft) · Author(AI) · Tags · Trace · 🚫 Block(nếu có).
|
|
24
24
|
- **Trace:** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)`; TC không có BR → `⚠️ Chưa có Business Rule`.
|
|
25
|
-
- **🚫 Block:** TC phụ thuộc gap **vẫn viết đủ** + `[GAP-xx](
|
|
25
|
+
- **🚫 Block:** TC phụ thuộc gap **vẫn viết đủ** + `[GAP-xx](DOC_GAP.md) — lý do`; chưa chạy tới khi gap Answered.
|
|
26
26
|
- **Test Data:** dạng **list** (`- **Trường:** giá trị`), không bảng.
|
|
27
27
|
- **Test Steps:** `**[Action]**` / `**[Verify]**`, KHÔNG `- *Expected:*` sau bước. **Expected:** 1 bullet cụ thể (không ✅/❌).
|
|
28
28
|
- Phân nhóm GUI/Functional · cuối file: **Trace matrix** (BR↔TC, ⚠️ TC thiếu BR) + **bảng TC bị block** · KHÔNG `#### Python Test Mapping` · bỏ nội dung gạch ngang.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Integration API
|
|
@@ -20,7 +20,7 @@ verify luồng dữ liệu & contract giữa các thành phần. Chỉ cần loa
|
|
|
20
20
|
---
|
|
21
21
|
|
|
22
22
|
## Format file TC (bắt buộc)
|
|
23
|
-
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](
|
|
23
|
+
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](DOC_GAP.md)` (TC chặn vẫn viết đủ).
|
|
24
24
|
- **Test Data** dạng list · **Steps** `[Action]`/`[Verify]` · **Expected** 1 bullet nêu rõ chặng verify (response/bản ghi/event).
|
|
25
25
|
- Cuối file: Trace matrix + bảng TC block · bỏ nội dung gạch ngang.
|
|
26
26
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Integration DB
|
|
@@ -18,7 +18,7 @@ insert/update/soft-delete đúng giá trị, side-effect, toàn vẹn. Chỉ c
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
## Format file TC (bắt buộc)
|
|
21
|
-
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](
|
|
21
|
+
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](DOC_GAP.md)`.
|
|
22
22
|
- **Test Data** dạng list (giá trị input) · **Steps** `[Action]`/`[Verify]` · **Expected** 1 bullet nêu rõ **bảng.cột = giá trị**.
|
|
23
23
|
- Cuối file: Trace matrix + bảng TC block · bỏ nội dung gạch ngang.
|
|
24
24
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Integration GUI ↔ Backend
|
|
@@ -19,7 +19,7 @@ lỗi từ server, đồng bộ trạng thái hai chiều. Chỉ cần load file
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
21
|
## Format file TC (bắt buộc)
|
|
22
|
-
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](
|
|
22
|
+
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](DOC_GAP.md)`.
|
|
23
23
|
- **Test Data** dạng list · **Steps** `[Action]`/`[Verify]` · **Expected** 1 bullet (API liên quan + biểu hiện UI kỳ vọng).
|
|
24
24
|
- Cuối file: Trace matrix + bảng TC block · bỏ nội dung gạch ngang.
|
|
25
25
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Integration Kafka (Message/Event)
|
|
@@ -18,7 +18,7 @@ Skill **tự chứa** để viết TC tích hợp qua Kafka: producer phát even
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
## Format file TC (bắt buộc)
|
|
21
|
-
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](
|
|
21
|
+
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](DOC_GAP.md)`.
|
|
22
22
|
- **Test Data** dạng list (payload) · **Steps** `[Action]`/`[Verify]` · **Expected** 1 bullet nêu **topic + field payload / hành vi consumer**.
|
|
23
23
|
- Cuối file: Trace matrix + bảng TC block · bỏ nội dung gạch ngang.
|
|
24
24
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Non-Functional
|
|
@@ -18,7 +18,7 @@ Trọng tâm "hệ thống hoạt động TỐT thế nào". Chỉ cần load fi
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
## Format file TC (bắt buộc)
|
|
21
|
-
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](
|
|
21
|
+
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](DOC_GAP.md)`.
|
|
22
22
|
- **Test Data** dạng list · **Steps** `[Action]`/`[Verify]` · **Expected** 1 bullet có **ngưỡng đo cụ thể** (không "nhanh/ổn định").
|
|
23
23
|
- Cuối file: Trace matrix + bảng TC block · bỏ nội dung gạch ngang.
|
|
24
24
|
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-08-25
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
|
+
upstream_path: skills/qa-tc-analyst/risk-acceptance-analyzer.md
|
|
6
|
+
upstream_sha: 5eca5091acd30e063d20b63f12b04e2d1c78ac83
|
|
7
|
+
port_completeness: partial
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Risk Model — cách tính mức rủi ro và dùng nó để chia độ sâu test
|
|
11
|
+
|
|
12
|
+
`test-plan.md` có **khung** bảng rủi ro (`§6`) nhưng không có **cách điền**. File này là cách điền.
|
|
13
|
+
|
|
14
|
+
Nạp cùng `test-plan.md` khi lập plan. Đầu ra không phải file riêng — nó điền vào `§6 Rủi ro`
|
|
15
|
+
và `§5 Tiêu chí Vào/Ra` của `TEST_PLAN.md`.
|
|
16
|
+
|
|
17
|
+
## Cố ý chỉ port một phần
|
|
18
|
+
|
|
19
|
+
Bản upstream (`risk-acceptance-analyzer`) có 5 phase. Ba phase bị **cố ý bỏ** vì trạm 1 đã làm rồi:
|
|
20
|
+
|
|
21
|
+
| Phase upstream | Vì sao không port |
|
|
22
|
+
|---|---|
|
|
23
|
+
| Test Conditions | trùng vai với `qa-analyst/spec-breakdown` + `business-rules` (trạm 1) |
|
|
24
|
+
| Ambiguity & Gap | trùng vai với `DOC_GAP` + `steps/gap-verify.md` (trạm 1) |
|
|
25
|
+
| Acceptance Criteria | trùng vai với `qa-analyst/acceptance-criteria` (trạm 1) |
|
|
26
|
+
|
|
27
|
+
Chỉ port **Phase 3 (Risk Register)** và **Phase 5 (Ưu tiên + Entry/Exit)** — hai phần trạm 2 sở hữu.
|
|
28
|
+
|
|
29
|
+
*Ghi `port_completeness: partial` ở frontmatter — lần đồng bộ sau đừng hiểu phần thiếu là
|
|
30
|
+
"ta cố ý xoá nội dung".*
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Bước 1 — Liệt kê rủi ro sản phẩm
|
|
35
|
+
|
|
36
|
+
Bảy nguồn rủi ro. Quét từng cái, không bỏ nguồn nào chỉ vì "feature này chắc không có":
|
|
37
|
+
|
|
38
|
+
| # | Nguồn | Dấu hiệu trong PRD/BR |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| 1 | **Logic phức tạp** | nhiều điều kiện AND/OR lồng nhau, bảng định tuyến, công thức tính |
|
|
41
|
+
| 2 | **Tiền / thanh toán** | giao dịch, hoàn tiền, mã giảm giá, hạn mức |
|
|
42
|
+
| 3 | **Dữ liệu nhạy cảm** | thông tin cá nhân, số điện thoại, thông tin định danh |
|
|
43
|
+
| 4 | **Tích hợp nhiều phần** | gọi dịch vụ khác, hàng đợi sự kiện, đồng bộ dữ liệu |
|
|
44
|
+
| 5 | **Code mới hoặc sửa nhiều** | feature xây mới, hoặc vùng vừa refactor |
|
|
45
|
+
| 6 | **Lịch sử lỗi cao** | vùng đã từng có bug — tra `{paths.bug_reports_dir}` cho UC/feature này |
|
|
46
|
+
| 7 | **Ảnh hưởng nhiều người dùng** | luồng chính mọi người đều đi qua, màn đăng nhập, trang chủ |
|
|
47
|
+
|
|
48
|
+
> Nguồn 6 là nguồn duy nhất **tra được bằng dữ liệu thật** trong framework — sổ bug nằm ở
|
|
49
|
+
> `{paths.bug_reports_dir}`. Đừng đoán "vùng này chắc ổn"; mở ra đếm.
|
|
50
|
+
|
|
51
|
+
## Bước 2 — Chấm mức cho từng rủi ro
|
|
52
|
+
|
|
53
|
+
Hai chiều, mỗi chiều ba mức:
|
|
54
|
+
|
|
55
|
+
- **Khả năng xảy ra** — Cao / Trung bình / Thấp
|
|
56
|
+
- **Mức thiệt hại nếu xảy ra** — Cao / Trung bình / Thấp
|
|
57
|
+
|
|
58
|
+
Nhân lại ra **P0 → P3**:
|
|
59
|
+
|
|
60
|
+
| Khả năng \ Thiệt hại | Cao | Trung bình | Thấp |
|
|
61
|
+
|---|:---:|:---:|:---:|
|
|
62
|
+
| **Cao** | **P0** | **P1** | P2 |
|
|
63
|
+
| **Trung bình** | **P1** | P2 | P3 |
|
|
64
|
+
| **Thấp** | P2 | P3 | P3 |
|
|
65
|
+
|
|
66
|
+
> **Chấm hai chiều riêng rồi mới nhân** — đừng chấm thẳng ra P0/P1 theo cảm tính. Hai chiều
|
|
67
|
+
> tách nhau là chỗ tranh luận trở nên cụ thể: *"cái này thiệt hại cao nhưng khả năng thấp"*
|
|
68
|
+
> là một câu nói được, còn *"cái này P1"* thì không cãi được, chỉ tin hoặc không tin.
|
|
69
|
+
|
|
70
|
+
## Bước 3 — Dùng mức rủi ro để chia **độ sâu** test
|
|
71
|
+
|
|
72
|
+
Đây là chỗ bảng rủi ro trả lại giá trị. Không có bước này thì nó chỉ là một bảng trang trí.
|
|
73
|
+
|
|
74
|
+
| Mức | Test sâu tới đâu | Tự động hoá |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| **P0** | nhiều kỹ thuật cùng lúc: phân lớp tương đương + giá trị biên + bảng quyết định + chuyển trạng thái | ✅ ưu tiên — cả kiểm thử hồi quy |
|
|
77
|
+
| **P1** | hai kỹ thuật trở lên, phủ đủ nhánh chính + nhánh lỗi | ✅ nếu ổn định |
|
|
78
|
+
| **P2** | một kỹ thuật, phủ luồng thuận + một nhánh lỗi tiêu biểu | tuỳ |
|
|
79
|
+
| **P3** | danh sách kiểm tay, không cần test case đầy đủ | ❌ |
|
|
80
|
+
|
|
81
|
+
**Thứ tự chạy:** rủi ro cao **và** phụ thuộc thấp làm trước — không phải "P0 làm hết rồi mới tới P1".
|
|
82
|
+
Một P0 đang chờ gap chặn thì không chạy được; làm P1 sẵn sàng trước là đúng.
|
|
83
|
+
|
|
84
|
+
**Tháp test:** end-to-end tự động **chỉ** cho luồng P0/P1 trọng yếu. E2E cho P2/P3 là đắt và giòn —
|
|
85
|
+
tiền không đáng.
|
|
86
|
+
|
|
87
|
+
## Bước 4 — Điền Entry / Exit theo rủi ro
|
|
88
|
+
|
|
89
|
+
`test-plan.md §5` đã có khung. Rủi ro làm nó cụ thể hơn:
|
|
90
|
+
|
|
91
|
+
- **Entry** — mọi gap 🔴 chặn đã `Answered`; **và** mọi rủi ro P0 đã có ít nhất một cách giảm thiểu ghi rõ.
|
|
92
|
+
- **Exit** — phủ 100% vùng P0 · không còn defect mở ở vùng P0/P1 · tỉ lệ pass đạt ngưỡng đã khai.
|
|
93
|
+
|
|
94
|
+
> **Rủi ro P0 không có cách giảm thiểu = chưa đủ điều kiện bắt đầu.** Ghi ra một rủi ro rồi
|
|
95
|
+
> không nói làm gì với nó là ghi cho có.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Điền vào `TEST_PLAN.md §6`
|
|
100
|
+
|
|
101
|
+
| Rủi ro | Nguồn (1–7) | Khả năng | Thiệt hại | Mức | Giảm thiểu (loại test + kỹ thuật) |
|
|
102
|
+
|---|---|---|---|---|---|
|
|
103
|
+
| … | 2 · tiền | Cao | Cao | **P0** | functional/api + giá trị biên; e2e luồng thanh toán |
|
|
104
|
+
|
|
105
|
+
Mỗi dòng rủi ro phải **trỏ được về BR-xx hoặc GAP-xx** đã có ở `REQUIREMENT_ANALYSIS.md` /
|
|
106
|
+
`DOC_GAP.md` — rủi ro không neo vào yêu cầu nào là rủi ro tự nghĩ ra.
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
|
+
upstream_path: skills/qa-tc-analyst/test-plan.md
|
|
6
|
+
upstream_sha: f259b4d123c565a42ba6c6ec96980a8e4c66284f
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
# Lập Test Plan
|
|
@@ -10,15 +12,15 @@ Tổng hợp **output của qa-analyst** thành **Test Plan** cho một feature.
|
|
|
10
12
|
|
|
11
13
|
**Đầu vào (bắt buộc, chỉ 2 nguồn — đúng 2 file qa-analyst trả ra):**
|
|
12
14
|
1. `{paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md` — chức năng, BR-xx, AC-xx, data flow (qa-analyst).
|
|
13
|
-
2. `{paths.qc_dir}/{UC-ID}/
|
|
15
|
+
2. `{paths.qc_dir}/{UC-ID}/DOC_GAP.md` — bảng gap GAP-xx, mức độ, gap Blocker (qa-analyst).
|
|
14
16
|
|
|
15
17
|
## Khi nào trigger
|
|
16
18
|
- "lập test plan cho [Feature]" / "viết test plan"
|
|
17
|
-
- Sau khi qa-analyst xong (đã có REQUIREMENT_ANALYSIS +
|
|
19
|
+
- Sau khi qa-analyst xong (đã có REQUIREMENT_ANALYSIS + DOC_GAP)
|
|
18
20
|
- Trước khi qa-designer thiết kế chi tiết TC — test plan là khung định hướng
|
|
19
21
|
|
|
20
22
|
## Khi KHÔNG trigger
|
|
21
|
-
- Chưa có REQUIREMENT_ANALYSIS /
|
|
23
|
+
- Chưa có REQUIREMENT_ANALYSIS / DOC_GAP → chạy qa-analyst trước
|
|
22
24
|
- Thiết kế test case chi tiết (.Test.md) → dùng qa-designer
|
|
23
25
|
- Bóc tách yêu cầu/spec, lập danh sách gap → dùng qa-analyst
|
|
24
26
|
|
|
@@ -28,7 +30,7 @@ Tổng hợp **output của qa-analyst** thành **Test Plan** cho một feature.
|
|
|
28
30
|
|
|
29
31
|
1. Đọc `REQUIREMENT_ANALYSIS.md`: nắm chức năng, các BR-xx và AC-xx, data flow,
|
|
30
32
|
integration/failure point.
|
|
31
|
-
2. Đọc `
|
|
33
|
+
2. Đọc `DOC_GAP.md`: lấy danh sách gap, đặc biệt **gap Blocker còn Open** → đây là
|
|
32
34
|
nguồn cho cột "Phụ thuộc" và cho Entry criteria.
|
|
33
35
|
3. Map mỗi nhóm BR sang **layer test** của qa-designer: functional/gui-screen,
|
|
34
36
|
gui-feature, api, integration, e2e/journey, non-functional.
|
|
@@ -47,7 +49,8 @@ Tổng hợp **output của qa-analyst** thành **Test Plan** cho một feature.
|
|
|
47
49
|
criteria yêu cầu đóng các gap đó trước khi thiết kế TC.
|
|
48
50
|
- Liệt kê **E2E journey** đầy đủ (mỗi journey: tiền điều kiện, kết quả/định tuyến kỳ
|
|
49
51
|
vọng, BR, phụ thuộc, priority) + bộ **verify point chung** sau submit.
|
|
50
|
-
- Mục Rủi ro:
|
|
52
|
+
- Mục Rủi ro: **nạp `risk-model.md`** — quét đủ 7 nguồn, chấm khả năng × thiệt hại → P0–P3,
|
|
53
|
+
rồi dùng mức đó chia độ sâu test. Đừng chấm thẳng ra P0/P1 theo cảm tính.
|
|
51
54
|
|
|
52
55
|
---
|
|
53
56
|
|
|
@@ -63,7 +66,7 @@ Tổng hợp **output của qa-analyst** thành **Test Plan** cho một feature.
|
|
|
63
66
|
| Feature / Project / Module | … |
|
|
64
67
|
| Người lập | qa-planner |
|
|
65
68
|
| Ngày / Phiên bản | … |
|
|
66
|
-
| Nguồn | REQUIREMENT_ANALYSIS ·
|
|
69
|
+
| Nguồn | REQUIREMENT_ANALYSIS · DOC_GAP |
|
|
67
70
|
|
|
68
71
|
## 1. Mục tiêu
|
|
69
72
|
Mục tiêu test của feature (1–3 câu).
|
|
@@ -95,12 +98,12 @@ Kỹ thuật áp dụng: EP+BVA, Decision Table (cho logic điều kiện), stat
|
|
|
95
98
|
integration, negative/exploratory; tự động hoá theo `CLAUDE.md` (Playwright + pytest-playwright + Trace + pytest-html).
|
|
96
99
|
|
|
97
100
|
## 5. Tiêu chí Vào / Ra
|
|
98
|
-
- **Entry:** gap Blocker (trong
|
|
101
|
+
- **Entry:** gap Blocker (trong DOC_GAP) đã Answered; doc phụ thuộc sẵn sàng; môi trường + tài khoản role.
|
|
99
102
|
- **Exit:** pass P0=100%, P1≥95%; không còn defect Blocker/Critical; mọi BR/AC được trace; báo cáo pytest-html + Playwright Trace.
|
|
100
103
|
|
|
101
104
|
## 6. Rủi ro (risk-based)
|
|
102
|
-
| Rủi ro |
|
|
103
|
-
(
|
|
105
|
+
| Rủi ro | Nguồn | Khả năng | Thiệt hại | Mức | Giảm thiểu |
|
|
106
|
+
(cách chấm mức + 7 nguồn rủi ro + cách dùng mức để chia độ sâu test: xem `risk-model.md`)
|
|
104
107
|
|
|
105
108
|
## 7. Dữ liệu & Môi trường
|
|
106
109
|
Tài khoản các role, dữ liệu mẫu (biên/edge), môi trường staging.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ui-automation-testing
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Review Test Case — Integration
|
|
@@ -21,7 +21,7 @@ Review bộ TC tích hợp (GUI↔Backend, API, DB) và đánh giá chất lư
|
|
|
21
21
|
## Phase 1 — Clarify
|
|
22
22
|
|
|
23
23
|
1. Đọc tất cả TC integration trong folder chỉ định; xác định loại: GUI↔Backend / API / DB
|
|
24
|
-
2. Đọc REQUIREMENT_ANALYSIS +
|
|
24
|
+
2. Đọc REQUIREMENT_ANALYSIS + DOC_GAP nếu có
|
|
25
25
|
3. Xác định chuỗi tích hợp (caller → component → downstream)
|
|
26
26
|
|
|
27
27
|
---
|