CHƯƠNG 1: TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1. Tổng quan về kiểm thử phần mềm 1.1 Khái niệm kiểm thử phần mềm Kiểm thử phần mềm là quá trình phê chuẩn và xác minh xem một chương trình máy tính/ ứng dụng/ sản phẩm: • Đáp ứng các yêu cầu hướng dẫn thiết kế và phát triển của nó • Hoạt động như mong đợi như mong đợi và đáp ứng nhu cầu của các bên liên quan • Có thể thực hiện được với các đặc điểm khác nhau [2]. Các mức độ kiểm thử (level) Mức độ của kiểm thử phần mềm được chia thành 4 mức độ thể hiện như Hình 1.1: Các mức độ kiểm thử 1. Kiểm thử đơn vị (Unit Test) 3 Downloaded by MAI ??I CÁT (maingoc0911.com) Một đơn vị (Unit) là một thành phần phần mềm nhỏ nhất mà ta có thể kiểm thử được, ví dụ: các hàm (Function), thủ tục (Procedure), lớp (Class), hoặc các phương thức (Method).
Kiểm thử đơn vị thường do lập trình viên thực hiện. Công đoạn này cần được thực hiện càng sớm càng tốt trong giai đoạn viết code và xuyên suốt chu kỳ phát triển phần mềm. Mục đích của kiểm thử đơn vị là bảo đảm thông tin được xử lý và kết xuất (khỏi Unit) là chính xác, trong mối tương quan với dữ liệu nhập và chức năng xử lý của Unit. Điều này thường đòi hỏi tất cả các nhánh bên trong Unit đều phải được kiểm tra để phát hiện nhánh phát sinh lỗi.
Cũng như các mức kiểm thử khác, kiểm thử đơn vị cũng đòi hỏi phải chuẩn bị trước các ca kiểm thử (hay trường hợp kiểm thử) (test case) hoặc kịch bản (test script), trong đó chỉ định rõ dữ liệu vào, các bước thực hiện và dữ liệu mong muốn sẽ xuất ra. Các test case và test script được giữ lại để sử dụng sau này[5]. Kiểm thử tích hợp (Integration Test) Kiểm thử tích hợp kết hợp các thành phần của một ứng dụng và kiểm thử như một ứng dụng đã hoàn thành. Trong khi kiểm thử đơn vị kiểm tra các thành phần và Unit riêng lẻ thì kiểm thử tích hợp kết hợp chúng lại với nhau và kiểm tra sự giao tiếp giữa chúng.
Kiểm thử tích hợp có hai mục tiêu chính là: + Phát hiện lỗi giao tiếp xảy ra giữa các Unit + Tích hợp các Unit đơn lẻ thành các hệ thống con (gọi là subsystem) và cuối cùng là nguyên hệ thống hoàn chỉnh chuẩn bị cho kiểm thử ở mức hệ thống (system test). Có 4 loại kiểm thử trong kiểm thử tích hợp như sau: 4 Downloaded by MAI ??I CÁT (maingoc0911.com) + Kiểm thử cấu trúc (Structure test): Kiểm thử 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 thử chức năng (Functional test): Kiểm thử 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 thử hiệu năng (Performance test): Kiểm thử việc vận hành của hệ thống.
+ Kiểm thử khả năng chịu tải (Stress test): Kiểm thử các giới hạn của hệ thống[5]. Kiểm thử hệ thống (System Test) Mục đích của kiểm thử hệ thống là kiểm thử xem thiết kế và toàn bộ hệ thống (sau khi tích hợp) có thỏa mãn yêu cầu đặt ra hay không. Kiểm thử hệ thống kiểm tra cả các hành vi chức năng của phần mềm lẫn các yêu cầu về chất lượng như độ tin cậy, tính tiện lợi khi sử dụng, hiệu năng và bảo mật. Kiểm thử hệ thống bắt đầu khi tất cả các bộ phận của phần mềm đã được tích hợp thành công.
Thông thường loại kiểm thử này tốn rất nhiều công sức và thời gian. Trong nhiều trường hợp, việc kiểm thử đòi hỏi một số thiết bị phụ trợ, phần mềm hoặc phần cứng đặc thù, đặc biệt là các ứng dụng thời gian thực, hệ thống phân bố, hoặc hệ thống nhúng. Ở mức độ hệ thống, người kiểm thử cũng tìm kiếm các lỗi, nhưng trọng tâm là đánh giá về hoạt động, thao tác, sự tin cậy và các yêu cầu khác liên quan đến chất lượng của toàn hệ thố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 kiểm thử đơn vị 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. 5 Downloaded by MAI ??I CÁT (maingoc0911.com) Sau khi hoàn thành kiểm thử tích hợp, một hệ thống phần mềm đã được hình thành cùng với các thành phần đã được kiểm tra đầy đủ. Tại thời điểm này, lập trình viên hoặc kiểm thử viên (Tester) bắt đầu kiểm thử phần mềm như một hệ thống hoàn chỉnh. Việc lập kế hoạch cho kiểm thử hệ thống nên bắt đầu từ giai đoạn hình thành và phân tích các yêu cầu.
Đòi hỏi nhiều công sức, thời gian và tính chính xác, khách quan, kiểm thử hệ 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 bảo tính chính xác và khách quan. Kiểm thử hệ thống thường có các loại kiểm thử sau: + Kiểm thử chức năng (Functional test): Bảo đảm các hành vi của hệ thống thỏa mãn đúng yêu cầu thiết kế. + Kiểm thử khả năng vận hành (Performance test): Bảo đảm tối ưu việc phân bổ tài nguyên hệ thống (ví dụ bộ nhớ) nhằm đạt các chỉ tiêu như thời gian xử lý hay đáp ứng câu truy vấn,. + Kiểm thử khả năng chịu tải (Stress test hay Load test): Bảo đảm hệ thống vận hành đúng dưới áp lực cao (ví dụ nhiều người truy xuất cùng lúc).
Stress test tập trung vào các trạng thái tới hạn, các "điểm chết", các tình huống bất thường như đang giao dịch thì ngắt kết nối (xuất hiện nhiều trong test thiết bị như POS, ATM),. + Kiểm thử cấu hình (Configuration test): Đảm bảo hệ thống hoạt động tương thích với các loại phần cứng khác nhau. + Kiểm thử khả năng bảo mật (Security test): Bảo đảm tính toàn vẹn, bảo mật của dữ liệu và của hệ thống. + Kiểm thử khả năng phục hồi (Recovery test): Bảo đảm hệ thống có khả năng khôi phục trạng thái ổn định trước đó trong tình huống mất tài nguyên hoặc dữ liệu; đặc biệt quan trọng đối với các hệ thống giao dịch như ngân hàng trực tuyến[5].
Kiểm thử chấp nhận sản phẩm (Acceptance Test) 6 Downloaded by MAI ??I CÁT (maingoc0911.com) Mục đích của kiểm thử chấp nhận là kiểm thử khả năng chấp nhận cuối cùng để chắc chắn rằng sản phẩm là phù hợp và thỏa mãn các yêu cầu của khách hàng và khách hàng chấp nhận sản phẩm. Trong giai đoạn kiểm thử chấp nhận thì người kiểm tra là khách hàng. Khách hàng sẽ đánh giá phần mềm với mong đợi theo những thao tác sử dụng quen thuộc của họ. Việc kiểm tra ở giai đoạn này có ý nghĩa hết sức quan trọng tránh cho việc hiểu sai yêu cầu cũng như sự mong đợi của khách hàng.
Gắn liền với giai đoạn kiểm thử chấp nhận thường là một nhóm những dịch vụ và tài liệu đi kèm, phổ biến như hướng dẫn cài đặt, sử dụng, v.v…Tất cả tài liệu đi kèm phải được cập nhật và kiểm tra chặt chẽ[5]. Phương pháp (kỹ thuật) kiểm thử 1.1 : Black box testing: Là phương pháp test dựa trên đầu vào và đầu ra của chương trình không quan tâm tới code bên trong được viết ra sao. Kiểm thử hộp đen tập trung vào các yêu cầu chức năng của phần mềm. Kiểm thử hộp đen cho phép người kiểm thử xây dựng các nhóm giá trị đầu vào sẽ thực thi đầy đủ tất cả các yêu cầu chức năng của chương trình.
Phương pháp này không thay thế kỹ thuật kiểm thử hộp trắng, nhưng nó bổ sung khả năng phát hiện các lớp lỗi khác với các phương pháp hộp trắng[3]. Chính vì cơ chế như vậy nên phương pháp này có các ưu nhược điểm thể hiện như Bảng 1.1: Ưu điểm Nhược điểm - Rất phù hợp và hiệu quả khi mà số - Bị giới hạn ở độ bao phủ của các trường lượng các dòng lệnh của hệ thống là lớn. hợp kiểm thử. - Không cần truy cập vào các dòng lệnh.
- Sẽ không hiệu quả bởi thực tế các tester bị giới hạn kiến thức về hệ thống. 7 Downloaded by MAI ??I CÁT (maingoc0911.com) Ưu điểm Nhược điểm - Phân biệt được rõ ràng quan điểm của - Độ bao phủ sẽ bị thiếu vì tester không người dùng với quan điểm của nhà phát kiểm tra được các đoạn lệnh của hệ thống triển. hoặc tập trung vào các dòng lệnh dễ xảy ra lỗi. - Không cần đòi hỏi những kiến thức về - Sẽ khó để có thể thiết kế đầy đủ các ngôn ngữ lập trình ở các tester để có thể trường hợp kiểm thử.
kiểm thử hệ thống.1: Ưu và nhược điểm của phương pháp Black Box testing.2 : White box testing: Kiểm thử hộp trắng hay còn gọi là kiểm thử hướng logic, cho phép kiểm tra cấu trúc bên trong của phần mềm với mục đích bảo đảm rằng tất cả các câu lệnh và điều kiện sẽ được thực hiện ít nhất một lần. Người kiểm thử truy nhập vào mã nguồn chương trình và có thể kiểm tra nó, lấy đó làm cơ sở để hỗ trợ việc kiểm thử[3].2 bên dưới là các ưu, nhược điểm của phương pháp này: Ưu điểm Nhược điểm - Đối với những tester có kiến thức về - Trên thực tế việc sử dụng các tester có ngôn ngữ lập trình sẽ rất dễ dàng để kiến thức về ngôn ngữ lập trình sẽ làm gia phát hiện ra những lỗi ở trong các dòng tăng giá thành để phát triển phần mềm. - Giúp tối ưu hóa các dòng lệnh của hệ - Đôi lúc sẽ là không khả thi khi kiểm tra thống. chi tiết từng dòng lệnh để có thể từ đó phát hiện ra các lỗi tiềm ẩn của hệ thống, có rất nhiều các luồng không thể kiểm tra được.
8 Downloaded by MAI ??I CÁT (maingoc0911.com) Ưu điểm Nhược điểm - Các dòng lệnh không cần thiết hoặc - Rất khó để duy trì phương pháp này liên các dòng lệnh có khả năng mang đến tục, cần phải có những tool chuyên biệt các lỗi tiềm ẩn sẽ bị loại bỏ. như tool về phân tích code hay tool về phát hiện lỗi và sửa lỗi.