Exploratory Testing (Kiểm thử thăm dò) là gì?

Exploratory Testing (Kiểm thử thăm dò) là một phương pháp kiểm thử mà trong đó tester vừa thiết kế các kịch bản kiểm thử vừa tiến hành thực thi chúng ngay trên hệ thống cùng một lúc, thay vì viết trước các Test Case chi tiết rồi mới chạy theo kịch bản cố định.

Nói một cách dễ hiểu, đây giống như việc bạn đi thám hiểm một khu rừng mới: Bạn vừa đi, vừa quan sát, vừa tự đặt câu hỏi và tìm đường dựa trên trực giác, kinh nghiệm và sự hiểu biết về phần mềm, thay vì cầm một tấm bản đồ (tài liệu Test Case) vạch sẵn từng bước.

Exploratory Testing (Kiểm thử khám phá) ra đời như một phương pháp kiểm thử hiện đại, nâng cao, đóng vai trò như một cách tiếp cận mang tính tự do, linh hoạt nhưng có định hướng rõ ràng.

  • Định nghĩa & Bản chất: Exploratory Testing là một phương pháp kiểm thử mà trong đó người kiểm thử đồng thời học hỏi (Learning) về ứng dụng, thiết kế (Designing) kịch bản kiểm thử, và thực thi (Executing) các bài test cùng một lúc.

  • Phương châm cốt lõi: Phương pháp này đặt con người, tư duy phản biện, kỹ năng, sự nhạy bén và kinh nghiệm của Kỹ sư QC làm trung tâm. Nó trả lời cho câu hỏi: “Phần mềm sẽ ứng xử thế nào khi đối mặt với những hành vi sử dụng bất ngờ, không có trong kịch bản chuẩn?”.

Đặc điểm cốt lõi của Exploratory Testing

  • Học hỏi, thiết kế và thực thi song song: Quá trình tìm hiểu ứng dụng, viết ý tưởng test và bấm máy chạy diễn ra gần như đồng thời.

  • Dựa trên kinh nghiệm và trực giác: Phụ thuộc rất nhiều vào kỹ năng, sự nhạy bén và tư duy phá hoại (mindset tìm lỗi) của Tester.

  • Không cần kịch bản viết sẵn: Không tốn thời gian để soạn thảo hàng trăm trang Test Case cứng nhắc trước khi bắt đầu.

  • Thường dùng phương pháp “Session-based Testing”: Chia thời gian kiểm thử thành các phiên (sessions) ngắn có mục tiêu rõ ràng (ví dụ: phiên 45 phút chuyên đi tìm lỗi giao diện trên trang thanh toán).

Khi nào nên sử dụng Exploratory Testing?

  • Khi tài liệu yêu cầu thiếu hoặc không có: Dự án làm gấp, yêu cầu thay đổi liên tục hoặc tài liệu (SRS) mơ hồ, chưa kịp viết Test Case.

  • Khi cần kiểm thử nhanh (Ad-hoc / Rapid testing): Cần đánh giá nhanh chất lượng của một phiên bản phần mềm trong thời gian ngắn.

  • Bổ sung cho Scripted Testing: Dùng để tìm ra những lỗi ẩn giấu mà các bộ Test Case tiêu chuẩn (viết sẵn) dễ bị bỏ sót.

  • Khi tester mới gia nhập dự án: Giúp họ tự do tương tác với ứng dụng để nhanh chóng nắm bắt luồng nghiệp vụ và cách vận hành của hệ thống.

Ưu và nhược điểm của Exploratory Testing

Ưu điểm Nhược điểm

• Linh hoạt và nhanh chóng: Không mất thời gian viết tài liệu rườm rà.

• Dễ phát hiện lỗi bất ngờ (Bugs): Do tester được tự do sáng tạo đường đi, bấm những ca khó mà kịch bản chuẩn không nghĩ tới.

• Kích thích tư duy sáng tạo: Tester chủ động và tập trung cao độ vào hành vi của ứng dụng.

• Khó kiểm soát tiến độ: Khó đo lường chính xác đã test được bao nhiêu % hệ thống.

• Phụ thuộc vào năng lực tester: Tester thiếu kinh nghiệm sẽ khó tìm ra lỗi sâu.

• Khó tái hiện lại lỗi: Do không có kịch bản ghi lại từng bước chi tiết, đôi khi tìm ra lỗi rồi nhưng khó viết lại cách tái hiện (steps to reproduce) cho developer.

