Audit chất lượng vòng đời phần mềm khi có AI tham gia
Khi AI tham gia viết mã, câu “xong rồi” xuất hiện nhanh hơn bằng chứng. Audit chất lượng vòng đời phần mềm (SDLC) là việc đo xem những gì được tuyên bố khớp với thực tế đến đâu. Bài này mô tả một cách làm gọn: đối chiếu ba nguồn sự thật, kiểm theo lớp, duyệt theo mức ảnh hưởng và ghi bằng chứng để người khác kiểm lại được.
Ba nguồn sự thật và một quy tắc đối chiếu
- Bản ghikế hoạch · ticket · bảng tiến độtiến độ ghi có khớp kết quả kiểm thật?
- Hiện vậtmã nguồn · test · tài liệu · cấu hìnhbản đã kiểm có phải bản đang chạy?
- Môi trường vận hànhbản đang phục vụ · hạ tầng đang chạy
- Bản ghi: kế hoạch, ticket, bảng tiến độ, nhật ký công việc.
- Hiện vật: mã nguồn, bộ kiểm thử, tài liệu và cấu hình trong kho mã.
- Môi trường vận hành: bản đang phục vụ người dùng và hạ tầng đang chạy.
Hai nguồn bất kỳ lệch nhau là một phát hiện. Khi hai nguồn mâu thuẫn, nguồn nào máy đo được thì được ưu tiên hơn nguồn do người hoặc agent tự khai.
Ví dụ minh hoạ, dùng một dự án giả định. Hai tài liệu ghi tiến độ 72%, hệ thống theo dõi ghi 75%. Kế hoạch nói bản giao diện mới chỉ được triển khai sau khi được duyệt, nhưng dấu thời gian và tên tệp băm trên môi trường vận hành cho thấy bản mới đã chạy từ tối hôm trước. Một bước kiểm chuyển hướng HTTP sang HTTPS báo đỏ vì cờ cấp vùng chưa bật, dù khai báo hạ tầng ghi là đã bật. Bộ test vẫn xanh. Chỉ khi đặt ba nguồn cạnh nhau mới thấy ba chỗ lệch này.
Kiểm theo lớp
- Lớp máy: chạy tự động trướcbuild · lint · kiểu · test · secret
- Tầng 1 · Đúng logicmọi thay đổi · đọc diff thật
- Tầng 2 · Hợp kiến trúcđúng ranh giới · không tạo bản sao
- Tầng 3 · Đủ hiệu năngtruy vấn trong vòng lặp · độ phức tạp
- Tầng 4 · An toàn khi đồng thờichạy hai lần · transaction · retry
- Lớp máy chạy trước khi người đọc: build, lint, kiểm kiểu, test, quét secret và xác nhận thư viện được gọi có thật.
- Tầng 1, đúng logic: đối chiếu từng tiêu chí chấp nhận với diff thật, thử các ca biên, soi chỗ nuốt lỗi và mã thừa.
- Tầng 2, hợp kiến trúc: đúng ranh giới module, không tạo bản sao của thứ đã có.
- Tầng 3, đủ hiệu năng: truy vấn trong vòng lặp, kéo cả tập dữ liệu vào bộ nhớ, độ phức tạp trên kích thước dữ liệu thật.
- Tầng 4, an toàn khi đồng thời: chạy hai lần không hỏng dữ liệu, ranh giới transaction, retry và timeout.
- Bảo mật xuyên các tầng: đầu vào đi tới đâu, phân quyền đúng người đúng việc, thư viện và công cụ của agent có thật và đáng tin, secret, dữ liệu cá nhân.
Tầng 2 đến 4 và phần bảo mật chỉ bật khi thay đổi chạm ngưỡng, ví dụ thay đổi lớn, module lõi, giao diện công khai hoặc job nền. Mục tiêu là cả bộ kiểm giữ trong khoảng 30 phút cho một thay đổi cỡ vừa; vượt liên tục thì tự động hoá bớt hoặc cắt mục.
Một kết luận chỉ có giá trị khi kiểm chứng được
- 1. Tiêu chí quan sát đượcmô tả kết quả, không mô tả cách làm
- 2. Phép kiểm chạy đượclệnh hoặc rubric, đã từng bắt lỗi mẫu
- 3. Chạy ở nơi độc lậpmáy hoặc người khác bên tạo ra kết quả
- 4. Bằng chứnglệnh · kết quả · thời điểm · nơi lưu
- ĐẠTmọi mục áp dụng đủ bằng chứng
- LÀM LẠItrả về, kèm vị trí lỗi
- LEO THANGchạm điểm dừng, người quyết
- Viết tiêu chí bằng thứ nhìn thấy được ở kết quả, không bằng các bước đã làm.
- Phép kiểm của từng tiêu chí phải chạy lại được; nếu phải kiểm bằng tay thì nêu rõ và kèm thang chấm.
- Chỉ đánh đạt khi phép kiểm thật đạt, không đổi trạng thái bằng niềm tin.
- Không làm yếu hay xoá tiêu chí để thay đổi trông như đã xong; yêu cầu mới thì thêm tiêu chí.
- Mỗi mục có bằng chứng: lệnh, kết quả, thời điểm và nơi lưu để người khác chạy lại.
- Không chắc thì mục đó chưa đạt, và hỏi.
- AI không tự chấm đầu ra của chính nó. Người hoặc một môi trường độc lập phán xử.
Một phép kiểm chưa từng thất bại thì chưa chứng minh được gì, nên verifier cần được thử trên một lỗi mẫu. Máy chạy phép kiểm; con người quyết định điều gì đáng kiểm, nên việc viết tiêu chí không giao cho agent.
Duyệt theo mức ảnh hưởng
- Tự trị: làm thẳng, người xem saunhánh thử nghiệm · sinh test · nháp tài liệuđiều kiện: lớp máy chạy tự động
- Duyệt sau, trước khi lannhánh dùng chung · cấu hình không phải prodđiều kiện: có kết luận kiểm trước khi gộp
- Duyệt trước: cổng cứngproduction · dữ liệu thật · tiềnxác thực, phân quyền · secret · thư viện mớingười chịu trách nhiệm duyệt, không tự động
- Tự trị: nhánh thử nghiệm, sinh test, nháp tài liệu, đọc và giải thích mã. Điều kiện là lớp máy chạy tự động.
- Duyệt sau, trước khi lan: nhánh dùng chung, cấu hình không phải production, migration trên môi trường phát triển. Cần kết luận kiểm trước khi gộp.
- Duyệt trước, cổng cứng: production, dữ liệu thật, tiền, xác thực và phân quyền, secret, thư viện mới, API công bố ra ngoài. Do người chịu trách nhiệm duyệt, không tự động.
Dừng và báo khi đầu ra chứa secret hoặc dữ liệu cá nhân chưa che, khi xuất hiện thư viện hoặc công cụ không giải thích được, khi có cảm giác sai mà chưa gọi tên được, hoặc khi nghi sự cố production. Mỗi mục có đúng một người chịu trách nhiệm cuối; người bấm duyệt chịu trách nhiệm về mã có AI tham gia như mã tự viết.
Cần có đường ngoại lệ hợp pháp: ghi ai duyệt, phá mục nào, vì sao và đến khi nào. Không có đường này, người ta dùng AI ngoài tầm nhìn. Ngoại lệ tập trung ở đâu thì quy tắc ở đó đang sai.
Báo cáo audit và vòng học
- 1. Đo baselinetrước ngày bắt đầu, để còn so sánh
- 2. Thử trong phạm vi hẹpmột nhóm, vài loại việc, có thời hạn
- 3. Đo hằng tuầnđủ bằng chứng · thời gian rà · lỗi lọt
- 4. Quyết định theo sốmở rộng · điều chỉnh · dừng
Một báo cáo audit nêu phạm vi và thời điểm đo, bảng phát hiện (mô tả, nguồn lệch, mức độ, bằng chứng, người xử lý), kết luận đạt, làm lại hoặc leo thang, và phần chưa đo được. Phần chưa đo được phải ghi rõ để không bị đọc thành “đạt”.
- Đo baseline trước khi bắt đầu; không có baseline thì sau này không so được.
- Đo hằng tuần: tỷ lệ thay đổi đủ bằng chứng, thời gian rà soát trung vị, lỗi bắt được và lỗi lọt sau khi gộp, số ngoại lệ.
- Mỗi quý đọc sâu vài thay đổi đã đạt để đếm lỗi lọt theo tầng. Lỗi lọt lặp lại thì thêm mục kiểm; mục lâu không bắt được gì và không phải rào an toàn thì cân nhắc cắt.
- Bộ quy tắc không được nhắc tới trong một quý là bộ quy tắc đang chết; rà lại cùng nhóm.
Giới hạn
Audit theo bằng chứng không chứng minh phần mềm đúng về ngữ nghĩa. Nó chỉ chứng minh những tiêu chí đã viết ra đã được kiểm. Ca biên chưa ai nghĩ tới thì không nằm trong tiêu chí, và số đo trên một dự án không suy ra được cho dự án khác.