Nội dung của Bài giảng Đặc tả hình thức Chương 11 được trình bày như sau: Cấu trúc của ESC/Java2, chạy ESC/Java2, Platform được hỗ trợ, ứng dụng dựa vào môi trường có, các tùy chọn dòng lệnh, Các file đặc tả,...Mời các bạn cùng tham khảo!
LOGO Đặc tả hình thức Giới thiệu ESC/Java2 Cách sử dụng thuộc tính Nguyễn Thị Minh Tuyền Nội dung slide dịch từ slide David Cok, Joe Kiniry, Eric Poll v ESC/Java § Extended Static Checker for Java Nguyễn Thị Minh Tuyền Đặc tả hình thức Cấu trúc ESC/Java2 v ESC/Java2 gồm § Một pha kiểm tra cú pháp § Một pha typechecking (kiểm tra loại cách sử dụng) § Một pha kiểm tra tĩnh ( diễn giải để tìm lỗi tìm tàng) – chạy prover behind-the-scenes gọi Simplify v Kiểm tra cú pháp typechecking tạo cảnh báo lỗi v Kiểm tra tĩnh đưa cảnh báo Nguyễn Thị Minh Tuyền Đặc tả hình thức Chạy ESC/Java2 v Tải ESC/Java2 từ § http://www.kindsoftware.com/products/opensource/ ESCJava2/download.html v Sử dụng ESC/Java2: § Chạy cơng cụ lệnh § Sử dụng Eclipse plug-in § Hướng dẫn cài đặt: http://kindsoftware.com/products/opensource/ ESCJava2/ Nguyễn Thị Minh Tuyền Đặc tả hình thức Platform hỗ trợ v ESC/Java2 hỗ trợ § Linux § MacOSX § Cygwin on Windows § Windows (nhưng cịn số vấn đề môi trường cần giải quyết) § Solaris Nguyễn Thị Minh Tuyền Đặc tả hình thức Mơi trường v Ứng dụng dựa vào mơi trường có § Một prover Simplify chạy mơi trường sử dụng ESC/Java2, thường đường dẫn với file jar ứng dụng § Biến mơi trường SIMPLIFY thiết lập tên file thực thi cho môi trường § Tập đặc tả cho file hệ thống Java, mặc định bundle vào file jar ứng dụng, nằm jmlspecs.jar § Các script cần biến môi trường ESCTOOLS_RELEASE thiết lập tới đường dẫn chứa release Nguyễn Thị Minh Tuyền Đặc tả hình thức Các tùy chọn dịng lệnh v Một số thơng số dịng lệnh tùy chọn tham số đầu vào Các tùy chọn thơng dụng sử dụng là: § § § § § § § § § § § -help - prints a usage message -quiet - turns off informational messages (e.g progress messages) -nowarn - turns off a warning -classpath - sets the path to find referenced classes [best if it contains ‘.’] -specs - sets the path to library specification files -simplify - provides the path to the simplify executable -f - the argument is a file containing command-line arguments -nocheck - parse and typecheck but no verification -routine - restricts checking to a single routine -eajava, -eajml - enables checking of Java assertions -counterexample - gives detailed information about a warning Nguyễn Thị Minh Tuyền Đặc tả hình thức Đầu vào v Đầu vào dịng lệnh lớp kiểm tra Nhiều lớp khác tham chiếu cho định nghĩa lớp đặc tả - lớp tìm thấy classpath (hoặc sourcepath specspath) § file names: file java file đặc tả (tương đường dẫn tại) § directories: xử lý tất file java đặc tả (tương đường dẫn tại) § package: tìm thấy classpath § class: tìm thấy classpath § list (mở đầu –list): file chứa đầu vào Nguyễn Thị Minh Tuyền Đặc tả hình thức Các file đặc tả v Đặc tả thêm trực tiếp vào file java v Đặc tả thêm vào file đặc tả § § § § § Khơng có cài đặt phương thức Khơng có khởi tạo field Hậu tố bắt buộc: refines-java Yêu cầu annotation refines Cũng phải nằm classpath Nguyễn Thị Minh Tuyền Đặc tả hình thức Ví dụ file đặc tả package java.lang; import java.lang.reflect.*; import java.io.InputStream; public final class Class implements java.io.Serializable { private Class(); /*@ also public normal_behavior @ ensures \result != null && !\result.equals("") @ && (* \result is the name of this class object *); @*/ public /*@ pure @*/ String toString(); Nguyễn Thị Minh Tuyền 10 Đặc tả hình thức Demo v Ví dụ Bag Nguyễn Thị Minh Tuyền 11 Đặc tả hình thức modular reasoning v ESC/Java2 suy luận phương thức đơn lẻ Vì thế, class A{ byte[] b; public void n() { b = new byte[20]; } public void m() { n(); b[0] = 2; } v ESC/Java2 cảnh báo có dereference null đây, chí ta thấy điều khơng xảy Nguyễn Thị Minh Tuyền 12 Đặc tả hình thức modular reasoning v Để dừng cảnh bảo ESC/Java2 : thêm điều kiện sau class A{ byte[] b; //@ ensures b != null && b.length = 20; public void n() { b = new byte[20]; } public void m() { n(); b[0] = 2; } v Vì vậy: thuộc tính liên quan phương thức phải rõ ràng v Các lớp override phương thức phải bảo toàn điều 13 Nguyễn Thị Minh Tuyền Đặc tả hình thức modular reasoning v Tương tự, ESC/Java2 cảnh báo b[0]=2 class A{ byte[] b; public void A() { b = new byte[20]; } public void m() { b[0] = 2; } v Có thể ta thấy có cảnh báo giả mạo, dù điều khó ví dụ trước: ta phải xem xét tất khởi tạo tất phương thức Nguyễn Thị Minh Tuyền 14 Đặc tả hình thức modular reasoning v Để khơng cịn cảnh báo ESC/Java2: ta thêm bất biến class A{ byte[] b; //@ invariant b != null && b.length == 20; // or weaker property for b.length ? public void A() { b = new byte[20]; } public void m() { b[0] = 2; } v Vì vậy: thuộc tính liên quan phải rõ v Các lớp phải bảo toàn thuộc tính Nguyễn Thị Minh Tuyền 15 Đặc tả hình thức assume v Thay dừng cảnh báo ESC/Java2: thêm giả định: //@ assume b != null && b.length > 0; b[0] = 2; v Đặc biệt hữu ích q trình phát triển, ta cịn cố gắng tìm giả định bị che lấp, độ mạnh để suy diễn ESC/ Java2 q yếu v (requires hiểu hình thức assume) Nguyễn Thị Minh Tuyền 16 Đặc tả hình thức cần có mệnh đề assignable class A{ byte[] b; public void m() { b = new byte[3]; //@ assert b[0] == 0; // ok! o.n( ); //@ assert b[0] == 0; // ok? } v ESC/Java cần biết o.n để kiểm tra assert thứ hai? Nguyễn Thị Minh Tuyền 17 Đặc tả hình thức cần có mệnh đề assignable class A{ byte[] b; public void m() { b = new byte[3]; //@ assert b[0] == 0; // ok! o.n(b); //@ assert b[0] == 0; // ok? } v Một đặc tả chi tiết cho o.n đặt điều kiện sau b[0] Nguyễn Thị Minh Tuyền 18 Đặc tả hình thức cần có mệnh đề assignable class A{ byte[] b; public void m() { b = new byte[3]; //@ assert b[0] == 0; // ok! o.n(); //@ assert b[0] == 0; // ok? } § Nếu điều kiện sau o.n không cho ta biết b không null – mong đợi điều – ta cần mệnh đề assignable để nói o.n khơng ảnh hưởng b[0] § Khai báo o.n pure giải vấn đề Nguyễn Thị Minh Tuyền 19 Đặc tả hình thức LOGO ... (mở đầu –list): file chứa đầu vào Nguyễn Thị Minh Tuyền Đặc tả hình thức Các file đặc tả v? ?Đặc tả thêm trực tiếp vào file java v? ?Đặc tả thêm vào file đặc tả § § § § § Khơng có cài... object *); @*/ public /*@ pure @*/ String toString(); Nguyễn Thị Minh Tuyền 10 Đặc tả hình thức Demo v Ví dụ Bag Nguyễn Thị Minh Tuyền 11 Đặc tả hình thức modular reasoning v ESC/Java2 suy luận... checking to a single routine -eajava, -eajml - enables checking of Java assertions -counterexample - gives detailed information about a warning Nguyễn Thị Minh Tuyền Đặc tả hình thức Đầu vào v Đầu