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# - 9

12 10 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 12
Dung lượng 468,59 KB

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

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# Danh sách các đối tượng xử lý: STT 1 2 3 Tên PreConditionCheck PostConditionCheck InvariantCheck Lớp/Kiểu bool bool bool Ý 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 4 BasePreConditionCheck bool PreCondition của những lớp dẫn xuất hay không. Xác định có sử dụng 5 BasePostConditionCheck bool PostCondition của những lớp dẫn xuất hay không. Xác định có sử dụng Invariant 6 BaseInvariantCheck...

Trang 1

Danh sách các đối tượng xử lý:

1 PreConditionCheck bool Xác định có sử dụng

PreCondition hay không

2 PostConditionCheck bool Xác định có sử dụng

PostCondition hay không

3 InvariantCheck bool Xác định có sử dụng Invariant

hay không

4 BasePreConditionCheck bool

Xác định có sử dụng PreCondition của những lớp dẫn xuất hay không

5 BasePostConditionCheck bool

Xác định có sử dụng PostCondition của những lớp dẫn xuất hay không

6 BaseInvariantCheck bool

Xác định có sử dụng Invariant của những lớp dẫn xuất hay không

Danh sách các biến cố :

1 Form Load

Hiển thị màn hình Configuration cho phép người dùng enable hoặc disable chức năng kiểm tra của PreCondition, PostCondition, Invariant

2 btnOK Click Lưu những thông số đã chọn trên màn hình và

thoát khỏi màn hình

3 btnClose Click Thoát khỏi màn hình

Trang 2

16.2.2.2 Lớp Connect

Hình 16-4: Lớp Connect

Danh sách các biến thành phần:

1 projectInfo ProjectInfo Lưu trữ thông tin của Project hiện

hành

Danh sách các biến cố:

1 Command Exec

RightClick vào màn hình soạn thảo code, xuất hiện pop-up menu Click vào command này, màn hình Configuration hiển thị cho phép người dùng enable hoặc disable chức năng kiểm tra của PreCondition,

PostCondition, Invariant

2 Project BuildBegin

Bắt đầu chạy chương trình:

¾ Lưu thông tin của project hiện hành: thông tin của các phương thức trong các lớp (tên phương thức, precondition, postcondition) và Invariant của mỗi lớp trong project

¾ Đổi tên tất cả các phương thức có liên

Trang 3

¾ Lưu thông tin về contract của những lớp dẫn xuất cho lớp kế thừa

¾ Phát sinh source code để kiểm tra những Assertion

3 Project BuildDone Trả source code về như cũ

16.2.2.3 Lớp ProjectInfo

Hình 16-5: Lớp ProjectInfo

Danh sách biến thành phần:

1 classInfo ClassInfo[]

Mảng các đối tượng ClassInfo, mỗi đối tượng lưu trữ thông tin một lớp của project

2 NumFile int Số file trong project này

Trang 4

Danh sách hàm thành phần:

lưu vào biến NumFile

2 ChangeAllFuncName

Duyệt qua từng lớp, gọi phương thức đổi tên hàm của mỗi lớp đó

3 SaveAssertionOfBase

Classes

Duyệt qua từng lớp, gọi phương thức lưu thông tin về assertion của những lớp dẫn xuất của từng lớp đó

4 GenerateCode

Duyệt qua từng lớp, gọi phương thức thêm vào phần code kiểm tra Assertion của từng lớp

đó

5 ReturnOriginalCode

Duyệt qua từng lớp, gọi phương thức trả code về như cũ của từng lớp đó

Trang 5

16.2.2.4 Lớp ClassInfo

Hình 16-6: Lớp ClassInfo

Danh sách biến thành phần:

1 functionInfo FunctionInfo[]

Mảng các đối tượng FunctionInfo, mỗi đối tượng lưu trữ thông tin một hàm của lớp

2 NumFunc int Số hàm trong class này

3 Invariant Assertion

Đối tượng lớp Assertion để lưu trữ thông tin về

Invariant của lớp

4 BaseInvariant Assertion[]

Mảng đối tượng lớp Assertion để lưu trữ thông tin về Invariant của những

Trang 6

lớp dẫn xuất

5 FileName string Tên file chứa lớp

Mỗi file chỉ được chứa 1 lớp

7 BaseClassName string[] Mảng tên các lớp dẫn xuất

Đối tượng lớp Extra, dùng

để gọi những hàm riêng, không thuộc trách nhiệm của những lớp chính

Danh sách hàm thành phần:

vào biến NumFunc

2 GetClassName

Phân tích code để lấy tên của lớp, lưu vào

ClassName

3 GetBaseClassesName

Phân tích code để lấy tên của những lớp dẫn xuất của lớp này, lưu vào BaseClassName

4 SaveAssertionOfBase

Class

ClassInfo []

