Ad-hoc, Exploratory, Smoke, Sanity và End-to-End Testing khác nhau thế nào?

⏱︎

Read time:

5–8 minutes
Minh họa các cách tiếp cận kiểm thử phần mềm thường gặp

Ad-hoc, Exploratory, Smoke, Sanity và End-to-End Testing thường xuất hiện trong công việc hằng ngày, nhưng chúng không cùng một hệ phân loại. Có thuật ngữ nói về cách tester làm việc, có thuật ngữ nói về mục tiêu kiểm tra, còn có thuật ngữ mô tả độ dài của luồng nghiệp vụ.

Lưu ý
Đừng cố xếp tất cả vào test level. Trong CTFL v4.0.1, System Testing và System Integration Testing là test levels; Exploratory Testing là một experience-based test technique. Các tên gọi còn lại thường mô tả phạm vi, mục tiêu hoặc cách thực hiện.

Ad-hoc Testing là gì?

Ad-hoc Testing là cách kiểm thử tự phát, ít cấu trúc, thường không có test case hay kế hoạch chi tiết được chuẩn bị trước. Tester dựa vào kinh nghiệm và trực giác để thử những tình huống có khả năng làm hệ thống hỏng.

Ví dụ
Tester vừa nhận bản build của trang đặt hàng. Chưa có test case, tester thử bấm nút Thanh toán liên tục, back trình duyệt giữa chừng, mở hai tab cùng đặt một sản phẩm và tắt mạng đúng lúc gửi đơn.

Ad-hoc có lợi khi cần kiểm tra rất nhanh hoặc muốn tận dụng kinh nghiệm của tester. Điểm yếu là coverage khó đo, kết quả phụ thuộc người thực hiện và lỗi có thể khó tái hiện nếu không ghi lại bước làm.

Exploratory Testing là gì?

Theo ISTQB, trong Exploratory Testing, tester đồng thời học về test object, thiết kế test, thực thi và đánh giá kết quả. Điều vừa quan sát được sẽ định hướng cho test tiếp theo.

Exploratory Testing có thể được tổ chức theo session:

  • Có test charter nêu mục tiêu khám phá.
  • Có time-box, chẳng hạn 60 phút.
  • Tester ghi lại phạm vi đã thử, phát hiện, câu hỏi và rủi ro.
  • Sau session có thể có buổi debrief để trao đổi kết quả.

Exploratory khác Ad-hoc như thế nào?

Tiêu chíAd-hoc TestingExploratory Testing
Cấu trúcÍt hoặc không có cấu trúcCó thể có charter, time-box và debrief
Định hướngChủ yếu dựa vào trực giác tại thời điểm testLiên tục học và dùng phát hiện mới để thiết kế test tiếp theo
Ghi chépCó thể rất ítThường ghi lại coverage, phát hiện và câu hỏi
Khả năng quản lýKhó đánh giá coverageDễ quản lý và báo cáo hơn khi tổ chức theo session
Mẹo nhớ
Ad-hoc: thử tự phát.
Exploratory: vừa học, vừa thiết kế, vừa chạy test — nhưng vẫn có thể được quản lý bằng charter và session.

Smoke Testing và Sanity Testing

Smoke Testing

Smoke Testing là tập kiểm tra nhanh, phạm vi tương đối rộng nhưng không đi quá sâu, nhằm xác nhận build đủ ổn định để bước vào vòng kiểm thử tiếp theo.

Với website bán hàng, smoke suite có thể kiểm tra: mở được website, đăng nhập, tìm sản phẩm, thêm vào giỏ, tạo đơn cơ bản và đăng xuất. Nếu chức năng đăng nhập còn không chạy thì chưa đáng để team tốn thời gian test chi tiết.

Lưu ý
Smoke test sẽ diễn ra ngay khi nhận được bản build mới, trước mọi kiểu test khác, nếu smoke test mà fail -> Dừng test luôn đỡ tốn time đôi bên 😅

Sanity Testing

Sanity Testing là kiểm tra nhanh nhưng tập trung vào một vùng vừa thay đổi để xem thay đổi đó có hoạt động hợp lý và build có đáng để tiếp tục kiểm thử sâu hơn hay không.

