Kiểm chứng chương trình Java với JPF

Một phần của tài liệu Kiểm chứng các thành phần Java tương tranh (Trang 25)

C ông cụ sinh mã kiểm chứng PVG

2.1Kiểm chứng chương trình Java với JPF

Các phiên bản hiện tại hỗ trợ kiểm chứng các thuộc tính như tắc nghẽn (dead- lock), cạnh tranh dữ liệu (data race) và các ngoại lệ chưa được xử lý (unhandled exceptions). Tuy nhiên, JPF cũng cho phép người sử dụng mở rộng để kiểm chứng các thuộc tính khác dựa trên các giao diện đã được thiết kế sẵn như giao diện

property và listener[2]. Giao diện property như trong Danh sách 2.2 cho phép định nghĩa các thuộc tính cần kiểm chứng bằng cách tạo ra các lớp thực thi sau đó gắn vào đối tượngsearchcủa JPF bằng cách gọijpf.getSearch().addProperty().

public i n t e r f a c e P r o p e r t y extends P r i n t a b l e { boolean check ( Search search , VM vm );

String g e t E r r o r M e s s a g e (); ...

}

Danh sách 2.2 – Giao diện của lớp property.

Các listenercho phép, tương tác và mở rộng việc thực thi của JPF tại thời điểm chạy chương trình. JPF cho phép chúng ta tạo ra các listener và gắn nó vào

thể hiện của JPF. Khi thực thi chương trình thì mỗi khi có một sự kiện nào đó xảy ra nó sẽ báo cho listener biết. Các sự kiện này bao quát gần như toàn bộ quá trình thực thi của JPF từ những sự kiện ở mức thấp như thực thi các chỉ thị (instructionExecuted) cho tới những sự kiện ở mức cao như khi đã hoàn thành việc tìm kiếm (searchFinished). Để tạo ra các listenernày, JPF đưa ra hai giao diện tương ứng với hai đối tượng nguồn của các sự kiện là SearchListener và

VMListener như trong Danh sách 2.3 [2]. Hai giao diện này đưa ra các phương thức ứng với từng sự kiện sẽ báo cho listener biết. SearchListener được dùng để báo cáo về các sự kiện diễn ra trong suốt quá trình tìm kiếm trên không gian trạng thái còn VMListener sẽ báo cáo các sự kiện là các hoạt động của máy ảo.

public class M y P r o p e r t y L i s t e n e r extends P r o p e r t y L i s t e n e r A d a p t e r { boolean p r o p e r t y H o l d s = true ;

..

/* * * * * * * * * * * * * * * * * * * * * * P r o p e r t y i n t e r f a c e * * * * * * * * * * * * * */

public boolean check ( Search search , VM vm ) { return p r o p e r t y H o l d s ; } public String g e t E r r o r M e s s a g e () { return " My p r o p e r t y v i o l a t e d " + ...; } /* * * * * * * * * * * * * * * * * * * * * * V M L i s t e n e r i n t e r f a c e * * * * * * * * * * * * */ public void i n s t r u c t i o n E x e c u t e d ( VM vm ) { JVM jvm = ( JVM ) vm ; I n s t r u c t i o n insn = jvm . g e t L a s t I n s t r u c t i o n (); if ( insn i n s t a n c e o f ...) { .. p r o p e r t y H o l d s = false ; .. } } }

2.4 Phương pháp hình thức với Event-B

Event-B [8] là một phương pháp hình thức dựa trên lý thuyết tập hợp, ngôn ngữ thay thế tổng quát và logic vị từ bậc một (first order logic). Event-B bao gồm ký pháp, phương pháp và công cụ hỗ trợ quá trình phát triển phần mềm bằng cách làm mịn (refinement). Quá trình làm mịn bắt đầu bằng cách xây dựng các máy trừu tượng sau đó làm mịn dần cho đến khi nhận được một máy thực thi, tương tự như mã nguồn chương trình. Tính nhất quán của các mô hình được bảo đảm thông qua việc sinh các mệnh đề cần chứng minh (proof obligations).

2.4.1 Máy và Ngữ cảnh

Các mô hình Event-B [8] được mô tả bởi hai cấu trúc cơ bản là Máy (machine) và Ngữ cảnh (context). Trong đó, Máy dùng để mô tả phần động của mô hình bao gồm biến, bất biến, định lý và các sự kiện tương tác với môi trường. Ngữ cảnh mô tả phần tĩnh của mô hình, chứa các tập hợp (set), hằng, tiên đề và định lý. Một mô hình có thể chỉ gồm Máy hoặc Ngữ cảnh hoặc sự kết hợp giữa Máy và Ngữ cảnh. Một Máy có thể không hoặc tham chiếu một vài Ngữ cảnh. Các Máy và Ngữ cảnh của mô hình được làm mịn bằng cách bổ sung các hằng, biến, bất biến, định lý, sự kiện. Hình 2.2 biểu diễn cấu trúc tổng quát của Máy bên trái và Ngữ cảnh bên phải.

2.4.2 Sự kiện

Mô hình hệ thống với Event-B được bắt đầu từ các sự kiện trừu tượng quan sát được có thể xảy ra trong hệ thống, từ đó đặc tả các trạng thái và hành vi của hệ thống ở mức trừu tượng cao hơn. Một sự kiện e tác động lên (một danh sách) biến trạng thái v, với điều kiệnG(v)và hành động A(v), sẽ được mô tả như sau :

<machine identifier> refines

<machine identifier >

sees

<context identifier list>

variables

<variable identifier list >

invariants <label >:<predicate> ... theorems <label >:<predicate> variant <variant > events <event list > end (a) machine <context identifier> extends

<context identifier list>

sets

<set identifier list> constants

<constant identifier list>

axioms <label>:<predicate> ... theorems <label>:<predicate> ... end (b) context

Một phần của tài liệu Kiểm chứng các thành phần Java tương tranh (Trang 25)