Kiến trúc mức cao của JPF

Một phần của tài liệu Tìm hiểu về công cụ tự động sinh test case tự động kiểm thử phần mềm (Trang 55)

Hình 2.3: Kiến trúc mức cao

Hình 2-3 biểu diễn sơ đồ kiến trúc mức cao của JPF. JPF được thiết kế thành 2 thành phần chính đó là: JVM, và Search:

Máy ảo Java được tạo bởi người dùng (JVM): Là máy sinh trạng thái cụ

thể Java, bằng cách thực thi các chỉ thị bytecode Java, JVM sinh ra mô tả trạng thái có thể:

• Kiểm tra bằng nhau (có trạng thái nào giống mà đã được thăm trước đó). • Truy vấn (trạng thái luồng, giá trị dữ liệu, v.v.)

• Phục hồi.

Máy ảo JVM của JPF có khả năng quản lý các trạng thái: quay lui, khớp trạng thái và máy ảo lưu trữ trạng thái. Có 3 phương thức JVM chính hợp tác giữa máy ảo và tìm kiếm (VM-Search):

• Forward– sinh trạng thái tiếp theo, thông báo neeos trạng thái sinh ra là nút lá. Nếu đúng lưu trữ vào một ngăn xếp backtrack phục vụphục hồi hiệu quả.

• Backtrack– phục hồi trạng thái cuối trong ngăn xếp quay lui. • restoreState– phục hồi một trạng thái tùy ý.

Đối tượng Search: là một cấu hình chiến lược tìm kiếm đối tượng mà theo

hướng thực thi trong máy ảo. Nói cách khác, đối tượng Search lựa chọn các trạng thái mà từ đó JVM nên xử lý bằng cách trực tiếp JVM sinh ra trạng thái tiếp theo hoặc quay lại trạng thái được tạo ra trước đó.

Một khảnăng quan trọng của đối tượng Search là nó có thể có thể đánh giá đối tượng thuộc tính, chẳng hạn như: nó xác định một thuộc tính là không phải deadlock - phương thức NotDeadlocked, hoặc đảm bảo rằng các thuộc tính không vi phạm sự khẳng định. - phương thức NoAssertionsViolatedProperty.

Tóm lại, cốt lõi của JPF được tạo từ hai thành phần chính: JVM tạo bởi người dùng và đối tượng Search. Sự kết hợp của các thành 8

phần này giúp JPF tìm kiếm các vi phạm thuộc tính như: unhandled exceptions, race conditions and deadlock.

Ngoài ra, JPF cung cấp các cấu hình mở rộng đáng kể: • Choice Generators: thao tác cưỡng chếthi hành nhánh.

• Instruction Factories: mã cho phép thay đổi ngữ nghĩa của thực thi chỉ thị bytecode.

• Listeners: mã theo dõi và kiểm soát thực thi chương trình JPF.

• Native Peers: mã phải được thực hiện bên ngoài JPF (ví dụ như các thao tác I/O).

JPF được phát triển không chỉ cho mục đích sinh dữ liệu kiểm tra dữ liệu mà còn kiểm tra deadlocks, unhandled exceptions, race conditions, heap bounds và những vi phạm thuộc tính được cung cấp bởi người dùng.

Một phần của tài liệu Tìm hiểu về công cụ tự động sinh test case tự động kiểm thử phần mềm (Trang 55)

Tải bản đầy đủ (DOCX)

(72 trang)
w