Khi kiểm tra độ phủ sử dụng JPF CoverageAnalyzer chúng ta có thể biết được số điều kiện phủ, số hàm được thực thi trong lớp với bộ test theo tiêu chuẩn phủ điều kiện, tuy nhiên chúng không rõ ràng. Chỉ số branch chỉ thể hiện số điều kiện đã được phủ mà không chỉ rõ nhánh nào chưa phủ, nhánh chưa phủ đó nằm ở vị trí nào trong hàm, bên cạnh đó kiểm thử vòng lặp cũng gặp trở ngại bởi khi kiểm thử vòng lặp không chỉ đo chỉ số độ phủ mà còn phải xác định xem vòng lặp thực thi bao nhiêu lần, mỗi lần có phát sinh lỗi không.
3.6 Kết luận
Java Path Finder (JPF) là một hệ thống để kiểm chứng các chương trình bytecode của Java thực thi được. JPF sẽ duyệt một cách có hệ thống tất cả các đường dẫn thực thi tiềm tàng của một chương trình để tìm các vi phạm các đặc tính như các khóa chết (deadlock) hay các ngoại lệ không được xử lý (unhandled exception). Đây là một hệ thống mở được cấu thành bởi các thành phần do đó chúng ta hoàn toàn có thể bổ sung thêm các tính năng mới cho JPF dưới dạng các thành phần mở rộng. Phần mở rộng Listener với lớp CoverageAnalyzer trong JPF đã cung cấp khả năng đo độ phủ của hàm tuy nhiên chưa được thực sự trực quan. Trong luận văn sẽ sử dụng JPF như một nền tảng để xây dựng công cụ kiểm tra độ phủ của các hàm và hiển thị kết quả tường minh.
29
CHƢƠNG 4 – PHƢƠNG PHÁP KIỂM TRA ĐỘ PHỦ TRONG KIỂM THỬ ĐƠN VỊ SỬ DỤNG JAVA PATHFINDER
Trong các chương 2 và chương 3 chúng tôi đã trình bày kiến thức cơ sở về kiểm thử và tổng quan về công cụ kiểm chứng Java PathFinder, trong chương này chúng tôi xin trình bày đề xuất phương pháp kiểm tra độ phủ trong kiểm thử đơn vị sử dụng Java Pathfinder.
4.1 Bài toán
Trong công nghiệp phần mềm, phương pháp chính để đảm bảo chất lượng vẫn là kiểm thử phần mềm bằng các bộ dữ liệu test (test suite). Độ phủ của bộ test càng lớn độ tin cậy của bộ dữ liệu kiểm thử càng cao. Trong thực tế khi tiến hành kiểm thử hàm bất kỳ với bộ test cho trước có trường hợp bộ test không phủ được hết các cạnh trong đồ thị luồng điều khiển tương ứng. Việc tồn tại những cạnh chưa được phủ hay nói cách khác là chưa được chạy qua lần nào sẽ tiềm ẩn nhiều nguyên nhân gây ra lỗi cho chương trình. Đồng thời bộ test cũng không được đánh giá là tin cậy để kiểm thử hàm. Chúng ta cần có phương pháp để giải quyết vấn đề nêu trên. Luận văn đề xuất phương pháp kiểm tra độ phủ trong kiểm thử đơn vị nhằm đánh giá được chất lượng của bộ dữ liệu test và đánh giá mã nguồn (hàm, phương thức) viết có đúng thuật toán hay không khi kiểm thử với bộ test đạt tiêu chuẩn. Công cụ lựa chọn để hỗ trợ xây dựng phương pháp là công cụ kiểm chứng Java PathFinder, kỹ thuật kiểm thử được chọn là kiểm thử hộp trắng cụ thể là kiểm thử luồng điều khiển với mức tiêu chuẩn bao phủ nhánh (branch coverage) để giải quyết bài toán đã nêu.
4.2 Phƣơng pháp xây dựng công cụ kiểm tra độ phủ sử dụng JPF 4.2.1 Nội dung phƣơng pháp
Phương pháp đề xuất của chúng tôi sử dụng khả năng ghi lại vết ngăn xếp từng bước thực thi trong quá trình chạy chương trình khi có ngoại lệ của JPF. Từ file vết chúng tôi xử lý, phân tích, so sánh với mã nguồn đầu vào để báo cáo về số nhánh đã bao phủ hoặc chưa phủ, kết quả này hiển thị trên đồ thị luồng điều khiển trực quan, rõ ràng. Hình 4.1 mô tả tổng quan quy trình thực thi của công cụ.
30