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

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

28 8 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 28
Dung lượng 429,52 KB

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

Nội dung

Bài giảng Đặc tả hình thức: Chương 10 do Nguyễn Thị Minh Tuyền biên soạn nhằm mục đích phục vụ cho việc giảng dạy. Nội dung bài giảng gồm có Giới thiệu về JML, công cụ hỗ trợ cho JML, ESC/Java2: Cách sử dụng và thuộc tính, ESC/Java2: các cảnh báo, một số chỉ dẫn về đặc tả và điểm yếu, JML nâng cao.

Trang 1

LOGO

Đặc tả hình thức

Nguyễn Thị Minh Tuyền

Giới thiệu về Java Modeling Language

Trang 3

Java Modeling Language

v   Java Modeling Language (JML)

§  http://www.eecs.ucf.edu/~leavens/JML/index.shtml

v   Tài liệu:

§  http://www.kindsoftware.com/products/opensource/ESCJava2/docs.html

v   Ngôn ngữ đặc tả hình thức cho Java

§   đặc tả hành vi của các lớp trong Java

§   ghi lại các quyết định về thiết kế và cài đặt

bằng cách thêm vào trong mã nguồn Java các assertion

§   điều kiện trước (pre-condition)

§   điều kiện sau (post-condition)

§   bất biến (invariant)

v   Mục tiêu: người lập trình Java nào cũng có thể

sử dụng dễ dàng

Trang 4

Đặc tả hình thức

v   JML assertion được thêm vào dưới

dạng các chú thích trong file java

Trang 5

Điều kiện trước và sau (pre- và post-condition)

v   Điều kiện trước của một phương thức

là điều kiện phải đúng trước khi gọi

phương thức đó

v   Điều kiện sau của một phương thức là điều kiện phải đúng khi nó kết thúc

phương thức trả về bình thường, nghĩa là không có

ngoại lệ Sử dụng từ khóa ensures

Sử dụng từ khóa signals

Trang 6

v   Ở đây, \old(balance) chỉ đến giá trị của

balance trước khi thực thi phương thức

debit(int amount)

6

Nguyễn Thị Minh Tuyền

Trang 8

Đặc tả hình thức

Design-by-Contract

v   Điều kiện trước và sau định nghĩa

ràng buộc (contract) giữa một lớp và client của nó

định điều kiện sau

đảm bảo điều kiện sau

v   Ví dụ:

client là đảm bảo rằng giá trị của amount dương

Mệnh đề requires phải làm rõ ràng điều này

8

Nguyễn Thị Minh Tuyền

Trang 9

signals (BankException e) &&

amount > balance &&

balance == \old(balance) &&

e.getReason().equals("Amount too big");

@*/

public int debit(int amount) throws BankException

}

Trang 10

signals (…)

exceptional (throw)

Trang 11

v   Các ngoại lệ được đề cập trong mệnh

Để thay đổi điều này, có 3 tùy chọn:

/*@ normal_behavior

requires

ensures

@*/

signals (E) false;

signals_only E1, , E2;

Trang 12

Đặc tả hình thức

Bất biến

phải được duy trì trong tất cả các phương

thức

public class Wallet {

public static final short MAX_BAL = 1000;

private short balance;

@*/

và sau Bất biết cũng phải được bảo toàn

nếu có ngoại lệ

12

Nguyễn Thị Minh Tuyền

Trang 13

Bất biến

kế

public class Directory {

private File[] files;

files != null

&&

(\forall int i; 0 <= i && i < files.length;

; files[i] != null &&

files[i].getParent() == this);

@*/

}

cho việc hiểu rõ mã nguồn

Trang 14

Đặc tả hình thức

non_null

v   Nhiều bất biến, điều kiện trước và sau

là các tham chiếu không null Sử dụng

điều này

public class Directory {

private /*@ non_null @*/ File[] files;

void createSubdir( /*@ non_null @*/ String name){

Trang 15

assert

v   Mệnh đề assert đặc tả một thuộc tính phải đúng tại một điểm trong mã

Trang 16

Đặc tả hình thức

assert

v   Từ khóa assert cũng có trong Java (từ phiên bản Java 1.4) Tuy nhiên, assert trong JML giàu ngữ nghĩa hơn

Trang 18

Đặc tả hình thức

pure

v   Một phương thức mà không có hiệu

ứng phụ gọi là pure

public /*@ pure @*/ int getBalance(){

Trang 21

thời điểm biên dịch

§  ESC/Java2

Trang 22

Đặc tả hình thức

Kiểm tra assertion tại thời gian thực thi

v   Trình biên dịch jmlrac được viết bởi

Gary Leavens, Yoonsik Cheon và các

cộng sự tại Iowa State University

trong khi thực thi, tất cả các assertion được kiểm tra

và bất kỳ vi phạm nào của assertion đều sinh ra một lỗi

tắc kiểm thử hiện có

tính được kiểm tra, tại nhiều vị trí trong mã nguồn

22

Nguyễn Thị Minh Tuyền

Trang 23

Kiểm tra assertion tại thời gian thực thi

v   jmlrac có thể phát sinh các mã kiểm

tra phức tạp Ví dụ:

signals ( Exception ) balance == \old (balance);

@*/

public int debit(int amount) { }

v   Kiểm tra rằng nếu debit throws một

ngoại lệ, balance không thay đổi và

bất biến vẫn đúng

Trang 24

Đặc tả hình thức

Kiểm tra tĩnh mở rộng

chương trình tự động một cách đầy đủ, với một số thỏa hiệp để đạt được sự tự động một cách đầy đủ

dịch, hoàn toàn tự động

tốt (ví dụ như Null-, ArrayIndexOutOfBounds-, ClassCast-) và kiểm tra một số thuộc tính đơn giản

24

Nguyễn Thị Minh Tuyền

Trang 25

v   ESC/Java có thể thất bại trong việc tạo ra các cảnh báo về chương trình không đúng

public class Positive{

public void increase(){ n++; }

}

increase sẽ phá vỡ điều kiện trong bất biến, chẳng hạn với

Trang 26

Đặc tả hình thức

Kiểm tra tĩnh và kiểm tra tại thời

gian thực thi

tra đặc tả tại thời điểm thực thi

thử tại thời gian thực thi chỉ đúng với bộ test,

và sau của các phương thức và các bất biến cần thiết cho

việc kiểm định

26

Nguyễn Thị Minh Tuyền

Trang 27

Các công cụ JML khác

(trong khi ESC/Java2 chỉ nhắm đến việc kiểm định hoàn

toàn tự động) và vì vậy có thể chứng minh các thuộc tính phức tạp

State)

Trang 28

LOGO

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

TỪ KHÓA LIÊN QUAN

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