@educa-corp/sdd-framework 0.9.3 → 0.9.4
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/build.js +11 -0
- package/bin/qc-base-map.json +119 -49
- package/bin/self-check.js +30 -0
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/qc-analyze.md +6 -119
- package/core/commands/qc-design-test.md +123 -143
- package/core/commands/qc-plan.md +6 -119
- package/core/commands/qc-review.md +59 -125
- package/core/commands/qc-run-test.md +6 -119
- package/core/commands/setup-ai-first.md +5 -5
- package/core/commands/update-framework.md +1 -1
- package/core/commands/validate-traces.md +1 -1
- package/core/rules/workflow.md +1 -1
- package/core/skills/qc/qa-analyst/DOC_GAP.template.md +1 -1
- package/core/skills/qc/qa-analyst/spec-breakdown.md +2 -2
- package/core/skills/qc/qa-designer/api/auth-chain.md +155 -0
- package/core/skills/qc/qa-designer/api/auth-sequence.md +75 -0
- package/core/skills/qc/qa-designer/api/common-headers.md +61 -0
- package/core/skills/qc/qa-designer/api/crud-sequence.md +122 -0
- package/core/skills/qc/qa-designer/api/endpoint.md +231 -0
- package/core/skills/qc/qa-designer/api/http-status-codes.md +102 -0
- package/core/skills/qc/qa-designer/e2e/journey.md +13 -8
- package/core/skills/qc/qa-designer/exploratory/charter.md +2 -0
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +7 -4
- package/core/skills/qc/qa-designer/functional/api.md +87 -18
- package/core/skills/qc/qa-designer/functional/gui-feature.md +12 -9
- package/core/skills/qc/qa-designer/functional/gui-screen.md +12 -10
- package/core/skills/qc/qa-designer/integration/api.md +12 -5
- package/core/skills/qc/qa-designer/integration/db.md +12 -6
- package/core/skills/qc/qa-designer/integration/gui.md +12 -5
- package/core/skills/qc/qa-designer/integration/kafka.md +12 -5
- package/core/skills/qc/qa-designer/non-functional.md +12 -5
- package/core/skills/qc/qa-designer/shared/action-keywords-glossary.md +91 -0
- package/core/skills/qc/qa-designer/shared/duplicate-check-procedure.md +105 -0
- package/core/skills/qc/qa-designer/shared/implicit-scenarios.md +22 -0
- package/core/skills/qc/qa-designer/shared/precision-rules.md +198 -0
- package/core/skills/qc/qa-designer/shared/read-doc-gap-inputs.md +25 -0
- package/core/skills/qc/qa-designer/shared/skill-decision-tree.md +93 -0
- package/core/skills/qc/qa-designer/shared/tc-metadata-format.md +243 -0
- package/core/skills/qc/qa-planner/risk-model.md +1 -1
- package/core/skills/qc/qa-reviewer/script/e2e.md +9 -1
- package/core/skills/qc/qa-reviewer/script/exploratory.md +9 -1
- package/core/skills/qc/qa-reviewer/script/functional.md +9 -1
- package/core/skills/qc/qa-reviewer/script/integration.md +9 -1
- package/core/skills/qc/qa-reviewer/script/non-functional.md +9 -1
- package/core/skills/qc/qa-reviewer/shared/read-doc-gap-inputs.md +26 -0
- package/core/skills/qc/qa-reviewer/shared/review-check-groups.md +207 -0
- package/core/skills/qc/qa-reviewer/shared/review-file-template.md +228 -0
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +71 -13
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +53 -4
- package/core/skills/qc/qa-reviewer/test-case/functional.md +63 -15
- package/core/skills/qc/qa-reviewer/test-case/integration.md +64 -12
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +72 -13
- package/core/skills/qc/qa-runner/e2e.md +1 -1
- package/docs/02-concepts/pipeline-steps/09-validate-traces.md +1 -1
- package/docs/04-reference/trace-schema.md +1 -1
- package/docs/explain/00-setup-ai-first.md +1 -1
- package/docs/plans/qc-implementation-log.md +145 -3
- package/package.json +1 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
|
-
updated: 2026-
|
|
3
|
+
updated: 2026-09-04
|
|
4
4
|
ported_from: ui-automation-testing
|
|
5
|
+
upstream_path: skills/qa-tc-reviewer/exploratory-test-reviewer.md
|
|
6
|
+
upstream_sha: 4e068bb896739b977a6a5b1f638010d498c46aef
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
# Review Charter — Exploratory
|
|
@@ -18,6 +20,30 @@ Review chất lượng test charter trước khi QC chạy session.
|
|
|
18
20
|
|
|
19
21
|
---
|
|
20
22
|
|
|
23
|
+
## Trọng tâm review — tầng Exploratory
|
|
24
|
+
|
|
25
|
+
- **Charter có mục tiêu đo được**: nêu rõ vùng thăm dò · tour áp dụng · rủi ro nhắm tới ·
|
|
26
|
+
time-box. Thiếu time-box → charter không kết thúc được.
|
|
27
|
+
- **Không trùng vùng đã có TC scripted**: thăm dò chỗ đã phủ bằng TC là tiêu thời gian mà không
|
|
28
|
+
tăng thông tin → `[DUPLICATE]`.
|
|
29
|
+
- **Phát hiện phải chuyển được thành TC**: mỗi phát hiện đáng giữ phải đủ thông tin để
|
|
30
|
+
`explore-to-functional` biến thành TC chính thức. Không đủ → yêu cầu bổ sung, đừng bỏ.
|
|
31
|
+
|
|
32
|
+
*Charter **không phải** file TC — luật cấu trúc TC (ATOMIC, không bảng) **không áp** ở đây. Chỉ
|
|
33
|
+
áp khi charter đã chuyển thành TC.*
|
|
34
|
+
- **Phân nhóm & `Type`** *(Nhóm 3 riêng của tầng này)*: charter thuộc nhóm **Exploratory**, không
|
|
35
|
+
trộn với TC scripted. Một charter ôm nhiều vùng rủi ro → `[SPLIT_NEEDED]`.
|
|
36
|
+
|
|
37
|
+
## 7 nhóm kiểm tra
|
|
38
|
+
|
|
39
|
+
> **Nạp `{paths.qc_skills_dir}/qa-reviewer/shared/review-check-groups.md`** — bộ xương 7 nhóm
|
|
40
|
+
> chạy tuần tự · registry nhãn lỗi dùng chung · 7 mẫu-hay-thiếu của Nhóm 6 · nền tảng ISTQB ·
|
|
41
|
+
> anti-pattern. Nhóm 5 (Nội dung TC) trỏ tiếp sang `shared/review-file-template.md`.
|
|
42
|
+
>
|
|
43
|
+
> Dưới đây chỉ là phần **riêng của tầng này**.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
21
47
|
## Phase 1 — Read
|
|
22
48
|
|
|
23
49
|
Đọc tất cả charter .md trong folder chỉ định + feature description nếu có.
|
|
@@ -37,7 +63,30 @@ Review chất lượng test charter trước khi QC chạy session.
|
|
|
37
63
|
|
|
38
64
|
---
|
|
39
65
|
|
|
66
|
+
## Phase 3 — Coverage tổng thể
|
|
67
|
+
|
|
68
|
+
*(Suy ra cho tầng này — bản gốc không có.)*
|
|
69
|
+
|
|
70
|
+
| Trục | Kỳ vọng tối thiểu |
|
|
71
|
+
|---|---|
|
|
72
|
+
| Vùng | Mỗi vùng rủi ro nêu trong TEST_PLAN có ≥1 charter |
|
|
73
|
+
| Tour | Không dùng lặp một tour cho mọi charter — mỗi tour soi một góc khác |
|
|
74
|
+
| Chuyển đổi | Mỗi phát hiện mức P0/P1 đã có đường thành TC chính thức |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
40
78
|
## Output
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
79
|
+
|
|
80
|
+
**Ghi vào `{qc_artifact_dir}test-cases/REVIEW_<FEATURE>.md`** — đứng cạnh file TC vừa soát.
|
|
81
|
+
Nạp `../shared/review-file-template.md` để lấy khuôn + quy tắc ghi (tích luỹ theo vòng, chỉ sửa
|
|
82
|
+
hàng của tầng mình, KHÔNG ghi đè tầng khác).
|
|
83
|
+
|
|
84
|
+
Mỗi tiêu chí: ✅ PASS | ⚠️ WARN | ❌ FAIL + evidence cụ thể (charter ID)
|
|
85
|
+
|
|
86
|
+
**Điểm `XX/100`** — trừ 5đ mỗi `FAIL`, 2đ mỗi `WARN`. ≥80 đạt · 60–79 cần cải thiện · <60 không đạt.
|
|
87
|
+
**Verdict:** `điểm ≥ 80` VÀ không còn `FAIL` chặn → **`APPROVED`**; ngược lại **`NEEDS_FIX`**.
|
|
88
|
+
|
|
89
|
+
Mỗi charter: ✅ PASS | 🔧 REWORK | ✂️ SPLIT | 🔗 MERGE + feedback cụ thể.
|
|
90
|
+
Charter bổ sung nếu còn gap.
|
|
91
|
+
|
|
92
|
+
**KHÔNG tự sửa file TC** — chỉ nhận xét, chấm điểm, nêu cụ thể sửa gì. Người sửa là `/qc-design-test`.
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
|
-
updated: 2026-
|
|
3
|
+
updated: 2026-09-04
|
|
4
4
|
ported_from: ui-automation-testing
|
|
5
|
+
upstream_path: skills/qa-tc-reviewer/ui-test-reviewer.md
|
|
6
|
+
upstream_sha: 54f81eb6a132d3fb331f18ce0f1a7eb3a9cf19df
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
# Review Test Case — Functional
|
|
@@ -10,7 +12,7 @@ Review bộ functional TC và đánh giá chất lượng.
|
|
|
10
12
|
|
|
11
13
|
## Khi nào trigger
|
|
12
14
|
- "review TC cho [Feature]" / "check coverage"
|
|
13
|
-
- Sau khi qa-designer xong, trước khi PO approve hoặc trước khi
|
|
15
|
+
- Sau khi qa-designer xong, trước khi PO approve hoặc trước khi /qc-run-test
|
|
14
16
|
|
|
15
17
|
## Khi KHÔNG trigger
|
|
16
18
|
- Review Python script → dùng qa-reviewer
|
|
@@ -18,6 +20,32 @@ Review bộ functional TC và đánh giá chất lượng.
|
|
|
18
20
|
|
|
19
21
|
---
|
|
20
22
|
|
|
23
|
+
## Trọng tâm review — tầng Functional / GUI
|
|
24
|
+
|
|
25
|
+
- **Assertion hiển thị đo được**: cấm *"hiển thị đúng"* — phải nêu element / nhãn / chuỗi / màu
|
|
26
|
+
cụ thể. Thiếu → `[VAGUE_EXPECTED]`.
|
|
27
|
+
- **EP + BVA từng field có ràng buộc**: mỗi phân vùng một TC; biên đủ 3 hoặc 4 giá trị tuỳ dạng
|
|
28
|
+
ràng buộc (`../../qa-designer/shared/precision-rules.md` §7). Thiếu → `[GAP]`.
|
|
29
|
+
- **Bảng quyết định cho logic nhiều điều kiện**: có ≥2 điều kiện → **tự dựng bảng** để đếm N rule
|
|
30
|
+
tối thiểu (sau khi gộp don't-care); thiếu TC so với N → `[DT_COVERAGE_GAP]`.
|
|
31
|
+
- **State Transition**: element có vòng đời phải phủ transition hợp lệ **và** transition bị cấm.
|
|
32
|
+
Thiếu nhánh cấm → `[GAP]`.
|
|
33
|
+
- **Phân nhóm GUI vs Functional** *(Nhóm 3 riêng của tầng này)*: GUI = chỉ hiển thị tĩnh, không
|
|
34
|
+
đổi trạng thái · Functional = có hành động / validate / luồng. Sai nhóm → `[WRONG_GROUP]`;
|
|
35
|
+
một TC gánh cả hai → `[SPLIT_NEEDED]`.
|
|
36
|
+
- **`Type` khớp nội dung**: Happy Path (luồng chính lý tưởng) · Positive (input hợp lệ → xử lý
|
|
37
|
+
đúng) · Negative (input sai → chặn & báo lỗi) · Edge (biên/cực trị). Lệch → `[WRONG_TYPE]`.
|
|
38
|
+
|
|
39
|
+
## 7 nhóm kiểm tra
|
|
40
|
+
|
|
41
|
+
> **Nạp `{paths.qc_skills_dir}/qa-reviewer/shared/review-check-groups.md`** — bộ xương 7 nhóm
|
|
42
|
+
> chạy tuần tự · registry nhãn lỗi dùng chung · 7 mẫu-hay-thiếu của Nhóm 6 · nền tảng ISTQB ·
|
|
43
|
+
> anti-pattern. Nhóm 5 (Nội dung TC) trỏ tiếp sang `shared/review-file-template.md`.
|
|
44
|
+
>
|
|
45
|
+
> Dưới đây chỉ là phần **riêng của tầng này**.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
21
49
|
## Phase 1 — Clarify
|
|
22
50
|
|
|
23
51
|
1. Đọc tất cả .Test.md trong folder được chỉ định
|
|
@@ -55,22 +83,42 @@ D. ANTI-PATTERN:
|
|
|
55
83
|
|
|
56
84
|
---
|
|
57
85
|
|
|
58
|
-
##
|
|
86
|
+
## Phase 3 — Coverage tổng thể
|
|
87
|
+
|
|
88
|
+
Sau khi duyệt hết từng TC, kiểm **bộ TC** có đủ bốn nhóm không:
|
|
59
89
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
90
|
+
| Nhóm | Kỳ vọng tối thiểu |
|
|
91
|
+
|---|---|
|
|
92
|
+
| Display | Mỗi section / vùng giao diện có ≥1 TC |
|
|
93
|
+
| Validation | Mỗi field có ràng buộc: required + BVA (3 hoặc 4 TC) + định dạng nếu có |
|
|
94
|
+
| State | Mỗi element có ≥2 trạng thái: ≥1 TC trạng thái đầu + ≥1 TC chuyển trạng thái |
|
|
95
|
+
| Interaction | Mỗi hành động (click / hover / bàn phím) ≥1 TC |
|
|
96
|
+
|
|
97
|
+
Thiếu nhóm nào → bảng **Coverage gaps** của file review, kèm `[GAP]` + mã TC đề xuất bổ sung.
|
|
68
98
|
|
|
69
99
|
---
|
|
70
|
-
|
|
100
|
+
|
|
101
|
+
## Kiểm tra cấu trúc file TC
|
|
102
|
+
|
|
103
|
+
> **Nạp `{paths.qc_skills_dir}/qa-reviewer/shared/review-file-template.md`** §*Kiểm tra cấu trúc
|
|
104
|
+
> TC* — luật ATOMIC 1-bullet · không ký tự `|` · 9 cụm từ mơ hồ · teardown đúng chỗ · marker ≠
|
|
105
|
+
> oracle · 6 dấu vết hỏng sau khi chạy script tách. **Không lặp lại ở đây.**
|
|
106
|
+
>
|
|
107
|
+
> Luật gốc mà trạm 3 phải theo nằm ở `qa-designer/shared/tc-metadata-format.md` +
|
|
108
|
+
> `precision-rules.md`. **Cổng và luật phải đọc từ cùng một chỗ** — giữ hai bản là tự tạo lại
|
|
109
|
+
> chỗ chúng lệch nhau, và cổng lệch thì nó đánh trượt file làm đúng.
|
|
110
|
+
|
|
71
111
|
## Output
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
112
|
+
|
|
113
|
+
**Ghi vào `{qc_artifact_dir}test-cases/REVIEW_<FEATURE>.md`** — đứng cạnh file TC vừa soát.
|
|
114
|
+
Nạp `../shared/review-file-template.md` để lấy khuôn + quy tắc ghi (tích luỹ theo vòng, chỉ sửa
|
|
115
|
+
hàng của tầng mình, KHÔNG ghi đè tầng khác).
|
|
116
|
+
|
|
117
|
+
Mỗi tiêu chí: ✅ PASS | ⚠️ WARN | ❌ FAIL + evidence cụ thể
|
|
118
|
+
|
|
119
|
+
**Điểm `XX/100`** — trừ 5đ mỗi `FAIL`, 2đ mỗi `WARN`. ≥80 đạt · 60–79 cần cải thiện · <60 không đạt.
|
|
120
|
+
**Verdict:** `điểm ≥ 80` VÀ không còn `FAIL` chặn → **`APPROVED`**; ngược lại **`NEEDS_FIX`**.
|
|
121
|
+
|
|
75
122
|
Đề xuất TC cần thêm/sửa/xoá, sắp theo priority. Liệt kê TC thiếu Trace BR (⚠️) cần bổ sung.
|
|
76
123
|
|
|
124
|
+
**KHÔNG tự sửa file TC** — chỉ nhận xét, chấm điểm, nêu cụ thể sửa gì. Người sửa là `/qc-design-test`.
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
|
-
updated: 2026-
|
|
3
|
+
updated: 2026-09-04
|
|
4
4
|
ported_from: ui-automation-testing
|
|
5
|
+
upstream_path: skills/qa-tc-reviewer/integration-test-reviewer.md
|
|
6
|
+
upstream_sha: 639b54afb68df83b22168581c5c57b0f91d9cf6a
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
# Review Test Case — Integration
|
|
@@ -10,7 +12,7 @@ Review bộ TC tích hợp (GUI↔Backend, API, DB) và đánh giá chất lư
|
|
|
10
12
|
|
|
11
13
|
## Khi nào trigger
|
|
12
14
|
- "review TC integration cho [Feature]" / "check TC tích hợp"
|
|
13
|
-
- Sau khi qa-designer/integration/* xong, trước khi
|
|
15
|
+
- Sau khi qa-designer/integration/* xong, trước khi /qc-run-test
|
|
14
16
|
|
|
15
17
|
## Khi KHÔNG trigger
|
|
16
18
|
- Review TC functional 1 màn/endpoint → `test-case/functional`
|
|
@@ -18,6 +20,30 @@ Review bộ TC tích hợp (GUI↔Backend, API, DB) và đánh giá chất lư
|
|
|
18
20
|
|
|
19
21
|
---
|
|
20
22
|
|
|
23
|
+
## Trọng tâm review — tầng Integration
|
|
24
|
+
|
|
25
|
+
- **Verify CẢ HAI phía**: mỗi handshake phải assert trạng thái của **Module A và Module B** +
|
|
26
|
+
tầng dữ liệu (DB/cache nhất quán). Chỉ verify một phía → `[GAP]`.
|
|
27
|
+
- **Phủ đủ chế độ lỗi**: happy → một bên lỗi (suy giảm mềm) → timeout / mất mạng → dữ liệu cũ /
|
|
28
|
+
tranh chấp → tương thích ngược. Thiếu nhánh lỗi → `[GAP]`.
|
|
29
|
+
- **Di trú DB phải có TC rollback**, không chỉ chiều tiến. Thiếu → `[GAP]` **mức cao**.
|
|
30
|
+
- **Chuỗi API**: phủ lỗi một-phần (bước 2 trượt khi bước 1 đã commit) + tính idempotent.
|
|
31
|
+
- **Mock hợp lý**: **không mock cả hai bên** — mock hết thì TC không còn kiểm gì. Kỹ thuật
|
|
32
|
+
State Transition / bảng quyết định phải khớp loại integration.
|
|
33
|
+
- **Phân nhóm & `Type`** *(Nhóm 3 riêng của tầng này)*: TC integration thuộc nhóm **Nghiệp vụ**,
|
|
34
|
+
**không có** nhóm GUI. `Type` khớp nội dung. Sai nhóm → `[WRONG_GROUP]`; `Type` lệch →
|
|
35
|
+
`[WRONG_TYPE]`; một TC gánh nhiều cặp module → `[SPLIT_NEEDED]`.
|
|
36
|
+
|
|
37
|
+
## 7 nhóm kiểm tra
|
|
38
|
+
|
|
39
|
+
> **Nạp `{paths.qc_skills_dir}/qa-reviewer/shared/review-check-groups.md`** — bộ xương 7 nhóm
|
|
40
|
+
> chạy tuần tự · registry nhãn lỗi dùng chung · 7 mẫu-hay-thiếu của Nhóm 6 · nền tảng ISTQB ·
|
|
41
|
+
> anti-pattern. Nhóm 5 (Nội dung TC) trỏ tiếp sang `shared/review-file-template.md`.
|
|
42
|
+
>
|
|
43
|
+
> Dưới đây chỉ là phần **riêng của tầng này**.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
21
47
|
## Phase 1 — Clarify
|
|
22
48
|
|
|
23
49
|
1. Đọc tất cả TC integration trong folder chỉ định; xác định loại: GUI↔Backend / API / DB
|
|
@@ -46,24 +72,50 @@ C. QUALITY:
|
|
|
46
72
|
- TC concurrency: mô tả rõ 2+ request đồng thời + kết quả kỳ vọng?
|
|
47
73
|
|
|
48
74
|
D. FORMAT & TRACE:
|
|
49
|
-
- Metadata đủ; Trace `[BR-xx]` hoặc `⚠️ Chưa có Business Rule`; `🚫 Block: [GAP-
|
|
50
|
-
- Cuối file có Trace matrix + bảng TC
|
|
75
|
+
- Metadata đủ; Trace `[BR-xx]` hoặc `⚠️ Chưa có Business Rule`; `🚫 Block: [GAP-UC{N}-{nnn}]` nếu bị chặn?
|
|
76
|
+
- Cuối file có **Trace matrix** (BR ↔ TC ↔ SC) + **danh sách** TC bị block — cả hai **dạng danh sách, KHÔNG bảng** (file TC không được có ký tự `|` — luật B12)?
|
|
51
77
|
- Steps phân biệt `[Action]`/`[Verify]`; Expected 1 bullet; KHÔNG `✅/❌` inline.
|
|
52
78
|
|
|
53
79
|
---
|
|
54
80
|
|
|
55
|
-
##
|
|
81
|
+
## Phase 3 — Coverage tổng thể
|
|
82
|
+
|
|
83
|
+
*(Bản gốc không có mục này cho tầng integration — bảng dưới suy ra từ chính các trục phủ ở
|
|
84
|
+
§Trọng tâm review trên.)*
|
|
56
85
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
86
|
+
| Trục | Kỳ vọng tối thiểu |
|
|
87
|
+
|---|---|
|
|
88
|
+
| Happy | Mỗi cặp Module A ↔ Module B có ≥1 TC verify **cả hai phía** |
|
|
89
|
+
| Failure | Mỗi cặp có ≥1 TC một-bên-lỗi (suy giảm mềm) |
|
|
90
|
+
| Timeout | Mỗi lời gọi qua mạng có ≥1 TC timeout / mất mạng |
|
|
91
|
+
| Rollback | Mỗi thao tác ghi có ≥1 TC rollback — **không chỉ chiều tiến** |
|
|
92
|
+
|
|
93
|
+
Điền vào bảng **Coverage handshake (Integration)** ở cuối file review.
|
|
61
94
|
|
|
62
95
|
---
|
|
63
96
|
|
|
97
|
+
## Kiểm tra cấu trúc file TC
|
|
98
|
+
|
|
99
|
+
> **Nạp `{paths.qc_skills_dir}/qa-reviewer/shared/review-file-template.md`** §*Kiểm tra cấu trúc
|
|
100
|
+
> TC* — luật ATOMIC 1-bullet · không ký tự `|` · 9 cụm từ mơ hồ · teardown đúng chỗ · marker ≠
|
|
101
|
+
> oracle · 6 dấu vết hỏng sau khi chạy script tách. **Không lặp lại ở đây.**
|
|
102
|
+
>
|
|
103
|
+
> Luật gốc mà trạm 3 phải theo nằm ở `qa-designer/shared/tc-metadata-format.md` +
|
|
104
|
+
> `precision-rules.md`. **Cổng và luật phải đọc từ cùng một chỗ** — giữ hai bản là tự tạo lại
|
|
105
|
+
> chỗ chúng lệch nhau, và cổng lệch thì nó đánh trượt file làm đúng.
|
|
106
|
+
|
|
64
107
|
## Output
|
|
65
108
|
|
|
66
|
-
|
|
67
|
-
|
|
109
|
+
**Ghi vào `{qc_artifact_dir}test-cases/REVIEW_<FEATURE>.md`** — đứng cạnh file TC vừa soát.
|
|
110
|
+
Nạp `../shared/review-file-template.md` để lấy khuôn + quy tắc ghi (tích luỹ theo vòng, chỉ sửa
|
|
111
|
+
hàng của tầng mình, KHÔNG ghi đè tầng khác).
|
|
112
|
+
|
|
113
|
+
Mỗi tiêu chí: ✅ PASS | ⚠️ WARN | ❌ FAIL + evidence cụ thể (TC ID / điểm tích hợp)
|
|
114
|
+
|
|
115
|
+
**Điểm `XX/100`** — trừ 5đ mỗi `FAIL`, 2đ mỗi `WARN`. ≥80 đạt · 60–79 cần cải thiện · <60 không đạt.
|
|
116
|
+
**Verdict:** `điểm ≥ 80` VÀ không còn `FAIL` chặn → **`APPROVED`**; ngược lại **`NEEDS_FIX`**.
|
|
117
|
+
|
|
68
118
|
Điểm tích hợp thiếu TC; TC Expected mờ nhạt; TC DB thiếu cleanup.
|
|
69
|
-
|
|
119
|
+
Điền thêm bảng **Coverage handshake (Integration)** ở cuối file review.
|
|
120
|
+
|
|
121
|
+
**KHÔNG tự sửa file TC** — chỉ nhận xét, chấm điểm, nêu cụ thể sửa gì. Người sửa là `/qc-design-test`.
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
|
-
updated: 2026-
|
|
3
|
+
updated: 2026-09-04
|
|
4
4
|
ported_from: ui-automation-testing
|
|
5
|
+
upstream_path: skills/qa-tc-reviewer/nfr-test-reviewer.md
|
|
6
|
+
upstream_sha: 5747c7a6bdfaaea1ff3e958688b38b3aeaf9b15a
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
# Review Test Case — Non-Functional
|
|
@@ -10,7 +12,7 @@ Review bộ TC phi chức năng (performance, security, accessibility, compatibi
|
|
|
10
12
|
|
|
11
13
|
## Khi nào trigger
|
|
12
14
|
- "review TC non-functional cho [Feature]" / "check TC hiệu năng/bảo mật/accessibility"
|
|
13
|
-
- Sau khi qa-designer/non-functional xong, trước khi
|
|
15
|
+
- Sau khi qa-designer/non-functional xong, trước khi /qc-run-test
|
|
14
16
|
|
|
15
17
|
## Khi KHÔNG trigger
|
|
16
18
|
- Review TC chức năng → `test-case/functional`
|
|
@@ -18,6 +20,35 @@ Review bộ TC phi chức năng (performance, security, accessibility, compatibi
|
|
|
18
20
|
|
|
19
21
|
---
|
|
20
22
|
|
|
23
|
+
## Trọng tâm review — tầng NFR
|
|
24
|
+
|
|
25
|
+
- **Tiêu chí đo lường BẮT BUỘC**: mỗi TC có **ngưỡng + đơn vị + điều kiện môi trường**
|
|
26
|
+
(`P95 < X ms` · `error rate < Y%` · `contrast ≥ 4.5:1` · `Lighthouse a11y ≥ 90`).
|
|
27
|
+
Thiếu ngưỡng → `[VAGUE_EXPECTED]`. Đơn vị chuẩn theo domain:
|
|
28
|
+
`../../qa-designer/shared/precision-rules.md` §3.
|
|
29
|
+
- **Đúng loại + đúng công cụ**: `Type` ∈ {Load · Stress · Spike · Security · A11y · i18n}; có
|
|
30
|
+
công cụ phù hợp (k6 / ZAP / axe-core…) + marker đúng
|
|
31
|
+
(`@pytest.mark.performance|security|a11y|i18n`).
|
|
32
|
+
- **Phủ theo loại**: Performance có baseline + hồ sơ đồng thời · Security phủ OWASP áp dụng được
|
|
33
|
+
(A01/A03/A07…) · A11y phủ **bàn phím + trình đọc màn hình**, không chỉ axe-core tự động ·
|
|
34
|
+
i18n có tiếng Việt dấu đặc biệt (ộ/ề/ắ) + emoji + tràn chữ.
|
|
35
|
+
- **Môi trường**: NFR không chạy CI thường → TC phải ghi rõ môi trường riêng (load-test /
|
|
36
|
+
staging) và lịch chạy (nightly / trước phát hành). Thiếu → `[MISSING_DATA]`.
|
|
37
|
+
- **Phân nhóm & `Type`** *(Nhóm 3 riêng của tầng này)*: TC NFR thuộc nhóm **NFR**, **không có**
|
|
38
|
+
nhóm GUI. `Type` phải là một trong {Load · Stress · Spike · Security · A11y · i18n}. Sai nhóm →
|
|
39
|
+
`[WRONG_GROUP]`; `Type` không thuộc tập trên → `[WRONG_TYPE]`; một TC đo nhiều loại NFR →
|
|
40
|
+
`[SPLIT_NEEDED]`.
|
|
41
|
+
|
|
42
|
+
## 7 nhóm kiểm tra
|
|
43
|
+
|
|
44
|
+
> **Nạp `{paths.qc_skills_dir}/qa-reviewer/shared/review-check-groups.md`** — bộ xương 7 nhóm
|
|
45
|
+
> chạy tuần tự · registry nhãn lỗi dùng chung · 7 mẫu-hay-thiếu của Nhóm 6 · nền tảng ISTQB ·
|
|
46
|
+
> anti-pattern. Nhóm 5 (Nội dung TC) trỏ tiếp sang `shared/review-file-template.md`.
|
|
47
|
+
>
|
|
48
|
+
> Dưới đây chỉ là phần **riêng của tầng này**.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
21
52
|
## Phase 1 — Clarify
|
|
22
53
|
|
|
23
54
|
1. Đọc tất cả TC non-functional trong folder chỉ định; xác định loại: performance / security / accessibility / compatibility
|
|
@@ -49,25 +80,53 @@ C. ENVIRONMENT & DATA:
|
|
|
49
80
|
- Cleanup / teardown sau mỗi TC (đặc biệt security test)?
|
|
50
81
|
|
|
51
82
|
D. FORMAT & TRACE:
|
|
52
|
-
- Metadata đủ; Trace `[BR-xx]` / SLA source rõ; `🚫 Block: [GAP-
|
|
83
|
+
- Metadata đủ; Trace `[BR-xx]` / SLA source rõ; `🚫 Block: [GAP-UC{N}-{nnn}]` nếu bị chặn?
|
|
53
84
|
- Steps phân biệt `[Action]`/`[Verify]`; Expected 1 bullet; KHÔNG `✅/❌` inline?
|
|
54
|
-
- Cuối file có Trace matrix + bảng TC
|
|
85
|
+
- Cuối file có **Trace matrix** (BR ↔ TC ↔ SC) + **danh sách** TC bị block — cả hai **dạng danh sách, KHÔNG bảng** (file TC không được có ký tự `|` — luật B12)?
|
|
55
86
|
|
|
56
87
|
---
|
|
57
88
|
|
|
58
|
-
##
|
|
89
|
+
## Phase 3 — Coverage tổng thể
|
|
59
90
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
91
|
+
*(Bản gốc không có mục này cho tầng NFR — bảng dưới suy ra từ chính các trục phủ ở §Trọng tâm
|
|
92
|
+
review trên.)*
|
|
93
|
+
|
|
94
|
+
| Loại NFR | Kỳ vọng tối thiểu |
|
|
95
|
+
|---|---|
|
|
96
|
+
| Performance | Có baseline + ≥1 hồ sơ tải đồng thời, cả hai có ngưỡng + đơn vị |
|
|
97
|
+
| Security | Phủ các mục OWASP **áp dụng được** cho tính năng này (A01/A03/A07…) |
|
|
98
|
+
| Accessibility | Bàn phím **và** trình đọc màn hình — không chỉ axe-core tự động |
|
|
99
|
+
| i18n | Tiếng Việt dấu đặc biệt + emoji + tràn chữ |
|
|
100
|
+
| Compatibility | Các nền / trình duyệt mà PRD nêu |
|
|
101
|
+
|
|
102
|
+
Loại nào PRD **không** yêu cầu → ghi `N/A` kèm lý do, **đừng bỏ trống**: ô trống không phân biệt
|
|
103
|
+
được *"không áp dụng"* với *"quên kiểm"*.
|
|
104
|
+
Điền vào bảng **Chi tiết NFR** ở cuối file review.
|
|
65
105
|
|
|
66
106
|
---
|
|
67
107
|
|
|
108
|
+
## Kiểm tra cấu trúc file TC
|
|
109
|
+
|
|
110
|
+
> **Nạp `{paths.qc_skills_dir}/qa-reviewer/shared/review-file-template.md`** §*Kiểm tra cấu trúc
|
|
111
|
+
> TC* — luật ATOMIC 1-bullet · không ký tự `|` · 9 cụm từ mơ hồ · teardown đúng chỗ · marker ≠
|
|
112
|
+
> oracle · 6 dấu vết hỏng sau khi chạy script tách. **Không lặp lại ở đây.**
|
|
113
|
+
>
|
|
114
|
+
> Luật gốc mà trạm 3 phải theo nằm ở `qa-designer/shared/tc-metadata-format.md` +
|
|
115
|
+
> `precision-rules.md`. **Cổng và luật phải đọc từ cùng một chỗ** — giữ hai bản là tự tạo lại
|
|
116
|
+
> chỗ chúng lệch nhau, và cổng lệch thì nó đánh trượt file làm đúng.
|
|
117
|
+
|
|
68
118
|
## Output
|
|
69
119
|
|
|
70
|
-
|
|
71
|
-
|
|
120
|
+
**Ghi vào `{qc_artifact_dir}test-cases/REVIEW_<FEATURE>.md`** — đứng cạnh file TC vừa soát.
|
|
121
|
+
Nạp `../shared/review-file-template.md` để lấy khuôn + quy tắc ghi (tích luỹ theo vòng, chỉ sửa
|
|
122
|
+
hàng của tầng mình, KHÔNG ghi đè tầng khác).
|
|
123
|
+
|
|
124
|
+
Mỗi tiêu chí: ✅ PASS | ⚠️ WARN | ❌ FAIL + evidence cụ thể (TC ID)
|
|
125
|
+
|
|
126
|
+
**Điểm `XX/100`** — trừ 5đ mỗi `FAIL`, 2đ mỗi `WARN`. ≥80 đạt · 60–79 cần cải thiện · <60 không đạt.
|
|
127
|
+
**Verdict:** `điểm ≥ 80` VÀ không còn `FAIL` chặn → **`APPROVED`**; ngược lại **`NEEDS_FIX`**.
|
|
128
|
+
|
|
72
129
|
Danh sách TC Expected mờ nhạt (thiếu ngưỡng); loại non-functional thiếu coverage.
|
|
73
|
-
|
|
130
|
+
Ghi rõ TC nào cần môi trường đặc biệt. Điền thêm bảng **Chi tiết NFR** ở cuối file review.
|
|
131
|
+
|
|
132
|
+
**KHÔNG tự sửa file TC** — chỉ nhận xét, chấm điểm, nêu cụ thể sửa gì. Người sửa là `/qc-design-test`.
|
|
@@ -26,7 +26,7 @@ Skill **tự chứa**: convert journey `.Test.md` → Python pytest + Playwright
|
|
|
26
26
|
|
|
27
27
|
## Phase 2 — Generate
|
|
28
28
|
Mỗi journey → 1 test; bọc từng bước `with step("…")`; cuối journey verify đủ V1…Vn (tạo/mã/định tuyến/đồng bộ/danh sách).
|
|
29
|
-
Journey còn phụ thuộc gap → tạo test `@pytest.mark.skip(reason="GAP-
|
|
29
|
+
Journey còn phụ thuộc gap → tạo test `@pytest.mark.skip(reason="GAP-UC{N}-{nnn}")` hoặc xfail.
|
|
30
30
|
|
|
31
31
|
## Phase 3 — Verify
|
|
32
32
|
`py_compile` + `pytest --collect-only -q` · chạy (môi trường staging + CRM) · cập nhật Status TC.
|
|
@@ -40,7 +40,7 @@ Traceability chỉ có giá trị khi **kiểm được**. Bước này cho mộ
|
|
|
40
40
|
| Artifact | Nội dung |
|
|
41
41
|
|----------|----------|
|
|
42
42
|
| Ma trận coverage spec ↔ code ↔ test | Trạng thái từng SC + `code_coverage` tổng |
|
|
43
|
-
| `{trace_dir}/trace-report.json` | Bản máy đọc cho **panel VS Code** ("
|
|
43
|
+
| `{trace_dir}/trace-report.json` | Bản máy đọc cho **panel VS Code** ("SDD Board") — bị **ghi đè** mỗi lần chạy |
|
|
44
44
|
| `{trace_dir}/trace-history.jsonl` | **Nhật ký append-only** — mỗi lần chạy ghi thêm 1 dòng *delta*. Đây là **dữ liệu**, không phải mirror: **phải commit**, mất là mất vĩnh viễn |
|
|
45
45
|
| Cờ audit | 6 cờ drift + 4 cờ 🔴 chặn PR + `PRD_UNTRACKED_EDIT` 🔴 (không chặn) + 2 cờ ⓘ (bảng dưới) |
|
|
46
46
|
| Hàng đợi | Đếm PRD change request còn `Open` kèm **số ngày chờ** (Step 7b) |
|
|
@@ -240,7 +240,7 @@ Ca thứ hai là lý do consumer **phải** chuẩn hoá tập bị ảnh hưở
|
|
|
240
240
|
|
|
241
241
|
## Xuất JSON cho panel
|
|
242
242
|
|
|
243
|
-
`trace-report.json` giữ enum `status` **đúng 4 giá trị** `OK`/`DRIFT`/`GAP`/`UNTRACKED` — VS Code extension "
|
|
243
|
+
`trace-report.json` giữ enum `status` **đúng 4 giá trị** `OK`/`DRIFT`/`GAP`/`UNTRACKED` — VS Code extension "SDD Board" sống ngoài repo framework và switch trên field này. Row `ORPHANED` xuất ra là `"status": "DRIFT"` + `"orphaned": true`; panel cũ hiện nó như DRIFT (đúng nghĩa, không im lặng), panel mới đọc `orphaned` để hiện nhãn riêng. **TSV giữ nguyên chữ `ORPHANED`** — TSV là nguồn-sự-thật.
|
|
244
244
|
|
|
245
245
|
---
|
|
246
246
|
|
|
@@ -44,7 +44,7 @@ Mọi command sau đều đọc `project-context.yaml` + `CLAUDE.md` + `domain-k
|
|
|
44
44
|
5. **Step 3 · project-context.yaml** — copy từ `templates/project-context.yaml`, điền `{{PLACEHOLDER}}`. Umbrella: verify/sửa `services` (path phải khớp tên submodule thật — generator để placeholder `TODO-…`).
|
|
45
45
|
6. **Step 4 · business-dictionary.md** — Canonical Terms / Banned Terms / Enum Registry. *(Umbrella skip — sống trong spec submodule.)*
|
|
46
46
|
7. **Step 5 · core-entities.md** — entity catalog máy-đọc-được (field, invariant, relationship). *(Umbrella skip.)*
|
|
47
|
-
8. **Step 6 · VS Code extension** — khuyến nghị cài "
|
|
47
|
+
8. **Step 6 · VS Code extension** — khuyến nghị cài "SDD Board" (Review Board + Living Docs UI).
|
|
48
48
|
9. **Step 7 · Verify** — checklist theo `project_type` (file/folder tồn tại; umbrella check submodule init).
|
|
49
49
|
|
|
50
50
|
---
|
|
@@ -1512,6 +1512,148 @@ xem bản mới có bắt thêm gap thật hay không.
|
|
|
1512
1512
|
|
|
1513
1513
|
---
|
|
1514
1514
|
|
|
1515
|
+
# ✅ B12 — Rà trạm viết kịch bản kiểm thử theo bản gốc
|
|
1516
|
+
|
|
1517
|
+
Đi theo đúng thứ tự dây chuyền: xong trạm 1 và 2 (B11) thì tới trạm 3 — **trạm quyết định có
|
|
1518
|
+
test hay không có test**.
|
|
1519
|
+
|
|
1520
|
+
## Hai điều rà ra
|
|
1521
|
+
|
|
1522
|
+
**① Trạm này chưa hề được đụng trong cả đợt merge.** Bản đồ port ghi **21/21 file gốc ở trạng
|
|
1523
|
+
thái "chưa quyết"**. 11 kỹ năng đang chạy đến từ **một nguồn khác** (`lms_autotest`), không phải
|
|
1524
|
+
từ đội QC.
|
|
1525
|
+
|
|
1526
|
+
| | File | Dòng |
|
|
1527
|
+
|---|---|---|
|
|
1528
|
+
| Bản gốc đội QC | 21 | **2.509** |
|
|
1529
|
+
| Framework | 11 | **496** *(~20%)* |
|
|
1530
|
+
|
|
1531
|
+
**② Một lỗi im lặng, cùng lớp với `DOC_GAPS` / `DOC_GAP`:**
|
|
1532
|
+
|
|
1533
|
+
| Ai | Nói tên file là |
|
|
1534
|
+
|---|---|
|
|
1535
|
+
| 2 kỹ năng | `TC_<FEATURE>.md` |
|
|
1536
|
+
| 1 kỹ năng | `TC_<FEATURE>_API.md` |
|
|
1537
|
+
| **4 kỹ năng** | **không nêu tên gì cả** |
|
|
1538
|
+
| Lệnh thiết kế · lệnh chạy · lệnh soát · module Playwright *(13 chỗ)* | `*.Test.md` |
|
|
1539
|
+
|
|
1540
|
+
**Trạm thiết kế ghi ra thứ trạm chạy không tìm thấy.** Và không có gì báo lỗi — file vẫn nằm
|
|
1541
|
+
đó, trạm sau chỉ đơn giản không thấy.
|
|
1542
|
+
|
|
1543
|
+
Framework có **phương pháp** (EP/BVA/bảng quyết định, danh sách nhóm TC); bản gốc có **chi
|
|
1544
|
+
tiết** (cấm từ mơ hồ, khuôn TC, từ điển hành động, bảng tra mã HTTP). Đúng khuôn đã gặp ở B1.
|
|
1545
|
+
|
|
1546
|
+
## Bốn quyết định
|
|
1547
|
+
|
|
1548
|
+
| # | Chốt | Nghĩa cho người dùng |
|
|
1549
|
+
|---|---|---|
|
|
1550
|
+
| **1** | **Luật ATOMIC, có cả chế độ tách tối đa** | Mỗi test case đúng **một** dòng kết quả mong đợi. Nhiều điểm kiểm → tách thành nhiều TC độc lập |
|
|
1551
|
+
| **2** | **Bỏ bảng trong file test case** | Toàn bộ dạng danh sách, không ký tự `\|` — kể cả mục Tổng hợp và Trace Matrix |
|
|
1552
|
+
| **3** | **Hai file, chia theo "có qua giao diện"** | mặc định → file giao diện (6 nhóm) · `--api` → file API (2 nhóm) · `--all` → cả hai |
|
|
1553
|
+
| **4** | **Lấy trọn 7 file luật chung + cả nhánh API, nhưng VIẾT LẠI 2 file mẫu** | 1.523 dòng |
|
|
1554
|
+
|
|
1555
|
+
## Chỗ suýt tự bắn vào chân mình
|
|
1556
|
+
|
|
1557
|
+
Nhánh API của bản gốc có 2 file **test case mẫu**. Đọc kỹ thì chúng viết **trước** luật ATOMIC
|
|
1558
|
+
(đội QC chốt 2026-07-09, và văn bản ghi rõ *"ĐẢO rule cũ"*):
|
|
1559
|
+
|
|
1560
|
+
```
|
|
1561
|
+
MẪU GỐC (cũ hơn luật) ĐÃ VIẾT LẠI
|
|
1562
|
+
**Expected:** #### Expected Result
|
|
1563
|
+
- HTTP 201; body.id = x; - HTTP 201 AND body.id exists
|
|
1564
|
+
bản ghi có trong DB
|
|
1565
|
+
▲ ba kết cục nối bằng ";" → TC_002: body.<field> = <giá trị>
|
|
1566
|
+
mã: API-<FEATURE>-001 → TC_003: DB có bản ghi id = body.id
|
|
1567
|
+
▲ hệ mã khác mã: TC_<FEATURE>_NNN
|
|
1568
|
+
```
|
|
1569
|
+
|
|
1570
|
+
**Lấy nguyên hai file này là dạy AI làm ngược đúng cái luật vừa chốt** — vì mẫu cụ thể luôn
|
|
1571
|
+
thắng luật trừu tượng. Đã viết lại cả hai, và kiểm bằng máy: **13/13 khối kết quả mong đợi có
|
|
1572
|
+
đúng 1 dòng**.
|
|
1573
|
+
|
|
1574
|
+
Cũng bỏ 26 dòng là **bản nháp cũ** của chính họ: một bảng tra mã lỗi 14 dòng nằm gọn trong bảng
|
|
1575
|
+
95 dòng, một file chuỗi gọi 12 dòng nằm gọn trong hai file dài hơn. Lấy cả hai là có hai bảng
|
|
1576
|
+
tra cùng một thứ, rồi chúng lệch nhau.
|
|
1577
|
+
|
|
1578
|
+
## Bốn thứ giờ mới có
|
|
1579
|
+
|
|
1580
|
+
| Luật | Nó chặn điều gì |
|
|
1581
|
+
|---|---|
|
|
1582
|
+
| **Cấm 9 cụm từ mơ hồ** | *"hiển thị đúng"* · *"hoạt động bình thường"* · *"không lỗi"* → bắt viết giá trị đo được. Phép thử: **hai QC đọc có ra cùng một kết luận đỗ/trượt không?** |
|
|
1583
|
+
| **Khuôn TC + luật ATOMIC** | Mỗi TC một kết cục; mẫu đầy đủ; 5 bẫy khi đánh số lại hàng loạt |
|
|
1584
|
+
| **Cây quyết định chọn tầng** | ~12 ví dụ phân biệt: *"dropdown có placeholder"* = giao diện, *"dropdown hiện đúng N mục từ API"* = tích hợp |
|
|
1585
|
+
| **Từ điển hành động** | Một hành động **một** từ: Click (web) / Tap (mobile) / Enter (nhập) — cấm dùng Type, Input, Fill lẫn lộn |
|
|
1586
|
+
|
|
1587
|
+
Thêm **kiểm trùng lặp** — thứ framework trước đây **không có gì cả**. Nó quan trọng hơn sau khi
|
|
1588
|
+
bật chế độ tách tối đa: nhân một TC trùng lên 5 mảnh thì thành 5 TC trùng, và không ai đếm
|
|
1589
|
+
được nữa. Nên kiểm trùng phải chạy **trước** khi tách.
|
|
1590
|
+
|
|
1591
|
+
Và B11 vừa gom mọi UC vào **một thư mục** — nên **trùng chéo UC** giờ mới thực sự nhìn thấy
|
|
1592
|
+
được, và mới thực sự xảy ra. Hai UC của cùng tính năng rất hay dùng lại một luật nghiệp vụ;
|
|
1593
|
+
gặp thì trỏ trace về UC nguồn, **không viết lại**.
|
|
1594
|
+
|
|
1595
|
+
## Chín bản của một luật → một bản
|
|
1596
|
+
|
|
1597
|
+
Khối *"Format file TC"* trước đây **bị chép ở 9 kỹ năng** và câu chữ đã lệch nhau. Giờ một
|
|
1598
|
+
bản dùng chung, 9 kỹ năng trỏ về. **Cùng bệnh 5-bản mà B11 vừa chữa** — và lần này nó không
|
|
1599
|
+
tiết kiệm dòng, nó chỉ bỏ đi khả năng chín bản nói khác nhau.
|
|
1600
|
+
|
|
1601
|
+
Cũng bỏ chữ **"hoặc"**: hai kỹ năng từng ghi *"file riêng **hoặc** gộp trong file feature"*.
|
|
1602
|
+
Chữ "hoặc" nghĩa là AI tự chọn mỗi lần một kiểu — nên hai lần chạy cùng một tính năng có thể ra
|
|
1603
|
+
hai cấu trúc thư mục khác nhau.
|
|
1604
|
+
|
|
1605
|
+
## Hai lần bị máy bắt lỗi — và đó là điểm sáng
|
|
1606
|
+
|
|
1607
|
+
**Lần 1 — self-check chặn.** Tôi dồn phần `@trace.testid_attr` sang file dùng chung, làm lệnh
|
|
1608
|
+
không còn nhắc tag nữa. Rule R3 đỏ ngay: *"schema khai `qc-design-test` là consumer nhưng lệnh
|
|
1609
|
+
KHÔNG nhắc tới nó"*. Đúng — tôi gộp quá tay. Đã trả lại ở lệnh.
|
|
1610
|
+
|
|
1611
|
+
**Lần 2 — bộ test chặn.** `qc-scope.md` (B11) được 5 lệnh nạp, nên nó bị nướng 5 bản vào 5 file
|
|
1612
|
+
lệnh. Cộng thêm phần B12, tổng vượt ngưỡng: **1203 KB / ngưỡng 1200**. Framework đã có cơ chế
|
|
1613
|
+
cho đúng ca này (đọc-lúc-chạy thay vì nướng vào), chỉ là chưa dùng cho file đó. Chuyển xong:
|
|
1614
|
+
**1174 KB**.
|
|
1615
|
+
|
|
1616
|
+
> Cả hai lỗi đều là **lỗi của tôi**, và **cả hai đều do máy bắt, không phải do tôi đọc lại**.
|
|
1617
|
+
> Đây chính là lập luận cho mục còn treo 2b: thứ có máy canh thì không đi lệch.
|
|
1618
|
+
|
|
1619
|
+
## Bịt một điểm mù của chính bộ máy canh
|
|
1620
|
+
|
|
1621
|
+
Cập nhật bản đồ port xong, self-check **xanh** — nhưng `functional/api.md` nhận nội dung port mà
|
|
1622
|
+
**không đóng dấu nguồn gốc** nào. Đọc lại luật thì rõ vì sao: nó so dấu với bản đồ **khi file có
|
|
1623
|
+
khai**. File không khai gì thì nó im lặng.
|
|
1624
|
+
|
|
1625
|
+
Đã thêm một nhánh mới: **target đã port thì PHẢI khai** nguồn gốc, không chỉ "khai đúng nếu có
|
|
1626
|
+
khai". Và **thử cháy thật** cả hai góc (bỏ cả hai dòng · bỏ một dòng) — kêu đúng cả hai lần.
|
|
1627
|
+
|
|
1628
|
+
Mất dấu nguồn gốc ở file đích nghĩa là: bản đồ biết file này port từ đâu, còn **người mở file
|
|
1629
|
+
thì không** — và lần đồng bộ sau, mọi thứ thành đoán.
|
|
1630
|
+
|
|
1631
|
+
## Đã kiểm chứng
|
|
1632
|
+
|
|
1633
|
+
| Phép kiểm | Kết quả |
|
|
1634
|
+
|---|---|
|
|
1635
|
+
| Dựng lại toàn bộ | 41/41 ✅ |
|
|
1636
|
+
| Bộ kiểm tra nội bộ | sạch (giờ có **17** nhánh luật) ✅ |
|
|
1637
|
+
| Bộ test tự động | **199/199** ✅ |
|
|
1638
|
+
| Tổng kích thước lệnh | 1174 KB / ngưỡng 1200 ✅ |
|
|
1639
|
+
| Tên file cũ còn sót | **0** |
|
|
1640
|
+
| Lệnh "in bảng" trong kỹ năng thiết kế | **0** |
|
|
1641
|
+
| Dấu vết mẫu cũ trong nhánh API | **0** |
|
|
1642
|
+
| Khối kết quả mong đợi đúng 1 dòng | **13/13** |
|
|
1643
|
+
| Entry "chưa quyết" của trạm này | **21 → 0** |
|
|
1644
|
+
| Target đã port có đủ dấu nguồn gốc | **23/23** |
|
|
1645
|
+
| File mới tới đủ ba tầng (nguồn → đóng gói → đang chạy) | **13/13/13** |
|
|
1646
|
+
|
|
1647
|
+
## Cố ý chưa làm
|
|
1648
|
+
|
|
1649
|
+
| Việc | Vì sao |
|
|
1650
|
+
|---|---|
|
|
1651
|
+
| **Máy kiểm cấu trúc file test case** | Vẫn là năng lực mới, và vẫn chờ kết quả phép thử của trạm 1. Nhưng B12 làm nó **rẻ hơn hẳn**: cả hai luật mới đều **đếm được** — "0 ký tự `\|`" và "1 dòng mỗi kết quả". Nếu phép thử kết luận cần máy kiểm thì làm một lượt cho cả file gap và file test case |
|
|
1652
|
+
| **4 file tầng test của bản gốc** *(ui · e2e · integration · nfr — 935 dòng)* | Đã ghi `skipped` **kèm lý do**, không để "chưa quyết". Framework tách tầng UI thành 3 kỹ năng theo cây quyết định thay vì một file 341 dòng; phần khuôn TC và độ chính xác **đã tách ra dùng chung**. Còn lại là phần khai kiến trúc agent — framework không có. Đối chiếu nội dung từng tầng để dành |
|
|
1653
|
+
| **3 trạm còn lại** | Đi theo thứ tự dây chuyền. Trạm soát là trạm kế tiếp, và nó **tiêu thụ** đúng chuẩn B12 vừa đặt ra — làm sau là đúng thứ tự |
|
|
1654
|
+
|
|
1655
|
+
---
|
|
1656
|
+
|
|
1515
1657
|
# Tổng kết
|
|
1516
1658
|
|
|
1517
1659
|
| | Quyết định ở B7 | Bằng chứng | |
|
|
@@ -1554,7 +1696,7 @@ rồi, giờ bắt nó **so** với hai tài liệu kia"*. Không nạp thêm fi
|
|
|
1554
1696
|
|
|
1555
1697
|
# Các bước còn lại
|
|
1556
1698
|
|
|
1557
|
-
**Mười
|
|
1699
|
+
**Mười ba bước B0–B12 đã xong.** Không còn bước nào đang chờ quyết định để bắt đầu.
|
|
1558
1700
|
|
|
1559
1701
|
Nhưng có **hai việc chưa validate** và **bốn món nợ** — xem §Còn treo ở cuối.
|
|
1560
1702
|
Mô tả kế hoạch gốc nằm ở [`qc-merge-plan.md`](qc-merge-plan.md).
|
|
@@ -1568,7 +1710,7 @@ Mô tả kế hoạch gốc nằm ở [`qc-merge-plan.md`](qc-merge-plan.md).
|
|
|
1568
1710
|
Sau mỗi bước, toàn bộ hệ thống được dựng lại và kiểm tra tự động:
|
|
1569
1711
|
|
|
1570
1712
|
- 41/41 mẫu lệnh dựng thành công
|
|
1571
|
-
- Bộ kiểm tra nội bộ báo sạch
|
|
1713
|
+
- Bộ kiểm tra nội bộ báo sạch (17 nhánh luật sau B12)
|
|
1572
1714
|
- Nội dung mới đã lan đủ ba tầng: bản nguồn → bản đóng gói → bản đang chạy
|
|
1573
1715
|
- **9** dấu nguồn gốc đều được kiểm chứng khớp với file gốc thật
|
|
1574
1716
|
- Báo khói đã **thử cháy thật** cả 5 nhánh — không giao một cái chưa bao giờ kêu
|
|
@@ -1579,7 +1721,7 @@ Sau mỗi bước, toàn bộ hệ thống được dựng lại và kiểm tra
|
|
|
1579
1721
|
|
|
1580
1722
|
| # | Câu | Mức | Ai quyết |
|
|
1581
1723
|
|---|---|---|---|
|
|
1582
|
-
| **1** | Chạy thử trên một tính năng thật — **mười
|
|
1724
|
+
| **1** | Chạy thử trên một tính năng thật — **mười ba bước, chưa một lần chạy**. Sau B11 phép thử này còn quan trọng hơn: nó là cách duy nhất biết bản cấp tính năng có bắt được mâu thuẫn chéo UC, và có theo đúng template hay không. Ước lượng chi phí của tôi đã sai 3 lần, đều ước thấp | 🔴 chưa validate | bạn (cần spec thật) |
|
|
1583
1725
|
| **2** | Đưa nhật ký cho đội QC xem — họ là chủ sở hữu các kỹ năng này, và định dạng họ nhận đã đổi **hai lần** (B9 rồi B11) | 🟠 | bạn |
|
|
1584
1726
|
| **2b** | **Máy kiểm cấu trúc file gap** — bệnh *"không theo template"* vẫn chưa có gì chặn bằng máy. Hiện chỉ có chỉ thị bằng văn xuôi, tức **cùng loại** với câu chỉ đường đã thất bại, chỉ mạnh hơn | 🟠 chưa chữa | bạn (sau khi chạy thử B11) |
|
|
1585
1727
|
| **2c** | `Blocker` ↔ `Critical` — đổi trạm chạy test đọc `Critical` (một dòng) thay vì bắt đội QC đổi thói quen. Kết quả hôm trước cho thấy đổi từ ngữ của họ làm **tăng** khả năng lệch | 🟡 | bạn |
|