Lưu Invarian, PreCondition, PostCondition của những lớp dẫn xuất

Trang 7

5 SaveInvariantInfo

Lưu thông tin Invariant của lớp vào biến

Invariant

6 ChangeFuncName

Duyệt qua từng hàm trong lớp, lưu thông tin của từng hàm (tên hàm, PreCondition,

PostCondition), sau đó đổi tên hàm

7 GenerateCode

Tìm vị trí thích hợp trong code, gọi hàm

CodeGenerated để phát sinh code vào đó

8 CodeGenerated string

Duyệt qua từng hàm, gọi phương thức phát sinh code của từng hàm tương ứng, trả ra chuỗi code đã được phát sinh

9 ReturnOriginalCode

Xoá phần code phát sinh

và điều chỉnh tên hàm về như cũ

Trang 8

16.2.2.5 Lớp FunctionInfo

Hình 16-7: Lớp FunctionInfo

Danh sách biến thành phần:

1 PreCondition Assertion Đối tượng lớp Assertion để lưu trữ

thông tin về PreCondition của hàm

2 PostCondition Assertion Đối tượng lớp Assertion để lưu trữ

thông tin về PostCondition của hàm

3 FunctionName string Biến lưu tên hàm

4 BasePreCondition Assertion[]

Mảng đối tượng lớp Assertion để lưu trữ thông tin về PreCondition của những lớp dẫn xuất

5 BasePreCondition Assertion[]

Mảng đối tượng lớp Assertion để lưu trữ thông tin về PostCondition của những lớp dẫn xuất

6 Extra Extra

Đối tượng lớp Extra, dùng để gọi những hàm riêng, không thuộc trách

Trang 9

Danh sách hàm thành phần:

1 ChangeName

Đổi tên hàm theo dạng

@origin_[Tên cũ]

2 SaveContractsInfo

Lưu thông tin PreCondition và PostCondition của hàm vào biến PreCondition và PostCondition

Phân tích một mệnh đề của Assertion để lấy

ra biến và kiểu dữ liệu

dùng cho những mệnh đề

có từ khoá OLD

4 GetVarHaveOLD

Keyword Assertion string[][]

Với mỗi mệnh đề của một đối tượng Assertion, gọi hàm GetVar để lấy biến và kiểu

dữ liệu

Chỉ làm việc với những mệnh đề

có từ khoá OLD

5 GenerateCode

Dùng những tên hàm đã lưu, phát sinh ra những hàm mới Những hàm này sẽ gọi lại

Trang 10

những hàm gốc (đã bị đổi tên) cùng với code kiểm tra những PreCondition, PostCondition và Invariant của hàm

16.2.2.6 Lớp Assertion

Hình 16-8: Lớp Assertion

Danh sách biến thành phần:

1 Routine string

Lưu tên thủ tục(tên hàm) chứa Assertion này

Giá trị rỗng đối với Invariant

2 ConditionFull string[] Lưu trữ toàn bộ mệnh

Trang 11

3 Condition string Lưu trữ toàn bộ mệnh

đề của Assertion

Khác ConditionFull

ở chỗ không lưu kiểu dữ liệu của biến có từ khoá OLD

4 Message string[] Lưu những Message đi

kèm với mỗi Condition

5 Extra Extra

Đối tượng lớp Extra, dùng để gọi những hàm riêng, không thuộc trách nhiệm của những lớp chính

Danh sách hàm thành phần:

1 GenerateAssertion

Code

string FuncName, string Type string

Dựa vào FuncName và Type (Precondition, PostCodition, Invariant, BasePreCondition, BasePostCondition, BaseInvariant) để phát sinh hàm kiểm tra Assertion

2 GenerateCode

string FuncName, string Type, string[][] OLDVar

Phát sinh trong hàm FuncName những dòng code kiểm tra gọi đến những hàm kiểm tra Assertion đã tạo ra bằng

Trang 12

GenerateAssertionCode OLDVar là mảng chứa những biến có từ khoá OLD của PostCondition

và kiểu dữ liệu tương ứng để phát sinh code kiểm tra đối với những biến này

3 GenerateAssertion

CodeBasePre

Assertion ass, string FuncName, string Type

string

Dựa vào FuncName và Type (Precondition, PostCodition, Invariant, BasePreCondition, BasePostCondition, BaseInvariant) để phát sinh hàm kiểm tra Assertion

Hàm này tương tự hàm GenerateAssertionCode nhưng chỉ dùng trong trường hợp lớp dẫn xuất

có PreCondition, lúc này cần truyền tham số kiểu Assertion cho hàm

4 GenerateCode_Ba

sePre

string FuncName, Assertion[]

BasePreCondition

Chức năng giống hàm GenerateCode nhưng hỉ dùng trong trường hợp lớp dẫn xuất có chứa PreCondition, vì trường

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

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

TÀI LIỆU LIÊN QUAN

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

w