1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Đặc tả hình thức: Chương 11 - Nguyễn Thị Minh Tuyền

20 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 406,55 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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!

Trang 1

LOGO

Đặc tả hình thức

Nguyễn Thị Minh Tuyền

Giới thiệu về ESC/Java2 Cách sử dụng và thuộc tính

Trang 2

v  ESC/Java

§  Extended Static Checker for Java

Trang 3

Cấu trúc của ESC/Java2

§  Một pha kiểm tra cú pháp

§  Một pha typechecking (kiểm tra loại và cách sử dụng)

§  Một pha kiểm tra tĩnh ( diễn giải để tìm ra các lỗi tìm tàng) – chạy một prover behind-the-scenes gọi là Simplify

ra các cảnh báo hoặc lỗi

Trang 4

Chạy ESC/Java2

§  http://www.kindsoftware.com/products/opensource/

ESCJava2/download.html

§  Chạy công cụ bằng lệnh

§  Sử dụng Eclipse plug-in

§  Hướng dẫn cài đặt:

http://kindsoftware.com/products/opensource/

ESCJava2/

Trang 5

Platform được hỗ trợ

§  Linux

§  MacOSX

§  Cygwin on Windows

§  Windows (nhưng vẫn còn một số vấn đề về môi

trường cần được giải quyết)

§  Solaris

Trang 6

Môi trường

§  Một prover Simplify chạy được trên môi trường sử

dụng ESC/Java2, thường là cùng đường dẫn với file jar của ứng dụng

§  Biến môi trường SIMPLIFY thiết lập tên của file thực thi cho môi trường này

§  Tập các đặc tả cho các file hệ thống Java, mặc định được bundle vào trong file jar của ứng dụng, nhưng cũng nằm trong jmlspecs.jar

§  Các script cần biến môi trường

ESCTOOLS_RELEASE được thiết lập tới đường dẫn chứa bản release

Trang 7

Các tùy chọn dòng lệnh

v   Một số thông số trên dòng lệnh là tùy chọn hoặc các tham số hoặc là đầu vào Các tùy chọn thông dụng

nhất được 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

Trang 8

Đầu vào

được kiểm tra Nhiều lớp khác có thể được tham chiếu cho các định nghĩa

lớp hoặc các đặc tả - những lớp này

được tìm thấy trong classpath (hoặc

sourcepath hoặc specspath)

đường dẫn hiện tại)

đối với đường dẫn hiện tại)

Trang 9

Các file đặc tả

các file java

các file đặc tả

§  Không có cài đặt của 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 một annotation refines

§  Cũng phải nằm trong classpath

Trang 10

Ví dụ về 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();

Trang 11

Demo

v  Ví dụ Bag

Trang 12

modular reasoning

thức đơn lẻ Vì thế, trong

class A{

byte[] b;

public void n() { b = new byte[20]; } public void m() { n();

b[0] = 2;

}

dereference null ở đây, thậm chí ta có thể

thấy rằng điều đó không xảy ra

Trang 13

modular reasoning

v Để dừng cảnh bảo của ESC/Java2 : thêm

một đ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 của phương

thức phải được chỉ ra rõ ràng

v Các lớp con override các phương thức phải

Trang 14

modular reasoning

b[0]=2 trong

class A{

byte[] b;

public void A() { b = new byte[20]; } public void m() { b[0] = 2;

}

mạo, dù điều này có thể khó hơn

trong ví dụ trước: ta sẽ phải xem xét tất cả các khởi tạo và tất cả các

phương thức

Trang 15

modular reasoning

v Để không còn cảnh báo ESC/Java2: ta thêm một 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: các thuộc tính liên quan phải được

chỉ rõ

v Các lớp con phải bảo toàn các thuộc tính

Trang 16

assume

v Thay vì dừng cảnh báo ESC/Java2: thêm một giả định:

//@ assume b != null && b.length > 0;

b[0] = 2;

v Đặc biệt hữu ích trong quá trình phát triển, khi ta vẫn còn đang cố gắng tìm ra các giả định bị che lấp, hoặc khi độ mạnh để suy diễn của ESC/

Java2 quá yếu

v (requires có thể được hiểu như một hình thức của

assume)

Trang 17

cần có cá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?

}

tra assert thứ hai?

Trang 18

cần có cá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?

}

trong điều kiện sau rằng b[0] vẫn là 0

Trang 19

cần có cá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 của o.n không cho ta biết b không null – và không thể mong đợi điều đó – ta cần mệnh đề assignable để nói rằng o.n sẽ không ảnh hưởng b[0]

Trang 20

LOGO

Ngày đăng: 08/05/2021, 13:15

🧩 Sản phẩm bạn có thể quan tâm