Hay còn gọi là Kiểm thử, là một quá trình quan trọng trong phát triển phần mềm, nhằm mục đích đánh giá chất lượng và tìm ra lỗi (bug) trong một sản phẩm phần mềm. Mục tiêu cuối cùng của testing là đảm bảo rằng sản phẩm đáp ứng đúng các yêu cầu đã đề ra, hoạt động ổn định, hiệu quả và mang lại trải nghiệm tốt nhất cho người dùng trước khi nó được phát hành.
Vai trò và tầm quan trọng của Testing
- Đảm bảo chất lượng sản phẩm: Testing giúp xác minh rằng phần mềm hoạt động đúng như mong đợi, không có lỗi nghiêm trọng, và đáp ứng được các tiêu chuẩn về hiệu suất, bảo mật, và khả năng sử dụng.
- Tiết kiệm chi phí và thời gian: Phát hiện và sửa lỗi sớm trong quá trình phát triển sẽ tiết kiệm chi phí hơn nhiều so với việc sửa lỗi sau khi sản phẩm đã được đưa ra thị trường.
- Nâng cao sự hài lòng của khách hàng: Một sản phẩm không có lỗi hoặc có ít lỗi sẽ mang lại trải nghiệm người dùng mượt mà, từ đó tạo dựng được sự tin tưởng và hài lòng từ phía khách hàng.
- Giảm thiểu rủi ro: Testing giúp phát hiện các lỗ hổng bảo mật hoặc các vấn đề có thể gây ra sự cố nghiêm trọng cho hệ thống.
Các mức độ kiểm thử
- Kiểm thử đơn vị (Unit testing)
- Test ở mức cơ bản, test từng module nhỏ trong hệ thống, thường được xem như 1 phần phụ cho bước mã hóa sau khi mã nguồn được phát triển, được duyệt lại và được kiểm tra đúng cú pháp, thì bắt đầu thiết kế các trường hợp kiểm thử đơn vị
- Kiểm thử đơn vị được đơn giản hóa khi mô-đun có sự liên kết cao được thiết kế. Khi chỉ 1 chức năng được gọi bởi một mô-đun, số các trường hợp kiểm thử được giảm xuống và các lỗi có thể dự đoán và phát hiện sớm hơn
- Unit Test thường do lập trình viên thực hiện. Unit Test đòi hỏi kiểm tra viên có kiến thức về thiết kế và code của chương trình, mục đích của Unit Test là bảo đảm thông tin được xử lý và xuất là chính xác
- Kiểm thử tích hợp
- Là 1 kĩ thuật có hệ thống để xác định cấu trúc chương trình trong khi thực hiện các kiểm thử nhằm phát hiện các lỗi liên quan đến điều kiện. Mục tiêu là lấy các thành phần đã được kiểm thử và xây dựng cấu trúc chương trình đã được mô tả bởi thiết kế
Kiểm thử tích hợp có các mục tiêu chính
- Kiểm tra tích hợp chức năng: Mục tiêu chính của kiểm thử tích hợp là kiểm tra tích hợp chức năng giữa các thành phần, mô-đun hoặc hệ thống con trong ứng dụng. Nó đảm bảo rằng các thành phần hoạt động một cách hợp lý khi được kết hợp lại và tương tác với nhau.
- Xác nhận giao tiếp và tương tác: Kiểm thử tích hợp giúp xác minh rằng các giao tiếp và tương tác giữa các thành phần của hệ thống là chính xác và đáng tin cậy. Điều này bao gồm kiểm tra đầu vào và đầu ra của các thành phần, kiểm tra giao tiếp qua giao diện, kiểm tra dữ liệu chia sẻ và kiểm tra quy trình truyền thông giữa các thành phần.
- Đảm bảo tính thống nhất và độ tin cậy: Mục tiêu của kiểm thử tích hợp là đảm bảo tính thống nhất và độ tin cậy của hệ thống khi các thành phần được kết hợp lại. Nó đảm bảo rằng việc tích hợp không gây ra lỗi hoặc xung đột và hệ thống hoạt động một cách mượt mà và đáng tin cậy.
- Phát hiện lỗi tích hợp: Mục tiêu quan trọng của kiểm thử tích hợp là phát hiện và báo cáo lỗi tích hợp. Nó giúp xác định các vấn đề phát sinh khi các thành phần được kết hợp lại và tương tác với nhau, như lỗi giao tiếp, lỗi tích hợp dữ liệu và lỗi xung đột giữa các thành phần.
- Đảm bảo hiệu suất và tài nguyên: Kiểm thử tích hợp cũng có thể đánh giá hiệu suất và sử dụng tài nguyên của hệ thống khi các thành phần được kết hợp lại. Nó giúp xác định các vấn đề liên quan đến hiệu suất, tải và sử dụng tài nguyên quan trọng như bộ nhớ, CPU và băng thông mạng.
- Kiểm tra cấu trúc (structure)
- Tương tự White Box Test (kiểm tra nhằm bảo đảm các thành phần bên trong của một chương trình chạy đúng), chú trọng đến hoạt động của các thành phần cấu trúc nội tại của chương trình chẳng hạn các lệnh và nhánh bên trong.
- Kiểm tra chức năng (functional)
- Tương tự Black Box Test (kiểm tra chỉ chú trọng đến chức năng của chương trình, không quan tâm đến cấu trúc bên trong), chỉ khảo sát chức năng của chương trình theo yêu cầu kỹ thuật.
- Kiểm tra hiệu năng (performance)
- Kiểm tra việc vận hành của hệ thống.
- Kiểm tra khả năng chịu tải (stress)
- Kiểm tra các giới hạn của hệ thống.
- Kiểm thử hệ thống (System Test)
- Kiểm thử hệ thống là một mức của tiến trình kiểm thử phần mềm khi các mô-đun và tích hợp các mô-đun đã được test, thường được thực hiện bởi một nhóm kiểm tra viên hoàn toàn độc lập với nhóm phát triển dự án.
- Mục tiêu của kiểm thử hệ thống là để đánh giá phần mềm có tuân thủ theo các yêu cầu đã đưa ra không
- Điểm khác nhau then chốt giữa Kiểm thử tích hợp và Kiểm thử hệ thống là Kiểm thử hệ thống chú trọng các hành vi và lỗi trên toàn hệ thống, còn Kiểm thử tích hợp chú trọng sự giao tiếp giữa các đơn thể hoặc đối tượng khi chúng làm việc cùng nhau. Thông thường ta phải thực hiện Unit Test và Kiểm thử tích hợp để bảo đảm mọi Unit và sự tương tác giữa chúng hoạt động chính xác trước khi thực hiện Kiểm thử hệ thống.
Phân loại Kiểm thử hệ thống
- Basic tests: để chứng tỏ hệ thống có thể cài đặt được, cấu hình được và hoạt động được
- Functionality tests: cung cấp kiểm tra toàn bộ yêu cầu (requirements) trên cả hệ thống
- Robustness tests: xác định xem khả năng phục hồi của hệ thống từ input errors và các tình huống failure khác
- Inter-operability tests: xác định xem hệ thống có thể tương thích (inter-operate) với các sản phẩm của bên thứ 3
- Performance tests: đánh giá hiệu năng của hệ thống, e.g., băng thông, phản hồi dưới các điều kiện khác nhau
- Scalability tests: xác định giới hạn quy mô của hệ thống, như quy mô người dùng, quy mô địa lý, quy mô nguồn lực
- Stress tests: để hệ thống ở tình trạng áp lực (stress) để xác định giới hạn của hệ thống và, khi nó fail, xác định cách thức để gây ra failure
- Load and Stability: kiểm tra khả năng ổn định của hệ thống trong thời gian dài với toàn tải
- Reliability tests: đánh giá khả năng hệ thống giữ hoạt động trong thời gian dài mà không gây ra failures
- Regression tests: kiểm tra hệ thống vẫn ổn định khi tích hợp thêm các hệ thống con khác và khi bảo trì
- Documentation tests: đảm bảo system’s user guides là chính xác và khả dụng
- Kiểm thử chấp nhận(Acceptance test)
- Là một cấp độ trong tiến trình kiểm thử phần mềm nhằm kiểm thử hệ thống về khả năng chấp nhận được.Mục tiêu của kiểm thử này là để đánh giá sự tuân thủ của hệ thống với các yêu cầu nghiệp vụ và thẩm định xem đã có thể chấp nhận để bàn giao chưa.Kiểm thử chấp nhận được khách hàng thực hiện (hoặc ủy quyền cho một nhóm thứ ba thực hiện).
Gồm 2 loại kiểm thử là:
- Alpha Test: người dùng kiểm thử phần mềm ngay tại nơi phát triển phần mềm, lập trình viên sẽ ghi nhận các lỗi hoặc phản hồi, và lên kế hoạch sửa chữa.
- Beta Test: phần mềm sẽ được gửi tới cho người dùng để kiểm thử ngay trong môi trường thực, lỗi hoặc phản hồi cũng sẽ gửi ngược lại cho lập trình viên để sửa chữa.
Quy trình kiểm thử phần mềm cơ bản
Một quy trình kiểm thử phần mềm thông thường bao gồm các bước sau:
- Phân tích yêu cầu: Tìm hiểu các yêu cầu của sản phẩm để xác định phạm vi kiểm thử.
- Lập kế hoạch kiểm thử: Xây dựng chiến lược, tài nguyên và lịch trình cho việc kiểm thử.
- Thiết kế Test Case: Viết các trường hợp kiểm thử (test cases) chi tiết, mô tả các bước thực hiện và kết quả mong đợi.
- Thiết lập môi trường kiểm thử: Chuẩn bị môi trường (hệ thống, dữ liệu) để thực hiện kiểm thử.
- Thực hiện kiểm thử: Chạy các test case đã thiết kế và ghi nhận kết quả thực tế.
- Báo cáo và theo dõi lỗi: Ghi nhận các lỗi tìm thấy và báo cáo cho đội phát triển để sửa chữa.
- Kiểm thử lại: Sau khi lỗi được sửa, tiến hành kiểm thử lại để đảm bảo lỗi đã được khắc phục.