CHƯƠNG 1 TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1. Định nghĩa kiểm thử phần mềm Theo Glen Myers:“Kiểm thử phần mềm là quá trình thực thi một chương trình với mục đích tìm lỗi” [1] Theo IEEE “Kiểm thử là tiến trình vận hành hệ thống hoặc thành phần dưới những điều kiện xác định, quan sát hoặc ghi nhận xét kết quả và đưa ra đánh giá về hệ thống hoặc thành phần đó” [2] Định nghĩa của Daniel Galin: “Kiểm thử phần mềm là một quá trình được tiến hành bởi một nhóm chuyên viên kiểm thử, trong đó một đơn vị phần mềm, một nhóm các đơn vị được tích hợp, hoặc cả gói phần mềm được kiểm tra bằng cách chạy các chương trình trên máy tính. Tất cả các bước kiểm tra liên được tiến hành theo các thủ tục kiểm thử và các trường hợp kiểm thử đã được thông qua” [3] Một số thuật ngữ có trong định nghĩa của Daniel Galin: Nhóm chuyên viên kiểm thử: Một nhóm độc lập hoặc nhóm tư vấn từ bên ngoài, những người chuyên kiểm thử được chỉ định để thực hiện các nhiệm vụ chủ yếu là để phát hiện và loại bỏ sai lệch và để đảm bảo kiểm thử hiệu quả bởi các chuyên gia kiểm thử được đào tạo. Các thủ tục kiểm thử đã được thông qua: Quá trình kiểm thử được thực hiện theo kế hoạch kiểm thử và các thủ tục kiểm thử được thông qua phù hợp với các thủ tục đảm bảo chất lượng phần mềm được thông qua bởi tổ chức phát triển phần mềm.
Các trường hợp kiểm thử được thông qua: Các trường hợp kiểm thử (test case) được định nghĩa đầy đủ trong kế hoạch kiểm thử. Không có 2 sự thiếu xót hoặc bổ sung nào được mong đợi xảy ra trong suốt quá trình thực thi kiểm thử. Nói cách khác khi quá trình kiểm thử bắt đầu, người kiểm tra không được phép thực hiện theo ý riêng bằng cách bỏ qua một trường hợp kiểm thử mà họ cho là dư thừa. Mục tiêu của kiểm thử 1.
Mục tiêu trực tiếp Phát hiện và xác định càng nhiều lỗi càng tốt ở các phần mềm được kiểm thử. Tiến hành sửa lỗi ở các phần mềm được kiểm thử và kiểm thử lại cho đến khi đạt một mức độ chất lượng phần mềm chấp nhận được. Thực thi những trường hợp kiểm thử một cách hiệu quả trong một giới hạn ngân sách và lịch trình cho phép. Mục tiêu gián tiếp Để biên dịch một tài liệu về các lỗi phần mềm thường gặp, nhằm mục đích ngăn ngừa và sửa chữa lỗi.
Nguyên lý cơ bản của kiểm thử Có 7 nguyên tắc cơ bản cần chú ý khi kiểm thử phần mềm [4], các nguyên tắc đó là: Kiểm thử chỉ ra sự có mặt của lỗi: Việc kiểm thử chỉ ra phần mềm có lỗi, nhưng không thể chứng minh rằng nó không có lỗi. Kiểm thử càng sớm càng tốt: Các hoạt động kiểm thử nên bắt đầu càng sớm càng tốt trong vòng đời phát triển phần mềm. Không thể kiểm thử vét cạn: Việc kiểm thử không thể thực hiện được cho tất mọi trường hợp. Do vậy thay vì kiểm thử mọi khía cạnh, ta phải tập trung vào kiểm thử những yếu tố quan trọng và nhiều rủi ro.
Nghĩa là phải lên kế hoạch kiểm thử, thiết kế các trường hợp kiểm thử sao cho có độ bao phủ nhiều nhất. 3 Phân cụm lỗi: Một số lượng nhỏ các module phần mềm có thể chứa hầu hết các lỗi được phát hiện ra trong suốt quá trình kiểm thử hoặc tập trung hầu hết các lỗi vận hành. Nghịch lý thuốc trừ sâu: Nếu một phương pháp kiểm thử được lặp đi lặp lại nhiều lần, các trường hợp kiểm thử giống nhau sẽ không phát hiện được triệt để lỗi mới. Để khắc phục điều này ta có thể sử dụng nguyên tắc "nghịch lý thuốc trừ sâu", các trường hợp kiểm thử cần phải được xem xét và duyệt lại một cách đều đặn để phần mềm hoặc hệ thống tìm thấy nhiều lỗi hơn.
Kiểm thử phụ thuộc vào ngữ cảnh: Việc kiểm thử thực hiện trong hoàn cảnh khác nhau thì khác nhau. Sai lầm về việc không có lỗi: Tìm kiếm và sửa lỗi không thể giúp được gì nếu hệ thống không được dùng hoặc không đáp ứng được yêu cầu và sự mong đợi của khách hàng. Kiểm thử trong vòng đời phát triển phần mềm 1. Mô hình chữ V [5] Hình 1.1 Mô hình chữ V ( V - Model) Mô hình chữ V cho thấy các hoạt động phát triển phần mềm và kiểm thử phần mềm cần được thực hiện song song.
Các hoạt động phát triển phần mềm [5]: Business requirements (Xác định yêu cầu): Đóng vai trò xác định yêu cầu bài toán, sau khi tài liệu này được hoàn thành thì được đưa vào để chuẩn bị các trường hợp kiểm thử ở mức chấp nhận sản phẩm. System requirements (Yêu cầu hệ thống): Yêu cầu chi tiết từng chức năng của hệ thống. High level design (Thiết kế mức cao): Giai đoạn này tập chung vào kiến trúc hệ thống và thiết kế. Nó cung cấp cái nhìn tổng quan về giải pháp, nền tảng, hệ thống, sản phẩm và quy trình.
5 Low level design (Thiết kế mức thấp): Giai đoạn này là nơi các thành phần phần mềm thực tế được thiết kế. Nó định nghĩa logic thực tế cho mỗi và mọi thành phần của hệ thống. Các giai đoạn kiểm thử trong mô hình chữ V: Component testing (kiểm thử thành phần): Tìm kiếm lỗi và kiểm tra tính năng của các thành phần phần mềm (ví dụ như các module, class, object.) được kiểm tra riêng biệt. Integration test (kiểm thử tích hợp): Kiểm thử các “module” hay các “component” khi chúng tích hợp với nhau.
System test (kiểm thử hệ thống): Kiểm thử cả một hệ thống hoàn chỉnh khi toàn bộ các “module” hay “component” được tích hợp. Acceptance test (kiểm thử chấp nhận sản phẩm): Kiểm thử cả hệ thống hoàn chỉnh như được cài đặt cho người dùng cuối. Quy trình kiểm thử phần mềm [6] Hình 1.2 Quy trình kiểm thử phần mềm Kiểm thử là một quá trình chứ không phải là một hoạt động đơn lẻ. Quá trình này bắt đầu từ việc xác định các yêu cầu, lập kế hoạch sau đó thiết kế các trường hợp kiểm thử chuẩn bị cho việc thực hiện và đánh giá cho đến khi kết thúc thử nghiệm.
Chúng ta có thể phân chia các hoạt động trong quá trình kiểm thử cơ bản thành các bước sau đây: 7 Xác định yêu cầu kiểm thử: Việc kiểm thử sẽ bắt đầu ngay từ pha lấy yêu cầu trong quy trình phát triển phần mềm (software development life cycle). Lập kế hoạch và kiểm thử: ở giai đoạn này cần xác đinh các yêu cầu sau: - Các giai đoạn kiểm thử áp dụng cho dự án - Các phương pháp kiểm thử - Các công cụ kiểm thử - Nguồn nhân lực kiểm thử - Tài nguyên môn trường kiểm thử bao gôm phần cứng, phần mềm Phân tích và thiết kế: Sau khi kế hoạch kiểm thử được thông qua, sẽ đến bước phân tích và thiết kế. Ở bước này chúng ta sẽ xây dựng kịch bản kiểm thử, chuẩn bị dữ liệu kiểm thử. Thực hiện kiểm thử và cập nhật kết quả: - Thực hiện kiểm thử dựa trên các kịch bản kiểm thử,test script, thủ tục, dữ liệu có sẵn từ bước chuẩn bị kiểm thử.
- Tham gia quá trình quản lý lỗi: báo lỗi, sửa lỗi. Báo cáo và phân tích dữ liệu kiểm thử: - Báo cáo kiểm thử. - Phân tích nguyên nhân và đề xuất các hành động khắc phục. Lưu hồ sơ và kết thúc test: Khi đã đáp ứng được điều kiện dừng, thì các hoạt động chụp lại các kết quả chính, rút ra các kinh nghiệm bài học, tài liệu liên quan đến dự án sẽ được lưu trữ lại và sử dụng để kham khảo cho các dự án tiếp theo.
Các kỹ thuật kiểm thử [7] Có 3 kỹ thuật kiểm thử phần mềm chính là: Kiểm thử hộp đen Kiểm thử hộp trắng Kiểm thử hộp xám 1. Kiểm thử hộp đen: Kỹ thuật kiểm thử hộp đen xem chương trình như là một “hộp đen”, trong đó người kiểm thử không quan tâm đến cấu trúc bên trong của chương trình mà chỉ quan tâm đến dữ liệu đầu vào và đầu ra sau khi được xử lý. Mục đích của kỹ thuật này là tìm kiếm các trường hợp mà chương trình không thực hiện theo các đặc tả của nó. Ưu điểm của kỹ thuật kiểm thử hộp đen là có thể đánh giá phần mềm một cách khách quan, người kiểm thử có thể không hiểu biết về mã lệnh và có thể tìm ra các lỗi mà nhân viên phát triển không tìm ra.
Song bên cạnh đó kiểm thử hộp đen còn có nhược điểm là thăm dò mù, do nhân viên kiểm thử không biết các chương trình được xây dựng như thế nào. Đó là lý do mà có nhiều trường hợp mà một kiểm thử viên hộp đen viết rất nhiều ca kiểm thử để kiểm tra một thứ gì đó mà đáng lẽ có thể chỉ cần kiểm tra bằng 1 ca kiểm thử duy nhất.3 Black box testing 9 Do vậy, kiểm thử hộp đen có ưu điểm của “một sự đánh giá khách quan”, mặt khác nó lại có nhược điểm của “thăm dò mù”. Kiểm thử hộp trắng Kỹ thuật kiểm thử hộp trắng hay còn gọi là “Kiểm thử cấu trúc” là kỹ thuật kiểm thử cho phép khảo sát cấu trúc bên trong của chương trình. Kiểm thử viên sẽ truy cập vào cấu trúc dữ liệu và giải thuật bên trong chương trình (cả mã lệnh thực hiện chúng).
Mục tiêu của phương pháp kiểm thử hộp trắng: Tất cả các điều kiện logic đề được thực hiện Tất cả vòng lặp đều được thực hiện tại biên Bảo đảm mọi đường thực hiện độc lập trong một modun được thực hiện ít nhất một lần Hình 1.4 White box testing 10 1. Kiểm thử hộp xám Kiểm thử hộp xám là kỹ thuật kiểm thử có sự kết hợp giữa kiểm thử hộp đen và kiểm thử hộp trắng. Trong đó ta cũng quan tâm đến dữ liệu đầu vào và đầu ra giống như trong kiểm thử hộp đen, song lại đòi hỏi có sự truy cập đến cấu trúc dữ liệu và giải thuật để thiết kế các trường hợp kiểm thử.5 Gray box testing 11 1. Các cấp độ kiểm thử [5] Hình 1.6 Sơ đồ cấp độ kiểm thử Trong các quá trình phát triển phần mềm có quy định các giai đoạn như xác định và phân tích yêu cầu, thiết kế, mã hóa, kiểm tra và triển khai.
Môi giai đoạn đi qua đều có các thử nghiệm tương ứng. Do đó cũng có các cấp độ khác nhau của thử nghiệm.