Tải bản đầy đủ

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









Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
97
Danh sách các đối tượng xử lý:
STT Tên Lớp/Kiểu Ý nghĩa
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ố :
STT Thể hiện Biến cố Xử lý
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.









Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
98
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:
STT Tên Kiểu/Lớp Ý nghĩa
1 projectInfo ProjectInfo
Lưu trữ thông tin của Project hiện
hành.

Danh sách các biến cố:
STT Thể hiện Biến cố Xử lý
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
quan đến contract.








Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
99
¾ 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:
STT Tên Kiểu/Lớp Ý nghĩa
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.









Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
100
Danh sách hàm thành phần:
STT Tên Tham số Kết quả Xử lý
1 FileCount
Đếm số file của project,
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 đó.









Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
101
16.2.2.4 Lớp ClassInfo

Hình 16-6: Lớp ClassInfo

Danh sách biến thành phần:
STT Tên Kiểu/Lớp Ý nghĩa Ghi chú
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









Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
102
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
6 ClassName string Tên lớp.
7 BaseClassName string[] Mảng tên các lớp dẫn xuất.
8 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:
STT Tên Tham số Kết quả Xử lý
1 FuncCount
Đếm số hàm của lớp, lưu
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.








Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
103

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ũ.










Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
104
16.2.2.5 Lớp FunctionInfo

Hình 16-7: Lớp FunctionInfo

Danh sách biến thành phần:
STT Tên Kiểu/Lớp Ý nghĩa
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
nhiệm của những lớp chính.








Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
105
Danh sách hàm thành phần:
STT Tên Tham số Kết quả Xử lý Ghi chú
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.

3 GetVar string string[]
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









Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
106
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:
STT Tên Kiểu/Lớp Ý nghĩa Ghi chú
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
đề của Assertion.









Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
107
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:
STT Tên Tham số
Kết
quả
Xử lý
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








Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C#
108
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
hợp này code phát sinh

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×