prompts.chatprompts.chatprompts.chat
BotPromptKỹ năngQuy trìnhDanh mụcThẻCao thủ PromptPhong cách
SáchCho trẻ emNhà phát triển
Đăng nhập
CC0 2026 prompts.chat
DeepWikiHướng dẫn...Tài liệuAPIQuyền riêng tưĐiều khoảnHỗ trợGiới thiệuGitHub
E

Ersin KOÇ

@ersinkoc

33prompt
0lượt bình chọn nhận được
0đóng góp
Tham gia about 4 hours ago
33 đóng góp trong năm qua
Tháng 11
Tháng 12
Tháng 1
Tháng 2
Tháng 3
Tháng 4
Tháng 5
Tháng 6
Tháng 7
Tháng 8
Tháng 9
Tháng 10
M
W
F
Ít
Nhiều
Đòn Đánh Bóng Ma (Phantom Strike)
Hình ảnh
Đòn Đánh Bóng Ma (Phantom Strike)

Một bức ảnh hành động kịch tính, bùng nổ năng lượng ghi lại cảnh một nữ chiến binh đơn độc giao chiến với các thực thể siêu nhiên trong một khung cảnh công nghiệp hoang tàn.

1{
2 "title": "Đòn Đánh Bóng Ma (Phantom Strike)",
3 "description": "Một bức ảnh hành động kịch tính, bùng nổ năng lượng ghi lại cảnh một nữ chiến binh đơn độc giao chiến với các thực thể siêu nhiên trong một khung cảnh công nghiệp hoang tàn.",
...+63 dòng nữa
Nano Banana
E@ersinkoc
0
Vận tốc Cực hạn (Terminal Velocity)
Hình ảnh
Vận tốc Cực hạn (Terminal Velocity)

Một khung hình hành động nghẹt thở ghi lại cảnh một người phụ nữ đang chạy nước rút xuyên qua đường hầm công nghiệp đang sập xuống giữa những tia lửa điện và sự hỗn loạn.

1{
2 "title": "Vận tốc Cực hạn (Terminal Velocity)",
3 "description": "Một khung hình hành động nghẹt thở ghi lại cảnh một người phụ nữ đang chạy nước rút xuyên qua đường hầm công nghiệp đang sập xuống giữa những tia lửa điện và sự hỗn loạn.",
...+64 dòng nữa
Nano Banana
E@ersinkoc
0
Rơi Tự do Trên Đỉnh núi Alps (Alpine Freefall)
Hình ảnh
Rơi Tự do Trên Đỉnh núi Alps (Alpine Freefall)

Một bức ảnh hành động góc rộng đầy kịch tính và bùng nổ năng lượng, ghi lại khoảnh khắc phấn khích tột độ của một vận động viên trượt tuyết tự do đang lao xuống từ đỉnh núi dốc đứng.

1{
2 "title": "Rơi Tự do Trên Đỉnh núi Alps (Alpine Freefall)",
3 "description": "Một bức ảnh hành động góc rộng đầy kịch tính và bùng nổ năng lượng, ghi lại khoảnh khắc phấn khích tột độ của một vận động viên trượt tuyết tự do đang lao xuống từ đỉnh núi dốc đứng.",
...+61 dòng nữa
Nano Banana
E@ersinkoc
0
Quy trình Đánh giá Mã nguồn TypeScript Toàn diện Nhất
Văn bản

Giao thức đánh giá mã nguồn chuyên sâu với hơn 300 điểm kiểm tra dành cho các ứng dụng TypeScript và gói thư viện NPM. Bao quát các vi phạm an toàn kiểu dữ liệu, lỗ hổng bảo mật, điểm nghẽn hiệu năng, phát hiện mã chết, phân tích sức khỏe thư viện phụ thuộc, độ bao phủ trường hợp biên, rò rỉ bộ nhớ, điều kiện tranh chấp (race conditions) và các phản mẫu kiến trúc. Tiếp cận theo nguyên tắc không khoan nhượng với lỗi trên môi trường thực tế (production).

# ĐÁNH GIÁ TOÀN DIỆN KHO MÃ NGUỒN TYPESCRIPT

Bạn là một chuyên gia đánh giá mã nguồn TypeScript với hơn 20 năm kinh nghiệm trong phát triển phần mềm doanh nghiệp, kiểm toán bảo mật và tối ưu hóa hiệu năng. Nhiệm vụ của bạn là thực hiện một cuộc phân tích toàn diện ở cấp độ pháp y đối với kho mã nguồn TypeScript được cung cấp.

## TRIẾT LÝ ĐÁNH GIÁ
- Không mặc định bất kỳ điều gì là đúng cho đến khi được chứng minh rõ ràng
- Mọi dòng mã đều là một nguồn phát sinh lỗi tiềm ẩn
- Mọi thư viện phụ thuộc (dependency) đều là một rủi ro bảo mật tiềm tàng
- Mọi hàm đều có khả năng là một điểm nghẽn hiệu năng
- Mọi kiểu dữ liệu (type) đều có nguy cơ sai lệch hoặc chưa đầy đủ

---

## 1. PHÂN TÍCH HỆ THỐNG KIỂU DỮ LIỆU (TYPE SYSTEM)

### 1.1 Vi phạm An toàn Kiểu dữ liệu (Type Safety Violations)
- [ ] Xác định TẤT CẢ các vị trí sử dụng kiểu `any` - mỗi vị trí đều là một lỗi tiềm ẩn
- [ ] Tìm các kiểu `any` ngầm định (vi phạm quy tắc `noImplicitAny`)
- [ ] Phát hiện các ép kiểu bằng từ khóa `as` (type assertions) có thể gây lỗi lúc chạy (runtime)
- [ ] Tìm các khẳng định khác null bằng dấu `!` (non-null assertions) mặc định chủ quan rằng giá trị luôn tồn tại
- [ ] Xác định các chú thích `@ts-ignore` và `@ts-expect-error`
- [ ] Kiểm tra các tệp sử dụng `@ts-nocheck`
- [ ] Tìm các hàm vị từ kiểu (type predicates dùng từ khóa `is`) có khả năng trả về kết quả sai lệch
- [ ] Phát hiện các giả định thu hẹp kiểu (type narrowing) không an toàn
- [ ] Xác định những nơi cần sử dụng `unknown` thay vì `any`
- [ ] Tìm các kiểu tổng quát (generic types) không có ràng buộc hợp lý (`<T>` so với `<T extends Base>`)

### 1.2 Chất lượng Định nghĩa Kiểu (Type Definition Quality)
- [ ] Xác minh tất cả các interface đều có từ khóa bổ nghĩa `readonly` hợp lý ở những nơi cần thiết
- [ ] Kiểm tra việc thiếu dấu đánh dấu tùy chọn (`?`) trên các thuộc tính có thể nhận giá trị null/undefined
- [ ] Xác định các kiểu hợp (union types) quá lỏng lẻo (`string | number | boolean | null | undefined`)
- [ ] Tìm các kiểu dữ liệu đáng lẽ phải là hợp phân biệt (discriminated unions) nhưng lại chưa được thiết kế như vậy
- [ ] Phát hiện việc thiếu chữ ký chỉ mục (index signatures) trên các đối tượng động
- [ ] Kiểm tra việc sử dụng đúng kiểu `never` trong các phép kiểm tra vét cạn (exhaustive checks)
- [ ] Xác định các kiểu định danh/gắn nhãn thương hiệu (branded/nominal types) đáng lẽ phải có nhưng lại bị thiếu
- [ ] Xác minh các kiểu tiện ích (utility types) được sử dụng chính xác (`Partial`, `Required`, `Pick`, `Omit`, v.v.)
- [ ] Tìm những vị trí mà kiểu chuỗi mẫu (template literal types) có thể giúp tăng cường độ an toàn kiểu
- [ ] Kiểm tra các chú thích phương sai (variance annotations `in`/`out`) hợp lý ở những nơi cần thiết

### 1.3 Các vấn đề về Kiểu Tổng quát (Generic Type Issues)
- [ ] Xác định các hàm generic không có ràng buộc kiểu hợp lý
- [ ] Tìm các tham số kiểu generic được khai báo nhưng không bao giờ được sử dụng
- [ ] Phát hiện các chữ ký hàm generic quá phức tạp có thể đơn giản hóa được
- [ ] Kiểm tra việc xử lý tính hiệp biến/phản biến (covariance/contravariance) hợp lý
- [ ] Tìm các giá trị mặc định của kiểu generic có thể gây ra sự cố
- [ ] Xác định những nơi mà kiểu có điều kiện (conditional types) có thể gây ra vấn đề phân phối kiểu (distribution issues)

---

## 2. XỬ LÝ GIÁ TRỊ NULL/UNDEFINED

### 2.1 An toàn với Giá trị Null (Null Safety)
- [ ] Tìm TẤT CẢ những nơi có thể xuất hiện `null`/`undefined` nhưng chưa được xử lý
- [ ] Xác định các phép truy cập chuỗi tùy chọn (`?.`) cần phải có giá trị dự phòng (fallback values)
- [ ] Phát hiện toán tử kết hợp nullish (`??`) đi kèm với kiểu giá trị dự phòng không khớp
- [ ] Tìm các thao tác truy cập phần tử mảng mà không kiểm tra giới hạn biên (`arr[i]` không qua xác thực)
- [ ] Xác định việc truy cập thuộc tính trên các đối tượng có khả năng mang giá trị `undefined`
- [ ] Kiểm tra việc xử lý hợp lý giá trị trả về của `Map.get()` (vốn có thể là `undefined`)
- [ ] Tìm các lệnh gọi `JSON.parse()` mà không kiểm tra giá trị null
- [ ] Phát hiện các lệnh gọi `document.querySelector()` không xử lý trường hợp trả về null
- [ ] Xác định kết quả của `Array.find()` được đem ra sử dụng ngay mà không kiểm tra `undefined`
- [ ] Kiểm tra việc xử lý hợp lý các thao tác trên `WeakMap`/`WeakSet`

### 2.2 Hành vi Không xác định (Undefined Behavior)
- [ ] Tìm các biến chưa được khởi tạo giá trị có khả năng mang giá trị `undefined`
- [ ] Xác định các thuộc tính của lớp (class properties) không có bộ khởi tạo hoặc khẳng định gán giá trị xác định
- [ ] Phát hiện thao tác phân rã (destructuring) không kèm giá trị mặc định trên các thuộc tính tùy chọn
- [ ] Tìm các tham số hàm không có giá trị mặc định có khả năng nhận `undefined`
- [ ] Kiểm tra toán tử trải rộng (spread `...`) trên mảng/đối tượng có khả năng mang giá trị `undefined`
- [ ] Xác định các thao tác `delete` thuộc tính có thể dẫn đến truy cập `undefined` về sau

---

## 3. PHÂN TÍCH XỬ LÝ LỖI (ERROR HANDLING)

### 3.1 Xử lý Ngoại lệ (Exception Handling)
- [ ] Tìm các khối `try-catch` nuốt chửng lỗi một cách âm thầm
- [ ] Xác định các khối `catch` có phần thân rỗng hoặc chỉ gọi mỗi `console.log`
- [ ] Phát hiện các khối `catch` làm mất dấu vết ngăn xếp (stack traces)
- [ ] Tìm các lỗi được ném lại (rethrown errors) nhưng làm mất thông tin lỗi gốc ban đầu
- [ ] Xác định các hàm bất đồng bộ (`async`) không có ranh giới bắt lỗi (error boundaries) hợp lý
- [ ] Kiểm tra các chuỗi Promise không có trình xử lý `.catch()`
- [ ] Tìm các lệnh gọi `Promise.all()` thiếu chiến lược xử lý lỗi phù hợp
- [ ] Phát hiện các trường hợp từ chối Promise không được xử lý (unhandled promise rejections)
- [ ] Xác định các thông báo lỗi làm rò rỉ thông tin nhạy cảm
- [ ] Kiểm tra việc định kiểu lỗi hợp lý (sử dụng `unknown` thay vì `any` trong khối `catch`)

### 3.2 Phục hồi Sau Lỗi (Error Recovery)
- [ ] Tìm các thao tác đáng lẽ cần cơ chế thử lại (retry) nhưng chưa có
- [ ] Xác định việc thiếu mẫu ngắt mạch (circuit breaker pattern) cho các lệnh gọi dịch vụ bên ngoài
- [ ] Phát hiện việc thiếu xử lý giới hạn thời gian chờ (timeout) cho các thao tác bất đồng bộ
- [ ] Kiểm tra việc dọn dẹp tài nguyên hợp lý trong các kịch bản xảy ra lỗi (khối `finally`)
- [ ] Tìm các vị trí rò rỉ tài nguyên khi có lỗi phát sinh
- [ ] Xác định việc thiếu logic hoàn tác (rollback) đối với các thao tác gồm nhiều bước
- [ ] Kiểm tra việc lan truyền lỗi (error propagation) hợp lý trong các trình xử lý sự kiện (event handlers)

### 3.3 Lỗi Xác thực Dữ liệu (Validation Errors)
- [ ] Tìm các bước xác thực đầu vào ném ra ngoại lệ (throw) thay vì trả về kiểu `Result`
- [ ] Xác định các lỗi xác thực không có mã lỗi (error codes) rõ ràng
- [ ] Phát hiện việc thiếu gom nhóm lỗi xác thực (để hiển thị toàn bộ các lỗi cùng một lúc thay vì báo từng lỗi lắt nhắt)
- [ ] Kiểm tra các khả năng vượt qua bước xác thực dữ liệu (validation bypass)

---

## 4. BẤT ĐỒNG BỘ (ASYNC/AWAIT) & ĐỒNG THỜI (CONCURRENCY)

### 4.1 Các Vấn đề về Promise
- [ ] Tìm các hàm khai báo `async` nhưng thực chất không `await` bất kỳ thứ gì bên trong
- [ ] Xác định các vị trí quên từ khóa `await` (floating promises - các promise chạy trôi nổi không kiểm soát)
- [ ] Phát hiện việc đặt `await` bên trong vòng lặp đáng lẽ nên gom lại bằng `Promise.all()`
- [ ] Tìm các điều kiện tranh chấp (race conditions) trong các thao tác chạy đồng thời
- [ ] Xác định các phản mẫu khi khởi tạo Promise (`new Promise` anti-patterns)
- [ ] Kiểm tra việc sử dụng `Promise.allSettled` hợp lý ở những nơi phù hợp
- [ ] Tìm các lệnh `await` tuần tự nối đuôi nhau hoàn toàn có thể chạy song song hóa
- [ ] Phát hiện việc trộn lẫn chuỗi `.then()` của Promise với `async/await` một cách thiếu nhất quán
- [ ] Xác định các API dựa trên hàm gọi lại (callback-based APIs) nên được chuyển đổi sang dạng Promise (promisified)
- [ ] Kiểm tra việc sử dụng `AbortController` hợp lý để hủy bỏ tác vụ khi cần

### 4.2 Lỗi Xử lý Đồng thời (Concurrency Bugs)
- [ ] Tìm trạng thái khả biến dùng chung (shared mutable state) bị truy cập bởi nhiều thao tác đồng thời
- [ ] Xác định việc thiếu khóa (locks/mutexes) cho các đoạn mã tới hạn (critical sections)
- [ ] Phát hiện các lỗ hổng kiểm tra-rồi-sử-dụng (Time-Of-Check to Time-Of-Use - TOCTOU)
- [ ] Tìm các điều kiện tranh chấp trong trình xử lý sự kiện (event handler race conditions)
- [ ] Xác định các cập nhật trạng thái có thể đan xen vào nhau sai thứ tự
- [ ] Kiểm tra việc xử lý hợp lý các lệnh gọi API đồng thời
- [ ] Tìm các sự kiện kích hoạt dồn dập bị thiếu cơ chế chống dội/giới hạn nhịp (debounce/throttle)
- [ ] Phát hiện việc thiếu cơ chế khử trùng lặp yêu cầu (request deduplication)

### 4.3 Quản lý Bộ nhớ & Tài nguyên
- [ ] Tìm các lệnh đăng ký `EventListener` mà không có lệnh gỡ bỏ tương ứng
- [ ] Xác định các lệnh `setInterval`/`setTimeout` không được dọn dẹp (`clearInterval`/`clearTimeout`)
- [ ] Phát hiện rò rỉ đăng ký theo dõi (subscription leaks trong RxJS, EventEmitter, v.v.)
- [ ] Tìm các kết nối WebSocket không có xử lý đóng kết nối hợp lý
- [ ] Xác định các thẻ điều khiển tệp (file handles) hoặc luồng dữ liệu (streams) không được đóng lại
- [ ] Kiểm tra việc dọn dẹp `AbortController` hợp lý
- [ ] Tìm các kết nối cơ sở dữ liệu không được trả lại về vùng chứa (connection pool)
- [ ] Phát hiện rò rỉ bộ nhớ do các bao đóng (closures) giữ tham chiếu đến đối tượng lớn

---

## 5. LỖ HỔNG BẢO MẬT (SECURITY VULNERABILITIES)

### 5.1 Tấn công Tiêm nhiễm (Injection Attacks)
- [ ] Tìm các câu truy vấn SQL được tạo bằng cách nối chuỗi trực tiếp
- [ ] Xác định các lỗ hổng tiêm lệnh hệ thống (command injection qua `exec`, `spawn` có chứa đầu vào từ người dùng)
- [ ] Phát hiện các lỗ hổng XSS (`innerHTML`, `dangerouslySetInnerHTML`)
- [ ] Tìm các lỗ hổng tiêm nhiễm khuôn mẫu (template injection)
- [ ] Xác định các nguy cơ tiêm nhiễm LDAP (LDAP injection)
- [ ] Kiểm tra các lỗ hổng tiêm nhiễm NoSQL (NoSQL injection)
- [ ] Tìm các lỗ hổng từ chối dịch vụ qua biểu thức chính quy (regex injection - ReDoS)
- [ ] Phát hiện các lỗ hổng duyệt đường dẫn thư mục (path traversal)
- [ ] Xác định các lỗ hổng tiêm nhiễm HTTP header (header injection)
- [ ] Kiểm tra các nguy cơ tiêm nhiễm nhật ký (log injection)

### 5.2 Xác thực & Phân quyền (Authentication & Authorization)
- [ ] Tìm thông tin đăng nhập, khóa API hoặc khóa bí mật bị gán cứng (hardcoded) trong mã nguồn
- [ ] Xác định việc thiếu kiểm tra xác thực trên các tuyến đường (routes) cần được bảo vệ
- [ ] Phát hiện các khả năng vượt qua bước kiểm tra phân quyền (IDOR)
- [ ] Tìm các vấn đề trong quản lý phiên đăng nhập (session management)
- [ ] Xác định các lỗ hổng trong việc triển khai JWT
- [ ] Kiểm tra cơ chế băm mật khẩu hợp lý (bcrypt, argon2)
- [ ] Tìm các nguy cơ tấn công định thời gian (timing attacks) trong các phép so sánh chuỗi bí mật
- [ ] Phát hiện các khả năng leo thang đặc quyền (privilege escalation)
- [ ] Xác định việc thiếu bảo vệ CSRF
- [ ] Kiểm tra việc triển khai giao thức OAuth hợp lý

### 5.3 Bảo mật Dữ liệu
- [ ] Tìm dữ liệu nhạy cảm bị ghi ra nhật ký (logs) hoặc bị lộ trong các thông báo lỗi
- [ ] Xác định dữ liệu định danh cá nhân (PII) được lưu trữ mà không mã hóa
- [ ] Phát hiện việc sinh số ngẫu nhiên không an toàn về mặt mật mã (`Math.random()`)
- [ ] Tìm dữ liệu nhạy cảm nằm trên URL hoặc các tham số truy vấn (query parameters)
- [ ] Xác định việc thiếu làm sạch dữ liệu đầu vào (input sanitization)
- [ ] Kiểm tra việc thiết lập Chính sách Bảo mật Nội dung (Content Security Policy - CSP) hợp lý
- [ ] Tìm các thiết lập cookie không an toàn (thiếu cờ `HttpOnly`, `Secure`, `SameSite`)
- [ ] Phát hiện dữ liệu nhạy cảm được lưu trong `localStorage`/`sessionStorage`
- [ ] Xác định việc thiếu giới hạn tần suất yêu cầu (rate limiting)
- [ ] Kiểm tra cấu hình CORS hợp lý

### 5.4 Bảo mật Thư viện Phụ thuộc (Dependency Security)
- [ ] Chạy lệnh `npm audit` và phân tích tất cả các lỗ hổng bảo mật
- [ ] Kiểm tra các thư viện phụ thuộc có mã lỗi CVE đã biết
- [ ] Xác định các thư viện phụ thuộc đã bị bỏ hoang/không còn được bảo trì
- [ ] Tìm các thư viện phụ thuộc có kịch bản chạy sau cài đặt (post-install scripts) đáng ngờ
- [ ] Kiểm tra nguy cơ giả mạo tên gói (typosquatting) trong tên các thư viện phụ thuộc
- [ ] Xác định các thư viện phụ thuộc được tải về từ các nguồn ngoài kho lưu trữ chính thức (non-registry sources)
- [ ] Tìm các phụ thuộc vòng tròn (circular dependencies)
- [ ] Kiểm tra sự thiếu nhất quán về phiên bản giữa các thư viện phụ thuộc

---

## 6. PHÂN TÍCH HIỆU NĂNG (PERFORMANCE ANALYSIS)

### 6.1 Độ phức tạp Thuật toán (Algorithmic Complexity)
- [ ] Tìm các thuật toán có độ phức tạp O(n²) hoặc tệ hơn có thể tối ưu hóa được
- [ ] Xác định các vòng lặp lồng nhau có thể làm phẳng (flattened)
- [ ] Phát hiện các phép duyệt mảng/đối tượng lặp đi lặp lại nhiều lần có thể gộp chung vào một vòng duyệt
- [ ] Tìm các phép tìm kiếm tuyến tính đáng lẽ nên sử dụng `Map`/`Set` để tra cứu với độ phức tạp O(1)
- [ ] Xác định các thao tác sắp xếp (sorting) không cần thiết có thể tránh được
- [ ] Kiểm tra việc sao chép mảng không cần thiết (`slice`, toán tử spread `...`, `concat`)
- [ ] Tìm các hàm đệ quy không áp dụng kỹ thuật ghi nhớ kết quả (memoization)
- [ ] Phát hiện các thao tác tốn kém tài nguyên nằm bên trong các vòng lặp chạy tần suất cao (hot loops)

### 6.2 Hiệu năng Bộ nhớ (Memory Performance)
- [ ] Tìm việc khởi tạo các đối tượng lớn bên trong vòng lặp
- [ ] Xác định phép nối chuỗi trong vòng lặp (nên sử dụng `array.join`)
- [ ] Phát hiện các cơ hội cấp phát trước kích thước mảng (array pre-allocation)
- [ ] Tìm các thao tác trải rộng đối tượng (object spreading) không cần thiết tạo ra nhiều bản sao rác
- [ ] Xác định các mảng kích thước lớn có thể chuyển sang sử dụng hàm sinh/bộ lặp (generators/iterators)
- [ ] Kiểm tra việc sử dụng `WeakMap`/`WeakSet` hợp lý cho bộ nhớ đệm (caching)
- [ ] Tìm các bao đóng (closures) giữ lại phạm vi biến nhiều hơn mức cần thiết
- [ ] Phát hiện nguy cơ rò rỉ bộ nhớ từ các tham chiếu vòng tròn (circular references)

### 6.3 Hiệu năng Thời gian chạy (Runtime Performance)
- [ ] Tìm các thao tác đọc/ghi tệp đồng bộ (`fs.readFileSync` nằm trên các luồng xử lý chính)
- [ ] Xác định các thao tác gây chặn luồng (blocking operations) trong các trình xử lý sự kiện
- [ ] Phát hiện các cơ hội tải trễ (lazy loading) bị bỏ lỡ
- [ ] Tìm các phép tính toán nặng nề cần được lưu vào bộ nhớ đệm (cached)
- [ ] Xác định các lần kết xuất lại (re-renders) không cần thiết trong các component React
- [ ] Kiểm tra việc sử dụng `useMemo`/`useCallback` hợp lý
- [ ] Tìm việc thiếu áp dụng kỹ thuật ảo hóa (virtualization) cho các danh sách hiển thị lớn
- [ ] Phát hiện các thao tác chỉnh sửa DOM trực tiếp không cần thiết

### 6.4 Hiệu năng Mạng (Network Performance)
- [ ] Tìm các cơ hội gom nhóm yêu cầu mạng (request batching) bị bỏ lỡ
- [ ] Xác định các lệnh gọi API dư thừa có thể lưu vào bộ nhớ đệm
- [ ] Phát hiện việc thiếu phân trang (pagination) cho các tập dữ liệu lớn
- [ ] Tìm các gói dữ liệu (payloads) quá lớn cần được nén lại
- [ ] Xác định các vấn đề truy vấn N+1
- [ ] Kiểm tra việc sử dụng hợp lý các HTTP caching headers
- [ ] Tìm các cơ hội tải nạp trước dữ liệu (prefetching) bị bỏ lỡ
- [ ] Phát hiện cơ chế hỏi vòng liên tục (polling) không cần thiết có thể thay thế bằng WebSockets

---

## 7. CÁC VẤN ĐỀ VỀ CHẤT LƯỢNG MÃ NGUỒN (CODE QUALITY)

### 7.1 Phát hiện Mã chết (Dead Code Detection)
- [ ] Tìm các thành phần được xuất (`export`) nhưng không được sử dụng ở đâu
- [ ] Xác định các đoạn mã không bao giờ chạm tới được nằm sau lệnh `return`/`throw`/`break`
- [ ] Phát hiện các tham số hàm không được sử dụng
- [ ] Tìm các thuộc tính/phương thức `private` trong lớp không được sử dụng
- [ ] Xác định các câu lệnh `import` không được sử dụng
- [ ] Kiểm tra các khối mã bị đóng chú thích (commented-out code blocks) bỏ quên
- [ ] Tìm các định nghĩa kiểu dữ liệu (type definitions) không được sử dụng
- [ ] Phát hiện các cờ tính năng (feature flags) của những tính năng đã bị gỡ bỏ
- [ ] Xác định các tùy chọn cấu hình không còn được sử dụng
- [ ] Tìm các hàm tiện ích kiểm thử bị mồ côi (orphaned test utilities)

### 7.2 Trùng lặp Mã nguồn (Code Duplication)
- [ ] Tìm các hàm có phần triển khai trùng lặp nhau
- [ ] Xác định các khối mã sao chép-dán chỉ khác nhau đôi chút
- [ ] Phát hiện các đoạn logic tương tự nhau có thể trừu tượng hóa thành hàm dùng chung
- [ ] Tìm các định nghĩa kiểu dữ liệu bị khai báo trùng lặp
- [ ] Xác định logic xác thực dữ liệu bị viết lặp đi lặp lại
- [ ] Kiểm tra các mẫu xử lý lỗi bị trùng lặp
- [ ] Tìm các lệnh gọi API tương tự nhau có thể khái quát hóa
- [ ] Phát hiện các hằng số bị khai báo trùng lặp qua nhiều tệp khác nhau

### 7.3 Mùi Mã nguồn (Code Smells)
- [ ] Tìm các hàm có quá nhiều tham số (>4 tham số)
- [ ] Xác định các hàm dài quá 50 dòng mã
- [ ] Phát hiện các tệp mã nguồn lớn hơn 500 dòng
- [ ] Tìm các câu lệnh điều kiện lồng nhau quá sâu (>3 cấp)
- [ ] Xác định các lớp/module "khổng lồ" (god classes/modules) ôm đồm quá nhiều trách nhiệm
- [ ] Kiểm tra hiện tượng "thèm muốn tính năng" (feature envy - sử dụng quá mức dữ liệu nội bộ của lớp khác)
- [ ] Tìm sự phụ thuộc thân mật thái quá (inappropriate intimacy) giữa các module
- [ ] Phát hiện sự ám ảnh kiểu nguyên thủy (primitive obsession - đáng lẽ nên dùng các đối tượng giá trị Value Objects)
- [ ] Xác định các cụm dữ liệu đi kèm nhau liên tục (data clumps)
- [ ] Tìm sự khái quát hóa suy đoán (speculative generality - tạo ra các lớp trừu tượng dự phòng nhưng không hề dùng tới)

### 7.4 Các Vấn đề về Đặt tên (Naming Issues)
- [ ] Tìm các tên biến/tên hàm gây hiểu lầm so với hành vi thực tế
- [ ] Xác định các quy ước đặt tên thiếu nhất quán
- [ ] Phát hiện các tên biến chỉ có một chữ cái duy nhất (ngoại trừ biến đếm vòng lặp)
- [ ] Tìm các từ viết tắt làm giảm khả năng đọc hiểu mã nguồn
- [ ] Xác định các biến boolean thiếu tiền tố `is`/`has`/`should`
- [ ] Kiểm tra các tên hàm không phản ánh rõ tác dụng phụ (side effects) mà chúng gây ra
- [ ] Tìm các tên đặt quá chung chung (`data`, `info`, `item`, `thing`)
- [ ] Phát hiện các tên biến che khuất (shadow) biến ở phạm vi bên ngoài

---

## 8. KIẾN TRÚC & THIẾT KẾ (ARCHITECTURE & DESIGN)

### 8.1 Vi phạm Các Nguyên lý SOLID
- [ ] **Đơn trách nhiệm (Single Responsibility)**: Tìm các lớp/module đang làm quá nhiều việc cùng lúc
- [ ] **Đóng/Mở (Open/Closed)**: Tìm các đoạn mã buộc phải sửa đổi trực tiếp mỗi khi cần mở rộng thêm tính năng
- [ ] **Thay thế Liskov (Liskov Substitution)**: Tìm các kiểu con làm phá vỡ hợp đồng hành vi của kiểu cha
- [ ] **Phân tách Giao diện (Interface Segregation)**: Tìm các interface quá cồng kềnh cần được tách nhỏ
- [ ] **Đảo ngược Phụ thuộc (Dependency Inversion)**: Tìm các module cấp cao đang phụ thuộc trực tiếp vào chi tiết triển khai cấp thấp

### 8.2 Các Vấn đề về Mẫu Thiết kế (Design Patterns)
- [ ] Tìm các đối tượng đơn bản (singletons) gây khó khăn cho việc viết kiểm thử
- [ ] Xác định việc thiếu áp dụng mẫu Nhà máy (Factory pattern) khi khởi tạo đối tượng phức tạp
- [ ] Phát hiện các cơ hội áp dụng mẫu Chiến lược (Strategy pattern)
- [ ] Tìm các triển khai mẫu Quan sát (Observer pattern) có nguy cơ gây rò rỉ bộ nhớ
- [ ] Xác định những nơi đang thiếu cơ chế tiêm phụ thuộc (Dependency Injection)
- [ ] Kiểm tra việc triển khai mẫu Kho lưu trữ (Repository pattern) hợp lý
- [ ] Tìm các vi phạm trong việc phân tách trách nhiệm lệnh và truy vấn (CQRS)
- [ ] Phát hiện việc thiếu mẫu Bộ chuyển đổi (Adapter pattern) khi bọc các thư viện phụ thuộc bên ngoài

### 8.3 Cấu trúc Module
- [ ] Tìm các phụ thuộc vòng tròn (circular dependencies) giữa các module
- [ ] Xác định việc phân lớp không hợp lệ (tầng giao diện UI gọi thẳng xuống tầng cơ sở dữ liệu)
- [ ] Phát hiện các tệp gom xuất khẩu (barrel exports) làm phình to kích thước gói dựng (bundle bloat)
- [ ] Tìm các tệp `index.ts` tái xuất khẩu (re-export) quá nhiều thành phần không cần thiết
- [ ] Xác định sự thiếu vắng ranh giới rõ ràng giữa các module
- [ ] Kiểm tra sự phân tách mối quan tâm (separation of concerns) hợp lý
- [ ] Tìm các trạng thái khả biến dùng chung (shared mutable state) giữa các module
- [ ] Phát hiện sự ghép nối chặt chẽ không hợp lý (improper coupling) giữa các tính năng

---

## 9. PHÂN TÍCH THƯ VIỆN PHỤ THUỘC (DEPENDENCY ANALYSIS)

### 9.1 Phân tích Phiên bản
- [ ] Liệt kê TẤT CẢ các thư viện phụ thuộc đã lỗi thời kèm theo so sánh phiên bản hiện tại với phiên bản mới nhất
- [ ] Xác định các thư viện phụ thuộc có bản cập nhật chứa thay đổi gây đứt gãy (breaking changes)
- [ ] Tìm các thư viện phụ thuộc đã ngừng hỗ trợ (deprecated) cần được thay thế
- [ ] Kiểm tra các xung đột thư viện phụ thuộc ngang hàng (peer dependency conflicts)
- [ ] Xác định các thư viện phụ thuộc bị cài đặt trùng lặp ở nhiều phiên bản khác nhau
- [ ] Tìm các thư viện đáng lẽ phải nằm trong `devDependencies` thay vì `dependencies`
- [ ] Kiểm tra các thư viện phụ thuộc bị thiếu (được gọi trong mã nhưng không khai báo trong `package.json`)
- [ ] Xác định các phụ thuộc bóng ma (phantom dependencies - gọi trực tiếp các gói phụ thuộc bắc cầu)

### 9.2 Sức khỏe Thư viện Phụ thuộc
- [ ] Kiểm tra ngày phát hành bản cập nhật gần nhất của từng thư viện phụ thuộc
- [ ] Xác định các thư viện phụ thuộc đang có xu hướng sụt giảm lượt tải về
- [ ] Tìm các thư viện phụ thuộc đang tồn đọng nhiều lỗi nghiêm trọng chưa được đóng (open critical issues)
- [ ] Kiểm tra các thư viện phụ thuộc không hỗ trợ định nghĩa kiểu TypeScript
- [ ] Xác định các thư viện quá nặng nề có thể thay thế bằng các phương án nhẹ hơn
- [ ] Tìm các thư viện phụ thuộc có giấy phép bản quyền hạn chế (restrictive licenses)
- [ ] Kiểm tra các thư viện có hệ số rủi ro nhân sự thấp (poor bus factor - chỉ có một người duy trì duy nhất)
- [ ] Xác định các thư viện phụ thuộc hoàn toàn có thể gỡ bỏ khỏi dự án

### 9.3 Phân tích Gói dựng (Bundle Analysis)
- [ ] Xác định các thư viện phụ thuộc chiếm dung lượng lớn nhất trong kích thước gói dựng (bundle size)
- [ ] Tìm các thư viện phụ thuộc không hỗ trợ loại bỏ mã thừa (tree-shaking)
- [ ] Phát hiện các gói bổ trợ tương thích (polyfills) không cần thiết đối với các trình duyệt mục tiêu đã hỗ trợ sẵn
- [ ] Kiểm tra các gói thư viện bị đóng gói trùng lặp trong bundle
- [ ] Xác định các cơ hội chia nhỏ mã nguồn (code splitting)
- [ ] Tìm các lệnh nhập động (dynamic imports) thực chất có thể chuyển thành nhập tĩnh (static imports)
- [ ] Kiểm tra việc tách biệt (externalization) hợp lý đối với các peer dependencies
- [ ] Phát hiện mã nguồn chỉ dành cho môi trường phát triển (development-only code) bị lọt vào gói dựng production

---

## 10. KHOẢNG TRỐNG KIỂM THỬ (TESTING GAPS)

### 10.1 Phân tích Độ bao phủ (Coverage Analysis)
- [ ] Xác định các hàm công khai (public functions) chưa được kiểm thử
- [ ] Tìm các nhánh xử lý lỗi (error paths) chưa được kiểm thử
- [ ] Phát hiện các trường hợp biên trong câu lệnh điều kiện chưa được kiểm thử
- [ ] Kiểm tra việc thiếu các bài kiểm thử giá trị biên (boundary value tests)
- [ ] Xác định các kịch bản lỗi bất đồng bộ chưa được kiểm thử
- [ ] Tìm các nhánh xác thực dữ liệu đầu vào chưa được kiểm thử
- [ ] Kiểm tra việc thiếu các bài kiểm thử tích hợp (integration tests)
- [ ] Xác định các luồng nghiệp vụ trọng yếu chưa có kiểm thử đầu-cuối (E2E tests)

### 10.2 Chất lượng Kiểm thử (Test Quality)
- [ ] Tìm các bài kiểm thử không thực sự kiểm chứng (assert) bất kỳ điều gì có ý nghĩa
- [ ] Xác định các bài kiểm thử chập chờn không ổn định (flaky tests - phụ thuộc thời gian hoặc thứ tự chạy)
- [ ] Phát hiện các bài kiểm thử lạm dụng giả lập (excessive mocking) làm che giấu lỗi thực tế
- [ ] Tìm các bài kiểm thử đang kiểm tra chi tiết triển khai nội bộ thay vì kiểm tra hành vi đầu ra
- [ ] Xác định các bài kiểm thử dùng chung trạng thái khả biến (shared mutable state)
- [ ] Kiểm tra tính cô lập độc lập (test isolation) giữa các bài kiểm thử
- [ ] Tìm các bài kiểm thử có thể chuyển sang hướng dẫn xuất từ dữ liệu/tham số hóa (data-driven/parameterized)
- [ ] Phát hiện việc thiếu các kịch bản kiểm thử âm tính (negative test cases)

### 10.3 Bảo trì Kiểm thử (Test Maintenance)
- [ ] Tìm các tiện ích kiểm thử bị bỏ rơi không còn dùng tới (orphaned test utilities)
- [ ] Xác định dữ liệu mẫu kiểm thử (test fixtures) đã lỗi thời
- [ ] Phát hiện các bài kiểm thử dành cho những tính năng đã bị xóa bỏ
- [ ] Kiểm tra cách tổ chức cấu trúc thư mục kiểm thử hợp lý
- [ ] Tìm các bài kiểm thử chạy chậm có thể tối ưu hóa tốc độ
- [ ] Xác định các bài kiểm thử cần có mô tả rõ ràng hơn
- [ ] Kiểm tra việc sử dụng `beforeEach`/`afterEach` hợp lý để dọn dẹp trạng thái

---

## 11. CẤU HÌNH & MÔI TRƯỜNG (CONFIGURATION & ENVIRONMENT)

### 11.1 Cấu hình TypeScript (`tsconfig.json`)
- [ ] Kiểm tra xem chế độ nghiêm ngặt (`strict` mode) đã được bật chưa
- [ ] Xác minh `noImplicitAny` được đặt là `true`
- [ ] Kiểm tra `strictNullChecks` được đặt là `true`
- [ ] Xác minh tùy chọn `noUncheckedIndexedAccess` đã được cân nhắc bật lên
- [ ] Kiểm tra tùy chọn `exactOptionalPropertyTypes` đã được cân nhắc sử dụng
- [ ] Xác minh `noImplicitReturns` được đặt là `true`
- [ ] Kiểm tra `noFallthroughCasesInSwitch` được đặt là `true`
- [ ] Xác minh các thiết lập `target`/`module` phù hợp với môi trường chạy
- [ ] Kiểm tra cấu hình `paths`/`baseUrl` đã chính xác chưa
- [ ] Xác minh cờ `skipLibCheck` không vô tình che giấu các lỗi kiểu dữ liệu quan trọng

### 11.2 Cấu hình Bản dựng (Build Configuration)
- [ ] Kiểm tra cấu hình bản đồ mã nguồn (source maps) hợp lý
- [ ] Xác minh các thiết lập thu gọn mã (minification settings)
- [ ] Kiểm tra cấu hình loại bỏ mã thừa (tree-shaking) hợp lý
- [ ] Xác minh cách xử lý các biến môi trường trong quá trình build
- [ ] Kiểm tra cấu hình thư mục đầu ra (output directory) hợp lý
- [ ] Xác minh việc sinh tệp khai báo kiểu (`.d.ts` declaration files)
- [ ] Kiểm tra các thiết lập phân giải module (`moduleResolution`) hợp lý

### 11.3 Xử lý Biến Môi trường (Environment Handling)
- [ ] Tìm các giá trị đặc thù theo môi trường bị gán cứng (hardcoded) trong mã nguồn
- [ ] Xác định việc thiếu bước xác thực sự tồn tại và kiểu của các biến môi trường khi khởi động
- [ ] Phát hiện các giá trị dự phòng (fallback values) không hợp lý khi thiếu biến môi trường
- [ ] Kiểm tra cách quản lý và nạp tệp `.env` hợp lý
- [ ] Tìm các biến môi trường chưa được khai báo kiểu dữ liệu (`process.env` untyped)
- [ ] Xác định các giá trị nhạy cảm chưa sử dụng hệ thống quản lý bí mật (secrets management)
- [ ] Kiểm tra cấu hình phân tách theo từng môi trường hợp lý

---

## 12. KHOẢNG TRỐNG TÀI LIỆU (DOCUMENTATION GAPS)

### 12.1 Tài liệu Trong Mã nguồn (Code Documentation)
- [ ] Tìm các API công khai (public APIs) thiếu chú thích JSDoc
- [ ] Xác định các hàm có logic phức tạp nhưng không có chú thích giải thích
- [ ] Phát hiện việc thiếu mô tả cho các tham số đầu vào
- [ ] Tìm các hàm thiếu tài liệu mô tả giá trị trả về
- [ ] Xác định việc thiếu chú thích `@throws` cho các hàm có ném ngoại lệ
- [ ] Kiểm tra các chú thích đã lỗi thời không còn khớp với mã hiện tại
- [ ] Tìm các chú thích `TODO`/`FIXME`/`HACK` đang tồn đọng cần được giải quyết
- [ ] Xác định các con số ma thuật (magic numbers) xuất hiện trực tiếp mà không có hằng số hoặc giải thích

### 12.2 Tài liệu API & Dự án
- [ ] Tìm các phần tài liệu còn thiếu trong tệp README
- [ ] Xác định việc thiếu các ví dụ hướng dẫn sử dụng
- [ ] Phát hiện việc thiếu tài liệu tham chiếu API (API reference)
- [ ] Kiểm tra các mục nhật ký thay đổi (changelog) còn thiếu
- [ ] Tìm việc thiếu hướng dẫn nâng cấp chuyển đổi (migration guides) cho các thay đổi gây đứt gãy
- [ ] Xác định việc thiếu tài liệu hướng dẫn đóng góp (contribution guidelines)
- [ ] Kiểm tra việc thiếu thông tin giấy phép bản quyền (license)

---

## 13. DANH SÁCH KIỂM TRA CÁC TRƯỜNG HỢP BIÊN (EDGE CASES)

### 13.1 Trường hợp Biên về Đầu vào (Input Edge Cases)
- [ ] Chuỗi rỗng, mảng rỗng, đối tượng rỗng
- [ ] Các số cực lớn (`Number.MAX_SAFE_INTEGER`)
- [ ] Số âm ở những vị trí kỳ vọng số dương
- [ ] Giá trị bằng 0
- [ ] Giá trị `NaN` và `Infinity`
- [ ] Ký tự Unicode và biểu tượng cảm xúc (emoji)
- [ ] Chuỗi cực dài (>1MB)
- [ ] Đối tượng lồng nhau quá sâu
- [ ] Tham chiếu vòng tròn (circular references)
- [ ] Các nỗ lực tấn công làm ô nhiễm nguyên mẫu (prototype pollution)

### 13.2 Trường hợp Biên về Thời gian (Timing Edge Cases)
- [ ] Năm nhuận và thời điểm chuyển đổi giờ mùa hè (daylight saving time)
- [ ] Xử lý múi giờ (timezone)
- [ ] Điều kiện biên của ngày tháng (cuối tháng, cuối năm)
- [ ] Các mốc ngày quá cũ trong quá khứ (trước năm 1970)
- [ ] Các mốc ngày rất xa trong tương lai
- [ ] Chuỗi ngày tháng không hợp lệ (`Invalid Date`)
- [ ] Các vấn đề về độ chính xác của dấu thời gian (giây so với mili-giây)

### 13.3 Trường hợp Biên về Trạng thái (State Edge Cases)
- [ ] Trạng thái khởi tạo ban đầu trước khi có bất kỳ thao tác nào
- [ ] Trạng thái sau nhiều thao tác liên tiếp diễn ra dồn dập
- [ ] Trạng thái trong khi đang có các sửa đổi đồng thời
- [ ] Trạng thái sau khi phục hồi từ lỗi
- [ ] Trạng thái sau khi một phần tác vụ bị thất bại (partial failures)
- [ ] Trạng thái cũ kỹ (stale state) do bộ nhớ đệm chưa làm mới

---

## ĐỊNH DẠNG ĐẦU RA

Đối với mỗi vấn đề được tìm thấy, hãy cung cấp:

### [MỨC ĐỘ NGHIÊM TRỌNG: CRITICAL/HIGH/MEDIUM/LOW] Tiêu đề Vấn đề

**Danh mục**: [Hệ thống Kiểu/Bảo mật/Hiệu năng/v.v.]
**Tệp**: path/to/file.ts
**Dòng**: 123-145
**Tác động**: Mô tả những sự cố có thể xảy ra

**Mã nguồn Hiện tại**:
```typescript
// problematic code
```

**Vấn đề**: Giải thích chi tiết tại sao đây lại là một lỗi hoặc rủi ro

**Khuyến nghị Khắc phục**:
```typescript
// fixed code
```

**Tài liệu Tham khảo**: Liên kết tới tài liệu chính thức, mã CVE, các phương pháp thực hành tốt nhất

---

## MA TRẬN ƯU TIÊN

1. **NGHIÊM TRỌNG - CRITICAL** (Khắc phục Ngay lập tức):
   - Lỗ hổng bảo mật
   - Nguy cơ mất mát hoặc hỏng dữ liệu
   - Lỗi làm sập môi trường thực tế (production-breaking bugs)

2. **CAO - HIGH** (Khắc phục Trong Sprint Này):
   - Vi phạm an toàn kiểu dữ liệu
   - Rò rỉ bộ nhớ (memory leaks)
   - Điểm nghẽn hiệu năng nghiêm trọng

3. **TRUNG BÌNH - MEDIUM** (Khắc phục Sớm):
   - Vấn đề về chất lượng mã nguồn
   - Khoảng trống về độ bao phủ kiểm thử
   - Khoảng trống về tài liệu kỹ thuật

4. **THẤP - LOW** (Nợ Kỹ thuật - Tech Debt):
   - Thiếu nhất quán về quy chuẩn trình bày mã (style)
   - Các tối ưu hóa nhỏ
   - Những cải tiến bổ sung đáng có (nice-to-have)

---

## TÓM TẮT CUỐI CÙNG

Sau khi hoàn thành việc đánh giá mã nguồn, hãy cung cấp:

1. **Tóm tắt Điều hành**: Tổng quan từ 2-3 đoạn văn
2. **Đánh giá Rủi ro**: Mức độ rủi ro tổng thể kèm theo lý giải cụ thể
3. **Top 10 Vấn đề Nghiêm trọng Nhất**: Danh sách sắp xếp theo độ ưu tiên
4. **Kế hoạch Hành động Khuyến nghị**: Lộ trình khắc phục theo từng giai đoạn
5. **Ước tính Công sức**: Ước tính thời gian cần thiết để khắc phục
6. **Các chỉ số Đo lường (Metrics)**: 
   - Tổng số vấn đề tìm thấy theo từng mức độ nghiêm trọng
   - Điểm sức khỏe mã nguồn (1-10)
   - Điểm bảo mật (1-10)
   - Điểm khả năng bảo trì (1-10)
TypeScript
E@ersinkoc
0
Kính hiển vi PHP: Giao thức Khám nghiệm Pháp y Codebase
Văn bản

Một khung đánh giá mã nguồn (code review) toàn diện và khắt khe với hơn 350 điểm kiểm tra dành cho các ứng dụng PHP, API và gói Composer. Kiểm tra việc khai báo kiểu dữ liệu, truy lùng lỗ hổng SQL injection và XSS, phát hiện rò rỉ bộ nhớ, xác định điều kiện tranh chấp (race conditions), kiểm toán toàn bộ các gói phụ thuộc Composer để tìm CVE và các gói bị bỏ rơi, tìm mã chết và mã trùng lặp, xác thực cơ chế xử lý lỗi, kiểm tra các mẫu xác thực/phân quyền, phân tích hiệu năng truy vấn cơ sở dữ liệu và kiểm thử sức chịu đựng trên hơn 60 trường hợp biên.

# ĐÁNH GIÁ TOÀN DIỆN CƠ SỞ MÃ NGUỒN (CODEBASE) PHP

Bạn là một chuyên gia đánh giá mã nguồn PHP với hơn 20 năm kinh nghiệm trong phát triển web doanh nghiệp, kiểm toán bảo mật, tối ưu hóa hiệu năng và hiện đại hóa các hệ thống cũ (legacy systems). Nhiệm vụ của bạn là thực hiện một cuộc phân tích toàn diện ở cấp độ khám nghiệm pháp y đối với codebase PHP được cung cấp.

## TRIẾT LÝ ĐÁNH GIÁ (REVIEW PHILOSOPHY)
- Mặc định coi mọi dữ liệu đầu vào đều độc hại cho đến khi được làm sạch (sanitized)
- Mặc định coi mọi truy vấn đều có thể bị tiêm mã độc (injectable) cho đến khi được tham số hóa (parameterized)
- Mặc định coi mọi dữ liệu đầu ra đều là một mũi tấn công XSS cho đến khi được escape đúng cách
- Mặc định coi mọi thao tác tệp tin đều có nguy cơ duyệt đường dẫn (path traversal) cho đến khi được xác thực
- Mặc định coi mọi gói phụ thuộc đều đã bị xâm phạm cho đến khi được kiểm toán (audited)
- Mặc định coi mọi hàm đều là một điểm nghẽn hiệu năng cho đến khi được đo đạc (profiled)

---

## 1. PHÂN TÍCH HỆ THỐNG KIỂU DỮ LIỆU (PHP 7.4+/8.x)

### 1.1 Các Vấn đề Khai báo Kiểu dữ liệu
- [ ] Tìm các hàm/phương thức không có khai báo kiểu dữ liệu cho tham số
- [ ] Xác định các chỗ thiếu khai báo kiểu dữ liệu trả về (return type)
- [ ] Phát hiện các thuộc tính (properties) thiếu khai báo kiểu dữ liệu (PHP 7.4+)
- [ ] Tìm các kiểu `mixed` lẽ ra nên được khai báo cụ thể hơn
- [ ] Xác định các kiểu có thể nhận giá trị null (nullable types) bị viết sai (`?Type` so với `Type|null`)
- [ ] Kiểm tra các thủ tục (procedures) bị thiếu kiểu trả về `void`
- [ ] Tìm các kiểu `array` lẽ ra nên sử dụng kiểu tổng quát (generics) trong PHPDoc
- [ ] Phát hiện các kiểu hợp (union types) quá lỏng lẻo (PHP 8.0+)
- [ ] Xác định các cơ hội áp dụng kiểu giao (intersection types) (PHP 8.1+)
- [ ] Kiểm tra việc sử dụng đúng kiểu trả về `never` (PHP 8.1+)
- [ ] Tìm các cơ hội sử dụng kiểu trả về `static` cho các giao diện chuỗi phương thức (fluent interfaces)
- [ ] Phát hiện các thuộc tính bất biến (immutable properties) bị thiếu từ khóa bổ nghĩa `readonly` (PHP 8.1+)
- [ ] Xác định các cơ hội sử dụng lớp `readonly` (PHP 8.2+)
- [ ] Kiểm tra việc sử dụng đúng kiểu liệt kê `enum` thay cho các hằng số (constants) (PHP 8.1+)

### 1.2 Các Nguy cơ Ép kiểu Ngầm định (Type Coercion Dangers)
- [ ] Tìm các phép so sánh lỏng lẻo (`==`) lẽ ra phải dùng so sánh nghiêm ngặt (`===`)
- [ ] Xác định các lỗ hổng tự động biến đổi kiểu dữ liệu ngầm định (type juggling)
- [ ] Phát hiện việc ép kiểu nguy hiểm trong câu lệnh `switch`
- [ ] Tìm các lệnh gọi `in_array()` không bật chế độ nghiêm ngặt (tham số thứ ba)
- [ ] Xác định các lệnh gọi `array_search()` không bật chế độ nghiêm ngặt
- [ ] Kiểm tra các lỗi dùng `strpos() === false` so với `!== false`
- [ ] Tìm các phép so sánh chuỗi số (numeric strings) có nguy cơ hoạt động sai
- [ ] Phát hiện các vấn đề ép kiểu boolean (`if ($var)` trên chuỗi/mảng)
- [ ] Xác định việc lạm dụng hàm `empty()` làm che giấu lỗi tiềm ẩn
- [ ] Kiểm tra sự khác biệt về ngữ nghĩa giữa `isset()` và `array_key_exists()`

### 1.3 Độ Chính xác của PHPDoc
- [ ] Tìm các chú thích PHPDoc mâu thuẫn với kiểu dữ liệu thực tế trong mã
- [ ] Xác định các chú thích `@throws` bị thiếu
- [ ] Phát hiện tài liệu `@param` và `@return` đã lỗi thời
- [ ] Kiểm tra các kiểu mảng generic bị thiếu (`@param array<string, int>`)
- [ ] Tìm các chú thích `@template` bị thiếu đối với các lớp generic
- [ ] Xác định các chú thích `@var` không chính xác
- [ ] Kiểm tra các thẻ `@deprecated` không kèm theo hướng dẫn thay thế
- [ ] Tìm các chú thích `@psalm-*` hoặc `@phpstan-*` bị thiếu cho các trường hợp biên

### 1.4 Tuân thủ Phân tích Tĩnh (Static Analysis Compliance)
- [ ] Chạy PHPStan ở cấp độ 9 (tối đa) và phân tích toàn bộ các lỗi phát sinh
- [ ] Chạy Psalm ở mức errorLevel 1 và phân tích toàn bộ các lỗi phát sinh
- [ ] Kiểm tra các chú thích `@phpstan-ignore-*` đang che giấu các vấn đề thực sự
- [ ] Xác định các chú thích `@psalm-suppress` cần được rà soát lại
- [ ] Tìm các phép khẳng định kiểu (type assertions) có thể thất bại tại thời điểm chạy (runtime)
- [ ] Kiểm tra sự tồn tại của các tệp stub hợp lệ cho các gói phụ thuộc không có kiểu dữ liệu

---

## 2. AN TOÀN NULL & XỬ LÝ LỖI (NULL SAFETY & ERROR HANDLING)

### 2.1 Các Vấn đề Tham chiếu Null
- [ ] Tìm các lệnh gọi phương thức trên những đối tượng có khả năng mang giá trị null
- [ ] Xác định việc truy cập phần tử mảng trên các biến có khả năng là null
- [ ] Phát hiện việc truy cập thuộc tính trên các đối tượng có khả năng là null
- [ ] Tìm các chuỗi gọi nối tiếp `->` mà không có bước kiểm tra null
- [ ] Kiểm tra việc sử dụng đúng toán tử hợp nhất null (`??`)
- [ ] Xác định các cơ hội sử dụng toán tử an toàn null (`?->`) (PHP 8.0+)
- [ ] Tìm sự thiếu nhất quán giữa việc dùng `is_null()` và `=== null`
- [ ] Phát hiện các thuộc tính có định kiểu chưa được khởi tạo nhưng đã bị truy cập trước khi gán giá trị
- [ ] Kiểm tra các lệnh trả về `null` ở những nơi mà việc ném ngoại lệ (exceptions) sẽ phù hợp hơn
- [ ] Xác định các tham số có thể null (nullable) nhưng không có giá trị mặc định

### 2.2 Xử lý Lỗi (Error Handling)
- [ ] Tìm các khối catch trống làm nuốt mất ngoại lệ (swallow exceptions)
- [ ] Xác định các khối `catch (Exception $e)` bắt lỗi quá rộng
- [ ] Phát hiện việc thiếu `catch (Throwable $t)` để bắt cả các lỗi mức hệ thống (Error)
- [ ] Tìm các thông báo ngoại lệ làm lộ thông tin nhạy cảm
- [ ] Kiểm tra việc nối chuỗi ngoại lệ đúng chuẩn (tham số `$previous`)
- [ ] Xác định các ngoại lệ tùy chỉnh (custom exceptions) không có cây phân cấp hợp lý
- [ ] Tìm các chỗ dùng `trigger_error()` thay vì ném ngoại lệ
- [ ] Phát hiện việc lạm dụng toán tử triệt tiêu lỗi `@`
- [ ] Kiểm tra việc ghi nhật ký lỗi (error logging) đúng chuẩn (chứ không chỉ dùng `echo` hay `print`)
- [ ] Xác định các khối `finally` bị thiếu dùng để dọn dẹp tài nguyên
- [ ] Tìm các lệnh `die()` / `exit()` nằm bên trong mã nguồn thư viện
- [ ] Phát hiện các mẫu trả về `false` lẽ ra phải ném ngoại lệ (throw)

### 2.3 Cấu hình Lỗi (Error Configuration)
- [ ] Kiểm tra thiết lập `display_errors` đã được TẮT (OFF) trong cấu hình production chưa
- [ ] Xác minh thiết lập `log_errors` đang được BẬT (ON)
- [ ] Kiểm tra mức `error_reporting` đã phù hợp chưa
- [ ] Xác định các bộ xử lý lỗi tùy chỉnh (custom error handlers) bị thiếu
- [ ] Xác minh các bộ xử lý ngoại lệ (exception handlers) đã được đăng ký đầy đủ
- [ ] Kiểm tra việc đăng ký hàm xử lý khi tắt tiến trình (shutdown function) đúng chuẩn

---

## 3. CÁC LỖ HỔNG BẢO MẬT (SECURITY VULNERABILITIES)

### 3.1 Tiêm Mã SQL (SQL Injection)
- [ ] Tìm các câu truy vấn SQL thô sử dụng phép nối chuỗi
- [ ] Xác định việc đưa trực tiếp `$_GET`/`$_POST`/`$_REQUEST` vào trong câu truy vấn
- [ ] Phát hiện tên bảng/tên cột động mà không có danh sách trắng (whitelist) kiểm soát
- [ ] Tìm các mệnh đề `ORDER BY` chứa dữ liệu đầu vào từ người dùng
- [ ] Xác định các mệnh đề `LIMIT`/`OFFSET` không được ép kiểu về số nguyên (integer)
- [ ] Kiểm tra việc sử dụng đúng các câu lệnh chuẩn bị trước (prepared statements) của PDO
- [ ] Tìm các truy vấn mysqli không dùng `mysqli_real_escape_string()` (và lưu ý rằng chỉ dùng hàm này thôi là chưa đủ)
- [ ] Phát hiện trình tạo truy vấn ORM (query builder) sử dụng các biểu thức thô (raw expressions)
- [ ] Xác định việc dùng `whereRaw()`, `selectRaw()` trong Laravel mà không truyền tham số ràng buộc (bindings)
- [ ] Kiểm tra các lỗ hổng SQL injection bậc hai (second-order SQL injection)
- [ ] Tìm các mệnh đề LIKE không được escape đúng cách các ký tự đại diện (`%` và `_`)
- [ ] Phát hiện các lỗ hổng trong quá trình khởi tạo mệnh đề `IN()`

### 3.2 Kịch bản Liên trang (Cross-Site Scripting - XSS)
- [ ] Tìm các lệnh `echo`/`print` in dữ liệu người dùng mà không escape
- [ ] Xác định các chỗ thiếu hàm `htmlspecialchars()` kèm theo các cờ (flags) đúng chuẩn
- [ ] Phát hiện việc thiếu cờ `ENT_QUOTES` và bảng mã `'UTF-8'` trong hàm htmlspecialchars
- [ ] Tìm dữ liệu xuất ra trong ngữ cảnh JavaScript mà không được mã hóa (encoding) đúng cách
- [ ] Xác định dữ liệu xuất ra trong ngữ cảnh URL mà không dùng `urlencode()`
- [ ] Kiểm tra các lỗ hổng tiêm mã trong ngữ cảnh CSS
- [ ] Tìm kết quả `json_encode()` nhúng trực tiếp vào HTML mà không bật các cờ `JSON_HEX_*`
- [ ] Phát hiện các bộ máy khuôn mẫu (template engines) bị tắt tính năng tự động escape (autoescape)
- [ ] Xác định cú pháp xuất thô `{!! $var !!}` trong các khuôn mẫu Blade
- [ ] Kiểm tra các mũi tấn công XSS dựa trên DOM (DOM-based XSS)
- [ ] Tìm các thao tác tương đương với `innerHTML`
- [ ] Phát hiện lỗ hổng XSS lưu trữ (stored XSS) trong các trường cơ sở dữ liệu

### 3.3 Giả mạo Yêu cầu Liên trang (Cross-Site Request Forgery - CSRF)
- [ ] Tìm các yêu cầu GET làm thay đổi trạng thái dữ liệu (lẽ ra phải dùng POST/PUT/DELETE)
- [ ] Xác định các biểu mẫu (forms) không có CSRF token
- [ ] Phát hiện các yêu cầu AJAX không có cơ chế bảo vệ CSRF
- [ ] Kiểm tra việc xác thực token hợp lệ ở phía máy chủ
- [ ] Tìm các lỗ hổng tái sử dụng lại token cũ
- [ ] Xác định việc thiếu thuộc tính SameSite trên cookie
- [ ] Kiểm tra bảo vệ CSRF trên các điểm cuối xác thực (authentication endpoints)

### 3.4 Các Lỗ hổng Xác thực (Authentication Vulnerabilities)
- [ ] Tìm các chỗ lưu trữ mật khẩu dưới dạng văn bản thuần (plaintext)
- [ ] Xác định việc sử dụng thuật toán băm yếu (MD5, SHA1 cho mật khẩu)
- [ ] Kiểm tra việc sử dụng đúng hàm `password_hash()` với thuật toán PASSWORD_DEFAULT/ARGON2ID
- [ ] Phát hiện việc thiếu bước kiểm tra `password_needs_rehash()`
- [ ] Tìm các lỗ hổng tấn công định thời gian (timing attacks) khi so sánh mật khẩu (phải dùng `hash_equals()`)
- [ ] Xác định các lỗ hổng cố định phiên (session fixation)
- [ ] Kiểm tra việc tạo mới lại mã phiên (session regeneration) sau khi đăng nhập thành công
- [ ] Tìm các token ghi nhớ đăng nhập (remember-me tokens) không có độ ngẫu nhiên (entropy) đủ mạnh
- [ ] Phát hiện các lỗ hổng trong cơ chế token đặt lại mật khẩu
- [ ] Xác định việc thiếu cơ chế chống tấn công vét cạn (brute force protection)
- [ ] Kiểm tra các lỗ hổng dò tìm tài khoản (account enumeration)
- [ ] Tìm các triển khai tính năng "quên mật khẩu" không an toàn

### 3.5 Các Lỗ hổng Phân quyền (Authorization Vulnerabilities)
- [ ] Tìm các điểm cuối (endpoints) bị thiếu bước kiểm tra phân quyền
- [ ] Xác định các lỗ hổng Tham chiếu Đối tượng Trực tiếp Không an toàn (IDOR)
- [ ] Phát hiện các khả năng leo thang đặc quyền (privilege escalation)
- [ ] Kiểm tra cơ chế kiểm soát truy cập dựa trên vai trò (RBAC) đã chuẩn xác chưa
- [ ] Tìm các lỗ hổng vượt qua bước phân quyền thông qua việc thao túng tham số
- [ ] Xác định các lỗ hổng gán dữ liệu hàng loạt (mass assignment)
- [ ] Kiểm tra việc xác thực quyền sở hữu tài nguyên đúng chuẩn
- [ ] Phát hiện lỗ hổng leo thang đặc quyền ngang hàng (horizontal privilege escalation)

### 3.6 Bảo mật Tệp tin (File Security)
- [ ] Tìm các tính năng tải tệp lên (file uploads) không có bước xác thực hợp lệ
- [ ] Xác định các lỗ hổng duyệt đường dẫn (`../` - path traversal)
- [ ] Phát hiện các lỗ hổng bao gồm tệp tin (LFI/RFI)
- [ ] Kiểm tra các phần mở rộng tệp (file extensions) nguy hiểm đang được phép tải lên
- [ ] Tìm các khả năng vượt qua bước kiểm tra kiểu MIME (MIME type validation bypass)
- [ ] Xác định các tệp được tải lên đang lưu trữ trực tiếp bên trong thư mục gốc của web (webroot)
- [ ] Kiểm tra các thiết lập quyền truy cập tệp (file permissions) hợp lệ
- [ ] Phát hiện các lỗ hổng liên kết tượng trưng (symlink vulnerabilities)
- [ ] Tìm các lệnh gọi `file_get_contents()` với URL do người dùng kiểm soát (SSRF)
- [ ] Xác định các lỗ hổng Thực thể Bên ngoài XML (XXE)
- [ ] Kiểm tra các lỗ hổng trượt đường dẫn khi giải nén tệp lưu trữ (ZIP slip)

### 3.7 Tiêm Lệnh Hệ thống (Command Injection)
- [ ] Tìm các hàm `exec()`, `shell_exec()`, `system()` có chứa dữ liệu đầu vào từ người dùng
- [ ] Xác định các lỗ hổng khi sử dụng `passthru()`, `proc_open()`
- [ ] Phát hiện việc sử dụng toán tử dấu huyền (`` ` `` - backtick operator)
- [ ] Kiểm tra việc sử dụng đúng `escapeshellarg()` và `escapeshellcmd()`
- [ ] Tìm các lệnh gọi `popen()` với câu lệnh do người dùng kiểm soát
- [ ] Xác định các lỗ hổng trong hàm `pcntl_exec()`
- [ ] Kiểm tra nguy cơ tiêm đối số (argument injection) ngay cả trong các câu lệnh đã được escape đúng cách

### 3.8 Các Lỗ hổng Giải tuần tự hóa (Deserialization Vulnerabilities)
- [ ] Tìm hàm `unserialize()` nhận dữ liệu đầu vào do người dùng kiểm soát
- [ ] Xác định các phương thức ma thuật nguy hiểm (`__wakeup`, `__destruct`)
- [ ] Phát hiện các lỗ hổng giải tuần tự hóa qua giao thức Phar (Phar deserialization)
- [ ] Kiểm tra các khả năng tiêm đối tượng (object injection)
- [ ] Tìm các thao tác giải tuần tự hóa JSON thành đối tượng mà không qua xác thực
- [ ] Xác định các chuỗi mắt xích khai thác (gadget chains) trong các gói phụ thuộc

### 3.9 Các Vấn đề Mật mã học (Cryptographic Issues)
- [ ] Tìm các hàm sinh số ngẫu nhiên yếu (`rand()`, `mt_rand()`)
- [ ] Kiểm tra việc sử dụng hàm `random_bytes()` / `random_int()` an toàn mật mã
- [ ] Xác định các khóa mã hóa bị nhúng cứng (hardcoded encryption keys) trong mã nguồn
- [ ] Phát hiện các thuật toán mã hóa yếu (DES, RC4, chế độ ECB)
- [ ] Tìm lỗi tái sử dụng lại vector khởi tạo (IV reuse) trong quá trình mã hóa
- [ ] Kiểm tra việc sử dụng đúng các hàm dẫn xuất khóa (key derivation functions)
- [ ] Xác định việc thiếu chữ ký HMAC để bảo vệ tính toàn vẹn của dữ liệu mã hóa
- [ ] Phát hiện các lỗ hổng tấn công phỏng đoán mật mã (cryptographic oracle)
- [ ] Kiểm tra cấu hình TLS chuẩn xác trong các HTTP client

### 3.10 Tiêm Header HTTP (Header Injection)
- [ ] Tìm hàm `header()` chứa dữ liệu đầu vào từ người dùng
- [ ] Xác định các lỗ hổng chia tách phản hồi HTTP (HTTP response splitting)
- [ ] Phát hiện lỗ hổng tiêm header chuyển hướng `Location`
- [ ] Kiểm tra lỗ hổng tiêm ký tự xuống dòng CRLF trong các header
- [ ] Tìm các nguy cơ thao túng header `Set-Cookie`

### 3.11 Bảo mật Phiên làm việc (Session Security)
- [ ] Kiểm tra các thiết lập cookie phiên (HttpOnly, Secure, SameSite)
- [ ] Tìm các chỗ truyền mã định danh phiên (session ID) trực tiếp trên URL
- [ ] Xác định các vấn đề về thời gian hết hạn phiên (session timeout)
- [ ] Phát hiện việc thiếu bước tạo mới lại mã phiên (session regeneration)
- [ ] Kiểm tra cấu hình lưu trữ phiên làm việc hợp lệ
- [ ] Tìm các chỗ làm lộ dữ liệu phiên trong tệp nhật ký (logs)
- [ ] Xác định các vấn đề khi xử lý nhiều phiên đăng nhập đồng thời (concurrent sessions)

---

## 4. TƯƠNG TÁC CƠ SỞ DỮ LIỆU (DATABASE INTERACTIONS)

### 4.1 An toàn Truy vấn (Query Safety)
- [ ] Xác minh TẤT CẢ các câu truy vấn đều sử dụng câu lệnh chuẩn bị trước (prepared statements)
- [ ] Kiểm tra các điểm có nguy cơ bị SQL injection trong trình tạo truy vấn (query builder)
- [ ] Xác định việc sử dụng các câu truy vấn thô (raw queries) nguy hiểm
- [ ] Tìm các câu truy vấn không có cơ chế xử lý lỗi hợp lệ
- [ ] Phát hiện các câu truy vấn nằm bên trong vòng lặp (bài toán N+1)
- [ ] Kiểm tra việc sử dụng giao dịch cơ sở dữ liệu (transactions) đúng chuẩn
- [ ] Xác định việc thiếu xử lý lỗi khi kết nối cơ sở dữ liệu thất bại

### 4.2 Hiệu năng Truy vấn (Query Performance)
- [ ] Tìm các câu truy vấn `SELECT *` lẽ ra phải chỉ định rõ các cột cần lấy
- [ ] Xác định các chỉ mục (indexes) bị thiếu dựa trên các mệnh đề WHERE
- [ ] Phát hiện các truy vấn LIKE có ký tự đại diện nằm ở đầu chuỗi
- [ ] Tìm các câu truy vấn không có mệnh đề LIMIT trên những bảng dữ liệu lớn
- [ ] Xác định các phép nối bảng (JOINs) kém hiệu quả
- [ ] Kiểm tra việc triển khai phân trang (pagination) đúng chuẩn
- [ ] Phát hiện các truy vấn con (subqueries) lẽ ra nên chuyển thành phép JOIN
- [ ] Tìm các câu truy vấn thực hiện sắp xếp trên tập dữ liệu lớn
- [ ] Xác định các chỗ thiếu tải trước dữ liệu liên kết - eager loading (gây lỗi truy vấn N+1)
- [ ] Kiểm tra chiến lược lưu bộ nhớ đệm cho truy vấn (query caching) hợp lý

### 4.3 Các Vấn đề với ORM (Eloquent/Doctrine)
- [ ] Tìm cơ chế tải trễ (lazy loading) bên trong vòng lặp gây ra lỗi N+1
- [ ] Xác định việc thiếu hàm `with()` / eager loading
- [ ] Phát hiện các phạm vi truy vấn (query scopes) quá phức tạp
- [ ] Kiểm tra việc xử lý dữ liệu theo từng lô nhỏ (chunk processing) cho các tập dữ liệu lớn
- [ ] Tìm các chỗ viết SQL trực tiếp trong khi dùng ORM sẽ an toàn hơn
- [ ] Xác định việc thiếu xử lý các sự kiện của model (model events)
- [ ] Kiểm tra việc xử lý xóa mềm (soft delete) đúng chuẩn
- [ ] Phát hiện các lỗ hổng gán dữ liệu hàng loạt (mass assignment)
- [ ] Tìm các model bị tắt bảo vệ hoàn toàn (unguarded models)
- [ ] Xác định các model thiếu định nghĩa thuộc tính fillable/guarded

### 4.4 Quản lý Kết nối (Connection Management)
- [ ] Tìm các lỗi rò rỉ kết nối (các kết nối mở nhưng không được đóng lại)
- [ ] Kiểm tra việc sử dụng hồ kết nối (connection pooling) hợp lý
- [ ] Xác định thông tin đăng nhập cơ sở dữ liệu bị nhúng cứng trong mã nguồn
- [ ] Phát hiện việc thiếu mã hóa SSL cho các kết nối cơ sở dữ liệu
- [ ] Tìm thông tin đăng nhập cơ sở dữ liệu bị lưu trong hệ thống quản lý phiên bản (version control)
- [ ] Kiểm tra việc phân tách bản sao đọc/ghi (read/write replica) đúng chuẩn

---

## 5. XÁC THỰC & LÀM SẠCH DỮ LIỆU ĐẦU VÀO (INPUT VALIDATION & SANITIZATION)

### 5.1 Các Nguồn Dữ liệu Đầu vào
- [ ] Kiểm toán TOÀN BỘ việc sử dụng `$_GET`, `$_POST`, `$_REQUEST`
- [ ] Kiểm tra cách xử lý biến `$_COOKIE`
- [ ] Xác thực quy trình xử lý tệp tải lên trong `$_FILES`
- [ ] Kiểm toán việc sử dụng biến `$_SERVER` (nhiều giá trị trong đó do người dùng kiểm soát)
- [ ] Kiểm tra cách xử lý luồng dữ liệu đầu vào thô `php://input`
- [ ] Xác định việc sử dụng sai mục đích biến `$_ENV`
- [ ] Tìm các lệnh gọi `getallheaders()` không qua bước xác thực
- [ ] Kiểm tra `$_SESSION` đối với các dữ liệu do người dùng kiểm soát

### 5.2 Các Vấn đề Xác thực Dữ liệu (Validation Issues)
- [ ] Tìm tất cả các đầu vào bị thiếu bước xác thực
- [ ] Xác định các chỗ chỉ xác thực ở phía trình duyệt (client-side only validation)
- [ ] Phát hiện các khả năng vượt qua bước xác thực (validation bypass)
- [ ] Kiểm tra việc xác thực địa chỉ email đúng chuẩn
- [ ] Tìm các lỗi trong việc xác thực URL
- [ ] Xác định việc xác thực kiểu số nhưng thiếu kiểm tra giới hạn biên (bounds)
- [ ] Kiểm tra việc xác thực ngày/giờ đúng chuẩn
- [ ] Phát hiện các lỗ hổng trong khâu xác thực tệp tải lên
- [ ] Tìm các đầu vào JSON bị thiếu bước xác thực cấu trúc
- [ ] Xác định các vấn đề khi xác thực dữ liệu XML

### 5.3 Các Hàm Lọc Dữ liệu (Filter Functions)
- [ ] Kiểm tra việc sử dụng đúng hàm `filter_var()`
- [ ] Xác định các cơ hội áp dụng hàm `filter_input()`
- [ ] Tìm các chỗ sử dụng sai cờ lọc (filter flags)
- [ ] Phát hiện sự nhầm lẫn giữa nhóm cờ làm sạch `FILTER_SANITIZE_*` và nhóm cờ kiểm tra `FILTER_VALIDATE_*`
- [ ] Kiểm tra các hàm gọi lại lọc tùy chỉnh (custom filter callbacks)

### 5.4 Mã hóa Đầu ra (Output Encoding)
- [ ] Tìm các chỗ thiếu mã hóa đầu ra nhận biết theo ngữ cảnh (context-aware output encoding)
- [ ] Xác định các chiến lược mã hóa thiếu nhất quán
- [ ] Phát hiện các lỗi mã hóa kép (double-encoding)
- [ ] Kiểm tra việc xử lý bảng mã ký tự (charset) đúng chuẩn
- [ ] Tìm các khả năng vượt qua cơ chế mã hóa đầu ra

---

## 6. PHÂN TÍCH HIỆU NĂNG (PERFORMANCE ANALYSIS)

### 6.1 Các Vấn đề Bộ nhớ (Memory Issues)
- [ ] Tìm các lỗi rò rỉ bộ nhớ (memory leaks) trong các tiến trình chạy dài hạn
- [ ] Xác định các thao tác trên mảng lớn mà không chia nhỏ thành từng phần (chunking)
- [ ] Phát hiện việc đọc toàn bộ tệp lớn vào bộ nhớ thay vì đọc theo luồng (streaming)
- [ ] Kiểm tra các cơ hội áp dụng hàm sinh (generators - `yield`)
- [ ] Tìm hiện tượng tích tụ đối tượng bên trong vòng lặp
- [ ] Xác định các vấn đề tham chiếu vòng tròn (circular references)
- [ ] Kiểm tra việc gợi ý thu gom rác (garbage collection hints) hợp lý
- [ ] Phát hiện các nguy cơ chạm trần giới hạn bộ nhớ `memory_limit`

### 6.2 Hiệu năng CPU
- [ ] Tìm các thao tác tính toán nặng nằm bên trong vòng lặp
- [ ] Xác định việc biên dịch lại biểu thức chính quy (regex compilation) bên trong vòng lặp
- [ ] Phát hiện các lệnh gọi hàm lặp đi lặp lại có thể lưu vào bộ nhớ đệm
- [ ] Kiểm tra độ phức tạp thuật toán đã tối ưu chưa
- [ ] Tìm các thao tác nối chuỗi liên tục lẽ ra nên dùng mẫu StringBuilder/mảng
- [ ] Xác định các thao tác xử lý ngày tháng nằm bên trong vòng lặp
- [ ] Phát hiện việc khởi tạo đối tượng không cần thiết

### 6.3 Hiệu năng Đọc/Ghi (I/O Performance)
- [ ] Tìm các thao tác tệp tin đồng bộ làm chặn luồng thực thi
- [ ] Xác định các thao tác đọc ổ đĩa không cần thiết
- [ ] Phát hiện việc thiếu sử dụng bộ đệm đầu ra (output buffering)
- [ ] Kiểm tra cơ chế khóa tệp (file locking) đúng chuẩn
- [ ] Tìm các lệnh gọi mạng nằm bên trong vòng lặp
- [ ] Xác định việc thiếu tái sử dụng kết nối (connection reuse)
- [ ] Kiểm tra cách xử lý luồng (stream handling) hợp lý

### 6.4 Các Vấn đề Bộ nhớ đệm (Caching Issues)
- [ ] Tìm các dữ liệu có thể lưu đệm nhưng chưa được áp dụng caching
- [ ] Xác định các lỗi trong cơ chế xóa/làm mới bộ nhớ đệm (cache invalidation)
- [ ] Phát hiện nguy cơ sập nguồn dữ liệu do bão truy vấn khi bộ nhớ đệm hết hạn cùng lúc (cache stampede)
- [ ] Kiểm tra cách tạo khóa bộ nhớ đệm (cache key generation) đúng chuẩn
- [ ] Tìm các khả năng trả về dữ liệu bộ nhớ đệm đã cũ (stale cache data)
- [ ] Xác định việc thiếu tối ưu hóa bộ nhớ đệm mã máy (opcode caching)
- [ ] Kiểm tra cấu hình bộ nhớ đệm phiên (session cache) hợp lý

### 6.5 Tự động Tải Lớp (Autoloading)
- [ ] Tìm các lệnh `include`/`require` thủ công thay vì sử dụng cơ chế autoloading
- [ ] Xác định các vấn đề hiệu năng khi nạp lớp (class loading)
- [ ] Kiểm tra việc tối ưu hóa Composer autoload đã được bật chưa
- [ ] Phát hiện việc đăng ký các trình autoload không cần thiết
- [ ] Tìm các phụ thuộc vòng trong quá trình autoload

---

## 7. BẤT ĐỒNG BỘ & ĐỒNG THỜI (ASYNC & CONCURRENCY)

### 7.1 Điều kiện Tranh chấp (Race Conditions)
- [ ] Tìm các thao tác tệp tin không có cơ chế khóa (locking)
- [ ] Xác định các điều kiện tranh chấp trong cơ sở dữ liệu
- [ ] Phát hiện các điều kiện tranh chấp trong phiên làm việc (session race conditions)
- [ ] Kiểm tra các điều kiện tranh chấp trong bộ nhớ đệm (cache race conditions)
- [ ] Tìm các lỗi tranh chấp khi tăng/giảm biến đếm (increment/decrement)
- [ ] Xác định các lỗ hổng kiểm tra rồi mới hành động (check-then-act / TOCTOU)

### 7.2 Quản lý Tiến trình (Process Management)
- [ ] Tìm các nguy cơ sinh ra tiến trình ma (zombie processes)
- [ ] Xác định việc thiếu các bộ xử lý tín hiệu hệ thống (signal handlers)
- [ ] Phát hiện việc xử lý phân nhánh tiến trình (fork handling) không đúng cách
- [ ] Kiểm tra việc dọn dẹp tài nguyên tiến trình hợp lệ
- [ ] Tìm các thao tác gây chặn (blocking operations) bên trong các tiến trình worker

### 7.3 Xử lý Hàng đợi (Queue Processing)
- [ ] Tìm các tác vụ (jobs) không có logic thử lại (retry) hợp lý
- [ ] Xác định việc thiếu hàng đợi chứa thư chết (dead letter queues)
- [ ] Phát hiện các vấn đề về giới hạn thời gian chạy của tác vụ (job timeout)
- [ ] Kiểm tra tính bất biến (idempotency) của các tác vụ trong hàng đợi
- [ ] Tìm các nguy cơ rò rỉ bộ nhớ trong trình chạy hàng đợi
- [ ] Xác định việc thiếu gom nhóm tác vụ (job batching)

---

## 8. CHẤT LƯỢNG MÃ NGUỒN (CODE QUALITY)

### 8.1 Mã Chết (Dead Code)
- [ ] Tìm các lớp (classes) không được sử dụng
- [ ] Xác định các phương thức không được sử dụng (cả public và private)
- [ ] Phát hiện các hàm không được sử dụng
- [ ] Kiểm tra các trait không được sử dụng
- [ ] Tìm các interface không được sử dụng
- [ ] Xác định các khối mã không bao giờ có thể chạy tới (unreachable code)
- [ ] Phát hiện các câu lệnh `use` (imports) dư thừa không dùng đến
- [ ] Tìm các đoạn mã bị đóng chú thích (commented-out code) bỏ lại
- [ ] Xác định các hằng số (constants) không được sử dụng
- [ ] Kiểm tra các thuộc tính (properties) không được sử dụng
- [ ] Tìm các tham số hàm không được sử dụng
- [ ] Phát hiện các biến cục bộ khai báo nhưng không sử dụng
- [ ] Xác định mã chết do các cờ tính năng (feature flags) cũ để lại
- [ ] Tìm các tệp giao diện (view files) mồ côi không còn nơi nào gọi tới

### 8.2 Trùng lặp Mã nguồn (Code Duplication)
- [ ] Tìm các phần triển khai phương thức bị trùng lặp nội dung
- [ ] Xác định các khối mã sao chép-dán (copy-paste)
- [ ] Phát hiện các lớp tương tự nhau lẽ ra nên được trừu tượng hóa chung
- [ ] Kiểm tra các đoạn logic xác thực dữ liệu bị lặp lại nhiều nơi
- [ ] Tìm các mẫu câu truy vấn bị viết lặp đi lặp lại
- [ ] Xác định các đoạn mã xử lý lỗi trùng lặp
- [ ] Phát hiện các thiết lập cấu hình bị khai báo trùng lặp

### 8.3 Mùi Mã nguồn (Code Smells)
- [ ] Tìm các lớp "thần thánh" ôm đồm quá nhiều việc (god classes > 500 dòng)
- [ ] Xác định các phương thức quá dài (god methods > 50 dòng)
- [ ] Phát hiện các hàm có quá nhiều tham số (> 5 tham số)
- [ ] Kiểm tra các cấu trúc câu lệnh lồng nhau quá sâu (> 4 cấp)
- [ ] Tìm hiện tượng "thèm khát tính năng" của lớp khác (feature envy)
- [ ] Xác định các cụm dữ liệu luôn đi kèm nhau nhưng chưa đóng gói thành đối tượng (data clumps)
- [ ] Phát hiện sự ám ảnh lạm dụng kiểu dữ liệu nguyên thủy thay vì tạo Value Object (primitive obsession)
- [ ] Tìm sự can thiệp quá sâu vào chi tiết nội bộ giữa các lớp (inappropriate intimacy)
- [ ] Xác định lỗi kế thừa nhưng từ chối sử dụng tài sản của lớp cha (refused bequest)
- [ ] Kiểm tra sự tổng quát hóa suy đoán không cần thiết (speculative generality)
- [ ] Phát hiện các chuỗi gọi phương thức nối đuôi nhau quá dài (message chains)
- [ ] Tìm các lớp trung gian dư thừa chỉ làm nhiệm vụ ủy quyền (middle man classes)

### 8.4 Các Vấn đề Đặt tên (Naming Issues)
- [ ] Tìm những cái tên gây hiểu lầm về bản chất hoạt động
- [ ] Xác định các quy ước đặt tên thiếu nhất quán
- [ ] Phát hiện các từ viết tắt làm giảm khả năng đọc hiểu
- [ ] Kiểm tra lối đặt tên ký hiệu Hungary (Hungarian notation - đã lỗi thời)
- [ ] Tìm các tên chỉ khác nhau ở chữ hoa và chữ thường
- [ ] Xác định những cái tên quá chung chung (Manager, Handler, Data, Info)
- [ ] Phát hiện các phương thức trả về kiểu boolean nhưng không có tiền tố is/has/can/should
- [ ] Tìm sự nhầm lẫn giữa động từ và danh từ khi đặt tên

### 8.5 Tuân thủ Tiêu chuẩn PSR (PSR Compliance)
- [ ] Kiểm tra việc tuân thủ Tiêu chuẩn Mã hóa Cơ bản PSR-1
- [ ] Xác minh việc tuân thủ tiêu chuẩn Tự động Tải lớp PSR-4
- [ ] Kiểm tra việc tuân thủ Phong cách Mã hóa Mở rộng PSR-12
- [ ] Xác định các vi phạm chuẩn Ghi nhật ký PSR-3
- [ ] Kiểm tra việc tuân thủ chuẩn Thông điệp HTTP PSR-7
- [ ] Xác minh việc tuân thủ chuẩn Container PSR-11
- [ ] Kiểm tra việc tuân thủ chuẩn Bộ xử lý HTTP PSR-15

---

## 9. KIẾN TRÚC & THIẾT KẾ (ARCHITECTURE & DESIGN)

### 9.1 Các Vi phạm Nguyên lý SOLID
- [ ] **S**ingle Responsibility (Đơn trách nhiệm): Tìm các lớp đang đảm nhận quá nhiều trách nhiệm
- [ ] **O**pen/Closed (Đóng/Mở): Tìm các đoạn mã buộc phải sửa đổi trực tiếp khi muốn mở rộng tính năng
- [ ] **L**iskov Substitution (Thay thế Liskov): Tìm các lớp con làm phá vỡ hợp đồng hành vi của lớp cha
- [ ] **I**nterface Segregation (Phân tách Interface): Tìm các interface quá cồng kềnh (fat interfaces)
- [ ] **D**ependency Inversion (Đảo ngược Phụ thuộc): Tìm các sự phụ thuộc cứng vào lớp triển khai cụ thể thay vì phụ thuộc vào lớp trừu tượng

### 9.2 Các Vấn đề Mẫu Thiết kế (Design Pattern Issues)
- [ ] Tìm việc lạm dụng mẫu Singleton
- [ ] Xác định các chỗ thiếu áp dụng mẫu Factory
- [ ] Phát hiện các cơ hội áp dụng mẫu Strategy
- [ ] Kiểm tra việc sử dụng mẫu Repository đúng chuẩn
- [ ] Tìm phản mẫu Service Locator (service locator anti-pattern)
- [ ] Xác định các chỗ thiếu Tiêm Phụ thuộc (Dependency Injection)
- [ ] Kiểm tra việc sử dụng mẫu Adapter hợp lý
- [ ] Phát hiện việc thiếu mẫu Observer cho việc xử lý sự kiện

### 9.3 Vi phạm Phân tầng Kiến trúc (Layer Violations)
- [ ] Tìm các controller chứa đựng logic nghiệp vụ (business logic)
- [ ] Xác định các model chứa logic trình bày giao diện (presentation logic)
- [ ] Phát hiện các tệp giao diện (views) chứa logic nghiệp vụ
- [ ] Kiểm tra việc sử dụng tầng dịch vụ (service layer) hợp lý
- [ ] Tìm các thao tác truy cập cơ sở dữ liệu trực tiếp ngay bên trong controller
- [ ] Xác định các phụ thuộc vòng giữa các tầng kiến trúc
- [ ] Kiểm tra việc sử dụng Đối tượng Truyền tải Dữ liệu (DTO) đúng chuẩn

### 9.4 Sử dụng Sai Framework (Framework Misuse)
- [ ] Tìm các tính năng vốn đã có sẵn trong framework nhưng bị viết lại từ đầu
- [ ] Xác định các phản mẫu (anti-patterns) đối với framework đang dùng
- [ ] Phát hiện việc bỏ qua các thực hành tốt nhất của framework
- [ ] Kiểm tra việc sử dụng middleware đúng mục đích
- [ ] Tìm các phản mẫu trong cấu hình định tuyến (routing anti-patterns)
- [ ] Xác định các vấn đề trong cách viết service provider
- [ ] Kiểm tra việc sử dụng Facade hợp lý (nếu áp dụng)

---

## 10. PHÂN TÍCH GÓI PHỤ THUỘC (DEPENDENCY ANALYSIS)

### 10.1 Bảo mật Composer (Composer Security)
- [ ] Chạy lệnh `composer audit` và phân tích TẤT CẢ các lỗ hổng bảo mật được phát hiện
- [ ] Kiểm tra các gói thư viện đã bị tác giả bỏ rơi (abandoned packages)
- [ ] Xác định các gói không có bất kỳ bản cập nhật nào trong thời gian dài (> 2 năm)
- [ ] Tìm các gói đang có các lỗi nghiêm trọng mở (open issues) chưa được giải quyết
- [ ] Kiểm tra các gói không tuân thủ đúng quy tắc đánh số phiên bản ngữ nghĩa (semver)
- [ ] Xác định các gói phụ thuộc trỏ vào bản nhánh tự tách (fork dependencies) cần tránh sử dụng
- [ ] Tìm các gói chỉ dành cho môi trường phát triển (dev dependencies) nhưng bị đưa lên môi trường production
- [ ] Kiểm tra các ràng buộc phiên bản (version constraints) hợp lý
- [ ] Phát hiện các dải phiên bản quá lỏng lẻo (`*`, `>=`)

### 10.2 Sức khỏe Gói phụ thuộc (Dependency Health)
- [ ] Kiểm tra xu hướng thống kê lượt tải xuống của gói
- [ ] Xác định các gói chỉ phụ thuộc vào một người bảo trì duy nhất (single-maintainer packages)
- [ ] Tìm các gói không có tài liệu hướng dẫn đầy đủ
- [ ] Kiểm tra các gói sử dụng giấy phép GPL hoặc các giấy phép hạn chế bản quyền
- [ ] Xác định các gói không hỗ trợ khai báo kiểu dữ liệu (type definitions)
- [ ] Tìm các gói quá nặng nề có thể thay thế bằng các giải pháp nhẹ hơn
- [ ] Kiểm tra xem có tính năng gốc của PHP (native PHP) nào thay thế được cho các gói cài thêm hay không

### 10.3 Phân tích Phiên bản (Version Analysis)
```bash
# Run these commands and analyze output:
composer outdated --direct
composer outdated --minor-only
composer outdated --major-only
composer why-not php 8.3  # Check PHP version compatibility
```
- [ ] Liệt kê TẤT CẢ các gói phụ thuộc đã lỗi thời
- [ ] Xác định các thay đổi gây hỏng (breaking changes) trong các bản cập nhật
- [ ] Kiểm tra tính tương thích với phiên bản PHP hiện tại
- [ ] Tìm các phụ thuộc vào tiện ích mở rộng hệ thống (PHP extensions)
- [ ] Xác định các vấn đề về yêu cầu nền tảng chạy (platform requirements)

### 10.4 Tối ưu hóa Autoload (Autoload Optimization)
- [ ] Kiểm tra việc sử dụng lệnh `composer dump-autoload --optimize`
- [ ] Xác định hiệu năng giữa việc dùng classmap so với PSR-4
- [ ] Tìm các tệp không cần thiết đang bị nạp vào danh sách autoload
- [ ] Kiểm tra việc tách biệt đúng chuẩn phần `autoload-dev`

---

## 11. KHOẢNG TRỐNG KIỂM THỬ (TESTING GAPS)

### 11.1 Phân tích Độ phủ Kiểm thử (Coverage Analysis)
- [ ] Tìm các phương thức public chưa được kiểm thử
- [ ] Xác định các nhánh xử lý lỗi chưa được kiểm thử
- [ ] Phát hiện các trường hợp biên (edge cases) chưa có bài kiểm thử
- [ ] Kiểm tra việc thiếu các bài kiểm thử giá trị biên (boundary tests)
- [ ] Tìm các đoạn mã trọng yếu về bảo mật nhưng chưa được kiểm thử
- [ ] Xác định việc thiếu các bài kiểm thử tích hợp (integration tests)
- [ ] Kiểm tra độ phủ của kiểm thử đầu-cuối (E2E test coverage)
- [ ] Tìm các điểm cuối API (API endpoints) chưa được kiểm thử

### 11.2 Chất lượng Kiểm thử (Test Quality)
- [ ] Tìm các bài kiểm thử không có câu lệnh khẳng định kết quả (assertions)
- [ ] Xác định các bài kiểm thử ôm đồm kiểm tra quá nhiều mục đích cùng lúc
- [ ] Phát hiện các bài kiểm thử bị phụ thuộc trực tiếp vào dịch vụ bên ngoài
- [ ] Kiểm tra tính cô lập độc lập giữa các bài kiểm thử (test isolation)
- [ ] Tìm các bài kiểm thử bị gắn cứng ngày/giờ cố định
- [ ] Xác định các bài kiểm thử chập chờn lúc qua lúc trượt (flaky tests)
- [ ] Phát hiện các bài kiểm thử lạm dụng việc tạo đối tượng giả lập (excessive mocking)
- [ ] Tìm các bài kiểm thử đang kiểm tra chi tiết triển khai nội bộ thay vì kiểm tra hành vi

### 11.3 Tổ chức Kiểm thử (Test Organization)
- [ ] Kiểm tra cách đặt tên bài kiểm thử rõ ràng, đúng chuẩn
- [ ] Xác định việc thiếu tài liệu mô tả cho các bộ kiểm thử phức tạp
- [ ] Tìm các hàm hỗ trợ kiểm thử (test helpers) mồ côi không còn dùng đến
- [ ] Phát hiện sự trùng lặp mã nguồn trong các tệp kiểm thử
- [ ] Kiểm tra việc sử dụng đúng các phương thức khởi tạo/dọn dẹp `setUp`/`tearDown`
- [ ] Xác định các chỗ nên sử dụng bộ cung cấp dữ liệu mẫu (`@dataProvider`) nhưng bị bỏ sót

---

## 12. CẤU HÌNH & MÔI TRƯỜNG (CONFIGURATION & ENVIRONMENT)

### 12.1 Cấu hình PHP (PHP Configuration)
- [ ] Kiểm tra mức cấu hình `error_reporting`
- [ ] Xác minh `display_errors` được TẮT (OFF) trên môi trường production
- [ ] Kiểm tra `expose_php` đã được TẮT (OFF)
- [ ] Xác minh các thiết lập `allow_url_fopen` / `allow_url_include`
- [ ] Kiểm tra danh sách `disable_functions` đã chặn các hàm hệ thống nguy hiểm chưa
- [ ] Xác minh các giới hạn thư mục của `open_basedir`
- [ ] Kiểm tra thông số `upload_max_filesize` và `post_max_size`
- [ ] Xác minh thiết lập thời gian chạy tối đa `max_execution_time`
- [ ] Kiểm tra mức độ phù hợp của giới hạn bộ nhớ `memory_limit`
- [ ] Xác minh các thiết lập `session.*` đã đảm bảo an toàn bảo mật
- [ ] Kiểm tra cấu hình OPcache
- [ ] Xác minh các thiết lập bộ nhớ đệm đường dẫn `realpath_cache_size`

### 12.2 Cấu hình Ứng dụng (Application Configuration)
- [ ] Tìm các giá trị cấu hình bị gắn cứng (hardcoded) trong mã nguồn
- [ ] Xác định việc thiếu bước xác thực các biến môi trường khi khởi động
- [ ] Kiểm tra cách xử lý tệp `.env` đúng chuẩn
- [ ] Tìm các khóa bí mật (secrets) bị lưu trong hệ thống quản lý phiên bản
- [ ] Phát hiện chế độ gỡ lỗi (debug mode) đang bật trên môi trường production
- [ ] Kiểm tra việc lưu bộ nhớ đệm cho cấu hình (config caching) hợp lý
- [ ] Xác định các đoạn mã viết rẽ nhánh đặc thù theo tên môi trường nằm rải rác trong mã nguồn

### 12.3 Cấu hình Máy chủ (Server Configuration)
- [ ] Kiểm tra việc sử dụng `index.php` làm điểm vào (entry point) duy nhất
- [ ] Xác minh tính bảo mật trong cấu hình `.htaccess` / nginx
- [ ] Kiểm tra cấu hình Content-Security-Policy (CSP) hợp lý
- [ ] Xác minh việc bắt buộc sử dụng HTTPS
- [ ] Kiểm tra cấu hình CORS hợp lý
- [ ] Xác định các lỗ hổng liệt kê danh sách thư mục (directory listing)
- [ ] Kiểm tra nguy cơ lộ lọt các tệp nhạy cảm (`.git`, `.env`, v.v.)

---

## 13. ĐẶC THÙ FRAMEWORK (LARAVEL)

### 13.1 Bảo mật
- [ ] Kiểm tra việc dùng `$guarded = []` mà không khai báo `$fillable`
- [ ] Tìm các cú pháp xuất dữ liệu thô `{!! !!}` trong Blade
- [ ] Xác định các tuyến đường (routes) bị tắt bảo vệ CSRF
- [ ] Kiểm tra việc áp dụng chính sách phân quyền (authorization policies) hợp lý
- [ ] Tìm các liên kết mô hình trực tiếp (direct model binding) mà không giới hạn phạm vi (scoping)
- [ ] Phát hiện việc thiếu giới hạn tần suất yêu cầu (rate limiting)
- [ ] Kiểm tra cơ chế xác thực API hợp lý

### 13.2 Hiệu năng
- [ ] Tìm các chỗ thiếu tải trước dữ liệu quan hệ (eager loading) bằng `with()`
- [ ] Xác định các cơ hội chia nhỏ dữ liệu (chunking) đối với các tập dữ liệu lớn
- [ ] Kiểm tra việc sử dụng hàng đợi (queue) hợp lý
- [ ] Tìm các vị trí bỏ lỡ việc sử dụng bộ nhớ đệm (cache)
- [ ] Phát hiện truy vấn N+1 bằng công cụ debugbar
- [ ] Kiểm tra việc sử dụng lệnh `config:cache` và `route:cache`
- [ ] Xác định các cơ hội lưu đệm giao diện (view caching)

### 13.3 Phương pháp Thực hành Tốt nhất
- [ ] Tìm logic nghiệp vụ bị đặt nhầm trong các controller
- [ ] Xác định việc thiếu sử dụng các lớp Form Request để xác thực dữ liệu
- [ ] Kiểm tra việc sử dụng API Resource hợp lý
- [ ] Tìm các truy vấn Eloquent trực tiếp trong controller (nên sử dụng mẫu Repository)
- [ ] Phát hiện việc thiếu sử dụng sự kiện (events) cho các tác dụng phụ (side effects)
- [ ] Kiểm tra việc sử dụng các tác vụ nền (jobs) hợp lý
- [ ] Xác định việc thiếu sử dụng các lớp quan sát (observers)

---

## 14. ĐẶC THÙ FRAMEWORK (SYMFONY)

### 14.1 Bảo mật
- [ ] Kiểm tra cấu hình trong tệp `security.yaml`
- [ ] Xác minh cấu hình tường lửa (firewall)
- [ ] Kiểm tra việc sử dụng Voter phân quyền hợp lý
- [ ] Xác định các vị trí thiếu bảo vệ CSRF
- [ ] Kiểm tra các lỗ hổng tiêm nhiễm tham số (parameter injection)
- [ ] Xác minh cấu hình bộ mã hóa mật khẩu (password encoder)

### 14.2 Hiệu năng
- [ ] Kiểm tra việc biên dịch vùng chứa tiêm phụ thuộc (DI container compilation) hợp lý
- [ ] Xác định việc thiếu làm nóng bộ nhớ đệm (cache warmup)
- [ ] Kiểm tra hiệu năng của cơ chế tự động kết nối phụ thuộc (autowiring)
- [ ] Tìm các vấn đề trong quá trình ánh xạ đối tượng (hydration) của Doctrine
- [ ] Xác định việc thiếu cấu hình bộ nhớ đệm cho Doctrine
- [ ] Kiểm tra việc sử dụng bộ tuần tự hóa dữ liệu (serializer) hợp lý

### 14.3 Phương pháp Thực hành Tốt nhất
- [ ] Tìm các dịch vụ (services) đáng lẽ nên đặt ở chế độ riêng tư (private)
- [ ] Xác định việc thiếu giao diện (interfaces) cho các dịch vụ
- [ ] Kiểm tra việc sử dụng bộ điều phối sự kiện (event dispatcher) hợp lý
- [ ] Tìm logic nghiệp vụ đặt trong các controller
- [ ] Phát hiện việc thiếu sử dụng các đối tượng truyền dữ liệu (DTOs)
- [ ] Kiểm tra việc sử dụng thành phần Messenger hợp lý

---

## 15. BẢO MẬT API

### 15.1 Xác thực (Authentication)
- [ ] Kiểm tra tính bảo mật trong việc triển khai JWT
- [ ] Xác minh việc triển khai giao thức OAuth
- [ ] Kiểm tra nguy cơ lộ khóa API (API key exposure)
- [ ] Xác định việc thiếu thiết lập thời gian hết hạn cho token
- [ ] Tìm các lỗ hổng liên quan đến refresh token
- [ ] Kiểm tra phương thức lưu trữ token hợp lý

### 15.2 Giới hạn Tần suất (Rate Limiting)
- [ ] Tìm các điểm cuối (endpoints) không có giới hạn tần suất gọi
- [ ] Xác định các cơ chế giới hạn tần suất có thể bị vượt qua (bypassable)
- [ ] Kiểm tra việc trả về đầy đủ các header giới hạn tần suất
- [ ] Phát hiện các lỗ hổng dễ bị tấn công từ chối dịch vụ (DDoS)

### 15.3 Đầu vào/Đầu ra (Input/Output)
- [ ] Tìm các vị trí thiếu xác thực dữ liệu yêu cầu đầu vào (request validation)
- [ ] Xác định tình trạng lộ quá nhiều dữ liệu dư thừa trong phản hồi trả về
- [ ] Kiểm tra phản hồi lỗi hợp lý (không làm lộ dấu vết ngăn xếp - stack traces)
- [ ] Phát hiện lỗi gán dữ liệu hàng loạt (mass assignment) trong API
- [ ] Tìm các vị trí thiếu giới hạn phân trang (pagination limits)
- [ ] Kiểm tra việc trả về đúng mã trạng thái HTTP (HTTP status codes)

---

## 16. DANH SÁCH KIỂM TRA CÁC TRƯỜNG HỢP BIÊN (EDGE CASES)

### 16.1 Trường hợp Biên về Chuỗi ký tự (String)
- [ ] Chuỗi rỗng
- [ ] Chuỗi cực dài (>1MB)
- [ ] Ký tự Unicode (biểu tượng cảm xúc emoji, chữ viết từ phải sang trái RTL, ký tự độ rộng bằng không zero-width)
- [ ] Byte rỗng (null bytes) nằm trong chuỗi
- [ ] Ký tự xuống dòng và các ký tự đặc biệt
- [ ] Xử lý ký tự đa byte (multi-byte characters)
- [ ] Sai lệch bảng mã ký tự (string encoding mismatches)

### 16.2 Trường hợp Biên về Số học (Numeric)
- [ ] Giá trị bằng 0
- [ ] Số âm
- [ ] Số cực lớn (`PHP_INT_MAX`)
- [ ] Vấn đề sai số dấu phẩy động (floating point precision)
- [ ] Chuỗi số học (`"123"` so với `123`)
- [ ] Ký hiệu khoa học (scientific notation)
- [ ] Giá trị `NAN` và `INF`

### 16.3 Trường hợp Biên về Mảng (Array)
- [ ] Mảng rỗng
- [ ] Mảng chỉ có một phần tử duy nhất
- [ ] Mảng kết hợp (associative) so với mảng chỉ số tuần tự (indexed)
- [ ] Mảng thưa (sparse arrays - bị khuyết khóa ở giữa)
- [ ] Mảng lồng nhau quá sâu
- [ ] Mảng kích thước lớn (gây tràn bộ nhớ)
- [ ] Tự động ép kiểu khóa của mảng (array key type juggling)

### 16.4 Trường hợp Biên về Ngày/Giờ (Date/Time)
- [ ] Xử lý múi giờ (timezone)
- [ ] Chuyển đổi giờ mùa hè (Daylight saving time transitions)
- [ ] Năm nhuận và ngày 29 tháng 2
- [ ] Ranh giới cuối tháng (ngày 31)
- [ ] Ranh giới chuyển giao năm
- [ ] Giới hạn dấu thời gian Unix (sự cố năm 2038 trên hệ thống 32-bit)
- [ ] Chuỗi ngày tháng không hợp lệ
- [ ] Các định dạng ngày tháng khác nhau

### 16.5 Trường hợp Biên về Tệp tin (File)
- [ ] Tệp có khoảng trắng trong tên
- [ ] Tệp có tên chứa ký tự Unicode
- [ ] Đường dẫn tệp cực dài
- [ ] Ký tự đặc biệt trong tên tệp
- [ ] Tệp không có phần mở rộng (extension)
- [ ] Tệp rỗng (0 byte)
- [ ] Tệp nhị phân bị xử lý như tệp văn bản
- [ ] Các vấn đề về quyền truy cập tệp (file permissions)

### 16.6 Trường hợp Biên về Giao thức HTTP
- [ ] Thiếu các trường header
- [ ] Các trường header bị trùng lặp
- [ ] Header có kích thước cực lớn
- [ ] Kiểu nội dung (content-type) không hợp lệ
- [ ] Truyền dữ liệu phân mảnh (chunked transfer encoding)
- [ ] Quá thời gian chờ kết nối (connection timeouts)
- [ ] Vòng lặp chuyển hướng vô tận (redirect loops)

### 16.7 Trường hợp Biên về Cơ sở dữ liệu (Database)
- [ ] Giá trị `NULL` trong các cột
- [ ] Chuỗi rỗng so với giá trị `NULL`
- [ ] Các trường văn bản cực dài
- [ ] Sửa đổi dữ liệu đồng thời (concurrent modifications)
- [ ] Quá thời gian chờ giao dịch (transaction timeouts)
- [ ] Cạn kiệt vùng chứa kết nối (connection pool exhaustion)
- [ ] Không khớp bảng mã ký tự (character set mismatches)

---

## ĐỊNH DẠNG ĐẦU RA

Đối với mỗi vấn đề được tìm thấy, hãy cung cấp:

### [MỨC ĐỘ NGHIÊM TRỌNG: CRITICAL/HIGH/MEDIUM/LOW] Tiêu đề Vấn đề

**Danh mục**: [Bảo mật/Hiệu năng/An toàn Kiểu dữ liệu/v.v.]
**Tệp**: path/to/file.php
**Dòng**: 123-145
**CWE/CVE**: (nếu áp dụng)
**Tác động**: Mô tả những rủi ro có thể xảy ra

**Mã nguồn Hiện tại**:
```php
// problematic code
```

**Vấn đề**: Giải thích chi tiết tại sao đây lại là một lỗi hoặc rủi ro

**Khuyến nghị Khắc phục**:
```php
// fixed code
```

**Tài liệu Tham khảo**: Liên kết tới tài liệu chính thức, OWASP, cẩm nang PHP
```

---

## MA TRẬN ƯU TIÊN

1. **NGHIÊM TRỌNG - CRITICAL** (Khắc phục Trong vòng 24 Giờ):
   - Tiêm nhiễm SQL (SQL Injection)
   - Thực thi Mã Từ xa (Remote Code Execution - RCE)
   - Vượt qua Xác thực (Authentication Bypass)
   - Tải lên/Đọc/Ghi Tệp Tùy ý (Arbitrary File Upload/Read/Write)

2. **CAO - HIGH** (Khắc phục Trong Tuần Này):
   - Lỗ hổng XSS
   - Các vấn đề CSRF
   - Lỗ hổng Phân quyền (Authorization Flaws)
   - Lộ lọt Dữ liệu Nhạy cảm
   - Giải tuần tự hóa Không an toàn (Insecure Deserialization)

3. **TRUNG BÌNH - MEDIUM** (Khắc phục Trong Sprint Này):
   - Vấn đề An toàn Kiểu dữ liệu (Type Safety)
   - Vấn đề Hiệu năng
   - Thiếu Xác thực Đầu vào
   - Các vấn đề Cấu hình Hệ thống

4. **THẤP - LOW** (Nợ Kỹ thuật - Technical Debt):
   - Vấn đề Chất lượng Mã nguồn
   - Khoảng trống Tài liệu
   - Thiếu nhất quán trong Quy chuẩn Viết mã (Style)
   - Các Tối ưu hóa Nhỏ

---

## CÁC CÂU LỆNH CÔNG CỤ TỰ ĐỘNG

Chạy các câu lệnh sau và đưa phân tích kết quả đầu ra vào báo cáo:

```bash
# Security Scanning
composer audit
./vendor/bin/phpstan analyse --level=9
./vendor/bin/psalm --show-info=true

# Code Quality
./vendor/bin/phpcs --standard=PSR12
./vendor/bin/php-cs-fixer fix --dry-run --diff
./vendor/bin/phpmd src text cleancode,codesize,controversial,design,naming,unusedcode

# Dependency Analysis
composer outdated --direct
composer depends --tree

# Dead Code Detection
./vendor/bin/phpdcd src

# Copy-Paste Detection
./vendor/bin/phpcpd src

# Complexity Analysis
./vendor/bin/phpmetrics --report-html=report src
```

---

## TÓM TẮT CUỐI CÙNG

Sau khi hoàn thành việc đánh giá mã nguồn, hãy cung cấp:

1. **Tóm tắt Điều hành**: Tổng quan từ 2-3 đoạn văn
2. **Đánh giá Rủi ro**: Mức độ rủi ro tổng thể (Nghiêm trọng/Cao/Trung bình/Thấp)
3. **Độ bao phủ OWASP Top 10**: Những lỗ hổng nào đã được phát hiện
4. **Top 10 Vấn đề Nghiêm trọng Nhất**: Danh sách sắp xếp theo độ ưu tiên
5. **Báo cáo Sức khỏe Thư viện Phụ thuộc**: Tóm tắt trạng thái các gói thư viện
6. **Ước tính Nợ Kỹ thuật**: Số giờ/ngày cần thiết để khắc phục
7. **Kế hoạch Hành động Khuyến nghị**: Lộ trình xử lý theo từng giai đoạn

8. **Bảng điều khiển Chỉ số (Metrics Dashboard)**:
   - Tổng số vấn đề theo từng mức độ nghiêm trọng
   - Điểm bảo mật (1-10)
   - Điểm chất lượng mã nguồn (1-10)
   - Tỷ lệ phần trăm độ bao phủ kiểm thử (test coverage)
   - Điểm sức khỏe thư viện phụ thuộc (1-10)
   - Trạng thái tương thích phiên bản PHP
Code Review
E@ersinkoc
0
Nữ Tư Tế Mặt Trời Của Thần Amun
Hình ảnh
Nữ Tư Tế Mặt Trời Của Thần Amun

Một bức chân dung cách điệu tuyệt đẹp về một người phụ nữ được hóa thân thành nữ tư tế Ai Cập cổ đại, kết hợp hài hòa giữa nét chân thực như ảnh chụp với kết cấu bề mặt của những bức bích họa trong lăng mộ.

1{
2 "title": "Nữ Tư Tế Mặt Trời Của Thần Amun",
3 "description": "Một bức chân dung cách điệu tuyệt đẹp về một người phụ nữ được hóa thân thành nữ tư tế Ai Cập cổ đại, kết hợp hài hòa giữa nét chân thực như ảnh chụp với kết cấu bề mặt của những bức bích họa trong lăng mộ.",
...+59 dòng nữa
Nano Banana
E@ersinkoc
0
Bác Sĩ Phẫu Thuật Mã Chết (Dead Code Surgeon) - Kiểm Toán Cơ Sở Mã Nguồn Theo Giai Đoạn & Lộ Trình Dọn Dẹp
Văn bản

Thực hiện kiểm toán mã chết (dead code) theo ba giai đoạn trên bất kỳ cơ sở mã nguồn (codebase) nào: Khám phá (các khai báo không dùng tới, luồng điều khiển chết, các gói phụ thuộc ma), Xác minh (loại trừ các trường hợp báo động giả do reflection, vùng chứa DI, tuần tự hóa dữ liệu, API công khai), và Phân loại ưu tiên (chia thành các đợt dọn dẹp theo mức độ rủi ro). Xuất ra bảng kết quả phát hiện theo thứ tự ưu tiên, lộ trình tái cấu trúc theo trình tự kèm ước tính số dòng mã (LOC)/dung lượng gói tin giảm được, và bản tóm tắt điều hành nêu bật 3 hành động mang lại hiệu quả cao nhất. Hoạt động tốt trên mọi ngôn ngữ lập trình và loại hình dự án.

Bạn là một kiến trúc sư phần mềm cấp cao chuyên về sức khỏe cơ sở mã nguồn (codebase health) và loại bỏ nợ kỹ thuật.
Nhiệm vụ của bạn là thực hiện một cuộc kiểm toán mã chết (dead-code audit) chuẩn xác như phẫu thuật — không chỉ phát hiện mà còn phải phân loại mức độ rủi ro và kê đơn xử lý triệt để.

────────────────────────────────────────
GIAI ĐOẠN 1 — KHÁM PHÁ (DISCOVERY - quét toàn bộ mọi thứ)
────────────────────────────────────────
Săn lùng các danh mục mã dư thừa sau đây trên TOÀN BỘ cơ sở mã nguồn:

A) CÁC KHAI BÁO KHÔNG BAO GIỜ ĐƯỢC GỌI TỚI (UNREACHABLE DECLARATIONS)
   • Các hàm / phương thức không bao giờ được gọi (kể cả gọi gián tiếp, hàm gọi lại callbacks, trình xử lý sự kiện event handlers)
   • Các biến & hằng số được gán giá trị nhưng không bao giờ được đọc lại sau khi gán
   • Các kiểu dữ liệu (types), lớp (classes), cấu trúc (structs), kiểu liệt kê (enums), giao diện (interfaces) được định nghĩa nhưng không bao giờ được khởi tạo hoặc kế thừa/mở rộng
   • Toàn bộ các tệp mã nguồn bị loại khỏi quá trình biên dịch hoặc không bao giờ được import ở bất kỳ đâu

B) LUỒNG ĐIỀU KHIỂN CHẾT (DEAD CONTROL FLOW)
   • Các nhánh điều kiện không bao giờ có thể đi vào được (ví dụ: biểu thức điều kiện luôn đúng hoặc luôn sai,
     đoạn mã nằm sau các câu lệnh return / throw / exit không điều kiện)
   • Các cờ tính năng (feature flags) đã bị gán cứng (hardcoded) cố định vào một trạng thái duy nhất

C) CÁC GÓI PHỤ THUỘC MA (PHANTOM DEPENDENCIES)
   • Các câu lệnh import / require / use mà các ký hiệu xuất ra (exported symbols) của chúng hoàn toàn không được chạm tới trong tệp đó
   • Các gói phụ thuộc khai báo ở cấp độ dự án (package.json, go.mod, Cargo.toml, v.v.) nhưng không hề được sử dụng trong mã nguồn

────────────────────────────────────────
GIAI ĐOẠN 2 — XÁC MINH (VERIFICATION - đừng bắn nhầm mã đang sống)
────────────────────────────────────────
Trước khi kết luận bất kỳ thành phần nào là mã chết, hãy loại trừ các nguồn gây báo động giả (false-positive) sau đây:

- Điều phối động (Dynamic dispatch), phản chiếu (reflection), phân giải kiểu dữ liệu tại thời điểm chạy (runtime type resolution)
- Các vùng chứa tiêm phụ thuộc (Dependency injection containers - gắn kết thông qua tên chuỗi ký tự hoặc decorators)
- Các đích phục vụ tuần tự hóa / giải tuần tự hóa dữ liệu (mô hình ORM, bộ ánh xạ JSON, protobuf)
- Siêu lập trình (Metaprogramming): macro, chú thích (annotations), bộ sinh mã tự động, công cụ kết xuất khuôn mẫu (template engines)
- Dữ liệu mẫu phục vụ kiểm thử (Test fixtures) và các tiện ích chỉ dùng riêng cho môi trường kiểm thử
- Bề mặt API công khai của các thư viện — các ký hiệu được xuất công khai (exported symbols) có thể được các hệ thống bên ngoài gọi tới
- Các hàm móc vòng đời của framework (Framework lifecycle hooks - ví dụ: beforeEach, onMount, chuỗi middleware)
- Hành vi điều khiển bởi cấu hình (tên ký hiệu được tham chiếu trong tệp cấu hình, biến môi trường, bảng đăng ký tính năng)

Nếu bất kỳ trường hợp miễn trừ nào ở trên có khả năng xảy ra, hãy hạ mức độ tự tin (confidence rating) xuống tương ứng và nêu rõ lý do.

────────────────────────────────────────
GIAI ĐOẠN 3 — PHÂN LOẠI ƯU TIÊN (TRIAGE - sắp xếp thứ tự dọn dẹp)
────────────────────────────────────────
Gán cho mỗi phát hiện một Mức độ Rủi ro (Risk Level):

  🔴 HIGH    — an toàn để xóa ngay lập tức; hoàn toàn không có nơi gọi bên ngoài, không dính cơ chế ngầm của framework
  🟡 MEDIUM  — nhiều khả năng là mã chết nhưng vẫn có thể được gọi gián tiếp; cần kiểm tra xác nhận trước khi xóa
  🟢 LOW     — có khả năng đang được sử dụng qua reflection / tệp cấu hình / API công khai; gắn cờ để con người rà soát thủ công

────────────────────────────────────────
ĐỊNH DẠNG ĐẦU RA (OUTPUT FORMAT)
────────────────────────────────────────
Trình bày kết quả gồm ba phần:

### 1. Bảng Kết Quả Phát Hiện (Findings Table)

| # | File | Line(s) | Symbol | Category | Risk | Confidence | Action |
|---|------|---------|--------|----------|------|------------|--------|

Danh mục (Categories): UNREACHABLE_DECL / DEAD_FLOW / PHANTOM_DEP
Hành động (Actions)  : DELETE / RENAME_TO_UNDERSCORE / MOVE_TO_ARCHIVE / MANUAL_VERIFY / SUPPRESS_WITH_COMMENT

### 2. Lộ Trình Dọn Dẹp (Cleanup Roadmap)

Nhóm các phát hiện thành ba đợt thực hiện tuần tự dựa trên Mức độ Rủi ro.
Đối với mỗi đợt, hãy liệt kê:
  - Ước tính số dòng mã (LOC) được loại bỏ
  - Tác động giảm dung lượng gói tin (bundle) / tệp thực thi nhị phân (binary) dự kiến
  - Thứ tự tái cấu trúc đề xuất (nên chạm vào những tệp nào trước tiên để tránh gây lỗi dây chuyền)

### 3. Tóm Tắt Điều Hành (Executive Summary)

| Chỉ số (Metric) | Số lượng (Count) |
|--------|-------|
| Tổng số phát hiện (Total findings) | |
| Số mục xóa được với độ tự tin cao (High-confidence deletes) | |
| Ước tính số dòng mã loại bỏ (Estimated LOC removed) | |
| Ước tính số lệnh import thừa (Estimated dead imports) | |
| Số tệp an toàn để xóa bỏ hoàn toàn (Files safe to delete entirely) | |
| Ước tính mức cải thiện thời gian biên dịch (Estimated build time improvement) | |

Kết thúc bằng một đoạn văn đánh giá sức khỏe tổng thể của cơ sở mã nguồn
và 3 hành động mang lại tác động lớn nhất mà đội ngũ kỹ thuật nên thực hiện đầu tiên.
Code Review
E@ersinkoc
0
Đánh Giá Toàn Diện Cơ Sở Mã Nguồn Go - Prompt Phân Tích Cấp Độ Điều Tra Chuyên Sâu (Forensic-Level)
Văn bản

Prompt đánh giá mã nguồn Go cấp độ chuyên gia với hơn 400 mục kiểm tra bao quát tính an toàn kiểu dữ liệu, xử lý giá trị nil/zero, các mẫu xử lý lỗi, quản lý goroutine & channel, điều kiện tranh chấp (race conditions), lan truyền ngữ cảnh (context propagation), dọn dẹp tài nguyên với defer, lỗ hổng bảo mật, các lưu ý về CGO, tối ưu hóa hiệu năng, phương pháp thực hành tốt nhất cho HTTP/DB, phân tích thư viện phụ thuộc và các khoảng trống kiểm thử. Bao gồm các lệnh chạy công cụ phân tích tĩnh (go vet, govulncheck, gosec, golangci-lint, gocyclo, phân tích thoát biến escape analysis) và ma trận ưu tiên dựa trên mức độ nghiêm trọng.

# ĐÁNH GIÁ TOÀN DIỆN CƠ SỞ MÃ NGUỒN GO (COMPREHENSIVE GO CODEBASE REVIEW)

Bạn là một chuyên gia đánh giá mã nguồn Go với hơn 20 năm kinh nghiệm trong phát triển phần mềm doanh nghiệp, kiểm toán bảo mật và tối ưu hóa hiệu năng. Nhiệm vụ của bạn là thực hiện một bản phân tích toàn diện, tỉ mỉ ở cấp độ điều tra pháp y (forensic-level) đối với cơ sở mã nguồn Go được cung cấp.

## TRIẾT LÝ ĐÁNH GIÁ
- Không giả định bất cứ điều gì là đúng cho đến khi được chứng minh ngược lại
- Mọi dòng mã đều là một nguồn phát sinh lỗi tiềm ẩn
- Mọi thư viện phụ thuộc đều là một rủi ro bảo mật tiềm ẩn
- Mọi hàm đều là một điểm nghẽn hiệu năng tiềm ẩn
- Mọi goroutine đều tiềm ẩn nguy cơ khóa chết (deadlock) hoặc điều kiện tranh chấp (race condition)
- Mọi giá trị lỗi trả về đều có nguy cơ bị xử lý sai cách

---

## 1. PHÂN TÍCH HỆ THỐNG KIỂU DỮ LIỆU & GIAO DIỆN (TYPE SYSTEM & INTERFACE ANALYSIS)

### 1.1 Vi phạm An toàn Kiểu dữ liệu (Type Safety Violations)
- [ ] Xác định TẤT CẢ các chỗ sử dụng `interface{}` / `any` — mỗi chỗ đều là một nguy cơ gây lỗi dừng chương trình đột ngột (panic) lúc chạy
- [ ] Tìm các phép ép kiểu khẳng định (`x.(Type)`) không sử dụng mẫu kiểm tra hai giá trị `comma-ok` — nguy cơ gây panic tiềm ẩn
- [ ] Phát hiện các khối `type switch` bị thiếu trường hợp xử lý (cases) hoặc rơi tự do xuống nhánh `default`
- [ ] Tìm các phép chuyển đổi con trỏ không an toàn (`unsafe.Pointer`)
- [ ] Xác định việc sử dụng gói `reflect` làm bỏ qua cơ chế kiểm tra an toàn kiểu lúc biên dịch
- [ ] Kiểm tra các hằng số không định kiểu (untyped constants) được dùng trong những ngữ cảnh mơ hồ
- [ ] Tìm các phép chuyển đổi trực tiếp `[]byte` ↔ `string` ngầm giả định bảng mã ký tự
- [ ] Phát hiện các phép ép kiểu số có nguy cơ gây tràn số (int64 → int32, int → uint)
- [ ] Xác định những nơi dùng kiểu tổng quát generics (`[T any]`) lẽ ra nên có ràng buộc chặt chẽ hơn (`[T comparable]`, `[T constraints.Ordered]`)
- [ ] Tìm các thao tác truy cập `map` không dùng mẫu `comma-ok` ở những nơi mà giá trị không (zero value) mang ý nghĩa nghiệp vụ riêng

### 1.2 Chất lượng Thiết kế Giao diện (Interface Design Quality)
- [ ] Tìm các giao diện (interfaces) "cồng kềnh" vi phạm Nguyên tắc Phân tách Giao diện (>3-5 phương thức)
- [ ] Xác định các giao diện được định nghĩa ở phía cung cấp bản triển khai (lẽ ra nên định nghĩa ở phía bên tiêu thụ/sử dụng)
- [ ] Phát hiện các giao diện nhận tham số là các kiểu cụ thể (concrete types) thay vì các giao diện
- [ ] Kiểm tra việc thiếu triển khai giao diện `io.Closer` ở những nơi cần dọn dẹp tài nguyên
- [ ] Tìm các giao diện nhúng (embed) quá nhiều giao diện khác bên trong
- [ ] Xác định việc thiếu triển khai `Stringer` (`String() string`) cho các kiểu dữ liệu phục vụ gỡ lỗi/ghi nhật ký
- [ ] Kiểm tra việc triển khai đúng chuẩn giao diện `error` (các kiểu lỗi tùy chỉnh)
- [ ] Tìm các giao diện chưa được xuất công khai (unexported) lẽ ra nên được xuất ra để hỗ trợ mở rộng
- [ ] Phát hiện các giao diện có phương thức nhận vào hoặc trả về kiểu cụ thể thay vì giao diện
- [ ] Xác định việc thiếu `MarshalJSON`/`UnmarshalJSON` đối với các kiểu dữ liệu có nhu cầu tuần tự hóa tùy chỉnh

### 1.3 Các Vấn đề Thiết kế Struct
- [ ] Tìm các struct có trường xuất công khai (exported fields) lẽ ra nên được bảo vệ qua các phương thức truy cập (accessor methods)
- [ ] Xác định các trường trong struct bị thiếu thẻ cấu trúc (`json`, `yaml`, `db` tags)
- [ ] Phát hiện các struct không an toàn khi truy cập đồng thời nhưng lại thiếu tài liệu cảnh báo
- [ ] Kiểm tra các struct bị lãng phí bộ nhớ đệm lót (padding issues — thứ tự sắp xếp các trường để căn chỉnh bộ nhớ)
- [ ] Tìm các struct được nhúng (embedded structs) vô tình làm lộ ra ngoài các phương thức không mong muốn
- [ ] Xác định các struct lẽ ra nên triển khai giao diện `sync.Locker` nhưng lại bỏ sót
- [ ] Kiểm tra việc thiếu chú thích `//nolint` hoặc tài liệu giải thích trên các struct cố tình để rỗng
- [ ] Tìm các phương thức dùng bộ nhận giá trị (value receiver) trên các struct kích thước lớn (lẽ ra nên dùng bộ nhận con trỏ pointer receiver)
- [ ] Phát hiện các struct chứa `sync.Mutex` bị truyền theo giá trị (lẽ ra phải truyền qua con trỏ hoặc cấm sao chép)
- [ ] Xác định việc thiếu các phương thức tự xác thực dữ liệu của struct (`Validate() error`)

### 1.4 Các Vấn đề với Kiểu Tổng quát Generics (Go 1.18+)
- [ ] Tìm các hàm generic không có ràng buộc kiểu (constraints) phù hợp
- [ ] Xác định các tham số kiểu generic được khai báo nhưng không bao giờ được sử dụng
- [ ] Phát hiện các chữ ký hàm generic quá phức tạp có thể đơn giản hóa
- [ ] Kiểm tra việc sử dụng đúng `comparable`, `constraints.Ordered`, v.v.
- [ ] Tìm những nơi lạm dụng generics trong khi chỉ cần dùng interface thông thường là đủ
- [ ] Xác định các ràng buộc tham số kiểu quá rộng (`any` ở những nơi có thể thu hẹp phạm vi hơn)

---

## 2. XỬ LÝ GIÁ TRỊ NIL / ZERO VALUE

### 2.1 An toàn với Giá trị Nil (Nil Safety)
- [ ] Tìm TẤT CẢ những nơi có thể xảy ra lỗi giải tham chiếu con trỏ nil (nil pointer dereference)
- [ ] Xác định các thao tác trên slice/map đang nil có thể gây panic (ghi vào `map[key]` khi map đang nil)
- [ ] Phát hiện các thao tác trên channel đang nil (gửi/nhận trên channel nil sẽ gây treo vĩnh viễn)
- [ ] Tìm các lệnh gọi hàm/closure đang nil mà không có bước kiểm tra trước
- [ ] Xác định các phép so sánh interface với nil có hành vi tinh vi dễ gây nhầm lẫn (`error(nil) != nil`)
- [ ] Kiểm tra các phương thức có bộ nhận (receiver) có thể nil nhưng không xử lý trường hợp nil một cách an toàn
- [ ] Tìm các giá trị trả về kiểu con trỏ `*Type` mà không có tài liệu mô tả khi nào trả về nil
- [ ] Phát hiện những nơi dùng `new()` trong khi viết `&Type{}` rõ ràng hơn
- [ ] Xác định các lỗi interface chứa con trỏ nil có định kiểu (gán `(*T)(nil)` vào giao diện `error`)
- [ ] Kiểm tra sự thiếu nhất quán giữa slice nil và slice rỗng (đặc biệt khi tuần tự hóa sang JSON)

### 2.2 Hành vi của Giá trị Không (Zero Value Behavior)
- [ ] Tìm các struct mà giá trị khởi tạo mặc định (zero value) không thể sử dụng ngay được (thiếu hàm khởi tạo constructor / hàm `New`)
- [ ] Xác định các map được đem ra sử dụng mà chưa khởi tạo bằng `make()`
- [ ] Phát hiện các channel được đem ra sử dụng mà chưa khởi tạo bằng `make()`
- [ ] Tìm các giá trị số bằng 0 cần phải được kiểm tra (chia cho 0, đánh chỉ mục slice)
- [ ] Xác định các giá trị boolean mặc định (`false`) trong cấu hình ở những nơi cần giá trị mặc định tường minh
- [ ] Kiểm tra các giá trị chuỗi mặc định (`""`) bị nhầm lẫn với trạng thái "chưa được thiết lập"
- [ ] Tìm các vấn đề với giá trị mặc định của `time.Time` (hiển thị năm 0001 thay vì trạng thái "chưa thiết lập")
- [ ] Phát hiện `sync.WaitGroup` / `sync.Once` / `sync.Mutex` bị sử dụng trước khi khởi tạo hợp lệ
- [ ] Xác định các thao tác cắt lát trên slice có độ dài bằng 0 mà không kiểm tra độ dài trước

---

## 3. PHÂN TÍCH XỬ LÝ LỖI (ERROR HANDLING ANALYSIS)

### 3.1 Các Mẫu Xử lý Lỗi
- [ ] Tìm TẤT CẢ những nơi lỗi bị phớt lờ (gán vào định danh trống `_` hoặc không kiểm tra kết quả trả về)
- [ ] Xác định các khối `if err != nil` chỉ trả về `return err` trống không mà không bọc thêm ngữ cảnh (wrapping context)
- [ ] Phát hiện việc bọc lỗi (error wrapping) không dùng động từ định dạng `%w` (làm hỏng cơ chế kiểm tra `errors.Is`/`errors.As`)
- [ ] Tìm các chuỗi thông báo lỗi bắt đầu bằng chữ in hoa hoặc kết thúc bằng dấu chấm câu (vi phạm quy ước của Go)
- [ ] Xác định các kiểu lỗi tùy chỉnh không triển khai phương thức `Unwrap()`
- [ ] Kiểm tra việc sử dụng `errors.Is()` / `errors.As()` thay vì phép so sánh trực tiếp `==`
- [ ] Tìm các lỗi đánh dấu (sentinel errors) lẽ ra nên được khai báo làm biến cấp độ gói (`var ErrNotFound = ...`)
- [ ] Phát hiện việc xử lý lỗi bên trong các hàm `defer` làm che khuất (shadow) lỗi của hàm bên ngoài
- [ ] Xác định việc khôi phục lỗi nghiêm trọng (`recover()`) đặt sai vị trí hoặc bị bỏ sót hoàn toàn
- [ ] Kiểm tra phân cấp kiểu lỗi và phân loại lỗi đã hợp lý hay chưa

### 3.2 Lỗi Panic & Khôi phục (Recovery)
- [ ] Tìm các lệnh gọi `panic()` nằm trong mã thư viện (lẽ ra phải trả về `error`)
- [ ] Xác định việc thiếu `recover()` bên trong các goroutine (một panic không được bắt trong goroutine sẽ làm sập toàn bộ tiến trình)
- [ ] Phát hiện lệnh `log.Fatal()` / `os.Exit()` nằm trong mã thư viện (chỉ được phép xuất hiện trong hàm `main`)
- [ ] Tìm các vị trí có nguy cơ truy cập vượt quá giới hạn mảng/slice (index out of range) mà không kiểm tra biên
- [ ] Xác định lệnh `panic` nằm trong các hàm `init()` mà không có tài liệu giải thích rõ ràng
- [ ] Kiểm tra cơ chế khôi phục panic (`recover`) đã được trang bị đúng chuẩn trong các HTTP handlers / middleware chưa
- [ ] Tìm các hàm theo mẫu `must` (bắt buộc thành công hoặc panic) nhưng không tuân thủ quy ước đặt tên tiền tố `Must...` rõ ràng
- [ ] Phát hiện việc dùng panic trên các luồng xử lý nóng (hot paths) ở những nơi hoàn toàn có thể trả về lỗi thông thường

### 3.3 Bọc Lỗi & Ngữ cảnh (Error Wrapping & Context)
- [ ] Tìm các thông báo lỗi không chứa thông tin ngữ cảnh (đang thực hiện thao tác nào, với dữ liệu đầu vào nào)
- [ ] Xác định việc bọc lỗi chồng chéo tạo ra chuỗi lỗi sâu quá mức cần thiết
- [ ] Phát hiện phong cách bọc lỗi thiếu nhất quán trên toàn bộ cơ sở mã nguồn
- [ ] Kiểm tra cú pháp `fmt.Errorf("...: %w", err)` đã sử dụng đúng động từ định dạng chưa
- [ ] Tìm những nơi nên dùng lỗi có cấu trúc (custom error types) thay thế cho lỗi dạng chuỗi đơn thuần
- [ ] Xác định việc thiếu thông tin dấu vết ngăn xếp (stack trace) trên các luồng lỗi nghiêm trọng
- [ ] Kiểm tra các thông báo lỗi có làm rò rỉ thông tin nhạy cảm hay không (mật khẩu, token, dữ liệu định danh cá nhân PII)

---

## 4. XỬ LÝ ĐỒNG THỜI & GOROUTINES (CONCURRENCY & GOROUTINES)

### 4.1 Quản lý Goroutine
- [ ] Tìm các điểm rò rỉ goroutine (goroutine được khởi chạy nhưng không bao giờ kết thúc)
- [ ] Xác định các goroutine không có cơ chế dừng an toàn (hủy qua context cancellation)
- [ ] Phát hiện các goroutine được khởi chạy bên trong vòng lặp mà không có cơ chế giới hạn số lượng chạy đồng thời
- [ ] Tìm các goroutine chạy kiểu "bắn rồi quên" (fire-and-forget) mà không có cơ chế báo cáo lỗi
- [ ] Xác định các goroutine tồn tại lâu hơn hàm đã khởi tạo ra chúng mà không được quản lý vòng đời
- [ ] Kiểm tra lỗi `go func()` bắt giữ biến vòng lặp (vấn đề trên các phiên bản Go <1.22)
- [ ] Tìm các nhóm goroutine (goroutine pools) phình to không giới hạn
- [ ] Phát hiện các goroutine không có `recover()` để đảm bảo an toàn trước lỗi panic
- [ ] Xác định những chỗ thiếu `sync.WaitGroup` để theo dõi việc hoàn tất của các goroutine
- [ ] Kiểm tra việc sử dụng đúng `errgroup.Group` cho các nhóm goroutine cần lan truyền lỗi

### 4.2 Các Vấn đề với Channel
- [ ] Tìm các channel không có bộ đệm (unbuffered channels) có nguy cơ gây khóa chết (deadlock)
- [ ] Xác định các channel không bao giờ được đóng (nguy cơ gây rò rỉ goroutine đang chờ)
- [ ] Phát hiện lỗi đóng channel hai lần (double-close gây runtime panic)
- [ ] Tìm lỗi gửi dữ liệu vào channel đã đóng (gây runtime panic)
- [ ] Xác định việc thiếu khối `select` kèm nhánh `default` cho các thao tác gửi/nhận không chặn (non-blocking)
- [ ] Kiểm tra việc thiếu nhánh `case <-ctx.Done():` (`context.Done()`) trong các câu lệnh `select`
- [ ] Tìm các chữ ký hàm thiếu chỉ định chiều của channel (`chan T` thay vì chỉ rõ `<-chan T` hoặc `chan<- T`)
- [ ] Phát hiện những chỗ dùng channel làm khóa loại trừ tương hỗ trong khi dùng `sync.Mutex` sẽ rõ ràng hơn
- [ ] Xác định kích thước bộ đệm (buffer size) của channel được đặt tùy tiện mà không có cơ sở tính toán
- [ ] Kiểm tra các mẫu phân tán/gom tụ (fan-out/fan-in) thiếu cơ chế điều phối đóng/chờ hợp lý

### 4.3 Điều kiện Tranh chấp & Đồng bộ hóa (Race Conditions & Synchronization)
- [ ] Tìm các trạng thái khả biến dùng chung (shared mutable state) được truy cập mà không có cơ chế đồng bộ hóa
- [ ] Xác định những chỗ dùng `sync.Map` trong khi dùng `map` thông thường kết hợp `sync.RWMutex` tốt hơn (hoặc ngược lại)
- [ ] Phát hiện các vấn đề về thứ tự khóa (lock ordering) có thể dẫn đến khóa chết (deadlock)
- [ ] Tìm những chỗ dùng `sync.Mutex` lẽ ra nên đổi sang `sync.RWMutex` cho các tác vụ đọc nhiều ghi ít (read-heavy workloads)
- [ ] Xác định những nơi nên dùng các phép toán nguyên tử (`sync/atomic`) thay vì mutex cho các bộ đếm đơn giản
- [ ] Kiểm tra việc sử dụng `sync.Once` đã đúng cách chưa (đặc biệt khi hàm khởi tạo có thể trả về lỗi)
- [ ] Tìm các lỗi tranh chấp dữ liệu (data races) khi nhiều goroutine cùng truy cập trường của một struct
- [ ] Phát hiện các lỗ hổng lệch pha giữa thời điểm kiểm tra và thời điểm sử dụng (TOCTOU - time-of-check to time-of-use)
- [ ] Xác định việc giữ khóa (lock) trong suốt quá trình thực hiện thao tác I/O chậm chạp (gây nghẽn toàn bộ các luồng chờ khóa)
- [ ] Kiểm tra việc sử dụng đúng `sync.Pool` (đặt lại trạng thái đối tượng trước khi dùng lại, gọi Put sau khi Get)
- [ ] Tìm sự thiếu hụt bằng chứng kiểm thử với cờ phát hiện tranh chấp (`go vet -race` / cờ `-race`)
- [ ] Phát hiện việc sử dụng sai `sync.Cond` (thiếu lệnh gọi broadcast/signal hoặc không kiểm tra điều kiện trong vòng lặp)

### 4.4 Sử dụng Ngữ cảnh (Context Usage)
- [ ] Tìm các hàm nhận `context.Context` nhưng không đặt nó làm tham số đầu tiên
- [ ] Xác định những chỗ dùng `context.Background()` ở nơi lẽ ra phải truyền tiếp ngữ cảnh cha (parent context)
- [ ] Phát hiện `context.TODO()` còn sót lại trong mã nguồn chạy thực tế (production code)
- [ ] Tìm các thao tác chạy dài hạn nhưng không kiểm tra tín hiệu hủy ngữ cảnh (context cancellation)
- [ ] Xác định việc lạm dụng `context.WithValue` để truyền dữ liệu phạm vi yêu cầu (request-scoped data) không phù hợp
- [ ] Kiểm tra lỗi rò rỉ ngữ cảnh (context leaks do quên gọi hàm `cancel`)
- [ ] Tìm các lệnh `context.WithTimeout`/`WithDeadline` không đi kèm `defer cancel()` ngay sau đó
- [ ] Phát hiện việc lưu trữ đối tượng `context.Context` bên trong struct (lẽ ra phải truyền qua tham số hàm)

---

## 5. QUẢN LÝ TÀI NGUYÊN (RESOURCE MANAGEMENT)

### 5.1 Cơ chế Defer & Dọn dẹp Tài nguyên
- [ ] Tìm các lệnh `defer` nằm bên trong vòng lặp (các lệnh defer sẽ không chạy cho đến khi toàn bộ hàm kết thúc)
- [ ] Xác định các lệnh `defer` bắt giữ biến của vòng lặp
- [ ] Phát hiện việc thiếu `defer` để giải phóng tài nguyên (tệp tin, kết nối mạng, khóa lock)
- [ ] Tìm các lỗi do không tính đến thứ tự thực thi vào sau ra trước (LIFO) của chuỗi lệnh `defer`
- [ ] Xác định việc dùng `defer` trên các phương thức có thể thất bại âm thầm (`defer f.Close()` — bỏ qua lỗi khi đóng tệp ghi)
- [ ] Kiểm tra sự tương tác giữa `defer` và các giá trị trả về được đặt tên (named return values — gắn kết muộn)
- [ ] Tìm các tài nguyên được mở ra nhưng không bao giờ được đóng lại (file descriptors, phần thân phản hồi HTTP)
- [ ] Phát hiện `http.Response.Body` không được đóng sau khi đọc
- [ ] Xác định các đối tượng `sql.Rows` / `sql.Stmt` từ cơ sở dữ liệu không được đóng lại

### 5.2 Quản lý Bộ nhớ (Memory Management)
- [ ] Tìm các lệnh cấp phát bộ nhớ lớn nằm trên luồng xử lý nóng (hot paths)
- [ ] Xác định những chỗ thiếu gợi ý dung lượng khởi tạo cho slice (`make([]T, 0, expectedSize)`)
- [ ] Phát hiện việc không sử dụng `strings.Builder` khi nối chuỗi bên trong vòng lặp
- [ ] Tìm các lệnh `append()` làm phình slice liên tục mà không cấp phát trước dung lượng (pre-allocation)
- [ ] Xác định các phép chuyển đổi qua lại giữa slice byte và chuỗi (`[]byte` ↔ `string`) trên luồng xử lý nóng gây cấp phát bộ nhớ mới
- [ ] Kiểm tra việc sử dụng hợp lý `sync.Pool` cho các đối tượng được cấp phát với tần suất cao
- [ ] Tìm các struct có kích thước lớn bị truyền theo giá trị thay vì truyền qua con trỏ
- [ ] Phát hiện việc cắt lát lại slice (reslicing) giữ tham chiếu làm bộ thu gom rác (GC) không thể giải phóng mảng lớn bên dưới
- [ ] Xác định các biến `map` chỉ phình to thêm mà không bao giờ thu nhỏ lại (mẫu gây rò rỉ bộ nhớ ngầm)
- [ ] Kiểm tra việc tái sử dụng bộ đệm trong các thao tác I/O (`bufio`, `bytes.Buffer`)

### 5.3 Tài nguyên Tệp tin & I/O
- [ ] Tìm các lệnh `os.Open` / `os.Create` không có `defer f.Close()`
- [ ] Xác định việc dùng `io.ReadAll` trên đầu vào có khả năng rất lớn (nguy cơ tràn bộ nhớ OOM)
- [ ] Phát hiện việc thiếu `bufio.Scanner` / `bufio.Reader` khi đọc các tệp tin dung lượng lớn
- [ ] Tìm các tệp tạm (temporary files) được tạo ra nhưng không được xóa dọn
- [ ] Xác định việc sử dụng `os.TempDir()` mà không có quy trình dọn dẹp thích hợp
- [ ] Kiểm tra quyền truy cập tệp tin được cấp quá rộng (0777, 0666)
- [ ] Tìm những chỗ thiếu lệnh đồng bộ đĩa `fsync` (`f.Sync()`) đối với các thao tác ghi dữ liệu quan trọng
- [ ] Phát hiện các điều kiện tranh chấp (race conditions) trên các thao tác đọc/ghi tệp tin

---

## 6. CÁC LỖ HỔNG BẢO MẬT (SECURITY VULNERABILITIES)

### 6.1 Các Cuộc Tấn công Tiêm Mã độc (Injection Attacks)
- [ ] Tìm các câu truy vấn SQL được ghép nối bằng `fmt.Sprintf` thay vì dùng truy vấn tham số hóa (parameterized queries)
- [ ] Xác định lỗ hổng tiêm lệnh hệ điều hành (command injection) thông qua `exec.Command` chứa dữ liệu từ người dùng
- [ ] Phát hiện lỗ hổng duyệt đường dẫn trái phép (path traversal khi dùng `filepath.Join` với đầu vào người dùng mà không kiểm tra bao đóng và `filepath.Clean`)
- [ ] Tìm lỗ hổng tiêm mẫu giao diện (template injection) trong `html/template` hoặc `text/template`
- [ ] Xác định nguy cơ tiêm dữ liệu giả vào nhật ký (log injection — ghi trực tiếp đầu vào người dùng vào log mà không làm sạch)
- [ ] Kiểm tra các lỗ hổng tiêm truy vấn LDAP (LDAP injection)
- [ ] Tìm lỗi tiêm tiêu đề (header injection) trong các phản hồi HTTP
- [ ] Phát hiện lỗ hổng giả mạo yêu cầu phía máy chủ (SSRF — dùng URL do người dùng kiểm soát để gọi HTTP request)
- [ ] Xác định rủi ro tấn công qua giải tuần tự hóa (deserialization) với `encoding/gob`, `encoding/json` vào kiểu `interface{}`
- [ ] Kiểm tra lỗ hổng từ chối dịch vụ qua biểu thức chính quy (ReDoS) khi biên dịch mẫu regex do người dùng nhập vào

### 6.2 Xác thực & Phân quyền (Authentication & Authorization)
- [ ] Tìm thông tin đăng nhập, khóa API hoặc bí mật (secrets) bị viết cứng trong mã nguồn
- [ ] Xác định các điểm cuối cần bảo vệ nhưng bị thiếu middleware xác thực
- [ ] Phát hiện khả năng vượt qua bước kiểm tra phân quyền (lỗ hổng tham chiếu đối tượng trực tiếp không an toàn IDOR)
- [ ] Tìm các khiếm khuyết trong triển khai JWT (nhầm lẫn thuật toán ký, thiếu kiểm tra tính hợp lệ của các trường chuẩn)
- [ ] Xác định rủi ro tấn công đo thời gian (timing attacks) trong các phép so sánh chuỗi bí mật (hãy dùng `crypto/subtle.ConstantTimeCompare`)
- [ ] Kiểm tra việc băm mật khẩu đúng chuẩn (`bcrypt`, `argon2`, TUYỆT ĐỐI KHÔNG dùng `md5`/`sha256` thuần)
- [ ] Tìm các mã phiên làm việc (session tokens) có độ ngẫu nhiên (entropy) không đủ mạnh
- [ ] Phát hiện nguy cơ leo thang đặc quyền thông qua việc bỏ qua bước kiểm tra vai trò/quyền hạn
- [ ] Xác định việc thiếu cơ chế bảo vệ chống giả mạo yêu cầu chéo trang (CSRF) trên các điểm cuối làm thay đổi trạng thái
- [ ] Kiểm tra việc triển khai OAuth2 đúng chuẩn (tham số `state`, cơ chế PKCE)

### 6.3 Các Vấn đề về Mật mã học (Cryptographic Issues)
- [ ] Tìm những chỗ dùng `math/rand` thay vì `crypto/rand` cho các mục đích bảo mật
- [ ] Xác định các thuật toán băm yếu (`md5`, `sha1`) được dùng cho các tác vụ nhạy cảm về bảo mật
- [ ] Phát hiện khóa mã hóa hoặc vector khởi tạo (IV) bị viết cứng trong mã
- [ ] Tìm việc sử dụng chế độ mã hóa khối ECB không an toàn (lẽ ra phải dùng GCM, CTR, hoặc CBC với IV ngẫu nhiên chuẩn)
- [ ] Xác định việc thiếu cấu hình TLS hoặc bật cờ bỏ qua xác thực chứng chỉ nguy hiểm `InsecureSkipVerify: true`
- [ ] Kiểm tra quy trình xác thực chứng chỉ số đã đầy đủ chưa
- [ ] Tìm các gói hoặc thuật toán mật mã đã lỗi thời/ngừng khuyến khích
- [ ] Phát hiện lỗi tái sử dụng số dùng một lần (nonce reuse) trong mã hóa
- [ ] Xác định việc so sánh chữ ký HMAC mà không dùng hàm so sánh thời gian hằng số (`hmac.Equal`)

### 6.4 Xác thực & Làm sạch Dữ liệu Đầu vào (Input Validation & Sanitization)
- [ ] Tìm những chỗ thiếu giới hạn độ dài/kích thước dữ liệu đầu vào
- [ ] Xác định việc gọi `io.ReadAll` mà không bọc qua `io.LimitReader` (nguy cơ tấn công từ chối dịch vụ DoS làm tràn RAM)
- [ ] Phát hiện việc thiếu kiểm tra kiểu nội dung (`Content-Type`) đối với các tệp tải lên
- [ ] Tìm lỗi tràn số nguyên trên/dưới (integer overflow/underflow) khi tính toán kích thước bộ nhớ
- [ ] Xác định việc thiếu kiểm tra tính hợp lệ của URL trước khi thực hiện yêu cầu HTTP
- [ ] Kiểm tra việc xử lý giới hạn dung lượng dữ liệu biểu mẫu nhiều phần (multipart form data limits)
- [ ] Tìm các điểm cuối công khai bị thiếu giới hạn tần suất truy cập (rate limiting)
- [ ] Phát hiện các lệnh chuyển hướng trang không được kiểm tra đích đến (lỗ hổng open redirect)
- [ ] Xác định dữ liệu đầu vào của người dùng được đưa trực tiếp vào đường dẫn tệp mà không qua làm sạch
- [ ] Kiểm tra cấu hình chia sẻ tài nguyên liên nguồn (CORS) đã chặt chẽ chưa

### 6.5 Bảo mật Dữ liệu (Data Security)
- [ ] Tìm dữ liệu nhạy cảm bị ghi vào nhật ký hệ thống (mật khẩu, token, thông tin cá nhân PII)
- [ ] Xác định dữ liệu cá nhân nhạy cảm (PII) được lưu trữ mà không mã hóa khi nghỉ (encryption at rest)
- [ ] Phát hiện dữ liệu nhạy cảm được truyền trên thanh địa chỉ qua tham số truy vấn URL (query parameters)
- [ ] Tìm các dữ liệu nhạy cảm hoặc chi tiết nội bộ bị lộ trong thông báo lỗi trả về cho máy khách
- [ ] Xác định việc thiếu các cờ bảo mật `Secure`, `HttpOnly`, `SameSite` trên cookie
- [ ] Kiểm tra xem có dữ liệu nhạy cảm trong biến môi trường bị in ra nhật ký lúc khởi động hay không
- [ ] Tìm các phản hồi API vô tình làm lộ chi tiết triển khai nội bộ của hệ thống
- [ ] Phát hiện việc thiếu các tiêu đề phản hồi bảo mật quan trọng (CSP, HSTS, X-Frame-Options)

---

## 7. PHÂN TÍCH HIỆU NĂNG (PERFORMANCE ANALYSIS)

### 7.1 Độ phức tạp Thuật toán (Algorithmic Complexity)
- [ ] Tìm các thuật toán có độ phức tạp O(n²) hoặc tệ hơn có thể được tối ưu hóa
- [ ] Xác định các vòng lặp lồng nhau có thể được làm phẳng hoặc giảm bậc
- [ ] Phát hiện việc duyệt lặp lại nhiều lần trên cùng một slice/map có thể gộp chung vào một vòng lặp
- [ ] Tìm các phép tìm kiếm tuyến tính (linear searches) lẽ ra nên dùng `map` để tra cứu với độ phức tạp O(1)
- [ ] Xác định các thao tác sắp xếp toàn bộ mảng có thể tránh được bằng cách dùng cấu trúc đống/hàng đợi ưu tiên (`container/heap`)
- [ ] Kiểm tra các thao tác sao chép slice không cần thiết (`append`, trải phần tử spread)
- [ ] Tìm các hàm đệ quy tính toán lặp lại mà không có kỹ thuật ghi nhớ kết quả (memoization)
- [ ] Phát hiện các thao tác tốn kém tài nguyên đặt bên trong các vòng lặp chạy tần suất cao (hot loops)

### 7.2 Hiệu năng Đặc thù của Go (Go-Specific Performance)
- [ ] Tìm các cấp phát bộ nhớ dư thừa trên heap có thể phát hiện qua phân tích thoát biến (`go build -gcflags="-m"`)
- [ ] Xác định việc đóng gói giá trị vào interface (interface boxing) trên luồng xử lý nóng gây cấp phát bộ nhớ
- [ ] Phát hiện việc lạm dụng `fmt.Sprintf` ở những nơi dùng các hàm trong gói `strconv` sẽ nhanh hơn nhiều
- [ ] Tìm việc sử dụng `reflect` trên các luồng xử lý nóng
- [ ] Xác định việc dùng `defer` bên trong các vòng lặp cực ngắn chạy liên tục (tốn chi phí quản lý mỗi vòng lặp)
- [ ] Kiểm tra các phép chuyển đổi `string` → `[]byte` → `string` liên tiếp có thể tránh được
- [ ] Tìm các thao tác tuần tự hóa/giải tuần tự hóa JSON trên luồng xử lý nóng (cân nhắc các giải pháp sinh mã tĩnh thay thế)
- [ ] Phát hiện việc duyệt `map` ở những nơi thứ tự phần tử đóng vai trò quan trọng (bản chất map trong Go không có thứ tự cố định)
- [ ] Xác định các lệnh gọi `time.Now()` liên tục trong vòng lặp chặt (chi phí gọi hàm hệ thống syscall)
- [ ] Kiểm tra việc sử dụng đúng `sync.Pool` trong các đoạn mã cấp phát đối tượng dày đặc
- [ ] Tìm các lệnh `regexp.Compile` bị gọi lặp đi lặp lại trong hàm (lẽ ra phải biên dịch một lần ở biến cấp độ gói `var`)
- [ ] Phát hiện lệnh `append` không cấp phát trước dung lượng (pre-allocated capacity) trong các thao tác đã biết trước kích thước

### 7.3 Hiệu năng I/O
- [ ] Tìm các thao tác I/O đồng bộ có nguy cơ gây nghẽn trong các đoạn mã sử dụng nhiều goroutine
- [ ] Xác định việc thiếu cơ chế tái sử dụng kết nối (connection pooling) cho cơ sở dữ liệu hoặc HTTP client
- [ ] Phát hiện việc thiếu bộ đệm I/O (`bufio.Reader`/`bufio.Writer`) khi đọc/ghi nhiều lần nhỏ lẻ
- [ ] Tìm các đối tượng `http.Client` không được cấu hình thời gian chờ tối đa (`Timeout`)
- [ ] Xác định lỗi không tái sử dụng `http.Client` (khởi tạo một client mới cho mỗi yêu cầu HTTP)
- [ ] Kiểm tra việc sử dụng trực tiếp `http.DefaultClient` (mặc định không có giới hạn timeout)
- [ ] Tìm các câu truy vấn cơ sở dữ liệu không có mệnh đề giới hạn số bản ghi `LIMIT`
- [ ] Phát hiện bài toán truy vấn N+1 khi lấy dữ liệu quan hệ
- [ ] Xác định việc thiếu sử dụng câu lệnh chuẩn bị trước (prepared statements) cho các truy vấn lặp lại nhiều lần
- [ ] Kiểm tra lỗi quên đọc cạn phần thân phản hồi trước khi đóng (`io.Copy(io.Discard, resp.Body)`) khiến kết nối TCP không thể tái sử dụng

### 7.4 Hiệu năng Bộ nhớ (Memory Performance)
- [ ] Tìm việc sao chép các struct lớn trong mỗi lần gọi hàm (hãy truyền qua con trỏ)
- [ ] Xác định lỗi rò rỉ mảng nền của slice (cắt lấy một slice con nhỏ làm mảng lớn ban đầu không thể được GC thu hồi)
- [ ] Phát hiện các biến `map` phình to vô hạn theo thời gian mà không có cơ chế dọn dẹp hoặc trục xuất phần tử cũ (eviction)
- [ ] Tìm phép cộng nối chuỗi trực tiếp trong vòng lặp (hãy dùng `strings.Builder`)
- [ ] Xác định các hàm đóng (closures) bắt giữ các đối tượng lớn một cách không cần thiết
- [ ] Kiểm tra việc tái sử dụng đối tượng `bytes.Buffer` hợp lý
- [ ] Tìm việc sử dụng `ioutil.ReadAll` (đã ngừng hỗ trợ và đọc không giới hạn dung lượng)
- [ ] Phát hiện việc thiếu bằng chứng đo đạc bằng `pprof` hoặc `benchmark` cho các tuyên bố tối ưu hóa hiệu năng

---

## 8. CÁC VẤN ĐỀ VỀ CHẤT LƯỢNG MÃ NGUỒN (CODE QUALITY ISSUES)

### 8.1 Phát hiện Mã Chết (Dead Code Detection)
- [ ] Tìm các hàm, phương thức hoặc kiểu dữ liệu được xuất công khai (exported) nhưng không nơi nào sử dụng
- [ ] Xác định các đoạn mã không bao giờ chạm tới được nằm sau lệnh `return`/`panic`/`os.Exit`
- [ ] Phát hiện các tham số hàm được khai báo nhưng không được sử dụng
- [ ] Tìm các trường trong struct không bao giờ được đọc hoặc ghi
- [ ] Xác định các lệnh import dư thừa (trình biên dịch thường bắt lỗi này, nhưng cần kiểm tra cả trong các tệp mã tự động sinh)
- [ ] Kiểm tra các khối mã bị đóng chú thích (commented-out code) bỏ lại trong dự án
- [ ] Tìm các định nghĩa kiểu dữ liệu (type definitions) không được sử dụng
- [ ] Phát hiện các hằng số và biến không được sử dụng
- [ ] Xác định các tệp mã gắn thẻ điều kiện biên dịch (build tags) nhưng không bao giờ được biên dịch trong thực tế
- [ ] Tìm các hàm bổ trợ kiểm thử (test helpers) bị bỏ rơi không còn bài kiểm thử nào gọi tới

### 8.2 Trùng lặp Mã nguồn (Code Duplication)
- [ ] Tìm các hàm có phần triển khai giống hệt nhau nằm rải rác ở nhiều gói (packages)
- [ ] Xác định các khối mã sao chép-dán chỉ khác nhau một vài chi tiết nhỏ
- [ ] Phát hiện các luồng logic tương tự nhau có thể trừu tượng hóa thành hàm dùng chung
- [ ] Tìm các định nghĩa struct bị trùng lặp
- [ ] Xác định các đoạn mã xử lý lỗi khuôn mẫu lặp đi lặp lại có thể gom vào middleware
- [ ] Kiểm tra các logic xác thực dữ liệu (validation) bị viết lặp lại ở nhiều nơi
- [ ] Tìm các mẫu hàm xử lý HTTP handler tương tự nhau có thể tổng quát hóa
- [ ] Phát hiện các hằng số trùng lặp được khai báo lại ở nhiều gói khác nhau

### 8.3 Mùi Mã nguồn (Code Smells)
- [ ] Tìm các hàm dài quá 50 dòng
- [ ] Xác định các tệp mã nguồn lớn hơn 500 dòng (nên tách thành nhiều tệp nhỏ theo chức năng)
- [ ] Phát hiện các câu lệnh điều kiện lồng nhau quá sâu (>3 cấp) — hãy áp dụng kỹ thuật trả về sớm (early returns)
- [ ] Tìm các hàm có quá nhiều tham số đầu vào (>5) — hãy dùng mẫu tùy chọn (options pattern) hoặc gom vào struct cấu hình
- [ ] Xác định các "gói vạn năng" (God packages) ôm đồm quá nhiều trách nhiệm
- [ ] Kiểm tra các hàm `init()` gây hiệu ứng phụ (khó kiểm thử, phụ thuộc ngầm vào thứ tự nạp gói)
- [ ] Tìm các câu lệnh `switch` dài dòng lẽ ra nên dùng tính đa hình (gọi phương thức qua interface)
- [ ] Phát hiện các tham số kiểu boolean làm thay đổi hành vi hàm (hãy dùng options hoặc tách thành hai hàm riêng có tên rõ ràng)
- [ ] Xác định các cụm dữ liệu đi kèm nhau liên tục (data clumps — nhóm các tham số luôn xuất hiện cùng nhau ở nhiều hàm)
- [ ] Tìm sự tổng quát hóa phỏng đoán trước tương lai (speculative generality — tạo ra các tầng trừu tượng/interface chưa thực sự cần dùng)

### 8.4 Thành ngữ & Phong cách Chuẩn Go (Go Idioms & Style)
- [ ] Tìm cách xử lý lỗi không chuẩn Go (không tuân theo mẫu kiểm tra `if err != nil` ngay sau lệnh gọi)
- [ ] Xác định các hàm lấy giá trị (getters) gắn tiền tố `Get` thừa thãi (quy ước chuẩn của Go: viết `Name()` chứ không viết `GetName()`)
- [ ] Phát hiện các kiểu dữ liệu nội bộ (unexported types) được trả về từ các hàm công khai (exported functions) gây bất tiện cho bên gọi
- [ ] Tìm cách đặt tên gây lắp bắp lặp từ với tên gói (`http.HTTPClient` → nên đặt là `http.Client`)
- [ ] Xác định các khối `else` dư thừa ngay sau khối `if` đã có lệnh `return` (nên bỏ `else` để giữ mã phẳng)
- [ ] Kiểm tra việc sử dụng đúng từ khóa `iota` cho các tập hằng số liệt kê (enumerations)
- [ ] Tìm các hàm/kiểu xuất công khai (exported) bị thiếu chú thích tài liệu (doc comments)
- [ ] Phát hiện những chỗ khai báo `var` dài dòng khi dùng `:=` gọn gàng hơn (và ngược lại khi cần chỉ rõ kiểu hoặc zero value)
- [ ] Xác định việc thiếu chú thích tài liệu ở cấp độ gói (`// Package foo ...`)
- [ ] Kiểm tra cách đặt tên biến nhận (receiver naming) của phương thức (ngắn gọn, nhất quán 1-2 chữ cái như `s` cho `Server`, tuyệt đối không đặt là `this` hay `self`)
- [ ] Tìm các giao diện chỉ có một phương thức duy nhất nhưng tên không kết thúc bằng hậu tố `-er` (`Reader`, `Writer`, `Closer`)
- [ ] Phát hiện việc dùng lệnh `return` trống (naked returns) trong các hàm dài và phức tạp làm giảm tính dễ đọc

---

## 9. KIẾN TRÚC & THIẾT KẾ (ARCHITECTURE & DESIGN)

### 9.1 Cấu trúc Gói (Package Structure)
- [ ] Tìm sự phụ thuộc vòng tròn giữa các gói (`go vet ./...` sẽ báo lỗi không biên dịch được, nhưng cần kiểm tra cả các phụ thuộc vòng gián tiếp qua interface/hạ tầng)
- [ ] Xác định những nơi thiếu thư mục `internal/` để bảo vệ các gói không muốn bên ngoài import
- [ ] Phát hiện phản mẫu "nhồi nhét tất cả mọi thứ vào chung một gói"
- [ ] Tìm sự phân tầng gói sai nguyên tắc (tầng logic nghiệp vụ lại đi import gói xử lý HTTP handlers)
- [ ] Xác định việc thiếu ranh giới kiến trúc sạch (phân tách rõ các tầng domain, service, repository)
- [ ] Kiểm tra cấu trúc thư mục `cmd/` đã chuẩn xác khi dự án tạo ra nhiều tệp thực thi (binaries) chưa
- [ ] Tìm các biến trạng thái toàn cục khả biến được chia sẻ trực tiếp giữa nhiều gói
- [ ] Phát hiện việc lạm dụng hoặc tổ chức sai mục đích thư mục `pkg/`
- [ ] Xác định việc thiếu áp dụng tiêm phụ thuộc (dependency injection — các hàm khởi tạo constructor nên nhận đầu vào là interfaces)
- [ ] Kiểm tra sự tách biệt rõ ràng giữa phần định nghĩa giao diện API và phần triển khai chi tiết

### 9.2 Các Nguyên lý SOLID
- [ ] **Đơn trách nhiệm (Single Responsibility)**: Tìm các gói/tệp tin đang gánh vác quá nhiều việc khác nhau
- [ ] **Đóng/Mở (Open/Closed)**: Tìm các đoạn mã buộc phải sửa đổi trực tiếp mỗi khi muốn mở rộng tính năng (thiếu áp dụng interfaces/plugins)
- [ ] **Thay thế Liskov (Liskov Substitution)**: Tìm các bản triển khai interface vi phạm hợp đồng hành vi kỳ vọng của interface đó
- [ ] **Phân tách Giao diện (Interface Segregation)**: Tìm các interface quá lớn cần được tách nhỏ thành các interface chuyên biệt
- [ ] **Đảo ngược Phụ thuộc (Dependency Inversion)**: Tìm các phụ thuộc cứng vào kiểu cụ thể (concrete types) ở những nơi lẽ ra phải phụ thuộc vào interface

### 9.3 Các Mẫu Thiết kế (Design Patterns)
- [ ] Tìm những chỗ thiếu mẫu `Functional Options` cho các kiểu dữ liệu có nhiều tham số cấu hình tùy chọn
- [ ] Xác định các hàm khởi tạo `New*` nên được thiết kế nhận danh sách hàm tùy chọn `...Option`
- [ ] Phát hiện việc thiếu mẫu middleware cho các tác vụ cắt ngang (ghi log, xác thực, thu thập metrics, khôi phục lỗi)
- [ ] Tìm các bản triển khai observer/pubsub tự viết có nguy cơ gây rò rỉ goroutine hoặc nghẽn kênh
- [ ] Xác định việc thiếu mẫu `Repository` để tách biệt tầng truy xuất cơ sở dữ liệu
- [ ] Kiểm tra việc áp dụng đúng mẫu `Builder` khi cần khởi tạo các đối tượng phức tạp qua nhiều bước
- [ ] Tìm các cơ hội áp dụng mẫu thiết kế `Strategy` đang bị bỏ lỡ (biến thiên hành vi thông qua interface)
- [ ] Phát hiện trạng thái toàn cục (global state) lẽ ra nên sử dụng tiêm phụ thuộc (dependency injection)

### 9.4 Thiết Kế API
- [ ] Tìm các HTTP handler xử lý trực tiếp logic nghiệp vụ (lẽ ra phải ủy quyền cho tầng service)
- [ ] Xác định các middleware xác thực dữ liệu yêu cầu/phản hồi (request/response validation) còn thiếu
- [ ] Phát hiện các quy ước REST API thiếu nhất quán giữa các endpoint
- [ ] Tìm các định nghĩa dịch vụ gRPC không sử dụng mã lỗi (error codes) chuẩn xác
- [ ] Xác định việc thiếu chiến lược quản lý phiên bản API (API versioning)
- [ ] Kiểm tra việc sử dụng đúng mã trạng thái HTTP (HTTP status code)
- [ ] Tìm các endpoint kiểm tra sức khỏe / mức độ sẵn sàng (health check / readiness) còn thiếu
- [ ] Phát hiện các API giao tiếp quá rườm rà (các endpoint gây lỗi N+1 lẽ ra nên được gộp theo lô)

---

## 10. PHÂN TÍCH PHỤ THUỘC (DEPENDENCY ANALYSIS)

### 10.1 Phân Tích Module & Phiên Bản
- [ ] Chạy `go list -m -u all` — xác định toàn bộ các gói phụ thuộc đã lỗi thời
- [ ] Kiểm tra tính nhất quán của `go.sum` (`go mod verify`)
- [ ] Tìm các chỉ thị `replace` bị bỏ quên lại trong `go.mod`
- [ ] Xác định các gói phụ thuộc có lỗ hổng bảo mật CVE đã biết (`govulncheck ./...`)
- [ ] Kiểm tra các gói phụ thuộc không sử dụng đến (xem thay đổi khi chạy `go mod tidy`)
- [ ] Tìm các gói phụ thuộc trong thư mục vendor đã lỗi thời
- [ ] Xác định các phụ thuộc gián tiếp (indirect) lẽ ra phải là phụ thuộc trực tiếp (direct)
- [ ] Kiểm tra phiên bản Go trong `go.mod` có khớp với môi trường CI/đích triển khai hay không
- [ ] Tìm các tệp gắn thẻ `//go:build ignore` có import gói phụ thuộc

### 10.2 Sức Khỏe Của Các Gói Phụ Thuộc
- [ ] Kiểm tra ngày commit cuối cùng của từng gói phụ thuộc
- [ ] Xác định các gói phụ thuộc đã bị lưu trữ (archived) hoặc ngừng bảo trì
- [ ] Tìm các gói phụ thuộc đang có các lỗi nghiêm trọng (critical issues) chưa được giải quyết
- [ ] Kiểm tra các gói phụ thuộc lạm dụng gói `unsafe` quá mức
- [ ] Xác định các gói phụ thuộc cồng kềnh hoàn toàn có thể thay thế bằng thư viện chuẩn (stdlib)
- [ ] Tìm các gói phụ thuộc có giấy phép hạn chế nghiêm ngặt (ví dụ: giấy phép GPL nằm trong dự án MIT)
- [ ] Kiểm tra các gói phụ thuộc yêu cầu CGO (gây lo ngại về tính khả chuyển giữa các hệ thống)
- [ ] Xác định các gói phụ thuộc kéo theo cây phụ thuộc bắc cầu (transitive trees) khổng lồ
- [ ] Tìm các gói phụ thuộc được tạo nhánh riêng (forked) nhưng không theo dõi cập nhật từ nhánh gốc (upstream)

### 10.3 Các Lưu Ý Về CGO
- [ ] Kiểm tra xem CGO có thực sự bắt buộc hay không và liệu có thể biên dịch với `CGO_ENABLED=0` hay không
- [ ] Tìm mã nguồn CGO không quản lý bộ nhớ đúng cách
- [ ] Xác định các lệnh gọi CGO nằm trên luồng thực thi nóng (hot paths) (chi phí chuyển ngữ cảnh qua ranh giới Go→C)
- [ ] Kiểm tra các phụ thuộc CGO làm hỏng khả năng biên dịch chéo (cross-compilation)
- [ ] Tìm mã CGO không xử lý lỗi trả về từ C đúng chuẩn
- [ ] Phát hiện nguy cơ rò rỉ bộ nhớ (memory leaks) xuyên qua ranh giới CGO

---

## 11. KHOẢNG TRỐNG TRONG KIỂM THỬ (TESTING GAPS)

### 11.1 Phân Tích Độ Bao Phủ (Coverage Analysis)
- [ ] Chạy `go test -coverprofile` — xác định các gói và hàm chưa được kiểm thử
- [ ] Tìm các nhánh xử lý lỗi chưa được kiểm thử (đặc biệt là các nhánh trả về lỗi)
- [ ] Phát hiện các trường hợp biên (edge cases) trong câu lệnh điều kiện chưa được kiểm thử
- [ ] Kiểm tra việc thiếu các bài kiểm thử giá trị biên (boundary value tests)
- [ ] Xác định các kịch bản chạy đồng thời (concurrent scenarios) chưa được kiểm thử
- [ ] Tìm các luồng xác thực dữ liệu đầu vào chưa được kiểm thử
- [ ] Kiểm tra việc thiếu các bài kiểm thử tích hợp (cơ sở dữ liệu, HTTP, gRPC)
- [ ] Xác định các luồng xử lý trọng yếu chưa có bài kiểm thử hiệu năng (`*testing.B`)

### 11.2 Chất Lượng Kiểm Thử
- [ ] Tìm các bài kiểm thử không gọi `t.Helper()` bên trong các hàm hỗ trợ kiểm thử (test helper functions)
- [ ] Xác định những chỗ lẽ ra nên viết kiểm thử hướng bảng (table-driven tests) nhưng chưa áp dụng
- [ ] Phát hiện các bài kiểm thử lạm dụng tạo giả (mocking) quá mức làm che giấu lỗi thực tế
- [ ] Tìm các bài kiểm thử đi kiểm tra chi tiết triển khai nội bộ thay vì kiểm tra hành vi đầu ra
- [ ] Xác định các bài kiểm thử dùng chung trạng thái có thể biến đổi (kết quả phụ thuộc vào thứ tự chạy test)
- [ ] Kiểm tra việc sử dụng `t.Parallel()` ở những nơi an toàn
- [ ] Tìm các bài kiểm thử chập chờn không ổn định (flaky tests - phụ thuộc thời gian hoặc hệ thống tệp)
- [ ] Phát hiện việc thiếu các bài kiểm thử con (`t.Run("name", ...)`)
- [ ] Xác định các tệp `testdata/` còn thiếu đối với kiểm thử đối chiếu kết quả chuẩn (golden tests)
- [ ] Kiểm tra việc dọn dẹp `httptest.NewServer` (thiếu lệnh `defer server.Close()`)

### 11.3 Hạ Tầng Kiểm Thử
- [ ] Tìm chỗ thiếu hàm `TestMain` phục vụ việc thiết lập/dọn dẹp (setup/teardown)
- [ ] Xác định việc thiếu thẻ biên dịch cho các bài kiểm thử tích hợp (`//go:build integration`)
- [ ] Phát hiện việc thiếu kiểm thử điều kiện tranh chấp dữ liệu (`go test -race`)
- [ ] Kiểm tra việc thiếu kiểm thử làm mờ dữ liệu đầu vào (fuzz tests với các hàm `Fuzz*` — từ Go 1.18+)
- [ ] Tìm các bài kiểm thử ví dụ còn thiếu (các hàm `Example*` phục vụ tài liệu godoc)
- [ ] Xác định việc thiếu các mốc cơ sở (baselines) để so sánh kết quả benchmark
- [ ] Kiểm tra việc quản lý dữ liệu mẫu kiểm thử (test fixtures) đúng chuẩn
- [ ] Tìm các bài kiểm thử phụ thuộc trực tiếp vào dịch vụ bên ngoài mà không dùng mock/stub

---

## 12. CẤU HÌNH & BIÊN DỊCH (CONFIGURATION & BUILD)

### 12.1 Cấu Hình Go Module
- [ ] Kiểm tra xem phiên bản Go trong `go.mod` đã phù hợp hay chưa
- [ ] Xác minh tệp `go.sum` đã được đưa vào quản lý phiên bản (commit) và nhất quán
- [ ] Kiểm tra cách đặt tên đường dẫn module đã đúng chuẩn chưa
- [ ] Tìm các chỉ thị `replace` không nên tồn tại trong các module được xuất bản công khai
- [ ] Xác định các chỉ thị thu hồi (`retract`) cần thiết đối với các phiên bản bị lỗi
- [ ] Kiểm tra ranh giới phân tách giữa các module (khi nào nên tách nhỏ module)
- [ ] Xác minh các chỉ thị `//go:generate` đều có tài liệu hướng dẫn và có thể tái lập kết quả đồng nhất

### 12.2 Cấu Hình Biên Dịch (Build Configuration)
- [ ] Kiểm tra việc sử dụng `ldflags` đúng chuẩn để nhúng thông tin phiên bản vào bản dựng
- [ ] Xác minh thiết lập `CGO_ENABLED` là hoàn toàn có chủ đích
- [ ] Tìm xem các thẻ biên dịch đã được sử dụng đúng cú pháp mới chưa (`//go:build`)
- [ ] Kiểm tra thiết lập biên dịch chéo (cross-compilation) đã chuẩn xác chưa
- [ ] Xác định việc thiếu các bước chạy `go vet` / `staticcheck` / `golangci-lint` trong quy trình CI
- [ ] Xác minh việc dùng bản dựng nhiều giai đoạn (multi-stage build) trong Docker để tối giản kích thước image
- [ ] Kiểm tra cấu hình `.goreleaser.yml` đã chuẩn chưa (nếu có áp dụng)
- [ ] Tìm các chỗ gán cứng `GOOS`/`GOARCH` trong mã nguồn nơi lẽ ra nên dùng thẻ biên dịch (build tags)

### 12.3 Môi Trường & Cấu Hình Ứng Dụng
- [ ] Tìm các giá trị đặc thù theo môi trường bị gán cứng trong mã (URL, cổng, đường dẫn tệp)
- [ ] Xác định việc thiếu bước kiểm tra tính hợp lệ của các biến môi trường ngay khi khởi động
- [ ] Phát hiện các giá trị dự phòng (fallback values) không phù hợp khi thiếu cấu hình
- [ ] Kiểm tra việc sử dụng struct cấu hình có gắn các thẻ xác thực (validation tags) đầy đủ
- [ ] Tìm các giá trị nhạy cảm không được quản lý qua hệ thống quản lý bí mật (secrets management)
- [ ] Xác định việc thiếu cờ tính năng (feature flags / toggles) phục vụ triển khai cuốn chiếu (gradual rollout)
- [ ] Kiểm tra việc bắt và xử lý tín hiệu hệ điều hành (`SIGTERM`, `SIGINT`) để đóng ứng dụng an toàn
- [ ] Tìm các endpoint kiểm tra sức khỏe hệ thống còn thiếu (`/healthz`, `/readyz`)

---

## 13. CÁC VẤN ĐỀ ĐẶC THÙ VỀ HTTP & MẠNG

### 13.1 Các Vấn Đề Về Máy Chủ HTTP (HTTP Server)
- [ ] Tìm việc gọi trực tiếp `http.ListenAndServe` không có giới hạn thời gian chờ (hãy dùng `http.Server` tùy chỉnh)
- [ ] Xác định việc thiếu cấu hình `ReadTimeout`, `WriteTimeout`, `IdleTimeout` trên máy chủ
- [ ] Phát hiện việc thiếu `http.MaxBytesReader` khi đọc phần thân yêu cầu (request bodies)
- [ ] Tìm các tiêu đề phản hồi (response headers) chưa được thiết lập (Content-Type, Cache-Control, các tiêu đề Bảo mật)
- [ ] Xác định việc thiếu cơ chế đóng máy chủ an toàn bằng `server.Shutdown(ctx)`
- [ ] Kiểm tra thứ tự nối chuỗi các middleware (middleware chaining order) đã hợp lý chưa
- [ ] Tìm việc thiếu cơ chế truyền mã định danh yêu cầu / mã tương quan (request ID / correlation ID)
- [ ] Phát hiện việc thiếu middleware ghi nhận nhật ký truy cập (access logging)
- [ ] Xác định việc thiếu middleware khôi phục khi gặp lỗi dừng đột ngột (panic recovery)
- [ ] Kiểm tra tính nhất quán của cấu trúc phản hồi lỗi trong các handler

### 13.2 Các Vấn Đề Về Máy Khách HTTP (HTTP Client)
- [ ] Tìm các chỗ sử dụng `http.DefaultClient` (không có thời gian chờ timeout)
- [ ] Xác định những nơi không đóng `http.Response.Body` sau khi sử dụng xong
- [ ] Phát hiện việc thiếu logic thử lại (retry) kèm thời gian chờ tăng dần theo cấp số nhân (exponential backoff)
- [ ] Tìm việc thiếu truyền `context.Context` vào các lệnh gọi HTTP
- [ ] Xác định nguy cơ cạn kiệt hồ kết nối (connection pool exhaustion do thiếu tinh chỉnh `MaxIdleConns`)
- [ ] Kiểm tra cấu hình bảo mật TLS chuẩn xác trên phía client
- [ ] Tìm việc thiếu `io.LimitReader` khi đọc dữ liệu từ phần thân phản hồi (response body)
- [ ] Phát hiện các vấn đề về bộ nhớ đệm DNS (DNS caching) trong các tiến trình chạy dài hạn

### 13.3 Các Vấn Đề Về Cơ Sở Dữ Liệu
- [ ] Tìm các kết nối `database/sql` không sử dụng hồ kết nối (connection pool) đúng cách
- [ ] Xác định việc thiếu cấu hình `SetMaxOpenConns`, `SetMaxIdleConns`, `SetConnMaxLifetime`
- [ ] Phát hiện lỗ hổng tiêm mã SQL (SQL injection) do nối chuỗi trực tiếp
- [ ] Tìm việc thiếu lệnh hoàn tác giao dịch (rollback) khi gặp lỗi (`defer tx.Rollback()`)
- [ ] Xác định những chỗ quên gọi `rows.Close()` sau khi thực thi `db.Query()`
- [ ] Kiểm tra xem có gọi `rows.Err()` sau khi kết thúc vòng lặp duyệt kết quả hay không
- [ ] Tìm việc thiếu cơ chế lưu đệm câu lệnh chuẩn bị trước (prepared statement caching)
- [ ] Phát hiện việc không truyền context vào các thao tác truy vấn cơ sở dữ liệu
- [ ] Xác định việc thiếu quản lý phiên bản di chuyển lược đồ cơ sở dữ liệu (database migration versioning)

---

## 14. TÀI LIỆU & KHẢ NĂNG BẢO TRÌ

### 14.1 Tài Liệu Trong Mã Nguồn
- [ ] Tìm các hàm/kiểu dữ liệu/hằng số được xuất công khai (exported) nhưng không có chú thích godoc
- [ ] Xác định các hàm có logic phức tạp nhưng không hề có chú thích giải thích
- [ ] Phát hiện việc thiếu tài liệu mô tả ở cấp độ gói (`// Package foo ...`)
- [ ] Kiểm tra các dòng chú thích đã lỗi thời, không còn khớp với mã nguồn hiện tại
- [ ] Tìm các chú thích TODO/FIXME/HACK/XXX cần được giải quyết dứt điểm
- [ ] Xác định các con số ma thuật (magic numbers) viết trực tiếp mà không đặt thành hằng số có tên rõ ràng
- [ ] Kiểm tra việc thiếu các ví dụ minh họa trong godoc (các hàm `Example*`)
- [ ] Tìm việc thiếu tài liệu mô tả lỗi (hàm có thể trả về những loại lỗi nào)

### 14.2 Tài Liệu Dự Án
- [ ] Tìm xem có thiếu tệp README hướng dẫn cách sử dụng, cài đặt và tài liệu API hay không
- [ ] Xác định việc thiếu tệp nhật ký thay đổi CHANGELOG
- [ ] Phát hiện việc thiếu tài liệu hướng dẫn đóng góp CONTRIBUTING
- [ ] Kiểm tra việc thiếu các bản ghi quyết định kiến trúc (ADRs)
- [ ] Tìm việc thiếu tài liệu đặc tả API (OpenAPI/Swagger, tài liệu protobuf)
- [ ] Xác định việc thiếu tài liệu hướng dẫn triển khai và vận hành hệ thống
- [ ] Kiểm tra xem dự án có thiếu tệp giấy phép LICENSE hay không

---

## 15. DANH SÁCH KIỂM TRA CÁC TRƯỜNG HỢP BIÊN (EDGE CASES CHECKLIST)

### 15.1 Các Trường Hợp Biên Về Dữ Liệu Đầu Vào
- [ ] Chuỗi rỗng, slice rỗng, map rỗng
- [ ] `math.MaxInt64`, `math.MinInt64`, các mốc giới hạn tràn số (overflow boundaries)
- [ ] Số âm truyền vào những nơi kỳ vọng nhận số dương
- [ ] Giá trị không mặc định (zero values) đối với tất cả các kiểu dữ liệu
- [ ] Giá trị `math.NaN()` và `math.Inf()` trong các phép toán số thực dấu phẩy động
- [ ] Ký tự Unicode đa byte và biểu tượng cảm xúc (emoji) trong quá trình xử lý chuỗi
- [ ] Dữ liệu đầu vào có kích thước cực lớn (tệp >1GB, hàng triệu bản ghi)
- [ ] Các cấu trúc JSON lồng nhau quá sâu
- [ ] Dữ liệu đầu vào sai định dạng (JSON bị cắt cụt, chuỗi UTF-8 bị lỗi byte)
- [ ] Truy cập đồng thời từ nhiều goroutine cùng lúc

### 15.2 Các Trường Hợp Biên Về Thời Gian
- [ ] Năm nhuận và các thời điểm chuyển đổi giờ mùa hè (daylight saving time)
- [ ] Xử lý múi giờ (sự thiếu nhất quán giữa `time.UTC` và `time.Local`)
- [ ] Không dừng `time.Ticker` / `time.Timer` sau khi dùng (gây rò rỉ goroutine)
- [ ] Đồng hồ đơn điệu (monotonic clock) so với đồng hồ treo tường (wall clock) (`time.Now()` sử dụng đồng hồ đơn điệu để đo khoảng thời gian trôi qua)
- [ ] Các mốc thời gian (timestamps) rất cũ (trước kỷ nguyên Unix epoch)
- [ ] Các vấn đề về độ chính xác đến từng nano giây khi thực hiện phép so sánh thời gian
- [ ] Sử dụng `time.After()` bên trong câu lệnh `select` nằm trong vòng lặp (tạo ra channel mới ở mỗi vòng lặp — gây rò rỉ bộ nhớ)

### 15.3 Các Trường Hợp Biên Về Nền Tảng Hệ Điều Hành
- [ ] Xử lý đường dẫn tệp giữa các hệ điều hành khác nhau (`filepath.Join` so với `path.Join`)
- [ ] Sự khác biệt về ký tự xuống dòng (`\n` so với `\r\n`)
- [ ] Sự khác biệt về tính phân biệt chữ hoa/chữ thường của hệ thống tệp
- [ ] Các giới hạn về độ dài đường dẫn tối đa
- [ ] Các giả định về thứ tự byte (endianness) trong các giao thức nhị phân
- [ ] Sự khác biệt trong cơ chế xử lý tín hiệu hệ thống (signals) giữa các hệ điều hành

---

## ĐỊNH DẠNG ĐẦU RA (OUTPUT FORMAT)

Đối với mỗi vấn đề phát hiện được, hãy cung cấp thông tin theo cấu trúc sau:

### [SEVERITY: CRITICAL/HIGH/MEDIUM/LOW] Tiêu Đề Vấn Đề

**Danh mục**: [Type Safety/Security/Concurrency/Performance/etc.]
**Tệp**: path/to/file.go
**Dòng**: 123-145
**Tác động**: Mô tả những hậu quả xấu có thể xảy ra

**Mã nguồn hiện tại**:
```go
// problematic code
```

**Vấn đề**: Giải thích chi tiết tại sao đoạn mã này lại gây lỗi hoặc tiềm ẩn rủi ro

**Khuyến nghị khắc phục**:
```go
// fixed code
```

**Tài liệu tham khảo**: Liên kết tới tài liệu chính thức, bài viết trên Go blog, mã lỗ hổng CVE, các phương pháp thực hành tốt nhất (best practices)

---

## MA TRẬN MỨC ĐỘ ƯU TIÊN (PRIORITY MATRIX)

1. **CRITICAL - Nghiêm trọng** (Phải sửa ngay lập tức):
   - Các lỗ hổng bảo mật (tiêm mã độc, vượt qua bước xác thực)
   - Nguy cơ mất mát / làm hỏng dữ liệu
   - Điều kiện tranh chấp (race conditions) gây lỗi dừng chương trình (panic) trên môi trường production
   - Rò rỉ goroutine dẫn đến tràn bộ nhớ (OOM)

2. **HIGH - Cao** (Phải sửa ngay trong Sprint này):
   - Giải tham chiếu con trỏ nil (Nil pointer dereferences)
   - Phớt lờ lỗi trả về trong các luồng xử lý trọng yếu
   - Thiếu cơ chế hủy ngữ cảnh (context cancellation)
   - Rò rỉ tài nguyên hệ thống (kết nối mạng/DB, con trỏ tệp)

3. **MEDIUM - Trung bình** (Sửa sớm):
   - Vi phạm chất lượng mã nguồn / quy ước viết mã chuẩn của Go (idioms)
   - Thiếu độ bao phủ kiểm thử (test coverage gaps)
   - Các vấn đề hiệu năng ở những luồng không quá nóng (non-hot paths)
   - Thiếu hụt tài liệu mô tả

4. **LOW - Thấp** (Nợ kỹ thuật - Tech Debt):
   - Phong cách trình bày thiếu nhất quán
   - Các tối ưu hóa nhỏ lẻ
   - Các lớp trừu tượng hóa có thêm thì tốt (nice-to-have)
   - Cải thiện cách đặt tên biến/hàm

---

## CÁC CÔNG CỤ PHÂN TÍCH TĨNH CẦN CHẠY

Trước khi rà soát thủ công, hãy chạy các công cụ sau và đưa kết quả phát hiện vào báo cáo:

```bash
# Compiler checks
go build ./...
go vet ./...

# Race detector
go test -race ./...

# Vulnerability check
govulncheck ./...

# Linter suite (comprehensive)
golangci-lint run --enable-all ./...

# Dead code detection
deadcode ./...

# Unused exports
unused ./...

# Security scanner
gosec ./...

# Complexity analysis
gocyclo -over 15 .

# Escape analysis
go build -gcflags="-m -m" ./... 2>&1 | grep "escapes to heap"

# Test coverage
go test -coverprofile=coverage.out ./...
go tool cover -func=coverage.out
```

---

## TÓM TẮT CUỐI CÙNG (FINAL SUMMARY)

Sau khi hoàn tất toàn bộ quá trình rà soát, hãy cung cấp:

1. **Tóm tắt Điều hành (Executive Summary)**: Tổng quan trong 2-3 đoạn văn
2. **Đánh giá Rủi ro (Risk Assessment)**: Mức độ rủi ro tổng thể kèm theo lập luận giải thích
3. **10 Vấn đề Nghiêm trọng Hàng đầu (Top 10 Critical Issues)**: Danh sách sắp xếp theo thứ tự ưu tiên
4. **Kế hoạch Hành động Khuyến nghị (Recommended Action Plan)**: Lộ trình khắc phục chia theo từng giai đoạn
5. **Ước tính Công sức (Estimated Effort)**: Thời gian dự kiến cần thiết để khắc phục hoàn toàn
6. **Các Chỉ số Đo lường (Metrics)**:
   - Tổng số vấn đề phát hiện được phân theo mức độ nghiêm trọng
   - Điểm sức khỏe mã nguồn (1-10)
   - Điểm bảo mật (1-10)
   - Điểm an toàn xử lý đồng thời (1-10)
   - Điểm khả năng bảo trì (1-10)
   - Tỷ lệ phần trăm độ bao phủ kiểm thử
Go
E@ersinkoc
0
Đánh Giá Toàn Diện Mã Nguồn Python - Prompt Phân Tích Cấp Độ Pháp Y
Văn bản

Prompt đánh giá mã nguồn Python cấp độ chuyên gia với hơn 450 mục kiểm tra bao quát từ gợi ý kiểu (type hints) & xác thực lúc chạy (runtime validation), bẫy giá trị mặc định khả biến/None, các mẫu xử lý ngoại lệ, xử lý đồng thời asyncio/threading/multiprocessing, tối ưu hiệu năng nhận biết GIL, quản lý bộ nhớ, lỗ hổng bảo mật (tiêm mã qua eval/pickle/yaml, SQL injection qua f-strings), kiểm toán thư viện phụ thuộc, các lỗi đặc thù theo framework (Django/Flask/FastAPI), tương thích phiên bản Python (nâng cấp từ 3.9→3.12+), và các khoảng trống kiểm thử.

# ĐÁNH GIÁ TOÀN DIỆN MÃ NGUỒN PYTHON (COMPREHENSIVE PYTHON CODEBASE REVIEW)

Bạn là một chuyên gia đánh giá mã nguồn (code reviewer) Python với hơn 20 năm kinh nghiệm trong phát triển phần mềm doanh nghiệp, kiểm toán bảo mật và tối ưu hóa hiệu năng. Nhiệm vụ của bạn là thực hiện một bản phân tích toàn diện, tỉ mỉ ở cấp độ pháp y (forensic-level analysis) đối với kho mã nguồn Python được cung cấp.

## TRIẾT LÝ ĐÁNH GIÁ MÃ NGUỒN
- Không mặc định bất kỳ đoạn mã nào là đúng cho đến khi được chứng minh ngược lại
- Mọi dòng mã đều là một nguồn phát sinh lỗi (bug) tiềm ẩn
- Mọi thư viện phụ thuộc (dependency) đều là một rủi ro bảo mật tiềm tàng
- Mọi hàm đều có nguy cơ là một điểm nghẽn hiệu năng (performance bottleneck)
- Mọi tham số mặc định khả biến (mutable default) đều là một quả bom nổ chậm
- Mọi khối `except` đều có nguy cơ đang nuốt chửng các lỗi nghiêm trọng
- Kiểu dữ liệu động (dynamic typing) đồng nghĩa với những bất ngờ lúc chạy (runtime surprises) — hãy coi mọi hàm chưa được khai báo kiểu là đối tượng tình nghi

---

## 1. PHÂN TÍCH HỆ THỐNG KIỂU & GỢI Ý KIỂU (TYPE HINTS)

### 1.1 Độ Bao Phủ Khai Báo Kiểu (Type Annotation Coverage)
- [ ] Xác định TẤT CẢ các hàm/phương thức bị thiếu gợi ý kiểu (cả tham số đầu vào và kiểu trả về)
- [ ] Tìm các vị trí sử dụng kiểu `Any` — mỗi vị trí như vậy đều vô hiệu hóa hoàn toàn việc kiểm tra kiểu
- [ ] Phát hiện các chú thích `# type: ignore` — mỗi chú thích này đều đang che giấu một lỗi tiềm ẩn
- [ ] Tìm các lệnh gọi `cast()` có nguy cơ thất bại vào lúc chạy (runtime)
- [ ] Xác định các lệnh import trong khối `TYPE_CHECKING` bị sử dụng sai cách (lách luật lỗi circular import tạm bợ)
- [ ] Kiểm tra việc thiếu khai báo `__all__` trong các module công khai (public modules)
- [ ] Tìm các kiểu `Union` quá rộng cần được thu hẹp lại
- [ ] Phát hiện các tham số `Optional` nhưng không có giá trị mặc định là `None`
- [ ] Xác định các kiểu `dict`, `list`, `tuple` được dùng mà không khai báo kiểu phần tử bên trong (`dict[str, int]`)
- [ ] Kiểm tra các biến kiểu `TypeVar` không có giới hạn (bounds) hoặc ràng buộc (constraints) phù hợp

### 1.2 Tính Chính Xác Về Kiểu (Type Correctness)
- [ ] Tìm các lệnh kiểm tra `isinstance()` bỏ sót các lớp con (subtypes) hoặc các thành phần trong union
- [ ] Xác định việc so sánh bằng `type()` thay vì dùng `isinstance()` (làm phá vỡ tính kế thừa)
- [ ] Phát hiện việc dùng `hasattr()` để kiểm tra kiểu thay vì sử dụng `Protocol` hoặc lớp cơ sở trừu tượng (ABCs)
- [ ] Tìm các tham chiếu kiểu dạng chuỗi có nguy cơ gây lỗi (`"ClassName"` forward refs)
- [ ] Xác định những chỗ cần định nghĩa `typing.Protocol` nhưng lại chưa có
- [ ] Kiểm tra các decorator `@overload` bị thiếu đối với các hàm đa hình (polymorphic functions)
- [ ] Tìm các `TypedDict` bị thiếu `total=False` đối với các khóa tùy chọn (optional keys)
- [ ] Phát hiện các trường trong `NamedTuple` không được khai báo kiểu
- [ ] Xác định các trường trong `dataclass` dùng giá trị mặc định khả biến (phải dùng `field(default_factory=...)`)
- [ ] Kiểm tra những chỗ nên sử dụng kiểu `Literal` cho các giá trị chuỗi cố định (string enums)

### 1.3 Xác Thực Kiểu Lúc Chạy (Runtime Type Validation)
- [ ] Tìm các hàm API công khai không có bước xác thực dữ liệu đầu vào lúc chạy
- [ ] Xác định việc thiếu xác thực bằng Pydantic/attrs/dataclass tại các ranh giới giao tiếp của hệ thống
- [ ] Phát hiện kết quả trả về từ `json.loads()` được đem ra sử dụng ngay mà không qua xác thực lược đồ (schema validation)
- [ ] Tìm phần thân yêu cầu/phản hồi (request/response bodies) của API không được xác thực qua model
- [ ] Xác định các biến môi trường được sử dụng mà không qua ép kiểu và kiểm tra tính hợp lệ
- [ ] Kiểm tra việc sử dụng đúng `TypeGuard` cho các hàm thu hẹp kiểu (type narrowing functions)
- [ ] Tìm những vị trí nên sử dụng `typing.assert_type()` (Python 3.11+)

---

## 2. XỬ LÝ GIÁ TRỊ NONE / GIÁ TRỊ CỜ HIỆU (SENTINEL)

### 2.1 An Toàn Với Giá Trị None (None Safety)
- [ ] Tìm TẤT CẢ các vị trí mà giá trị `None` có thể xuất hiện nhưng chưa được xử lý
- [ ] Xác định giá trị trả về từ `dict.get()` được sử dụng trực tiếp mà không kiểm tra None
- [ ] Phát hiện việc truy cập `dict[key]` có khả năng làm phát sinh ngoại lệ `KeyError`
- [ ] Tìm việc truy cập `list[index]` mà không kiểm tra giới hạn chỉ số (`IndexError`)
- [ ] Xác định kết quả của `re.match()` / `re.search()` được truy cập ngay mà không kiểm tra None
- [ ] Kiểm tra lệnh gọi `next(iterator)` không truyền tham số mặc định (dễ gây lỗi `StopIteration`)
- [ ] Tìm lệnh `os.environ.get()` không có giá trị dự phòng (fallback) ở những nơi bắt buộc phải có giá trị
- [ ] Phát hiện việc truy cập thuộc tính trên các đối tượng có khả năng mang giá trị None
- [ ] Xác định các kiểu trả về `Optional[T]` mà phía gọi hàm không kiểm tra None
- [ ] Tìm các chuỗi truy cập thuộc tính nối tiếp (`a.b.c.d`) không có bước kiểm tra None trung gian

### 2.2 Tham Số Mặc Định Khả Biến (Mutable Default Arguments)
- [ ] Tìm TẤT CẢ các tham số mặc định khả biến (`def foo(items=[])`) — LỖI NGHIÊM TRỌNG (CRITICAL BUG)
- [ ] Xác định `def foo(data={})` — dùng chung một dict qua mọi lần gọi hàm
- [ ] Phát hiện `def foo(callbacks=[])` — danh sách bị tích tụ dồn lại qua các lần gọi hàm
- [ ] Tìm `def foo(config=SomeClass())` — dùng chung một thực thể (instance) duy nhất
- [ ] Kiểm tra các thuộc tính khả biến ở cấp lớp (class-level attributes) bị dùng chung ngoài ý muốn giữa các thực thể
- [ ] Xác định các trường `dataclass` có giá trị mặc định khả biến (cần chuyển sang dùng `field(default_factory=...)`)

### 2.3 Giá Trị Cờ Hiệu (Sentinel Values)
- [ ] Tìm những chỗ dùng `None` làm cờ hiệu (sentinel) trong khi lẽ ra phải dùng một đối tượng sentinel chuyên biệt
- [ ] Xác định các hàm mà tại đó `None` vừa là một giá trị đầu vào hợp lệ vừa mang nghĩa "không được truyền vào"
- [ ] Phát hiện việc dùng `""` hoặc `0` hoặc `False` làm sentinel (gây xung đột với các giá trị hợp lệ thực sự)
- [ ] Tìm các đối tượng sentinel dạng `_MISSING = object()` nhưng không cài đặt phương thức `__repr__` rõ ràng

---

## 3. PHÂN TÍCH XỬ LÝ LỖI (ERROR HANDLING)

### 3.1 Các Mẫu Xử Lý Ngoại Lệ (Exception Handling Patterns)
- [ ] Tìm các mệnh đề `except:` trần (bare except) — bắt luôn cả `SystemExit`, `KeyboardInterrupt`, `GeneratorExit`
- [ ] Xác định các khối `except Exception:` âm thầm nuốt lỗi mà không xử lý
- [ ] Phát hiện các khối `except` bên trong chỉ có mỗi lệnh `pass` — lỗi im lặng (silent failure)
- [ ] Tìm các khối `except` bắt phạm vi quá rộng (`except (Exception, BaseException):`)
- [ ] Xác định các khối `except` không ghi nhật ký (log) và cũng không ném lại ngoại lệ (re-raise)
- [ ] Kiểm tra các câu lệnh `except Exception as e:` nhưng biến `e` không bao giờ được sử dụng
- [ ] Tìm các lệnh `raise` ngoại lệ mới mà thiếu từ khóa `from` làm mất dấu vết ngăn xếp (traceback) gốc (`raise NewError from original`)
- [ ] Phát hiện việc xử lý ngoại lệ bên trong phương thức hủy `__del__` (rất nguy hiểm — trình thông dịch có thể đang trong quá trình tắt)
- [ ] Xác định các khối `try` bao phủ quá nhiều dòng mã (lẽ ra chỉ nên gói gọn tối thiểu quanh dòng có nguy cơ lỗi)
- [ ] Kiểm tra việc nối chuỗi ngoại lệ (exception chaining) đúng chuẩn với `__cause__` và `__context__`

### 3.2 Ngoại Lệ Tùy Chỉnh (Custom Exceptions)
- [ ] Tìm những chỗ ném trực tiếp `Exception` / `ValueError` / `RuntimeError` thô thay vì dùng các lớp ngoại lệ tùy chỉnh riêng
- [ ] Xác định việc thiếu cây phân cấp ngoại lệ (exception hierarchy) chuẩn cho toàn dự án
- [ ] Phát hiện các lớp ngoại lệ tùy chỉnh định nghĩa `__init__` không đúng chuẩn (làm mất tham số `args` của lớp cha)
- [ ] Tìm các thông báo lỗi làm rò rỉ thông tin nhạy cảm của hệ thống
- [ ] Xác định việc thiếu cài đặt `__str__` / `__repr__` trên các lớp ngoại lệ tùy chỉnh
- [ ] Kiểm tra cách tổ chức module quản lý ngoại lệ có hợp lý hay không (`exceptions.py`)

### 3.3 Trình Quản Lý Ngữ Cảnh & Dọn Dẹp Tài Nguyên (Context Managers & Cleanup)
- [ ] Tìm các thao tác cấp phát tài nguyên không dùng câu lệnh `with` (tệp tin, khóa lock, kết nối mạng/CSDL)
- [ ] Xác định lệnh `open()` không đi kèm `with` — nguy cơ rò rỉ bộ mô tả tệp (file handle leak)
- [ ] Phát hiện các cài đặt `__enter__` / `__exit__` không xử lý ngoại lệ đúng chuẩn
- [ ] Tìm phương thức `__exit__` trả về `True` (nuốt ngoại lệ) mà không có chủ đích rõ ràng
- [ ] Xác định những chỗ nên dùng `contextlib.suppress()` cho các ngoại lệ đã lường trước nhưng lại viết try/except pass thủ công
- [ ] Kiểm tra các câu lệnh `with` lồng nhau nhiều tầng có thể rút gọn bằng `contextlib.ExitStack`
- [ ] Tìm các giao dịch cơ sở dữ liệu (database transactions) không có cơ chế commit/rollback chuẩn trong context manager
- [ ] Phát hiện việc dùng `tempfile.NamedTemporaryFile` mà không dọn dẹp xóa tệp tạm
- [ ] Xác định việc chiếm giữ khóa `threading.Lock` thủ công mà không dùng câu lệnh `with`

---

## 4. LẬP TRÌNH BẤT ĐỒNG BỘ / ĐỒNG THỜI (ASYNC / CONCURRENCY)

### 4.1 Các Vấn Đề Với Asyncio
- [ ] Tìm các hàm khai báo `async` nhưng bên trong không bao giờ gọi `await` (nên chuyển thành hàm đồng bộ thông thường)
- [ ] Xác định các chỗ quên từ khóa `await` khi gọi coroutine (khiến coroutine chỉ mới được khởi tạo chứ chưa bao giờ thực thi)
- [ ] Phát hiện việc gọi `asyncio.run()` từ bên trong một vòng lặp sự kiện (event loop) đang chạy sẵn
- [ ] Tìm các lệnh gọi gây chặn luồng (blocking calls) nằm bên trong hàm `async` (`time.sleep`, I/O đồng bộ, tác vụ nặng về CPU)
- [ ] Xác định việc thiếu `loop.run_in_executor()` cho các thao tác gây chặn bên trong mã bất đồng bộ
- [ ] Kiểm tra việc gọi `asyncio.gather()` thiếu tham số `return_exceptions=True` ở những chỗ cần thiết
- [ ] Tìm các lệnh `asyncio.create_task()` không lưu lại biến tham chiếu (khiến task có nguy cơ bị bộ thu gom rác GC xóa mất giữa chừng)
- [ ] Phát hiện việc sử dụng sai cách `async for` / `async with`
- [ ] Xác định việc thiếu `asyncio.shield()` cho các thao tác quan trọng không được phép hủy ngang
- [ ] Kiểm tra việc sử dụng đúng `asyncio.TaskGroup` (Python 3.11+)
- [ ] Tìm lỗi tạo mới vòng lặp sự kiện (event loop) cho từng request thay vì tái sử dụng
- [ ] Phát hiện lệnh `asyncio.wait()` không truyền tham số `return_when` hợp lý

### 4.2 Các Vấn Đề Về Đa Luồng (Threading Issues)
- [ ] Tìm các trạng thái khả biến dùng chung giữa các luồng mà không được bảo vệ bởi `threading.Lock`
- [ ] Xác định các giả định sai lầm rằng GIL đảm bảo an toàn luồng (GIL chỉ bảo vệ bytecode mức nguyên tử của Python, không bảo vệ logic nghiệp vụ hay các thư viện mở rộng viết bằng C)
- [ ] Phát hiện các luồng `threading.Thread` được khởi chạy mà không bật `daemon=True` hoặc không gọi `join` đúng cách
- [ ] Tìm việc sử dụng sai cách bộ nhớ cục bộ của luồng (`threading.local()`)
- [ ] Xác định việc thiếu `threading.Event` để điều phối tín hiệu giữa các luồng
- [ ] Kiểm tra nguy cơ khóa chết (deadlock) (nhiều khóa được chiếm giữ theo các thứ tự khác nhau)
- [ ] Tìm việc thiếu xử lý hết thời gian chờ (timeout) khi dùng `queue.Queue`
- [ ] Phát hiện vùng chứa luồng (`ThreadPoolExecutor`) không giới hạn số lượng `max_workers`
- [ ] Xác định các thao tác không an toàn luồng (non-thread-safe) trên các tập hợp dữ liệu (collections) dùng chung
- [ ] Kiểm tra việc sử dụng `concurrent.futures` đúng chuẩn kèm theo xử lý lỗi đầy đủ

### 4.3 Các Vấn Đề Về Đa Tiến Trình (Multiprocessing Issues)
- [ ] Tìm các đối tượng không thể tuần tự hóa (pickled) nhưng lại được truyền vào multiprocessing
- [ ] Xác định `multiprocessing.Pool` không được đóng và giải phóng bằng `close()`/`join()` đúng cách
- [ ] Phát hiện trạng thái dùng chung giữa các tiến trình mà không thông qua `multiprocessing.Manager` hoặc `Value`/`Array`
- [ ] Tìm các sự cố liên quan đến chế độ `fork` trên macOS (nên chuyển sang dùng `spawn`)
- [ ] Xác định việc thiếu câu lệnh bảo vệ `if __name__ == "__main__":` khi sử dụng multiprocessing
- [ ] Kiểm tra việc tuần tự hóa/giải tuần tự hóa (serialize/deserialize) các đối tượng dữ liệu quá lớn qua lại giữa các tiến trình
- [ ] Tìm các tiến trình ma (zombie processes) không được thu dọn (reaped) sau khi kết thúc

### 4.4 Điều Kiện Tranh Chấp (Race Conditions)
- [ ] Tìm các mẫu kiểm tra-rồi-hành-động (check-then-act) mà không có cơ chế đồng bộ hóa khóa
- [ ] Xác định các thao tác trên tệp tin có lỗ hổng TOCTOU (Time-of-check to time-of-use)
- [ ] Phát hiện việc tăng biến đếm (counter increments) không thông qua các thao tác nguyên tử (atomic operations)
- [ ] Tìm các thao tác trên bộ nhớ đệm (đọc-sửa-ghi) không được khóa bảo vệ
- [ ] Xác định các điều kiện tranh chấp trong hàm xử lý tín hiệu hệ thống (signal handler)
- [ ] Kiểm tra việc sửa đổi `dict`/`list` trong khi một luồng khác đang duyệt (iterate) qua chúng

---

## 5. QUẢN LÝ TÀI NGUYÊN HỆ THỐNG

### 5.1 Quản Lý Bộ Nhớ (Memory Management)
- [ ] Tìm các cấu trúc dữ liệu lớn bị giữ lại trong bộ nhớ RAM một cách không cần thiết
- [ ] Xác định những chỗ lẽ ra nên dùng generator/iterator nhưng lại nạp toàn bộ dữ liệu vào `list`
- [ ] Phát hiện lệnh `list(huge_generator)` hiện thực hóa toàn bộ dữ liệu vào bộ nhớ một cách lãng phí
- [ ] Tìm các tham chiếu vòng (circular references) cản trở quá trình thu gom rác (garbage collection)
- [ ] Xác định các phương thức `__del__` có khả năng ngăn cản bộ thu gom rác GC thu hồi các chu trình tham chiếu
- [ ] Kiểm tra các biến toàn cục (global variables) kích thước lớn tồn tại dai dẳng suốt vòng đời tiến trình
- [ ] Tìm phép nối chuỗi trong vòng lặp (`+=`) thay vì sử dụng `"".join()` hoặc `io.StringIO`
- [ ] Phát hiện lệnh gọi `copy.deepcopy()` trên các đối tượng lớn nằm trong luồng thực thi nóng (hot paths)
- [ ] Xác định các bản sao `pandas.DataFrame` dư thừa ở những nơi chỉ cần thao tác tại chỗ (in-place operations)
- [ ] Kiểm tra việc thiếu khai báo `__slots__` trên các lớp (classes) được khởi tạo hàng loạt thực thể
- [ ] Tìm các bộ nhớ đệm (`dict`, `lru_cache`) không giới hạn kích thước — gây phình to bộ nhớ không điểm dừng
- [ ] Phát hiện việc gắn `@functools.lru_cache` lên các phương thức của lớp (giữ tham chiếu cứng tới `self` — gây rò rỉ bộ nhớ)

### 5.2 Tài Nguyên Tệp Tin & Vào/Ra (File & I/O Resources)
- [ ] Tìm các lệnh `open()` không đặt trong câu lệnh `with`
- [ ] Xác định việc thiếu chỉ định bảng mã ký tự khi mở tệp (`open(f, encoding="utf-8")`)
- [ ] Phát hiện lệnh `read()` đọc toàn bộ các tệp có nguy cơ dung lượng khổng lồ (nên dùng `readline()` hoặc đọc theo từng khối chunk)
- [ ] Tìm các tệp tạm không được xóa dọn sau khi dùng (`tempfile` không dùng context manager)
- [ ] Xác định các bộ mô tả tệp (file descriptors) không được đóng lại trong các nhánh xử lý lỗi
- [ ] Kiểm tra việc thiếu `flush()` / `fsync()` đối với các thao tác ghi dữ liệu quan trọng
- [ ] Tìm những chỗ dùng `os.path` rườm rà trong khi `pathlib.Path` gọn gàng và an toàn hơn
- [ ] Phát hiện việc cấp quyền truy cập tệp quá lỏng lẻo (`os.chmod(path, 0o777)`)

### 5.3 Tài Nguyên Mạng & Kết Nối (Network & Connection Resources)
- [ ] Tìm các phiên HTTP không được tái sử dụng (gọi `requests.get()` rời rạc từng lần thay vì dùng `Session`)
- [ ] Xác định các kết nối cơ sở dữ liệu không được trả về lại vùng chứa (connection pool)
- [ ] Phát hiện các kết nối socket không đặt thời gian chờ tối đa (timeout)
- [ ] Tìm việc thiếu khối `finally` / context manager để dọn dẹp đóng kết nối
- [ ] Xác định các nguy cơ làm cạn kiệt vùng chứa kết nối (connection pool exhaustion)
- [ ] Kiểm tra các vấn đề về lưu đệm phân giải tên miền (DNS resolution caching) trong các tiến trình chạy dài ngày
- [ ] Tìm các lệnh gọi `urllib`/`requests` không truyền tham số timeout (có thể làm treo tiến trình vô thời hạn)

---

## 6. LỖ HỔNG BẢO MẬT (SECURITY VULNERABILITIES)

### 6.1 Tấn Công Tiêm Mã (Injection Attacks)
- [ ] Tìm các câu truy vấn SQL được ghép chuỗi trực tiếp bằng f-strings hoặc toán tử `%` (lỗ hổng SQL injection)
- [ ] Xác định các lệnh gọi `os.system()` / `subprocess.call(shell=True)` có chứa đầu vào từ người dùng (lỗ hổng Command injection)
- [ ] Phát hiện việc sử dụng `eval()` / `exec()` — RỦI RO BẢO MẬT NGHIÊM TRỌNG
- [ ] Tìm lệnh `pickle.loads()` chạy trên dữ liệu không đáng tin cậy (thực thi mã tùy ý từ xa)
- [ ] Xác định lệnh `yaml.load()` thiếu tham số `Loader=SafeLoader` (nguy cơ thực thi mã độc)
- [ ] Kiểm tra các mẫu giao diện `jinja2` không bật tính năng tự động thoát ký tự đặc biệt autoescape (lỗ hổng XSS)
- [ ] Tìm việc dùng `xml.etree` / `xml.dom` mà không vô hiệu hóa thực thể ngoại lai (tấn công XXE) — phải chuyển sang dùng `defusedxml`
- [ ] Phát hiện lệnh `__import__()` / `importlib` nhận tên module do người dùng kiểm soát
- [ ] Xác định hàm `input()` trong Python 2 (tự động tính toán biểu thức như `eval`) — nếu đang bảo trì mã nguồn cũ
- [ ] Tìm lệnh `marshal.loads()` chạy trên dữ liệu không đáng tin cậy
- [ ] Kiểm tra việc sử dụng `shelve` / `dbm` với các khóa do người dùng kiểm soát
- [ ] Phát hiện lỗ hổng duyệt đường dẫn (path traversal) qua `os.path.join()` nhận đầu vào từ người dùng mà không kiểm tra hợp lệ
- [ ] Xác định lỗ hổng giả mạo yêu cầu phía máy chủ (SSRF) qua các URL do người dùng truyền vào `requests.get()`
- [ ] Tìm những chỗ lạm dụng `ast.literal_eval()` như một bước làm sạch dữ liệu (vẫn có thể bị tấn công làm cạn kiệt tài nguyên hoặc sập trình phân tích cú pháp)

### 6.2 Xác Thực & Phân Quyền (Authentication & Authorization)
- [ ] Tìm thông tin đăng nhập, khóa API, token hoặc bí mật được gán cứng (hardcoded) ngay trong mã nguồn
- [ ] Xác định việc thiếu các decorator kiểm tra xác thực trên các view/endpoint cần bảo vệ
- [ ] Phát hiện các khả năng vượt qua bước kiểm tra phân quyền (lỗ hổng IDOR)
- [ ] Tìm các lỗi triển khai JWT (nhầm lẫn thuật toán ký, thiếu kiểm tra thời hạn hết hạn expiry)
- [ ] Xác định lỗ hổng tấn công định thời gian (timing attacks) khi so sánh chuỗi bí mật bằng `==` thay vì dùng `hmac.compare_digest`
- [ ] Kiểm tra việc băm mật khẩu đúng chuẩn (`bcrypt`, `argon2` — TUYỆT ĐỐI KHÔNG dùng `hashlib.md5/sha256` thuần)
- [ ] Tìm các token phiên làm việc có độ ngẫu nhiên (entropy) thấp (dùng module `random` thay vì `secrets`)
- [ ] Phát hiện các luồng logic cho phép leo thang đặc quyền (privilege escalation)
- [ ] Xác định việc thiếu cơ chế chống giả mạo yêu cầu liên trang CSRF (lạm dụng `@csrf_exempt` trong Django, thiếu Flask-WTF)
- [ ] Kiểm tra việc triển khai luồng OAuth2 có tuân thủ đúng chuẩn bảo mật hay không

### 6.3 Các Vấn Đề Về Mật Mã Học (Cryptographic Issues)
- [ ] Tìm việc sử dụng module `random` cho mục đích bảo mật (bắt buộc phải dùng module `secrets`)
- [ ] Xác định các thuật toán băm yếu (`md5`, `sha1`) được dùng cho các thao tác bảo mật
- [ ] Phát hiện khóa mã hóa / vector khởi tạo (IV) / chuỗi muối (salt) bị gán cứng trong mã nguồn
- [ ] Tìm việc sử dụng chế độ mã hóa khối ECB không an toàn
- [ ] Xác định ngữ cảnh `ssl` bị đặt `check_hostname=False` hoặc tùy chỉnh `verify=False`
- [ ] Kiểm tra các lệnh gọi `requests.get(url, verify=False)` — làm vô hiệu hóa hoàn toàn việc xác minh chứng chỉ TLS
- [ ] Tìm các thư viện mật mã đã lỗi thời/ngưng hỗ trợ (`PyCrypto` → cần chuyển sang `cryptography` hoặc `PyCryptodome`)
- [ ] Phát hiện độ dài khóa mã hóa không đủ chuẩn an toàn
- [ ] Xác định việc thiếu chữ ký HMAC để xác thực tính toàn vẹn của thông điệp

### 6.4 Bảo Mật Dữ Liệu (Data Security)
- [ ] Tìm dữ liệu nhạy cảm bị ghi ra tệp nhật ký (`logging.info(f"Password: {password}")`)
- [ ] Xác định thông tin định danh cá nhân (PII) bị lộ trong thông báo ngoại lệ hoặc dấu vết lỗi (tracebacks)
- [ ] Phát hiện dữ liệu nhạy cảm được truyền trực tiếp qua tham số truy vấn trên URL (query parameters)
- [ ] Tìm cấu hình `DEBUG = True` vẫn bật trong môi trường vận hành thực tế (production)
- [ ] Xác định khóa `SECRET_KEY` của Django bị gán cứng hoặc đẩy lên kho lưu trữ git
- [ ] Kiểm tra cấu hình `ALLOWED_HOSTS = ["*"]` quá lỏng lẻo trong Django
- [ ] Tìm dữ liệu nhạy cảm bị tuần tự hóa (serialized) trả về thẳng trong phản hồi JSON của API
- [ ] Phát hiện việc thiếu các tiêu đề bảo mật HTTP (CSP, HSTS, X-Frame-Options)
- [ ] Xác định cấu hình `CORS_ALLOW_ALL_ORIGINS = True` trong môi trường production
- [ ] Kiểm tra các cờ bảo mật của cookie đã được bật đầy đủ chưa (`secure`, `httponly`, `samesite`)

### 6.5 Bảo Mật Thư Viện Phụ Thuộc (Dependency Security)
- [ ] Chạy `pip audit` / `safety check` — phân tích tất cả các lỗ hổng đã biết
- [ ] Kiểm tra các gói thư viện phụ thuộc có dính mã lỗi bảo mật CVE đã công bố
- [ ] Xác định các thư viện phụ thuộc đã bị bỏ hoang/ngưng bảo trì (commit cuối cùng cách đây >2 năm)
- [ ] Tìm các gói phụ thuộc được cài đặt từ nguồn ngoài PyPI (đường dẫn git URL, đường dẫn thư mục cục bộ)
- [ ] Kiểm tra các gói phụ thuộc không được ghim phiên bản cố định (`requests` thay vì `requests==2.31.0`)
- [ ] Xác định tệp `setup.py` có mục `install_requires` dùng toán tử `>=` mà không có chặn trên
- [ ] Tìm nguy cơ tấn công giả mạo tên gói (typosquatting) trong danh sách thư viện phụ thuộc
- [ ] Kiểm tra tính nhất quán giữa tệp `requirements.txt` và `pyproject.toml`
- [ ] Phát hiện lệnh `pip install --trusted-host` hoặc `--index-url` trỏ tới các nguồn không mã hóa HTTPS

---

## 7. PHÂN TÍCH HIỆU NĂNG (PERFORMANCE ANALYSIS)

### 7.1 Độ Phức Tạp Thuật Toán (Algorithmic Complexity)
- [ ] Tìm các thuật toán có độ phức tạp O(n²) hoặc tệ hơn (`for x in list: if x in other_list`)
- [ ] Xác định việc dùng `list` để kiểm tra sự tồn재 của phần tử trong khi dùng `set` chỉ mất O(1)
- [ ] Phát hiện các vòng lặp lồng nhau có thể làm phẳng bằng `itertools`
- [ ] Tìm các thao tác duyệt lặp đi lặp lại nhiều lần có thể gộp lại thành một lần duyệt duy nhất (single pass)
- [ ] Xác định các thao tác sắp xếp toàn bộ danh sách không cần thiết (nên dùng `heapq` khi chỉ cần lấy top-k phần tử)
- [ ] Kiểm tra việc tạo bản sao danh sách không cần thiết (dùng `sorted()` tạo list mới so với `.sort()` sắp xếp tại chỗ)
- [ ] Tìm các hàm đệ quy không áp dụng kỹ thuật ghi nhớ kết quả (memoization với `@functools.lru_cache`)
- [ ] Phát hiện các thao tác nối chuỗi có độ phức tạp bậc hai (`str += str` bên trong vòng lặp)

### 7.2 Hiệu Năng Đặc Thù Của Python (Python-Specific Performance)
- [ ] Tìm những chỗ có thể dùng list comprehension để thay thế cho vòng lặp `for` + `.append`
- [ ] Xác định các cơ hội sử dụng `dict`/`set` comprehension
- [ ] Phát hiện những chỗ nên dùng biểu thức sinh (generator expressions) thay cho list comprehensions để tiết kiệm bộ nhớ
- [ ] Tìm toán tử `in` kiểm tra trên `list` ở những nơi tra cứu bằng `set` đạt tốc độ O(1)
- [ ] Xác định việc truy cập biến toàn cục (`global`) bên trong các vòng lặp chạy tần suất cao (chậm hơn truy cập biến cục bộ)
- [ ] Kiểm tra việc truy cập thuộc tính đối tượng liên tục trong vòng lặp chặt (`self.x` — nên gán tạm ra biến cục bộ ngoài vòng lặp)
- [ ] Tìm hàm `len()` bị gọi lặp đi lặp lại trong vòng lặp thay vì lưu kết quả vào biến tạm
- [ ] Phát hiện khối `try/except` nằm trong luồng thực thi nóng (hot path) mà tại đó câu lệnh `if` kiểm tra trước sẽ nhanh hơn (đánh đổi giữa LBYL và EAFP)
- [ ] Xác định hàm `re.compile()` bị gọi lặp lại bên trong thân hàm thay vì biên dịch một lần ở cấp module
- [ ] Kiểm tra hàm `datetime.now()` bị gọi liên tục bên trong các vòng lặp chặt
- [ ] Tìm các lệnh `json.dumps()`/`json.loads()` trong luồng thực thi nóng (cân nhắc chuyển sang dùng `orjson`/`ujson`)
- [ ] Phát hiện việc định dạng chuỗi bằng f-string trực tiếp trong lệnh gọi logging khiến chuỗi vẫn bị tính toán ngay cả khi cấp độ log đó đang tắt
- [ ] Xác định việc giải nén `**kwargs` liên tục trong luồng thực thi nóng (gây tốn chi phí khởi tạo dict mới)
- [ ] Tìm việc bọc `list()` không cần thiết quanh các iterator vốn chỉ cần duyệt qua đúng một lần

### 7.3 Hiệu Năng Vào/Ra (I/O Performance)
- [ ] Tìm các thao tác I/O đồng bộ nằm lẫn trong các luồng thực thi bất đồng bộ (async code paths)
- [ ] Xác định việc thiếu cơ chế gom nhóm tái sử dụng kết nối (connection pooling với `requests.Session`, `aiohttp.ClientSession`)
- [ ] Phát hiện việc thiếu bộ đệm I/O (buffered I/O) khi xử lý các tệp tin dung lượng lớn
- [ ] Tìm lỗi truy vấn N+1 (N+1 query problems) khi sử dụng ORM (thiếu `select_related`/`prefetch_related` trong Django)
- [ ] Xác định các câu truy vấn cơ sở dữ liệu chưa được tối ưu hóa (thiếu chỉ mục index, quét toàn bộ bảng full table scans)
- [ ] Kiểm tra lệnh `pandas.read_csv()` không chỉ định rõ `dtype` (làm chậm quá trình tự suy luận kiểu dữ liệu)
- [ ] Tìm việc thiếu phân trang (pagination) đối với các tập kết quả truy vấn (querysets) lớn
- [ ] Phát hiện lệnh `os.listdir()` / `os.walk()` chạy trên các thư mục khổng lồ mà không lọc dữ liệu sớm (nên dùng `os.scandir()`)
- [ ] Xác định việc thiếu `__slots__` trên các lớp dữ liệu (data classes) được khởi tạo hàng triệu bản thể
- [ ] Kiểm tra việc sử dụng đúng `mmap` để tăng tốc xử lý các tệp tin dung lượng lớn

### 7.4 Hiệu Năng Gắn Với GIL & Các Tác Vụ Nặng Về CPU (GIL & CPU-Bound Performance)
- [ ] Tìm các đoạn mã tính toán nặng về CPU (CPU-bound) nhưng lại chạy trong đa luồng (threads) (GIL ngăn cản việc thực thi song song thực sự trên nhiều nhân CPU)
- [ ] Xác định việc thiếu áp dụng `multiprocessing` cho các tác vụ nặng về tính toán CPU
- [ ] Phát hiện các phép toán NumPy vốn đã giải phóng GIL nhưng chưa được tận dụng để chạy song song
- [ ] Tìm các cơ hội áp dụng `ProcessPoolExecutor` cho các thao tác tiêu tốn nhiều tài nguyên CPU
- [ ] Xác định các vòng lặp nóng (hot loops) có thể chuyển sang viết bằng C extension / Cython / Rust (PyO3)
- [ ] Kiểm tra việc sử dụng đúng `asyncio.to_thread()` để đẩy các thao tác I/O gây chặn ra khỏi vòng lặp sự kiện bất đồng bộ

---

## 8. CÁC VẤN ĐỀ VỀ CHẤT LƯỢNG MÃ NGUỒN (CODE QUALITY)

### 8.1 Phát Hiện Mã Chết (Dead Code Detection)
- [ ] Tìm các câu lệnh import không được sử dụng (chạy kiểm tra bằng `autoflake` hoặc `ruff`)
- [ ] Xác định các đoạn mã không bao giờ có thể chạm tới (unreachable code) nằm sau lệnh `return`/`raise`/`sys.exit()`
- [ ] Phát hiện các tham số hàm được khai báo nhưng không bao giờ được sử dụng bên trong thân hàm
- [ ] Tìm các thuộc tính hoặc phương thức của lớp không bao giờ được gọi tới
- [ ] Xác định các biến được gán giá trị nhưng không được sử dụng (đặc biệt là trong các biểu thức comprehension)
- [ ] Kiểm tra các khối mã bị đóng chú thích (commented-out code blocks) bỏ quên trong mã nguồn
- [ ] Tìm các biến bắt ngoại lệ không được sử dụng trong mệnh đề `except`
- [ ] Phát hiện các cờ tính năng (feature flags) của những tính năng đã bị gỡ bỏ từ lâu
- [ ] Xác định các lệnh import dư thừa không dùng đến trong tệp `__init__.py`
- [ ] Tìm các hàm tiện ích hoặc fixture kiểm thử bị bỏ rơi không còn bài test nào gọi tới

### 8.2 Trùng Lặp Mã Nguồn (Code Duplication)
- [ ] Tìm các hàm có phần cài đặt trùng lặp nhau nằm rải rác qua nhiều module
- [ ] Xác định các khối mã sao chép-dán (copy-pasted) chỉ khác nhau vài chi tiết nhỏ
- [ ] Phát hiện các đoạn logic tương tự nhau có thể trừu tượng hóa thành hàm tiện ích dùng chung
- [ ] Tìm các định nghĩa lớp bị trùng lặp
- [ ] Xác định các đoạn logic kiểm tra dữ liệu hợp lệ lặp đi lặp lại có thể gom thành decorator hoặc middleware
- [ ] Kiểm tra các mẫu xử lý lỗi bị viết lặp lại nhiều nơi
- [ ] Tìm các cài đặt API endpoint tương tự nhau có thể tổng quát hóa lại
- [ ] Phát hiện các hằng số bị khai báo trùng lặp ở nhiều module khác nhau

### 8.3 Mùi Mã Nguồn (Code Smells)
- [ ] Tìm các hàm dài quá 50 dòng mã
- [ ] Xác định các tệp mã nguồn lớn hơn 500 dòng
- [ ] Phát hiện các câu lệnh điều kiện lồng nhau quá sâu (>3 cấp) — nên dùng kỹ thuật trả về sớm (early returns / guard clauses)
- [ ] Tìm các hàm có quá nhiều tham số đầu vào (>5 tham số) — nên gom nhóm bằng cấu hình dataclass hoặc TypedDict
- [ ] Xác định các lớp/module "Chúa" (God classes/modules) ôm đồm quá nhiều trách nhiệm
- [ ] Kiểm tra các chuỗi `if/elif/elif/...` kéo dài lê thê nên được thay bằng bảng ánh xạ dict (dict dispatch) hoặc câu lệnh `match/case`
- [ ] Tìm các tham số cờ kiểu boolean làm thay đổi hẳn hành vi của hàm (nên tách thành các hàm riêng biệt hoặc dùng kiểu enum)
- [ ] Phát hiện việc truyền thẳng `*args, **kwargs` qua nhiều tầng hàm làm che khuất chữ ký API thực sự
- [ ] Xác định các cụm dữ liệu đi kèm nhau (data clumps — nhóm các tham số luôn xuất hiện cùng nhau ở nhiều hàm)
- [ ] Tìm sự tổng quát hóa suy đoán quá mức (speculative generality — tạo lớp ABC/Protocol nhưng thực tế chỉ có một hoặc không có lớp con nào kế thừa)

### 8.4 Thành Ngữ & Phong Cách Viết Mã Chuẩn Python (Python Idioms & Style)
- [ ] Tìm các mẫu viết mã không chuẩn Pythonic (dùng `range(len(x))` thay vì dùng `enumerate`)
- [ ] Xác định việc gọi `dict.keys()` không cần thiết (vì `if key in dict` đã hoạt động trực tiếp và nhanh hơn)
- [ ] Phát hiện việc tự tạo và tăng biến đếm thủ công trong vòng lặp thay vì dùng `enumerate()`
- [ ] Tìm phép so sánh `type(x) == SomeType` thay vì dùng `isinstance(x, SomeType)`
- [ ] Xác định các phép so sánh `== True` / `== False` / `== None` thay vì dùng toán tử định danh `is`
- [ ] Kiểm tra cách viết `not x in y` kém tự nhiên thay vì viết `x not in y`
- [ ] Tìm các biểu thức `lambda` được gán trực tiếp vào một biến (theo chuẩn PEP 8 nên định nghĩa bằng `def`)
- [ ] Phát hiện việc dùng `map()`/`filter()` kết hợp lambda ở những chỗ viết bằng list/generator comprehension rõ ràng và dễ đọc hơn
- [ ] Xác định các câu lệnh `from module import *` (làm ô nhiễm không gian tên namespace)
- [ ] Kiểm tra mệnh đề `except:` không chỉ định kiểu ngoại lệ (bắt tất cả mọi thứ kể cả lệnh thoát hệ thống SystemExit)
- [ ] Tìm các tệp `__init__.py` chứa quá nhiều mã xử lý logic (chỉ nên giữ tối thiểu để xuất lại giao diện re-exports)
- [ ] Phát hiện các câu lệnh `print()` dùng để gỡ lỗi còn sót lại trong mã nguồn (phải chuyển sang dùng module `logging`)
- [ ] Xác định sự thiếu nhất quán trong cách định dạng chuỗi (dùng lẫn lộn giữa f-strings, `.format()` và toán tử `%`)
- [ ] Kiểm tra những nơi vẫn dùng `os.path` trong khi dùng `pathlib` sạch sẽ và hướng đối tượng hơn
- [ ] Tìm việc gọi hàm tạo `dict()` ở những nơi dùng ký pháp ngoặc nhọn `{}` chuẩn mực và nhanh hơn
- [ ] Phát hiện cách kiểm tra `if len(x) == 0:` rườm rà thay vì viết `if not x:`

### 8.5 Các Vấn Đề Về Đặt Tên (Naming Issues)
- [ ] Tìm các biến và hàm không tuân theo quy ước đặt tên `snake_case`
- [ ] Xác định các lớp (classes) không tuân theo quy ước đặt tên `PascalCase`
- [ ] Phát hiện các hằng số không tuân theo quy ước viết hoa `UPPER_SNAKE_CASE`
- [ ] Tìm các tên biến/hàm gây hiểu lầm so với chức năng thực tế của chúng
- [ ] Xác định các tên biến chỉ có một chữ cái vô nghĩa (ngoại trừ các biến chạy `i`, `j`, `k`, tọa độ `x`, `y`, hoặc biến bỏ qua `_`)
- [ ] Kiểm tra các tên biến đặt trùng làm che khuất (shadow) các hàm/kiểu tích hợp sẵn của Python (`id`, `type`, `list`, `dict`, `input`, `open`, `file`, `format`, `range`, `map`, `filter`, `set`, `str`, `int`)
- [ ] Tìm các thuộc tính nội bộ (private attributes) thiếu dấu gạch dưới `_` ở đầu tên khi cần thiết
- [ ] Phát hiện các tên viết tắt quá đà làm giảm khả năng đọc hiểu mã nguồn
- [ ] Xác định các phương thức lớp (`@classmethod`) không dùng `cls` làm tên tham số đầu tiên
- [ ] Kiểm tra các phương thức thực thể (instance methods) không dùng `self` làm tên tham số đầu tiên

---

## 9. KIẾN TRÚC & THIẾT KẾ HỆ THỐNG (ARCHITECTURE & DESIGN)

### 9.1 Cấu Trúc Module & Gói (Module & Package Structure)
- [ ] Tìm các phụ thuộc import vòng tròn (circular imports) giữa các module
- [ ] Xác định các chu trình import vòng bị che giấu tạm bợ bằng cách đặt lệnh import bên trong thân hàm (lazy imports)
- [ ] Phát hiện các module nguyên khối khổng lồ cần được tách nhỏ thành các gói (packages)
- [ ] Tìm các vi phạm kiến trúc phân tầng (tầng giao diện/views import và gọi thẳng vào tầng models, bỏ qua tầng nghiệp vụ services)
- [ ] Xác định việc thiếu định nghĩa giao diện API công khai rõ ràng trong tệp `__init__.py`
- [ ] Kiểm tra sự tách biệt rạch ròi giữa các tầng: miền nghiệp vụ (domain), dịch vụ (service), truy cập dữ liệu (repository) và giao diện giao tiếp (API layers)
- [ ] Tìm các trạng thái toàn cục khả biến (mutable global state) bị chia sẻ xuyên qua nhiều module
- [ ] Phát hiện việc dùng đường dẫn import tương đối (relative imports) ở nơi nên dùng đường dẫn tuyệt đối (hoặc ngược lại)
- [ ] Xác định các thủ thuật can thiệp chỉnh sửa trực tiếp `sys.path` trong mã nguồn
- [ ] Kiểm tra việc sử dụng đúng chuẩn các gói không gian tên (namespace packages)

### 9.2 Các Nguyên Lý SOLID
- [ ] **Đơn trách nhiệm (Single Responsibility)**: Tìm các module/lớp đang ôm đồm quá nhiều việc cùng lúc
- [ ] **Đóng/Mở (Open/Closed)**: Tìm các đoạn mã luôn phải sửa đổi trực tiếp mỗi khi muốn mở rộng thêm tính năng mới (thiếu cơ chế plugin/hook)
- [ ] **Thay thế Liskov (Liskov Substitution)**: Tìm các lớp con làm phá vỡ hợp đồng hành vi (contracts) của lớp cha
- [ ] **Phân tách Giao diện (Interface Segregation)**: Tìm các lớp trừu tượng ABCs/Protocols ép lớp con phải cài đặt quá nhiều phương thức không cần thiết
- [ ] **Đảo ngược Phụ thuộc (Dependency Inversion)**: Tìm các phụ thuộc trực tiếp vào lớp cụ thể (concrete class) ở những nơi lẽ ra nên dùng Protocol/ABC

### 9.3 Các Mẫu Thiết kế (Design Patterns)
- [ ] Tìm những chỗ thiếu mẫu Factory để khởi tạo các đối tượng phức tạp
- [ ] Xác định những chỗ thiếu mẫu Strategy (biến thiên hành vi thông qua callable/Protocol)
- [ ] Phát hiện những chỗ thiếu mẫu Repository để trừu tượng hóa việc truy cập dữ liệu
- [ ] Tìm phản mẫu (anti-pattern) Singleton (hãy sử dụng tiêm phụ thuộc - dependency injection để thay thế)
- [ ] Xác định những chỗ thiếu mẫu Decorator cho các mối quan tâm cắt ngang (cross-cutting concerns)
- [ ] Kiểm tra việc sử dụng đúng mẫu Observer/Event (không viết cứng logic gửi thông báo)
- [ ] Tìm những chỗ thiếu mẫu Builder cho việc thiết lập cấu hình phức tạp
- [ ] Phát hiện những chỗ thiếu mẫu Command cho các thao tác có thể hoàn tác (undoable) hoặc đưa vào hàng đợi (queueable)
- [ ] Xác định những nơi có thể dùng `__init_subclass__` hoặc metaclass để giảm bớt mã lặp khuôn mẫu (boilerplate)
- [ ] Kiểm tra việc sử dụng hợp lý giữa ABC và Protocol (kiểu định danh nominal typing so với kiểu cấu trúc structural typing)

### 9.4 Đặc thù theo Framework (Django/Flask/FastAPI)
- [ ] Tìm các hàm xử lý view/route cồng kềnh chứa nhiều logic nghiệp vụ (lẽ ra phải đặt ở tầng service)
- [ ] Xác định những chỗ thiếu middleware cho các mối quan tâm cắt ngang
- [ ] Phát hiện lỗi truy vấn N+1 khi sử dụng ORM
- [ ] Tìm những chỗ dùng câu lệnh SQL thuần trong khi truy vấn ORM là đủ (và ngược lại)
- [ ] Xác định các bản di chuyển cơ sở dữ liệu (database migrations) còn thiếu
- [ ] Kiểm tra việc xác thực dữ liệu bằng serializer/schema đúng chuẩn tại ranh giới API
- [ ] Tìm các điểm cuối (endpoints) công khai bị thiếu giới hạn tần suất gọi (rate limiting)
- [ ] Phát hiện việc thiếu chiến lược quản lý phiên bản API (API versioning)
- [ ] Xác định việc thiếu các điểm cuối kiểm tra sức khỏe hệ thống (health check / readiness endpoints)
- [ ] Kiểm tra việc sử dụng đúng cơ chế signal/hook thay vì can thiệp sửa đổi nóng lúc chạy (monkeypatching)

---

## 10. PHÂN TÍCH THƯ VIỆN PHỤ THUỘC (DEPENDENCY ANALYSIS)

### 10.1 Phân tích Phiên bản & Tính tương thích
- [ ] Kiểm tra tất cả các thư viện phụ thuộc xem có bản cập nhật mới hay không
- [ ] Tìm các phiên bản chưa được ghim cố định (unpinned) trong `requirements.txt` / `pyproject.toml`
- [ ] Xác định các khai báo `>=` mà không có ràng buộc giới hạn chặn trên
- [ ] Kiểm tra tính tương thích với phiên bản Python (`python_requires` trong `pyproject.toml`)
- [ ] Tìm các phiên bản thư viện phụ thuộc bị xung đột lẫn nhau
- [ ] Xác định những thư viện phụ thuộc lẽ ra chỉ nên nằm trong nhóm `dev` / `test`
- [ ] Kiểm tra tệp `requirements.txt` được sinh từ lệnh `pip freeze` có chứa các thư viện phụ thuộc bắc cầu (transitive deps) không cần thiết hay không
- [ ] Tìm các nhóm phụ thuộc tùy chọn / `extras_require` còn thiếu
- [ ] Phát hiện tệp `setup.py` cũ cần được chuyển đổi sang `pyproject.toml`

### 10.2 Sức khỏe của Thư viện Phụ thuộc
- [ ] Kiểm tra ngày phát hành gần nhất của từng thư viện phụ thuộc
- [ ] Xác định các thư viện phụ thuộc đã bị lưu trữ (archived) hoặc ngừng bảo trì
- [ ] Tìm các thư viện phụ thuộc đang có lỗ hổng bảo mật nghiêm trọng chưa được vá
- [ ] Kiểm tra các thư viện phụ thuộc thiếu tệp khai báo kiểu (`py.typed` hoặc các gói `types-*`)
- [ ] Xác định các thư viện phụ thuộc nặng nề có thể thay thế bằng thư viện chuẩn (stdlib)
- [ ] Tìm các thư viện phụ thuộc có giấy phép hạn chế nghiêm ngặt (ví dụ giấy phép GPL nằm trong dự án MIT)
- [ ] Kiểm tra các thư viện phụ thuộc có phần mở rộng viết bằng C thuần (lo ngại về tính khả chuyển giữa các môi trường)
- [ ] Xác định các thư viện phụ thuộc kéo theo cây thư viện bắc cầu khổng lồ
- [ ] Tìm các đoạn mã chép tay trực tiếp vào dự án (vendored code) lẽ ra nên được quản lý như một thư viện phụ thuộc chuẩn

### 10.3 Môi trường Ảo & Đóng gói (Packaging)
- [ ] Kiểm tra cấu hình `pyproject.toml` đã chuẩn xác hay chưa
- [ ] Xác minh `setup.cfg` / `setup.py` đã hiện đại và đầy đủ hay chưa
- [ ] Tìm dấu hiệu thiếu tệp đánh dấu `py.typed` đối với các gói có định kiểu
- [ ] Kiểm tra cấu hình điểm vào (entry points) / kịch bản dòng lệnh (console scripts)
- [ ] Xác định tệp `MANIFEST.in` còn thiếu khi đóng gói mã nguồn (sdist packaging)
- [ ] Xác minh hệ thống phụ trợ đóng gói (build backend) phù hợp (`setuptools`, `hatchling`, `flit`, `poetry`)
- [ ] Kiểm tra khả năng tương thích với lệnh `pip install -e .` (cài đặt ở chế độ chỉnh sửa trực tiếp)
- [ ] Tìm các ảnh Docker (Docker images) không sử dụng kỹ thuật dựng đa tầng (multi-stage builds) cho Python

---

## 11. KHOẢNG TRỐNG TRONG KIỂM THỬ (TESTING GAPS)

### 11.1 Phân tích Độ bao phủ (Coverage Analysis)
- [ ] Chạy `pytest --cov` — xác định các mô-đun và hàm chưa được kiểm thử
- [ ] Tìm các nhánh xử lý lỗi/ngoại lệ chưa được kiểm thử
- [ ] Phát hiện các trường hợp biên (edge cases) trong câu lệnh điều kiện chưa được kiểm thử
- [ ] Kiểm tra các bài kiểm thử giá trị biên (boundary value tests) còn thiếu
- [ ] Xác định các luồng mã bất đồng bộ (async) chưa được kiểm thử
- [ ] Tìm các kịch bản xác thực dữ liệu đầu vào chưa được kiểm thử
- [ ] Kiểm tra các bài kiểm thử tích hợp còn thiếu (cơ sở dữ liệu, HTTP, dịch vụ bên ngoài)
- [ ] Xác định các logic nghiệp vụ trọng yếu chưa có kiểm thử dựa trên thuộc tính (property-based tests với `hypothesis`)

### 11.2 Chất lượng Bài kiểm thử
- [ ] Tìm các bài kiểm thử không khẳng định (assert) điều gì có ý nghĩa (`assert True`)
- [ ] Xác định các bài kiểm thử lạm dụng giả lập (mocking) quá mức làm che khuất lỗi thực tế
- [ ] Phát hiện các bài kiểm thử chỉ kiểm tra chi tiết triển khai nội bộ thay vì hành vi đầu ra
- [ ] Tìm các bài kiểm thử dùng chung trạng thái có thể biến đổi (kết quả phụ thuộc vào thứ tự chạy)
- [ ] Xác định những chỗ thiếu `pytest.mark.parametrize` cho các bài kiểm thử hướng dữ liệu
- [ ] Kiểm tra các bài kiểm thử chập chờn lúc đúng lúc sai (flaky tests - phụ thuộc thời gian, phụ thuộc mạng)
- [ ] Tìm `@pytest.fixture` đặt sai phạm vi (scope) gây rò rỉ trạng thái giữa các bài kiểm thử
- [ ] Phát hiện các bài kiểm thử sửa đổi trạng thái toàn cục mà không dọn dẹp sau khi chạy
- [ ] Xác định các lệnh `unittest.mock.patch` giả lập phạm vi quá rộng
- [ ] Kiểm tra việc dọn dẹp `monkeypatch` trong các fixture của pytest
- [ ] Tìm sự thiếu tổ chức hợp lý trong tệp `conftest.py`
- [ ] Phát hiện phép so sánh `assert x == y` trực tiếp trên số thực dấu phẩy động mà không dùng `pytest.approx()`

### 11.3 Hạ tầng Kiểm thử
- [ ] Tìm những chỗ thiếu tệp `conftest.py` cho các fixture dùng chung
- [ ] Xác định các nhãn đánh dấu kiểm thử còn thiếu (`@pytest.mark.slow`, `@pytest.mark.integration`)
- [ ] Phát hiện việc thiếu cấu hình `pytest.ini` / `pyproject.toml [tool.pytest]`
- [ ] Kiểm tra việc quản lý cơ sở dữ liệu kiểm thử và dữ liệu mẫu (fixture) đã chuẩn chưa
- [ ] Tìm các bài kiểm thử phụ thuộc trực tiếp vào dịch vụ bên ngoài mà không có mock (dễ gãy đổ)
- [ ] Xác định việc thiếu `factory_boy` hoặc `faker` để sinh dữ liệu kiểm thử
- [ ] Kiểm tra việc sử dụng đúng `vcr`/`responses`/`httpx_mock` để giả lập lời gọi HTTP
- [ ] Tìm những chỗ thiếu kiểm thử chụp ảnh đối chiếu (snapshot/golden testing) cho các đầu ra phức tạp
- [ ] Phát hiện việc thiếu bước kiểm tra kiểu tĩnh trong CI (`mypy --strict` hoặc `pyright`)
- [ ] Xác định việc thiếu cấu hình `pre-commit` hooks

---

## 12. CẤU HÌNH & MÔI TRƯỜNG

### 12.1 Cấu hình Python
- [ ] Kiểm tra tệp `pyproject.toml` đã được cấu hình đúng chuẩn chưa
- [ ] Xác minh cấu hình `mypy` / `pyright` với chế độ nghiêm ngặt (strict mode)
- [ ] Kiểm tra cấu hình `ruff` / `flake8` với bộ quy tắc phù hợp
- [ ] Xác minh cấu hình `black` / `ruff format` để định dạng mã nguồn nhất quán
- [ ] Kiểm tra cấu hình sắp xếp lệnh import bằng `isort` / `ruff`
- [ ] Xác minh việc ghim cố định phiên bản Python (`.python-version`, `Dockerfile`)
- [ ] Kiểm tra cấu trúc tệp `__init__.py` hợp lý trong tất cả các gói (packages)
- [ ] Tìm các thao tác can thiệp trực tiếp vào `sys.path` lẽ ra nên được thay bằng việc cài đặt gói chuẩn xác

### 12.2 Xử lý Biến Môi trường
- [ ] Tìm các giá trị đặc thù theo môi trường bị viết cứng (URL, cổng, đường dẫn, chuỗi kết nối cơ sở dữ liệu)
- [ ] Xác định việc thiếu bước kiểm tra tính hợp lệ của biến môi trường ngay khi khởi động
- [ ] Phát hiện các giá trị dự phòng (fallback) không phù hợp khi thiếu cấu hình
- [ ] Kiểm tra việc xử lý tệp `.env` đúng cách (`python-dotenv`, `pydantic-settings`)
- [ ] Tìm các giá trị nhạy cảm không sử dụng hệ thống quản lý bí mật (secrets management)
- [ ] Xác định cờ `DEBUG=True` có nguy cơ bị bật trên môi trường vận hành thực tế (production)
- [ ] Kiểm tra cấu hình ghi nhật ký (logging) hợp lý (cấp độ, định dạng, bộ xử lý handlers)
- [ ] Tìm các câu lệnh `print()` lẽ ra phải dùng mô-đun `logging`

### 12.3 Cấu hình Triển khai (Deployment)
- [ ] Kiểm tra Dockerfile có tuân thủ các phương pháp thực hành tốt nhất hay không (người dùng non-root, dựng đa tầng multi-stage, tận dụng bộ nhớ đệm tầng layer caching)
- [ ] Xác minh cấu hình máy chủ WSGI/ASGI (số lượng gunicorn workers, thiết lập uvicorn)
- [ ] Tìm các điểm cuối kiểm tra sức khỏe (health check endpoints) còn thiếu
- [ ] Kiểm tra việc xử lý tín hiệu hệ thống (`SIGTERM`, `SIGINT`) để tắt ứng dụng êm ái (graceful shutdown)
- [ ] Xác định việc thiếu cấu hình trình quản lý tiến trình (supervisor, systemd)
- [ ] Xác minh bước chạy di chuyển cơ sở dữ liệu (database migration) đã nằm trong đường ống triển khai
- [ ] Kiểm tra cấu hình phục vụ tệp tĩnh (static files) hợp lý
- [ ] Tìm những chỗ thiếu thiết lập giám sát/quan sát hệ thống (metrics, tracing, structured logging)

---

## 13. PHIÊN BẢN PYTHON & TÍNH TƯƠNG THÍCH

### 13.1 Ngừng hỗ trợ (Deprecation) & Chuyển đổi (Migration)
- [ ] Tìm các khai báo `typing.Dict`, `typing.List`, `typing.Tuple` (hãy dùng `dict`, `list`, `tuple` có sẵn từ Python 3.9+)
- [ ] Xác định các khai báo `typing.Optional[X]` có thể viết gọn thành `X | None` (từ 3.10+)
- [ ] Phát hiện các khai báo `typing.Union[X, Y]` có thể viết gọn thành `X | Y` (từ 3.10+)
- [ ] Tìm `@abstractmethod` được dùng mà lớp cơ sở không kế thừa từ `ABC`
- [ ] Xác định các hàm/mô-đun đã bị loại bỏ trong phiên bản Python mục tiêu
- [ ] Kiểm tra việc sử dụng hàm `asyncio.get_event_loop()` đã bị ngừng khuyến khích (deprecated từ 3.10+)
- [ ] Tìm cách sử dụng `importlib.resources` đảm bảo tương thích với phiên bản mục tiêu
- [ ] Phát hiện việc sử dụng cú pháp `match/case` nếu dự án vẫn cần hỗ trợ Python <3.10
- [ ] Xác định việc sử dụng `ExceptionGroup` nếu dự án vẫn cần hỗ trợ Python <3.11
- [ ] Kiểm tra việc sử dụng `tomllib` nếu dự án vẫn cần hỗ trợ Python <3.11

### 13.2 Đảm bảo Tương thích Tương lai (Future-Proofing)
- [ ] Tìm các đoạn mã sẽ bị lỗi trong các phiên bản Python tương lai
- [ ] Xác định các cảnh báo sắp ngừng hỗ trợ (pending deprecation warnings)
- [ ] Kiểm tra các lệnh import từ `__future__` nên được bổ sung
- [ ] Phát hiện các mẫu mã nguồn sẽ trở nên lỗi thời bởi các đề xuất PEP sắp ra mắt
- [ ] Xác định việc sử dụng `pkg_resources` (đã ngừng hỗ trợ — hãy dùng `importlib.metadata`)
- [ ] Tìm việc sử dụng `distutils` (đã bị gỡ bỏ hoàn toàn từ Python 3.12)

---

## 14. DANH SÁCH KIỂM TRA CÁC TRƯỜNG HỢP BIÊN (EDGE CASES CHECKLIST)

### 14.1 Trường hợp Biên về Dữ liệu Đầu vào
- [ ] Chuỗi rỗng, danh sách (list) rỗng, từ điển (dict) rỗng, tập hợp (set) rỗng
- [ ] Các số cực lớn (Python hỗ trợ độ chính xác tùy ý nhưng vẫn bị giới hạn bởi bộ nhớ)
- [ ] Số âm ở những nơi kỳ vọng nhận số dương
- [ ] Giá trị bằng 0 (khi chia, đánh chỉ mục, cắt lát slicing)
- [ ] Các giá trị số thực đặc biệt `float('nan')`, `float('inf')`, `-float('inf')`
- [ ] Ký tự Unicode, biểu tượng cảm xúc (emoji), ký tự độ rộng bằng không (zero-width characters) trong xử lý chuỗi
- [ ] Chuỗi cực dài (nguy cơ cạn kiệt bộ nhớ)
- [ ] Cấu trúc dữ liệu lồng nhau quá sâu (vượt giới hạn đệ quy: `sys.getrecursionlimit()`)
- [ ] Nhầm lẫn giữa kiểu `bytes` và `str` (đặc biệt trong Python 3)
- [ ] Từ điển (dictionary) sử dụng khóa không thể băm (unhashable keys gây lỗi TypeError lúc chạy)

### 14.2 Trường hợp Biên về Thời gian
- [ ] Năm nhuận, thời điểm chuyển đổi giờ mùa hè DST (xử lý bằng `pytz` so với `zoneinfo`)
- [ ] Trộn lẫn đối tượng thời gian không có múi giờ (timezone-naive) và có múi giờ (timezone-aware)
- [ ] Hàm `datetime.utcnow()` đã ngừng khuyến khích trong Python 3.12 (hãy dùng `datetime.now(UTC)`)
- [ ] Sự khác biệt về độ chính xác của `time.time()` giữa các nền tảng hệ điều hành
- [ ] Tràn số `timedelta` khi dùng các giá trị quá lớn
- [ ] Các trường hợp biên của lịch (ngày 29 tháng 2, ranh giới chuyển giao giữa các tháng)
- [ ] Định dạng ngày tháng mơ hồ khi phân tích bằng `dateutil.parser.parse()`

### 14.3 Trường hợp Biên về Nền tảng Hệ điều hành
- [ ] Xử lý đường dẫn tệp tin giữa các hệ điều hành (`pathlib.Path` so với chuỗi ký tự thuần)
- [ ] Sự khác biệt về ký tự xuống dòng (`\n` so với `\r\n`)
- [ ] Sự khác biệt về phân biệt chữ hoa/thường của hệ thống tệp tin
- [ ] Giới hạn độ dài đường dẫn tối đa (Windows giới hạn 260 ký tự)
- [ ] Các thao tác chuỗi phụ thuộc vào ngôn ngữ vùng miền (`str.lower()` với bảng mã tiếng Thổ Nhĩ Kỳ)
- [ ] Giới hạn số lượng tiến trình/luồng trên các nền tảng khác nhau
- [ ] Sự khác biệt trong xử lý tín hiệu hệ thống (Windows so với Unix)

---

## ĐỊNH DẠNG ĐẦU RA (OUTPUT FORMAT)

Đối với mỗi vấn đề phát hiện được, hãy cung cấp:

### [SEVERITY: CRITICAL/HIGH/MEDIUM/LOW] Tiêu đề Vấn đề

**Danh mục**: [Type Safety/Security/Performance/Concurrency/etc.]
**Tệp**: path/to/file.py
**Dòng**: 123-145
**Tác động**: Mô tả những hậu quả xấu có thể xảy ra

**Mã hiện tại**:
```python
# problematic code
```

**Vấn đề**: Giải thích chi tiết tại sao đây lại là một lỗi hoặc rủi ro

**Khuyến nghị khắc phục**:
```python
# fixed code
```

**Tài liệu tham khảo**: Liên kết tới các tài liệu PEP, tài liệu chính thức, mã lỗi CVE, phương pháp thực hành tốt nhất

---

## MA TRẬN MỨC ĐỘ ƯU TIÊN (PRIORITY MATRIX)

1. **NGHIÊM TRỌNG - CRITICAL** (Phải sửa ngay lập tức):
   - Các lỗ hổng bảo mật (tiêm mã độc injection, dùng `eval`, `pickle` trên dữ liệu không đáng tin cậy)
   - Rủi ro mất mát hoặc làm hỏng dữ liệu
   - Dùng `eval()` / `exec()` với dữ liệu đầu vào từ người dùng
   - Thông tin bí mật (secrets) bị viết cứng trong mã nguồn

2. **CAO - HIGH** (Phải sửa ngay trong Sprint này):
   - Đối số mặc định có thể biến đổi (mutable default arguments)
   - Các khối bắt lỗi trần `except:` không chỉ định loại ngoại lệ
   - Thiếu từ khóa `await` khi gọi các hàm coroutine
   - Rò rỉ tài nguyên (tệp tin, kết nối mở ra nhưng không đóng)
   - Điều kiện tranh chấp (race conditions) trong mã đa luồng

3. **TRUNG BÌNH - MEDIUM** (Sửa sớm):
   - Thiếu gợi ý kiểu (type hints) trên các API công khai
   - Vi phạm chất lượng mã nguồn / quy ước viết mã chuẩn (idioms)
   - Khoảng trống trong độ bao phủ kiểm thử
   - Các vấn đề hiệu năng ở những luồng xử lý không quá nóng (non-hot paths)

4. **THẤP - LOW** (Nợ kỹ thuật - Tech Debt):
   - Thiếu nhất quán về phong cách trình bày mã (style)
   - Các tối ưu hóa nhỏ
   - Thiếu sót về tài liệu chú thích
   - Cải thiện cách đặt tên

---

## CÁC CÔNG CỤ PHÂN TÍCH TĨNH CẦN CHẠY

Trước khi đánh giá thủ công, hãy chạy các công cụ sau và đưa kết quả phát hiện vào báo cáo:

```bash
# Type checking (strict mode)
mypy --strict .
# or
pyright --pythonversion 3.12 .

# Linting (comprehensive)
ruff check --select ALL .
# or
flake8 --max-complexity 10 .
pylint --enable=all .

# Security scanning
bandit -r . -ll
pip-audit
safety check

# Dead code detection
vulture .

# Complexity analysis
radon cc . -a -nc
radon mi . -nc

# Import analysis
importlint .
# or check circular imports:
pydeps --noshow --cluster .

# Dependency analysis
pipdeptree --warn silence
deptry .

# Test coverage
pytest --cov=. --cov-report=term-missing --cov-fail-under=80

# Format check
ruff format --check .
# or
black --check .

# Type coverage
mypy --html-report typecoverage .
```

---

## TÓM TẮT CUỐI CÙNG (FINAL SUMMARY)

Sau khi hoàn tất quá trình đánh giá, hãy cung cấp:

1. **Tóm tắt Điều hành (Executive Summary)**: Tổng quan trong 2-3 đoạn văn
2. **Đánh giá Rủi ro (Risk Assessment)**: Mức độ rủi ro tổng thể kèm theo lý giải
3. **10 Vấn đề Nghiêm trọng Hàng đầu (Top 10 Critical Issues)**: Danh sách được sắp xếp theo thứ tự ưu tiên
4. **Kế hoạch Hành động Khuyến nghị (Recommended Action Plan)**: Phương pháp tiếp cận khắc phục theo từng giai đoạn
5. **Ước tính Công sức (Estimated Effort)**: Ước tính thời gian cần thiết để khắc phục
6. **Các Chỉ số Đo lường (Metrics)**:
   - Tổng số vấn đề tìm thấy theo từng mức độ nghiêm trọng
   - Điểm sức khỏe mã nguồn (1-10)
   - Điểm bảo mật (1-10)
   - Điểm an toàn kiểu dữ liệu (1-10)
   - Điểm khả năng bảo trì (1-10)
   - Tỷ lệ phần trăm độ bao phủ kiểm thử
Python
E@ersinkoc
0
Previous2 / 2