This commit is contained in:
Leonard-ThindPad-P50
2026-09-08 10:26:21 +07:00
commit c81f249920
169 changed files with 38726 additions and 0 deletions

View File

@@ -0,0 +1,186 @@
# 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 |
|---|---|---|---|---|---|