Files
sys-analysis-design/.claude/skills/sa-2-architecture/templates/quality-scenarios.md
Leonard-ThindPad-P50 c81f249920 init git
2026-09-08 10:26:21 +07:00

187 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# QAS + ASR — Quality Attribute Scenarios & Architecturally Significant Requirements — <PROJECT>
| | |
|---|---|
| **Version** | 1.0 |
| **Date** | YYYY-MM-DD |
| **Author** | <SA> (skill sa-2-architecture) |
| **Status** | 🟡 Draft |
| **Approved by** | Tech Lead: — · QA: — · SRE: — |
| **Source** | CTX_… v1.0 · OPT_… v1.0 · BRIEF §NFR của BA |
| **Scope** | |
| **Confidence** | 🟡 |
## Change Log
| Version | Date | Người sửa | Thay đổi | ADR/DEC |
|---|---|---|---|---|
| 1.0 | | | Bản đầu | — |
> 🔴 **Tài liệu này là nền của cả GĐ2.** Sơ đồ vẽ trước khi có con số ở đây sẽ được bảo vệ
> bằng mọi giá về sau, kể cả khi con số nói nó sai.
---
# PHẦN A — Quality Attribute Scenarios
## A1. Tóm tắt
| Nhóm thuộc tính | Số `QAS` | Must | Đã có cách đo | Đã đo thật |
|---|---|---|---|---|
| Hiệu năng | | | | |
| Thông lượng | | | | |
| Sẵn sàng | | | | |
| Mở rộng | | | | |
| Bảo mật | | | | |
| Bảo trì | | | | |
| Quan sát được | | | | |
**Nhóm không áp dụng:** *(ghi rõ nhóm nào và vì sao — không được bỏ trống)*
## A2. Mẫu một `QAS`
*Sáu phần, thiếu phần nào cũng làm `QAS` không dùng được ở AG3.*
```
QAS-nnn | <tên ngắn> [Must|Should|Could]
Nguồn kích thích : ai/cái gì gây ra
Kích thích : sự kiện gì, với khối lượng bao nhiêu
Môi trường : trạng thái hệ thống lúc đó (bình thường / cao điểm / đang lỗi một phần)
Phản hồi : hệ thống phải làm gì
Đo lường : con số + phân vị + đơn vị
Đo bằng cách nào : tên bài đo · môi trường · bộ dữ liệu · tần suất chạy
Ai đo : vai trò
Nguồn : DRV-nn / CON-nn / BR-nnn / NFR-nn của BA
```
## A3. Danh sách `QAS`
### Hiệu năng
| ID | Tên | Kích thích + môi trường | Đo lường | Đo bằng cách nào | Ai đo | Mức | Nguồn |
|---|---|---|---|---|---|---|---|
| `QAS-001` | | | p95 ≤ … ms | | QA | Must | `DRV-01` |
🔴 Luôn ghi **phân vị**, không ghi trung bình. Trung bình che giấu đuôi, và người dùng khó
chịu nằm ở đuôi.
### Thông lượng
| ID | Tên | Kích thích + môi trường | Đo lường | Đo bằng cách nào | Ai đo | Mức | Nguồn |
|---|---|---|---|---|---|---|---|
🔴 Ghi cả **trung bình và đỉnh**. Đỉnh mới là thứ định hình kiến trúc.
### Sẵn sàng
| ID | Mục tiêu | Ngân sách lỗi | Phạm vi tính | Không tính vào | Đo bằng cách nào | Mức |
|---|---|---|---|---|---|---|
| `QAS-0nn` | 99.9%/tháng | **43 phút/tháng** | API công khai | bảo trì có báo trước ≤ 2h/tháng | uptime check … | Must |
🔴 **Quy % ra phút.** 99.9% và 99.99% nghe giống nhau nhưng chênh 10× về chi phí. Hỏi PO bằng
hệ quả: *"Hệ thống dừng 43 phút vào ngày chốt sổ thì chuyện gì xảy ra?"*
### Mở rộng
| ID | Tải hôm nay | Tải mục tiêu | Trong bao lâu | Scale bằng cách nào | Giới hạn trên | Mức |
|---|---|---|---|---|---|---|
### Bảo mật
| ID | Mối đe doạ | Yêu cầu | Kiểm chứng bằng cách nào | `THR-nn` liên quan | Mức |
|---|---|---|---|---|---|
*Không ghi "bảo mật" như một mục. Mỗi dòng phải nêu một mối đe doạ cụ thể và cách kiểm chứng.*
### Bảo trì
| ID | Kịch bản | Đo lường | Đo bằng cách nào | Mức |
|---|---|---|---|---|
| `QAS-0nn` | Dev mới onboard | Sửa được một bug thật ≤ 3 ngày | Đo trên người thật, lần tuyển gần nhất | Should |
*Không đo được ⇒ bỏ hẳn, đừng ghi định tính. Một `QAS` không đo được làm loãng cả danh sách.*
### Quan sát được
| ID | Kịch bản | Đo lường | Đo bằng cách nào | Mức |
|---|---|---|---|---|
| `QAS-0nn` | Sự cố 5xx tăng đột biến | Cảnh báo trong ≤ 3 phút | Diễn tập inject lỗi trên stg | Must |
*Nhóm này bị quên nhiều nhất, và là nhóm quyết định thời gian khôi phục khi có sự cố thật.*
## A4. `QAS` xung đột nhau
*Thuộc tính chất lượng luôn đánh đổi. Chỗ xung đột phải được nêu và **PO chọn**, không phải SA
âm thầm cân bằng.*
| `QAS` A | `QAS` B | Xung đột ở đâu | Phương án cân bằng | Ai quyết | `ADR` |
|---|---|---|---|---|---|
| QAS-005 độ chính xác tuyệt đối | QAS-001 p95 ≤ 300ms | Kiểm tra đồng bộ làm chậm ghi | | PO | `ADR-nnn` |
---
# PHẦN B — Architecturally Significant Requirements
## B1. Tiêu chí một yêu cầu là `ASR`
Có ≥ 1 điều sau:
- Ép một **cấu trúc** (buộc phải có hàng đợi, cache, service riêng…)
- Ép một **ràng buộc không đảo ngược** (lãnh thổ dữ liệu, vendor, mô hình license)
- Ép một **đánh đổi** (loại bỏ eventual consistency ở một nhánh)
- Có `QAS` mức **Must** đứng sau
Thường 8–15 mục cho một hệ thống trung bình. Danh sách 200 mục nghĩa là chưa lọc.
## B2. Danh sách `ASR`
| ID | Phát biểu | Nguồn | Ép ra cấu trúc gì | `ADR` hiện thực hoá | Trạng thái |
|---|---|---|---|---|---|
| `ASR-001` | Hệ thống phải tiếp tục nhận giao dịch khi POS ngoài mất kết nối ≤ 4 giờ | `DRV-01`, `QAS-007` | Hàng đợi bền + cơ chế phát lại | `ADR-005` | Đã thiết kế |
| `ASR-002` | Dữ liệu cá nhân phải lưu trong lãnh thổ … | `CON-05` (pháp lý) | Ràng buộc vùng cho mọi dịch vụ lưu trữ | `ADR-003` | Đã thiết kế |
**Trạng thái:** Đã ghi nhận · Đã thiết kế (`ADR` tồn tại) · Đã kiểm chứng (có bài đo/`FIT`)
🔴 `ASR` không có `ADR` nào hiện thực hoá ⇒ **chặn AG2**. Đó là yêu cầu định hình kiến trúc mà
không ai quyết định gì về nó.
## B3. Ma trận `ASR` × `CMP`
*Điền sau khi có `SAD`. Ô đánh dấu = component này tồn tại (một phần) vì `ASR` đó.*
| | `CMP-01` | `CMP-02` | `CMP-03` |
|---|---|---|---|
| `ASR-001` | ● | | ● |
| `ASR-002` | | ● | |
Component không phục vụ `ASR` nào ⇒ hỏi lại: nó tồn tại vì lý do gì? Có thể hợp lệ (nhu cầu
chức năng thuần), nhưng phải trả lời được.
---
## C. Đối chiếu với `NFR` của bộ BA
| `NFR` của BA | Nội dung gốc | `QAS` tương ứng | Đã lượng hoá | Hành động |
|---|---|---|---|---|
| `NFR-01` | "màn hình phải nhanh" | `QAS-001` | ✅ | BA cập nhật SRS tham chiếu `QAS-001` |
| `NFR-05` | "dễ bảo trì" | — | ❌ | Đề xuất bỏ hoặc đổi thành `QAS-0nn` đo được |
*`QAS` thắng khi lệch (quy tắc ở `../../sa-lifecycle/references/artifact-map.md` §7). Mọi dòng
lệch phải báo lại cho BA cập nhật SRS.*
## D. Giả định & Ngoài phạm vi
**Giả định:**
| ID | Giả định | Cách xác minh | Nếu sai thì `QAS` nào đổi |
|---|---|---|---|
**Ngoài phạm vi:**
- *(ví dụ: kiến trúc này không nhắm tới tải × 100; ngưỡng phải xét lại là … giao dịch/giờ)*
## E. Open Questions
| ID | Câu hỏi | Hỏi ai | Từ ngày | Chặn gì | Hệ quả nếu trả lời ngược |
|---|---|---|---|---|---|