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

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

25 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 25
Dung lượng 332,02 KB

Nội dung

Aliasing là nguồn gốc của mọi rắc rối phức tạp. Bài giảng Đặc tả hình thức: Chương 15 do Nguyễn Thị Minh Tuyền biên soạn sau đây sẽ giúp các bạn nắm rõ kiến thức về Aliasing, trường Ghost, các trường model,...Mời các bạn cùng tham khảo!

LOGO Đặc tả hình thức JML nâng cao Nguyễn Thị Minh Tuyền Nội dung slide dịch từ slide David Cok, Joe Kiniry, Eric Poll v Aliasing Nguyễn Thị Minh Tuyền Đặc tả hình thức Aliasing v Aliasing nguồn gốc rắc rối phức tạp v Lớp ArrayTimer minh họa cho điều Nguyễn Thị Minh Tuyền Đặc tả hình thức Ví dụ ArrayTimer v Sử dụng mảng số để biểu diễn giờ:phút:giây public class ArrayTimer{ char[] currentTime; char[] alarmTime; //@ invariant currentTime != null; //@ invariant currentTime.length == 6; //@ invariant alarmTime != null; //@ invariant alarmTime.length == 6; public void tick() { } public void setAlarm( ) { } } Nguyễn Thị Minh Tuyền Đặc tả hình thức Ví dụ ArrayTimer v Sẽ sai instance khác ArrayTimer chia sẻ mảng alarmTime, nghĩa §  o.alarmTime == o’.alarmTime §  cho o !=o’ §  ESC/Java2 ý đến điều này, sinh cảnh báo khó hiểu Nguyễn Thị Minh Tuyền Đặc tả hình thức v Để loại bỏ aliasing trường alarmTime: public class ArrayTimer{ char[] currentTime; //@ invariant currentTime.owner == this; public ArrayTimer( ){ ; currentTime = new char[6]; //@ set currentTime.owner = this; } } Nguyễn Thị Minh Tuyền Đặc tả hình thức Ví dụ ArrayTimer v Sẽ sai instance ArrayTimer định danh alarmTime thành currentTime nó, nghĩa o.alarmTime == o.currentTime v ESC/Java2 để ý điều này, sinh cảnh báo khó hiểu v Ta nên thêm //@ invariant alarmTime != currentTime; để loại bỏ alias Nguyễn Thị Minh Tuyền Đặc tả hình thức v Các trường sử dụng mức đặc tả: trường ghost model Nguyễn Thị Minh Tuyền Đặc tả hình thức Trường Ghost v Đôi thuận tiện ta thêm trường mở rộng, phục vụ cho mục đích đặc tả (gọi biến phụ) v Một trường ghost giống trường bình thường, ngoại trừ dùng đặc tả v Một lệnh đặc biệt set dùng để gán giá trị cho trường ghost Nguyễn Thị Minh Tuyền Đặc tả hình thức Ví dụ v Giả sử đặc tả khơng hình thức class SimpleProtocol { public void start() { } public void stop() { } } v nói stop() triệu gọi sau start(), ngược lại v Điều biểu diễn sử dụng trường ghost, để biểu diễn trạng thái protocol Nguyễn Thị Minh Tuyền 10 Đặc tả hình thức Ví dụ class SimpleProtocol { //@ public ghost boolean started; //@ requires !started; //@ assignable started; //@ ensures started; public void start() { //@ set started = true; } //@ requires started; //@ assignable started; //@ ensures !started; public void stop() { //@ set started = false; } } Nguyễn Thị Minh Tuyền 11 Đặc tả hình thức Ví dụ v Có thể đối tượng có trạng thái bên mà ghi lại protocol thực thi, ví dụ: class SimpleProtocol { private /*@ spec_public*/ ProtocolStack st; public void start() { st = new ProtocolStack( ); } public void stop() { st = null; } } Nguyễn Thị Minh Tuyền 12 Đặc tả hình thức Ví dụ v Có thể biểu diễn quan hệ trường ghost số trường khác Ví dụ: class SimpleProtocol { private ProtocolStack st; //@ public ghost boolean started; //@ invariant started (st !=null); //@ requires !started; //@ assignable started; //@ ensures started; public void start() { } //@ requires started; //@ assignable started; //@ ensures !started; public void stop() { } } Nguyễn Thị Minh Tuyền 13 Đặc tả hình thức v  Ta khơng dùng trường ghost, sử dụng: class SimpleProtocol { private /*@ spec_public @*/ ProtocolStack st; //@ requires st==null; //@ assignable st; //@ ensures st!=null; public void start() { } //@ requires st!=null; //@ assignable st; //@ ensures st==null; public void stop() { } } v  cách không đẹp mắt làm lộ rõ chi tiết cài đặt Nguyễn Thị Minh Tuyền 14 Đặc tả hình thức Ví dụ: trường model v Giải pháp: sử dụng trường model class SimpleProtocol { private ProtocolStack st; //@ public model boolean started; //@ private represents started = (st != null); //@ requires !started; //@ assignable started; //@ ensures started; public void start() { } //@ requires started; //@ assignable started; //@ ensures !started; public void stop() { } } Nguyễn Thị Minh Tuyền 15 Đặc tả hình thức Ví dụ: trường model v Một trường model cung cấp nhóm liệu có liên quan class SimpleProtocol { private ProtocolStack st; //@ in started; //@ public model boolean started; //@ private represents started = (st != null); //@ requires !started; //@ assignable started; //@ ensures started; public void start() { } //@ requires started; //@ assignable started; //@ ensures !started; public void stop() { } } Nguyễn Thị Minh Tuyền 16 Đặc tả hình thức model vs ghost v Sự khác ghost model dễ gây nhầm lẫn Cả hai tồn đặc tả JML, khơng phải mã nguồn v Ghost §  Trường ghost giống trường bình thường §  Ta gán giá trị cho nó, sử dụng set, đặc tả JML v Model §  Trường model trường trừu tượng §  Trường model cách viết tắt thuận tiện §  Ta khơng thể gán giá trị cho §  Trường model thay đổi giá trị việc biểu diễn thay đổi Nguyễn Thị Minh Tuyền 17 Đặc tả hình thức v Bất biến (invariant) Nguyễn Thị Minh Tuyền 18 Đặc tả hình thức Bất biến v Bất biến – cịn gọi bất biến lớp – khái niệm phổ biến hữu ích v Trong chương trình lớn hơn, ràng buộc thật quan trọng đặc tả sử dụng bất biến v Tuy nhiên, ngữ nghĩa phức tạp mong đợi nhiều v Bất biến gồm điều kiện trước điều kiện sau phương thức, điều kiện sau phương thức khởi tạo Và nhiều Nguyễn Thị Minh Tuyền 19 Đặc tả hình thức Khi bất biến nên public class A { B b; int i=2; //@ invariant i >= //@ ensures \result >=0; public /*@ pure @*/int get(){ return i; } public void m(){ i ; ; // invariant possibly broken i++; } } v Một bất biến tạm thời bị phá vỡ Nguyễn Thị Minh Tuyền 20 Đặc tả hình thức Khi bất biến nên public class A { B b; int i=2; //@ invariant i >= //@ ensures \result >=0; public /*@ pure @*/ int get(){ return i; } public void m(){ i ; b.m( ); // invariant possibly broken i++; } } v Có thể sinh vấn đề triệu gọi b.m gồm việc triệu gọi đối tượng Nguyễn Thị Minh Tuyền 21 Đặc tả hình thức Khi bất biến nên v Ví dụ, giả sử public class B { public void m(A a){ int j = a.get(); //@ assert i>=0; } } v  Đặc tả get() giả sử assertion v  Nhưng get() triệu gọi bất biến bị phá vỡ, tất khơng cịn v  Điều gọi vấn đề call-back Nguyễn Thị Minh Tuyền 22 Đặc tả hình thức Khi bất biến nên v Giải pháp cho vấn đề call-back: §  Một bất biến phương thức nên tất trạng thái thấy được, tất trạng thái từ đầu đến cuối việc triệu gọi phương thức v Vì bất biến có nhiều vấn đề khác không thêm chúng vào điều kiện trước điều kiện sau v Tất bất biến tất đối tượng nên trạng thái thấy v ESC/Java2 tìm kiếm bất biến số đối tượng v Các kỹ thuật kiểm định mô đun hóa thử thách, cịn đề tài nóng nghiên cứu Nguyễn Thị Minh Tuyền 23 Đặc tả hình thức Khi bất biến nên v Đôi ta muốn triệu gọi phương thức điểm chương trình nơi mà bất biến bị phá vỡ Để làm điều mà không bị ESC/Java2 than phiền: §  Khai báo phương thức private phương thức helper private /*@ helper @*/ void m() { } Bất biến phương thức helper gọi §  Thêm //@ nowarn Invariant §  dịng việc gọi phương thức xảy Điều khơng an tồn Nguyễn Thị Minh Tuyền 24 Đặc tả hình thức Nhiều vấn đề với bất biến public class SortedLinkedList { private int i; private LinkedList next; //@ invariant i > next.i; public /*@ pure @*/ int getValue(){ return i; } public /*@ pure @*/ int getNext(){ return next; } public /*@ pure @*/ int getValue(){ return i; } public void inc() { i++; } } v inc không phá vỡ bất biến đối tượng này, phá vỡ bất biến đối tượng xem đối tượng đối tượng next Nguyễn Thị Minh Tuyền 25 Đặc tả hình thức ... alarmTime != currentTime; để loại bỏ alias Nguyễn Thị Minh Tuyền Đặc tả hình thức v Các trường sử dụng mức đặc tả: trường ghost model Nguyễn Thị Minh Tuyền Đặc tả hình thức Trường Ghost v Đôi thuận...v Aliasing Nguyễn Thị Minh Tuyền Đặc tả hình thức Aliasing v Aliasing nguồn gốc rắc rối phức tạp v Lớp ArrayTimer minh họa cho điều Nguyễn Thị Minh Tuyền Đặc tả hình thức Ví dụ ArrayTimer... Nguyễn Thị Minh Tuyền 17 Đặc tả hình thức v Bất biến (invariant) Nguyễn Thị Minh Tuyền 18 Đặc tả hình thức Bất biến v Bất biến – gọi bất biến lớp – khái niệm phổ biến hữu ích v Trong chương

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