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

TÌM HIỂU CÔNG NGHỆ DESIGN BY CONTRACT VÀ XÂY DỰNG CÔNG CỤ HỖ TRỢ CHO C# - 8

12 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

Cấu trúc

  • LỜI NÓI ĐẦU

  • TỔNG QUAN

  • Giới thiệu về Eiffel

    • Giới thiệu

    • Design By Contract trong Eiffel

    • EiffelStudio

      • Giao diện

      • Các thao tác căn bản trên EiffelStudio

  • Một số cơ chế mang lại tính đáng tin cậy cho phần mềm

  • Tính đúng đắn của phần mềm

  • Biểu diễn một đặc tả

    • Những công thức của tính đúng đắn

    • Những điều kiện yếu và mạnh

  • Giới thiệu về sự xác nhận trong văn bản của phần mềm

  • Tiền điều kiện và hậu điều kiện

    • Lớp ngăn xếp

    • Tiền điều kiện

    • Hậu điều kiện

  • Giao ước cho tính đáng tin cậy của phần mềm

    • Quyền lợi và nghĩa vụ

      • Những quyền lợi

      • Những nghĩa vụ

    • Nghệ thuật của sự tin cậy phần mềm: kiểm tra ít hơn, bảo đảm

    • Những xác nhận không phải là một cơ chế kiểm tra đầu vào

  • Làm việc với những xác nhận

    • Lớp stack

    • Mệnh lệnh và yêu cầu

    • Lưu ý về những cấu trúc rỗng

    • Thiết kế tiền điều kiện: tolerant hay demanding?

    • Một môđun tolerant

  • Những điều kiện bất biến của lớp

    • Định nghĩa và ví dụ

    • Định dạng và các thuộc tính của điều kiện bất biến của lớp

    • Điều kiện bất biến thay đổi

    • Ai phải bảo quản điều kiện bất biến?

    • Vai trò của những điều kiện bất biến của lớp trong kỹ thuật

    • Những điều kiện bất biến và hợp đồng

  • Khi nào một lớp là đúng?

    • Tính đúng đắn của một lớp

    • Vai trò của những thủ tục khởi tạo

    • Xem lại về mảng

  • Kết nối với kiểu dữ liệu trừu tượng

    • So sánh đặc tính của lớp với những hàm ADT

    • Biểu diễn những tiên đề

    • Hàm trừu tượng

    • Cài đặt những điều kiện bất biến

  • Một chỉ thị xác nhận

  • Vòng lặp có điều kiện bất biến và điều kiện biến đổi

    • Vấn đề vòng lặp

    • Những vòng lặp đúng

    • Những thành phần của một vòng lặp đúng

    • Cú pháp của vòng lặp

  • Sử dụng những xác nhận

    • Những xác nhận như một công cụ để viết phần mềm chính xác

    • Sử dụng những xác nhận cho việc viết tài liệu: thể rút gọn c

  • Giới thiệu công cụ XC#

    • Giới thiệu

    • XC# hoạt động như thế nào

    • Khai báo các xác nhận

      • Tiền điều kiện

      • Hậu điều kiện

      • Một số thuộc tính mà XC# qui ước sẵn

    • Ví dụ lớp Stack

  • Kết quả thực nghiệm: công cụ DCS

    • Nguyên lý làm việc

    • Thiết kế

      • Tổng thể

      • Chi tiết các lớp đối tượng

        • Màn hình Configuration

        • Lớp Connect

        • Lớp ProjectInfo

        • Lớp ClassInfo

        • Lớp FunctionInfo

        • Lớp Assertion

        • Lớp Extra

          • KẾT LUẬN

            • HƯỚNG PHÁT TRIỂN

            • TÀI LIỆU THAM KHẢO

            • Ý KIẾN CỦA GIÁO VIÊN PHẢN BIỆN