2. Bản chất lý luận:

  • Triết lý cốt lõi: Exploratory Testing được định nghĩa chính thức bởi Cеміner (Cem Kaner) và James Bach là hoạt động kiểm thử đồng thời học hỏi ứng dụng, thiết kế kịch bản và thực thi các bài kiểm tra cùng một lúc.

  • Vòng lặp liên tục (Feedback Loop):

    • Quan sát hệ thống (Observe): Tương tác trực tiếp với giao diện, API hoặc luồng dữ liệu.

    • Phân tích logic (Think): Đặt câu hỏi: “Điều gì sẽ xảy ra nếu mình nhập dữ liệu này? Nếu mạng rớt ở bước này thì sao?”.

    • Hành động & Học hỏi (Act & Learn): Thực thi ngay lập tức, ghi nhận kết quả phản hồi và điều chỉnh chiến lược kiểm thử cho bước tiếp theo.

  • Phân biệt Exploratory Testing với Ad-hoc Testing: Nhiều người lầm tưởng kiểm thử khám phá giống với Ad-hoc Testing (kiểm thử ngẫu nhiên không mục đích). Thực tế hoàn toàn trái ngược: Ad-hoc Testing là việc bấm máy vô định hình không có phương pháp, trong khi Exploratory Testing là một quá trình có cấu trúc tư duy cực kỳ chặt chẽ, có mục tiêu rõ ràng và được quản lý bằng các phương pháp khoa học.

3. Mô hình quản lý :

Để biến việc “khám phá” trở thành một hoạt động chuyên nghiệp có thể đo lường và báo cáo được cho cấp quản lý, Jon Bach và Michael Bolton đã phát triển mô hình Session-Based Test Management (SBTM). Một phiên kiểm thử khám phá chuẩn mực diễn ra qua các cấu phần sau:

  1. Test Charter (Sứ mệnh kiểm thử): Mỗi phiên kiểm thử không được lan man mà phải xoay quanh một sứ mệnh cụ thể. Ví dụ: “Khám phá các điểm yếu về bảo mật và phân quyền trên module Quản lý tài khoản người dùng” hoặc “Kiểm tra độ bền vững của giỏ hàng khi người dùng liên tục thao tác thay đổi số lượng sản phẩm và ngắt kết nối internet”.

  2. Time-boxing (Giới hạn thời gian khắt khe): Mỗi phiên kiểm thử (Session) thường được khống chế trong khoảng thời gian từ 60 đến 120 phút tập trung cao độ. Giới hạn này giúp bộ não của kiểm thử viên luôn ở trạng thái tỉnh táo, sắc sảo nhất, tránh sự mệt mỏi dẫn đến bỏ sót lỗi.

  3. Session Sheet (Nhật ký phiên): Trong suốt quá trình khám phá, QC ghi chép lại:

    • Thời gian thực hiện

    • Các khu vực đã đi qua (Area tested)

    • Các lỗi phát hiện được (Bugs)

    • Các câu hỏi hoặc rủi ro mới phát sinh (Issues/Risks)

  4. Session Debriefing (Tổng kết và Báo cáo): Sau khi kết thúc phiên, QC trình bày kết quả ngắn gọn cho Test Lead hoặc Project Manager, từ đó quyết định xem có cần mở rộng phiên khám phá đó hay không.

4. Các kỹ thuật và heuristics nâng cao trong kiểm thử khám phá :

Để quá trình khám phá không bị bế tắc, một kỹ sư QC giàu kinh nghiệm thường áp dụng các nguyên tắc kinh nghiệm (Heuristics) và mô hình gợi nhớ:

  • Mô hình SFDPO (Product Elements): Khám phá ứng dụng dưới 5 góc độ:

    • Structure (Cấu trúc): Mã nguồn, phần cứng, tệp tin hệ thống.

    • Function (Chức năng): Những gì hệ thống làm được.

    • Data (Dữ liệu): Cách hệ thống lưu trữ, xử lý và hiển thị thông tin.

    • Platform (Nền tảng): Trình duyệt, hệ điều hành, thiết bị.

    • Operations (Vận hành): Ai sẽ sử dụng hệ thống và sử dụng như thế nào.

  • Kỹ thuật “Touring” (Các chuyến tham quan ứng dụng): Giả lập vai trò của các đối tượng khác nhau để khám phá hệ thống (ví dụ: Tourist Tour – lướt qua mọi ngóc ngách giao diện; Bad-Neighbor Tour – cố tình tìm cách làm sập ứng dụng; Money Tour – tập trung vào mọi luồng liên quan đến tiền bạc, thanh toán).

