Testing là gì?

Quá trình kiểm thử phần mềm (software testing) là một chuỗi hoạt động có hệ thống nhằm đánh giá chất lượng, độ ổn định và tính đúng đắn của một ứng dụng so với yêu cầu ban đầu. Không đơn thuần chỉ là tìm ra lỗi, testing còn giúp đảm bảo rằng mỗi thành phần của phần mềm – từ những hàm và lớp nhỏ nhất đến sự phối hợp giữa các module và toàn bộ hệ thống – đều vận hành theo đúng kỳ vọng. Nhờ vậy, nhóm phát triển có thể phát hiện sớm các sai sót, từ đó giảm thiểu chi phí sửa lỗi và nâng cao uy tín sản phẩm trên thị trường.

Mục đích sâu xa nhất của kiểm thử là kiến tạo niềm tin cho cả người phát triển và người sử dụng. Với nhà phát triển, testing là thước đo quan trọng cho thấy những dòng code họ viết có thực sự đáng tin cậy và dễ bảo trì hay không; còn với người dùng cuối, phần mềm đã qua kiểm thử kỹ lưỡng sẽ mang lại trải nghiệm mượt mà, an toàn và ít rủi ro hơn. Bên cạnh việc phát hiện lỗi chức năng, kiểm thử còn mở rộng sang các khía cạnh như hiệu năng, khả năng chịu tải, bảo mật và tính khả dụng, nhằm đảm bảo toàn diện mọi yêu cầu về chất lượng.

Phân loại Testing

Phân loại theo cấp độ kiểm thử (Testing level)

“Testing Levels” mô tả phạm vi và độ bao phủ của việc kiểm thử từ nhỏ đến lớn.

Đầu tiên, Unit Testing tập trung vào từng đơn vị code—hàm, phương thức hoặc lớp—được thiết kế để đảm bảo rằng mỗi phần nhỏ nhất của ứng dụng hoạt động chính xác ngay khi tách rời khỏi phần còn lại.

Tiếp đến, Integration Testing kiểm tra sự phối hợp giữa hai hay nhiều module, dịch vụ, hay lớp, nhằm đảm bảo dữ liệu và điều khiển được truyền tải đúng đắn giữa chúng.

Khi mọi thành phần đã được tích hợp, System Testing tiến hành chạy thử toàn bộ hệ thống trong môi trường gần giống với thực tế triển khai, từ giao diện người dùng đến tầng cơ sở dữ liệu.

Cuối cùng, Acceptance Testing (hay UAT – User Acceptance Testing) để khách hàng hoặc người dùng cuối xác minh xem phần mềm đã đáp ứng đầy đủ yêu cầu nghiệp vụ và sẵn sàng “go-live” chưa.

Phân loại theo mục tiêu kiểm thử (Testing Type)

Trong bối cảnh dự án, ta thường phân biệt giữa Functional TestingNon-Functional Testing để đạt hai mục tiêu khác nhau.

Functional Testing đảm bảo rằng với mỗi đầu vào (input) theo kịch bản, hệ thống cho ra đúng kết quả (output) như mong đợi, tương đương với việc kiểm thử từng yêu cầu chức năng.

Non-Functional Testing không xem xét đầu vào/đầu ra mà tập trung vào các thuộc tính như hiệu năng (Performance Testing), khả năng mở rộng (Scalability Testing), bảo mật (Security Testing) và tính khả dụng (Usability Testing). Mục tiêu ở đây là đánh giá xem phần mềm có thể chịu đựng tải cao, chống lại các cuộc tấn công xâm nhập, và mang lại trải nghiệm mượt mà cho người dùng cuối hay không.

Phân loại theo phương pháp thực hiện (Manual vs. Automated)

Một khía cạnh cực kỳ thực tế là Manual Testing—khi tester thực hiện thủ công từng bước kiểm thử, nhập dữ liệu, quan sát kết quả và ghi nhãn lỗi—và Automation Testing, trong đó tester viết script hoặc dùng framework để chạy tự động hàng loạt kịch bản. Manual Testing phù hợp với các tình huống mới, Exploratory Testing hoặc giao diện biến động liên tục, còn Automation Testing tối ưu cho Regression Testing hoặc các kịch bản lặp đi lặp lại, giúp tiết kiệm thời gian, tăng độ chính xác và cho phép tích hợp vào CI/CD pipelines.