Ví dụ developer vừa sửa cách tính phí vận chuyển. Tester kiểm tra một số tỉnh, ngưỡng miễn phí ship, voucher vận chuyển và tổng tiền. Tester không nhất thiết kiểm tra lại đăng ký tài khoản hay tìm kiếm sản phẩm. Tức là, tester focus vào đúng cái tính năng mà dev nó vừa sửa

Tiêu chíSmoke TestingSanity Testing
Câu hỏi chínhBuild có đủ ổn để bắt đầu test không?Vùng vừa thay đổi có đủ ổn để test sâu hơn không?
Phạm viRộng, nôngHẹp, tập trung hơn
Thời điểm Sau build hoặc deployment mớiSau thay đổi hoặc bản sửa tương đối nhỏ

End-to-End Testing là gì?

End-to-End Testing (E2E) kiểm tra một luồng nghiệp vụ hoàn chỉnh từ điểm bắt đầu đến kết quả cuối cùng, gần với cách người dùng và hệ thống vận hành ngoài thực tế. Luồng này có thể đi qua nhiều component, database, hệ thống nội bộ và dịch vụ bên ngoài.

Ví dụ
Khách chọn sản phẩm → đặt hàng → thanh toán qua cổng ngân hàng → tồn kho được trừ → đơn chuyển sang hệ thống vận chuyển → khách nhận email xác nhận.

E2E test kiểm tra toàn bộ hành trình và dữ liệu đi xuyên suốt các chặng.

E2E khác System Test và SIT thế nào?

Khái niệmTrọng tâmVí dụ với hệ thống bán hàng
System TestingHành vi và khả năng tổng thể của một hệ thống hoặc sản phẩm hoàn chỉnh; gồm cả functional và non-functional testingKiểm tra toàn bộ hệ thống bán hàng theo system specification; dịch vụ ngoài có thể được mô phỏng
System Integration Testing (SIT)Interface và tương tác giữa system under test với hệ thống hoặc dịch vụ bên ngoàiKiểm tra dữ liệu gửi sang cổng thanh toán, nhận callback và xử lý timeout
End-to-End TestingLuồng nghiệp vụ hoàn chỉnh từ đầu đến cuối, có thể xuyên qua nhiều hệ thốngĐặt hàng từ UI đến thanh toán, kho, vận chuyển và email xác nhận

Ba khái niệm này có thể chồng lấn:

  • Một System Test có thể kiểm tra end-to-end task bên trong phạm vi một hệ thống.
  • Một SIT có thể chỉ kiểm tra riêng interface thanh toán, chưa đi hết hành trình người dùng.
  • Một E2E test xuyên qua nhiều hệ thống sẽ đồng thời kiểm tra nhiều integration point, nhưng mục tiêu chính vẫn là xác nhận toàn bộ business flow.
Lưu ý
E2E không phải test level riêng trong CTFL v4.0.1. Khi phân loại một test, hãy nhìn vào test object, test objective và phạm vi, thay vì chỉ nhìn thấy test đi qua UI rồi gọi ngay là System Test hay E2E.

Bảng tổng hợp nhanh

Thuật ngữCách nhớ ngắn gọn
Ad-hocThử tự phát, ít cấu trúc, dựa vào kiến thức, kinh nghiệm, trải nghiệm 😎
ExploratoryVừa học, vừa thiết kế, vừa thực thi và đánh giá
SmokeKiểm tra rộng và nông xem build có đủ ổn không
SanityKiểm tra nhanh, tập trung vào vùng vừa thay đổi
E2EKiểm tra trọn hành trình nghiệp vụ từ đầu đến cuối
System TestKiểm tra tổng thể một hệ thống hoàn chỉnh
SITKiểm tra interface giữa các hệ thống

Kết luận

Cách dùng thuật ngữ tốt nhất không phải là tìm một chiếc “hộp” duy nhất cho mỗi test. Một E2E test có thể được thực hiện theo kiểu exploratory; một smoke suite có thể chứa vài E2E flow quan trọng; sanity test có thể là một phần của regression testing. Chỉ cần team thống nhất rõ mục tiêu, phạm vi và cách thực hiện, các thuật ngữ sẽ giúp giao tiếp thay vì gây tranh cãi.