Testing và debugging thường xuất hiện liên tiếp trong quá trình phát triển phần mềm, nhưng theo ISTQB, đây là hai hoạt động riêng biệt. Testing giúp phát hiện vấn đề; debugging tìm nguyên nhân và loại bỏ vấn đề đó.
Testing là gì?
Testing đánh giá test object và tìm kiếm defect hoặc failure. Tùy hình thức kiểm thử, vấn đề được phát hiện theo hai cách:
- Dynamic testing (kiểm thử động): chạy phần mềm và tạo ra điều kiện khiến defect gây nên failure.
- Static testing (kiểm thử tĩnh): xem xét tài liệu, thiết kế hoặc source code để tìm trực tiếp defect mà không cần chạy phần mềm.
Ví dụ: Tester nhập số lượng sản phẩm bằng -1 và thấy tổng tiền bị âm. Hành vi sai quan sát được là một failure được phát hiện thông qua dynamic testing.
Debugging là gì?
Debugging là quá trình tìm kiếm, phân tích và loại bỏ nguyên nhân gây ra failure. Trong trường hợp testing phát hiện failure, quy trình debugging điển hình gồm ba bước:
- Reproduction: tái hiện lại lỗi.
- Diagnosis: phân tích và tìm defect gây ra failure.
- Fixing: sửa defect.
Ví dụ: Developer tái hiện lỗi tổng tiền âm, lần theo logic tính giá và phát hiện code chưa kiểm tra số lượng nhỏ hơn 1. Sau đó developer bổ sung validation để sửa defect.
So sánh Testing và Debugging
| Tiêu chí | Testing | Debugging |
|---|---|---|
| Mục tiêu | Phát hiện failure hoặc defect | Tìm nguyên nhân và sửa defect |
| Điểm bắt đầu | Test basis, test case hoặc test idea | Một failure hoặc defect đã được phát hiện |
| Người thực hiện phổ biến | Tester | Developer |
| Kết quả | Test result, defect report | Code đã được sửa |
| Có phải hoạt động testing? | Có | Không |
Sau khi debugging xong thì làm gì?
Sửa code chưa phải là kết thúc. Sau debugging, đội dự án thường thực hiện:
- Confirmation testing (retesting): kiểm tra lại để xác nhận bản sửa đã giải quyết đúng vấn đề. ISTQB khuyến nghị người thực hiện test ban đầu nên thực hiện bước này nếu có thể. Thức là dev test trước, ok thì đẩy qua cho phía tester check lại
- Regression testing: kiểm tra xem thay đổi vừa sửa có gây failure ở những phần khác của hệ thống hay không. Cái này thường thực hiện bởi tester
Trường hợp static testing có gì khác?
Static testing tìm trực tiếp defect mà không chạy phần mềm, vì vậy không tạo ra failure. Khi một review phát hiện công thức trong tài liệu thiết kế bị sai, debugging chỉ cần tập trung sửa defect đó; không cần tái hiện failure hay chẩn đoán lại nguyên nhân.
Tester tìm lỗi, developer sửa lỗi — có luôn đúng không?
Đây là cách phân chia phổ biến nhưng không phải quy tắc tuyệt đối. Trong nhiều nhóm, khi được đào tạo tốt, developer có thể vừa thực hiện testing vừa debugging. Với mô hình whole-team approach, nhiều thành viên cùng đóng góp vào chất lượng, nhưng vẫn cần phân biệt rõ mục tiêu của từng hoạt động.
Cách ghi nhớ đơn giản
Testing là tìm ra bug
Debugging là tái hiện bug, sau đó fix bug
Hai hoạt động phối hợp với nhau theo vòng lặp: Testing → phát hiện vấn đề → Debugging → sửa defect → Confirmation testing → Regression testing.




