Các thành phần của JavaPathFinder

Một phần của tài liệu Nghiên cứu về kiểm chứng bất biến của đối tượng sử dụng lập trình hướng khía cạnh (Trang 43)

Java, ngoài chức năng là một ngôn ngữ lập trình nó còn là một tập các tầng bắt đầu bằng một nền thực thi máy ảo cụ thể (“VM chủ”) nằm trên đỉnh của các thư viện thực thi (native libraries) được viết cho hệ điều hành. Đối với ngăn xếp này, chúng ta thêm JPF – một ứng dụng Java để chạy trên đỉnh của máy ảo chủ, nhưng bản thân nó là một máy áo (VM) mà sau đó thực thi hệ thống được kiểm thử (System Under Test – SUT).

Với tất cả sự đệ quy này, thật là rắc rối về việc xác định đoạn mã Java nào được xử lý tại mức nào. Chúng ta sẽ xem xét những thành phần nào liên quan khi áp JPF vào SUT. Chúng ta phân loại các thành phần theo hai khía cạnh:

1) Xử lý VM (VM chủ, JPF)

2) Thực thể phân phối liên kết (hệ thống Java chủ, lõi JPF, các mở rộng của JPF, SUT)

Sau đây là sơ đồ JPF chi tiết:

Hình 2.2. Các thành phần của JPF

Chúng ta sẽ đi từ bên trái sang phải sơ đồ này. Chúng ta bắt đầu từ ứng dụng Java được biên dịch mà chúng ta muốn kiểm chứng. Đây không phải là một phần của phân phối JPF nhưng sẽ được thực thi bởi JPF, do đó các tệp lớp tương ứng không cần phải thấy được đối với máy ảo chủ (chạy JPF). Tuy nhiên, mã ứng dụng có thể sử dụng các lớp và các giao diện hiện có trong phân phối JPF (ví dụ: các khung làm việc như việc mô hình hóa sơ đồ trạng thái UML?). Đồng thời, ứng dụng và các thư viện mô hình hóa và các diễn giải tạo thành hệ thống được kiểm thử (SuT).

Phần tiếp theo là lõi JPF. Từ trước đến giờ chúng ta biết đây là một máy ảo được viết bằng Java, do đó nó có thể được chạy trên bất kỳ hệ thống Java nào được cài đặt. Điều này có nghĩa là tất cả các lớp cấu thành JPF cần thấy được bởi máy ảo Java chủ (host JVM) chứ không phải là JPF. Ngoài việc phải thiết lập biến môi trường CLASSPATH, máy ảo chủ phải có đủ bộ nhớ để chạy (có thể cấu hình bởi tham số -

Xmx… trong Eclipse). JPF không phải là một hệ thống nguyên khối. Nó bao gồm nhiều cấu phần khác nhau được cấu hình để làm nhiều thứ.

Phần cuối cùng là phần phức tạp nhất. Các ứng dụng hầu hết sử dụng các thư viện chuẩn của Java (ví dụ System.out.println()) như các lớp cấu thành nên JPF làm. Một số lớp thư viện chuẩn phải được thay thế bởi các phiên bản đặc thù của JPF khi JPF thực thi hệ thống được kiểm chứng (SuT) và JPF có một cơ chế đặc biệt là MJI để làm việc đó. Nhưng nhiều lớp thư viện chuẩn là Java thuần túy và chúng ta lấy chúng thẳng từ máy ảo Java chủ. Điều này có nghĩa là các thư viện chuẩn nằm trong đường dẫn đến thư viện lớp của JPF và máy ảo Java chủ, nhưng các thực thể của lớp tương ứng không có gì chung – cái này tồn tại hoàn toàn bên trong JPF, cái kia hoàn toàn trong máy chủ ảo.

Một phần của tài liệu Nghiên cứu về kiểm chứng bất biến của đối tượng sử dụng lập trình hướng khía cạnh (Trang 43)