Bài giảng Đặc tả hình thức: Chương 9 cung cấp cho người học các kiến thức: Từ mô hình đến cài đặt, design by contract (DBC), ý tưởng cơ bản, ngôn ngữ đặc tả hay ngôn ngữ lập trình, công cụ hỗ trợ,...
LOGO Đặc tả hình thức Design by contract Nguyễn Thị Minh Tuyền Nguyễn Thị Minh Tuyền Từ mơ hình đến cài đặt v Alloy phương tiện để thiết kế hệ thống diễn giải thuộc tính v Ta cần thiết kế hệ thống để cải thiện chất lượng việc cài đặt v Làm để chuyển đổi thông tin thiết kế thành mã nguồn? § Thơng tin tĩnh ( multiplicity, invariant ) § Thông tin thao tác (điều kiện trước, điều kiện sau, frame condition, ) Nguyễn Thị Minh Tuyền Đặc tả hình thức Design by contract (DBC) v Là phương pháp trọng vào việc mơ tả xác ngữ nghĩa interface § khơng cú pháp, ví dụ signature § mà cịn hành vi, ví dụ hiệu ứng việc triệu gọi phương thức v Được hỗ trợ cơng cụ § cho phép thuộc tính ngữ nghĩa thiết kế (mơ hình) chuyển tải thành mã nguồn § hỗ trợ số hình thức thẩm định thuộc tính Nguyễn Thị Minh Tuyền Đặc tả hình thức Ý tưởng v Phần mềm xem § hệ thống component giao tiếp với § tất tương tác dựa vào ràng buộc (contract) v Ràng buộc có tính hai chiều § hai phần ràng buộc lẫn Nguyễn Thị Minh Tuyền Đặc tả hình thức Ràng buộc v Hai phần ràng buộc: § Supplier thực tác vụ § Client u cầu tác vụ phải thực v Mỗi phần § có obligation § nhận số benefit v Ràng buộc đặc tả obligation benefit Nguyễn Thị Minh Tuyền Đặc tả hình thức Air travel Client(Hành khách) § Obligation § Obligation • Check in 30 phút trước máy bay cất cánh • Ít kiện hành lý • Trả tin vộ Đ Benefit ã n ớch Nguyn Th Minh Tuyền Supplier(Hãng hàng khơng) • Đưa hành khách đến ớch Đ Benefit ã Khụng cn i cỏc hnh khỏch trễ • Khơng cần thiết phải lưu trữ số lượng hành lý • Nhận tiền Đặc tả hình thức /*@ requires x >= 0.0; @ ensures JMLDouble.approximatelyEqualTo(x, @ \result * \result, eps); @*/ public static double sqrt(double x) { … } Obligation Benefit Client Chuyển số không âm x Lấy xấp xỉ bậc hai x Supplier Tính tốn trả bậc hai số Giả sử tham số đầu vào không âm Nguyễn Thị Minh Tuyền Đặc tả hình thức Ràng buộc v Đặc tả phải làm § ràng buộc cài đặt độc lập v Có thể áp dụng cho phần mềm sử dụng § § § § Điều kiện trước Điều kiện sau Frame condition Bất biến Nguyễn Thị Minh Tuyền Đặc tả hình thức Ví dụ Class Flight { /*@ requires time < this.takeoff – 30 && l.number < && p in this.ticketed ensures \result = this.destination @*/ Destination takeFlight(Person p, Luggage l) {…} } Nguyễn Thị Minh Tuyền Đặc tả hình thức Ngơn ngữ đặc tả hay ngơn ngữ lập trình v Tại khơng phải hai? v Phương pháp tinh chỉnh § § § § § Thay phát triển signature Phát triển đặc tả ràng buộc Phân tích tính quán client-supplier Thêm vào chi tiết cài đặt Kiểm tra mã nguồn thỏa mãn ràng buộc v Tiến trình tự nhiên từ thiết mã nguồn Nguyễn Thị Minh Tuyền 10 Đặc tả hình thức Ví dụ Class Mystack { private Object[] elems; private int top, size; public public public public public MyStack (int s) { … } void push (Object obj) { … } Object pop() { } boolean isEmpty() { } boolean isFull() { } } Nguyễn Thị Minh Tuyền 11 Đặc tả hình thức /*@ invariant top >= -1 && top < size; @*/ Class Mystack { private Object[] elems; private int top, size; … } Nguyễn Thị Minh Tuyền 12 Đặc tả hình thức Class Mystack { private Object[] elems; private int top, size; /*@ requires s > 0; ensures size == s && elems != null && top = -1; @*/ public MyStack (int s) { … } … } Nguyễn Thị Minh Tuyền 13 Đặc tả hình thức Class Mystack { private Object[] elems; private int top, size; /*@ requires !isFull() && obj != null; ensures top == \old(top) + && elems[top] == obj;@*/ public void push (Object obj) { … } … public boolean isFull() { } } Nguyễn Thị Minh Tuyền 14 Đặc tả hình thức Class Mystack { private Object[] elems; private int top, size; /*@ requires !isEmpty(); ensures top == \old(top) - && \result == elems[\old(top)];@*/ public Object pop() { … } … public boolean isEmpty() { } } Nguyễn Thị Minh Tuyền 15 Đặc tả hình thức Class Mystack { private Object[] elems; private int top, size; … /*@ ensures \result top == -1; @*/ public boolean isEmpty() { } } Nguyễn Thị Minh Tuyền 16 Đặc tả hình thức Class Mystack { private Object[] elems; private int top, size; … /*@ ensures \result top == size – 1; @*/ public boolean isFull() { } } Nguyễn Thị Minh Tuyền 17 Đặc tả hình thức Ví dụ import java.util.Vector; public interface Company { public Vector getEmployees(); public Vector getRooms(); public void hire(Employee e); public void move(Employee e, Room r); public boolean roomsAvailable(); } public interface Employee{ public boolean hasOffice(); } Nguyễn Thị Minh Tuyền 18 Đặc tả hình thức import java.util.Vector; public interface Company { public Vector getEmployees(); public Vector getRooms(); public boolean roomsAvailable(); /* Contract for hire(Employee e) */ /*@ requires e != null; requires !getEmployees().contains(e); // not employ twice requires !e.hasOffice(); // does not own an office somewhere else requires roomsAvailable(); // there must be an office left ensures getEmployees().contains(e); // added to list of employees ensures getRooms().contains(e.getOffice()); // assign one of our offices ensures e.hasOffice(); // office assigned @*/ public void hire(Employee e); … } Nguyễn Thị Minh Tuyền 19 Đặc tả hình thức Cơng cụ hỗ trợ v Jtest(Jcontract) § Sản phẩm thương mại v iContract § Phần mềm miễn phí, cần nhiều cơng cụ hỗ trợ v JML § dự án nghiên cứu § có vài cơng cụ hỗ trợ miễn phí v Nguyễn Thị Minh Tuyền 20 Đặc tả hình thức Design by Contract môn học v Tập trung vào Java sử dụng § JML đặc tả § ESC/Java cơng cụ kiểm tra Nguyễn Thị Minh Tuyền 21 Đặc tả hình thức LOGO ... phí v Nguyễn Thị Minh Tuyền 20 Đặc tả hình thức Design by Contract môn học v Tập trung vào Java sử dụng § JML đặc tả § ESC/Java cơng cụ kiểm tra Nguyễn Thị Minh Tuyền 21 Đặc tả hình thức... } } Nguyễn Thị Minh Tuyền 11 Đặc tả hình thức /*@ invariant top >= -1 && top < size; @*/ Class Mystack { private Object[] elems; private int top, size; … } Nguyễn Thị Minh Tuyền 12 Đặc tả hình. .. Nguyễn Thị Minh Tuyền 15 Đặc tả hình thức Class Mystack { private Object[] elems; private int top, size; … /*@ ensures esult top == -1 ; @*/ public boolean isEmpty() { } } Nguyễn Thị Minh