Nội dung

Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# nhỏ hơn một giá trị cho trước Yêu cầu đối tượng nhập vào LessThanOrEqual hoặc trả về phải nhỏ hơn hoặc cho trước Yêu cầu số thành phần của đối tượng nhập MaxCount vào hoặc trả về phải nhỏ hơn hoặc bằng một giá trị cho trước Quy ước chiều dài tối đa của MaxLength một chuỗi là một giá trị cho trước Yêu cầu số thành phần của đối tượng nhập MinCount vào hoặc trả về phải lớn hơn hoặc bằng một giá trị...

Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# nhỏ giá trị cho trước Yêu cầu đối tượng nhập vào LessThanOrEqual Void trả phải SetData([LessThanOrEqual (5)] nhỏ int value) {} giá trị //value =0 (count khong am) public int capacity;// inv: count=0 // [Requires ("size >= 0")] [Ensures ("representation != null && capacity == size && IsEmpty()")] public MyStack([GreaterThanOrEqual (0)]int size) { 86 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# capacity = size; representation = new Object[capacity]; } [Requires ("!IsFull()")] [Ensures ("!IsEmpty() && (int)representation[count-1] == obj")] public void put(int obj) { representation[count++] = obj; } [Requires ("!IsEmpty()")] [Ensures ("!IsFull()")] public void remove() { count; } [Ensures ("result == (count == capacity)")] public bool IsFull() { return count == capacity; } [Ensures ("result == (count == 0)")] public bool IsEmpty() { return count == 0; } 87 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# [Requires ("position >= && position < count")] [Ensures ("current == position")] public void SetCurrentItem(int position) { current = position; } [Ensures ("current == count - 1")] public void ResetCurrentItem() { current = count - 1; } [Requires ("!IsEmpty()")] [Ensures ("result != null && current >= 0")] public Object nextItem() { return representation[current ]; } Chương 16: Kết thực nghiệm: công cụ DCS 16.1 Nguyên lý làm việc DCS Add-In môi trường Visual C#, nguyên lý làm việc DCS bắt kiện OnBuildBegin project, thực bước sau: ƒ Duyệt qua tất lớp project (mỗi lớp ứng với file *.cs, trừ file AssemblyInfo.cs) lưu thông tin lớp (tên lớp, tên file, tên lớp dẫn xuất) Trong lớp, chương trình thực bước sau: − Kiểm tra xem lớp có chứa xác nhận (Invariant, PreCondition, PostCondition) hay không Lưu thông tin Invariant (các mệnh đề thông báo 88 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# tương ứng Invariant) có, sau đó, duyệt qua hàm lớp, hàm, thực bước sau: + Kiểm tra hàm có PreCondition PostCondition hay khơng Nếu có, lưu lại thông tin hàm Thông tin lưu trữ gồm có: Tên hàm, PreCondition PostCondition (lưu mệnh đề thông báo) + Đổi tên hàm, lớp có Invariant, tất tên hàm đổi, khơng có Invariant, hàm có PreCondition PostCondition đổi tên Tên hàm đổi sau: Tên hàm = @origin_[Tên hàm cũ] − Dựa vào thông tin lưu trữ được, bổ sung thông tin xác nhận lớp dẫn xuất cho lớp Việc lưu trữ thực cách duyệt qua tất lớp Trong đó, lớp: + Duyệt qua tất tất lớp dẫn xuất lớp (đã lưu trữ), lưu thông tin Invariant lớp dẫn xuất + Duyệt qua hàm, hàm hàm cài đặt lại lưu trữ thông tin Assertion lớp dẫn xuất ƒ Phát sinh source code bổ sung để kiểm tra xác nhận cho lớp Trong lớp, source code thêm vào phía source code Mỗi hàm phát sinh source code tương ứng Với hàm, dựa vào thông tin lưu trữ, source code phát sinh sau: [Khai báo hàm theo tên hàm cũ] { Gọi hàm kiểm tra PreCondition Gọi hàm kiểm tra Invariant Gọi hàm gốc (hàm đổi tên @origin_*) Gọi hàm kiểm tra PostCondition Gọi hàm kiểm tra Invariant } 89 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# [Hàm kiểm tra PreCondition] { Các câu lệnh kiểm tra mệnh đề xuất thông báo tương ứng PreCondition } [Hàm kiểm tra Invariant] { Các câu lệnh kiểm tra mệnh đề xuất thông báo tương ứng Invariant } [Hàm kiểm tra PostCondition] { Các câu lệnh kiểm tra mệnh đề xuất thông báo tương ứng PostCondition } Ví dụ: Hàm PreCondition, PostCondition, Invariant: /* @#$Require: !IsFull() # Stack Full @#$Ensure: !IsEmpty() (int)representation[count-1] == obj count == OLD_count + $int # New count = Old count + */ public void put(int obj) 90 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# { representation[count++] = obj; } /* @#$Invariant: count >= count = */ 91 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# Code phát sinh: public void put(int obj) { int OLD_count = count; if(put_PreCondition(obj)!="") throw new Exception("PreCondition Violated at [MyStack - public void put(int obj)]:" +put_PreCondition(obj)); if(put_Invariant(obj)!="") throw new Exception("Invariant Violated at [MyStack]:" +put_Invariant(obj)); @origin_put(obj); if(put_PostCondition(obj,OLD_count)!="") throw new Exception("PostCondition Violated at [MyStack - public void put(int obj)]:" +put_PostCondition(obj,OLD_count)); if(put_Invariant(obj)!="") throw new Exception("Invariant Violated at [MyStack]:" +put_Invariant(obj)); } private string put_PreCondition(int obj) { if (!(!IsFull() )) return " Stack Full"; return ""; } 92 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# private string put_Invariant(int obj) { if (!(count >= 0)) return " "; if (!(count = 0)) return " "; return ""; } private string put_PostCondition(int obj,int OLD_count) { if (!(!IsEmpty())) return " "; if (!((int)representation[count-1] == obj)) return " "; if (!(count == OLD_count + )) return " New count = Old count + 1"; return ""; } Project biên dịch theo source code Bắt kiện OnBuildDone project, thực việc trả lại source code cũ cho project 93 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# 16.2 Thiết kế 16.2.1 Tổng thể Hình 16-1: Sơ đồ thiết kế tổng thể Danh sách lớp đối tượng: STT Tên Ý nghĩa Màn hình cho phép người dùng enable disable Configuration chức kiểm tra PreCondition, PostCondition, Invariant Connect Lớp chương trình, lớp quản lý thao tác Add-In với project 94 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# Lớp đối tượng để lưu trữ thông tin project ProjectInfo ClassInfo FunctionInfo Assertion Extra 16.2.2 16.2.2.1 hành Lớp đối tượng để lưu trữ thông tin lớp project Lớp đối tượng để lưu trữ thông tin phương thức class Lớp đối tượng để lưu trữ thông tin Assertion (precondition, postcondition, invariant) Lớp đối tượng chứa hàm riêng, không thuộc trách nhiệm lớp Chi tiết lớp đối tượng Màn hình Configuration Hình 16-2: Màn hình Configuration 95 Tìm hiểu cơng nghệ Design By Contract Xây dựng cơng cụ hỗ trợ cho C# Hình 16-3: Chi tiết hình Configuration Danh sách đối tượng thể hiện: STT Tên Loại / Kiểu chkPreCondition checkbox chkPostCondition checkbox chkInvariant checkbox chkBasePre checkbox chkBasePost checkbox chkBaseInv checkbox btnOK Button btnClose Button Ý nghĩa Xác định có sử dụng PreCondition hay khơng Xác định có sử dụng PostCondition hay khơng Xác định có sử dụng Invariant hay khơng Xác định có sử dụng PreCondition lớp dẫn xuất hay không Xác định có sử dụng PostCondition lớp dẫn xuất hay khơng Xác định có sử dụng Invariant lớp dẫn xuất hay không Đồng ý với thông số chọn khỏi hình Thốt khỏi hình 96 .. .Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# chuỗi //str.Length >= 10 giá trị cho trước Yêu cầu đối tượng nhập vào Void SetData([NotEqual (5)]... (count == 0)")] public bool IsEmpty() { return count == 0; } 87 Tìm hiểu công nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# [Requires ("position >= && position < count")] [Ensures ("current... PostCondition) hay khơng Lưu thông tin Invariant (các mệnh đề thông báo 88 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# tương ứng Invariant) có, sau đó, duyệt qua hàm lớp, hàm, thực

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

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w