5. Lợi ích chiến lược, thách thức và cạm bẫy cần tránh khi triển khai:

  • Lợi ích tối thượng:

    • Phát hiện lỗi độc nhất (Unique Bugs): Tìm ra những lỗi mà kịch bản chuẩn hoàn toàn bỏ sót.

    • Tối ưu thời gian bắt đầu: Không cần đợi viết xong hàng ngàn Test Cases mới được bắt đầu test sản phẩm.

    • Kích thích tư duy sáng tạo: Giúp kiểm thử viên thấu hiểu sâu sắc bản chất hệ thống thay vì làm việc máy móc.

  • Thách thức & Cạm bẫy:

    • Khó khăn trong việc đo lường tiến độ chính xác (do không đếm số lượng Test Cases hoàn thành).

    • Đòi hỏi kiểm thử viên phải có năng lực chuyên môn cao, am hiểu sâu rộng về nghiệp vụ và kiến trúc phần mềm.

6. Cảm nhận, chiêm nghiệm :

  • Thông qua việc nghiên cứu và thực hành Exploratory Testing, em nhận thức sâu sắc rằng nghề kiểm thử phần mềm không phải là một công việc lặp đi lặp lại đơn điệu, mà là một hành trình thám hiểm tri thức đầy thú vị.

  • Kết hợp hài hòa giữa Scripted Testing (đảm bảo kỷ luật quy trình) và Exploratory Testing (đảm bảo sự nhạy bén sáng tạo) chính là chìa khóa tối thượng giúp một kỹ sư QC nâng tầm năng lực chuyên môn, bảo vệ tuyệt đối chất lượng sản phẩm và mang lại trải nghiệm hoàn hảo nhất cho người dùng cuối.

 

Bài viết khác

Go Fundamentals

1. Go là gì? Go, còn được gọi là Golang, là một ngôn ngữ lập trình mã nguồn mở được phát triển bởi Google. Go được thiết kế với mục tiêu giúp lập trình viên viết code đơn giản, dễ đọc, có hiệu năng tốt và phù hợp với những hệ thống cần xử lý […]

Laravel Routing và Controllers

1. Laravel Routing và Controllers là gì? Laravel Routing và Controllers là hai thành phần quan trọng trong Laravel, một framework được xây dựng bằng ngôn ngữ PHP, thường được sử dụng để phát triển website và hệ thống Backend. Hai thành phần này phối hợp với nhau để tiếp nhận yêu cầu từ người […]

Regression Testing(Kiểm thử hồi quy)

1.Regression Testing (Kiểm thử hồi quy) là gì? Regression Testing (Kiểm thử hồi quy) là quá trình chạy lại toàn bộ hoặc một phần các ca kiểm thử (test cases) đã có để đảm bảo rằng những thay đổi gần đây trong mã nguồn (như vá lỗi, thêm tính năng mới, tối ưu code hoặc […]

Database Normalization – 1NF, 2NF, 3NF & Denormalization

1. Database Normalization là gì? Database Normalization (chuẩn hóa dữ liệu) là quá trình tổ chức dữ liệu thành các bảng và quan hệ hợp lý nhằm giảm dư thừa không cần thiết, tránh dữ liệu mâu thuẫn và duy trì tính toàn vẹn của database. Khi thiết kế database, nếu lưu tất cả thông […]

PHP và Laravel Fundamentals

1. PHP & Laravel là gì? PHP là ngôn ngữ lập trình thường được sử dụng để phát triển website và xử lý các công việc phía máy chủ (Backend). PHP đảm nhiệm những chức năng như tiếp nhận dữ liệu người dùng, xử lý đăng nhập, quản lý sản phẩm và làm việc với […]

Smoke Testing(Kiểm thử khói)

Smoke Testing là gì? Trong mô hình phát triển phần mềm hiện đại (dù là Agile, Scrum hay DevOps), tốc độ bàn giao các bản build (xây dựng mã nguồn) diễn ra vô cùng nhanh chóng. Mỗi ngày, đội ngũ lập trình viên có thể chuyển giao từ vài bản build nhỏ đến hàng chục […]

Leave a Reply

Your email address will not be published. Required fields are marked *