Testing và Debugging khác nhau thế nào?

⏱︎

Read time:

2–4 minutes
Minh họa sự khác nhau giữa Testing và Debugging theo ISTQB

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:

  1. Reproduction: tái hiện lại lỗi.
  2. Diagnosis: phân tích và tìm defect gây ra failure.
  3. 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íTestingDebugging
Mục tiêuPhát hiện failure hoặc defectTìm nguyên nhân và sửa defect
Điểm bắt đầuTest basis, test case hoặc test ideaMột failure hoặc defect đã được phát hiện
Người thực hiện phổ biếnTester 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.