Phân loại theo phạm vi kịch bản (Smoke, Sanity, Regression)

Trong quá trình phát triển liên tục, tester còn tách nhỏ các kịch bản theo phạm vi và độ ưu tiên.

Smoke Testing là bộ kiểm tra “có sống hay không” (build verification), chỉ chạy những tính năng chính để xác nhận build mới không hoàn toàn vỡ. Nếu smoke pass, mới chuyển sang các bài kiểm thử chi tiết hơn.

Sanity Testing thường diễn ra sau khi lỗi được fix, chỉ tập trung vào những phần liên quan đến bug để đảm bảo vấn đề đã được khắc phục.

Regression Testing lại mở rộng hơn, chạy lại toàn bộ các kịch bản đã có nhằm đảm bảo rằng việc thêm tính năng hoặc sửa lỗi không làm hỏng chức năng cũ.

Phân loại theo kỹ thuật kiểm thử (Black-box, White-box, Gray-box)

Về phương diện kiến thức về hệ thống, Black-box Testing chỉ quan tâm đầu vào và đầu ra, người kiểm thử không cần biết cấu trúc bên trong; White-box Testing đòi hỏi hiểu sâu code, luồng điều khiển, đường đi dữ liệu để thiết kế test case đảm bảo phủ các nhánh, điều kiện, và dòng lệnh; Gray-box Testing là sự kết hợp—tester có một số hiểu biết về kiến trúc hoặc giao diện lập trình, từ đó tiếp cận được hiệu quả cả về chức năng lẫn cấu trúc bên trong. Mỗi kỹ thuật đều bổ trợ cho nhau, giúp xây dựng một chiến lược kiểm thử toàn diện và cân bằng giữa thời gian, nguồn lực, và độ bao phủ.

About the Author

Đức Phát

View all author's posts

Leave a Comment

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

Bài viết khác

Sử dụng Request/Response trong ứng dụng RESTful mô hình MVC

DTO là gì? DTO (Data Transfer Object) là một object trung gian dùng để truyền dữ liệu giữa client – server hoặc giữa các service trong ứng dụng web/API theo kiến trúc RESTful API. DTO chỉ chứa các thông tin cần thiết mà client hoặc service khác cần (ví dụ: Login Form chỉ cần thông […]

Docker

Docker là gì? Docker là một nền tảng mã nguồn mở cho phép bạn đóng gói, phân phối và chạy ứng dụng bên trong các “container” – những môi trường ảo nhẹ, cô lập nhưng vẫn chia sẻ nhân hệ điều hành của máy chủ. Khái niệm then chốt ở đây là “containerization”: thay vì […]

Cache

Cache là gì? Cache là một bộ nhớ tạm (nhanh) được sử dụng để lưu trữ tạm thời dữ liệu thường xuyên được truy cập, nhằm giảm độ trễ và tăng hiệu suất của hệ thống. Cache thường được sử dụng ở Client, như CPU, applications, web browsers hoặc operating systems (OSes). Một số Cache phổ […]

Tìm hiểu Kafka

Kafka là gì? Apache Kafka là một nền tảng phân phối sự kiện phân tán mã nguồn mở được phát triển bởi Apache Software Foundation và được viết bằng Java và Scala. Kafka ban đầu được phát triển bởi LinkedIn và sau đó được mở nguồn cho Quỹ phần mềm Apache (Apache Software Foundation) vào đầu năm 2011. (đồng sáng lập […]

Tìm hiểu RabbitMQ

RabbitMQ là gì? RabbitMQ là một phần mềm trung gian giúp các hệ thống, server, ứng dụng có thể giao tiếp, trao đổi dữ liệu với nhau. Nhiệm vụ của RabbitMQ được hiểu đơn giản là: nhận message từ nhiều nguồn => lưu trữ, sắp xếp sao cho hợp lý => đẩy tới đích đến. Là […]

Tìm hiểu về Message Broker

Message Broker là gì Message Broker (hay còn gọi là “trình môi giới thông điệp”) là một thành phần trung gian chuyên xử lý việc gửi, nhận, định tuyến và chuyển tiếp thông điệp (message) giữa các thành phần (ứng dụng, dịch vụ) trong hệ thống. Nó cho phép giao tiếp phi đồng bộ giữa […]