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...
Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# Danh sách đối tượng xử lý: STT Tên Lớp/Kiểu PreConditionCheck bool PostConditionCheck bool InvariantCheck 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 BasePreConditionCheck bool PreCondition lớp dẫn xuất hay khơng Xác định có sử dụng BasePostConditionCheck bool PostCondition lớp dẫn xuất hay khơng Xác định có sử dụng Invariant BaseInvariantCheck bool lớp dẫn xuất hay không Danh sách biến cố : STT Thể Biến cố Xử lý Hiển thị hình Configuration cho phép Form Load người dùng enable disable chức kiểm tra PreCondition, PostCondition, Invariant btnOK Click btnClose Click Lưu thơng số chọn hình khỏi hình Thốt khỏi hình 97 Tìm hiểu cơng nghệ Design By Contract Xây dựng cơng cụ hỗ trợ cho C# 16.2.2.2 Lớp Connect Hình 16-4: Lớp Connect Danh sách biến thành phần: STT Tên Kiểu/Lớp projectInfo ProjectInfo Ý nghĩa Lưu trữ thông tin Project hành Danh sách biến cố: STT Thể Biến cố Xử lý RightClick vào hình soạn thảo code, xuất pop-up menu Click vào command Command Exec này, hình Configuration hiển thị cho phép người dùng enable disable chức kiểm tra PreCondition, PostCondition, Invariant Bắt đầu chạy chương trình: ¾ Lưu thông tin project hành: thông tin phương thức Project BuildBegin lớp (tên phương thức, precondition, postcondition) Invariant lớp project ¾ Đổi tên tất phương thức có liên quan đến contract 98 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# ¾ Lưu thơng tin contract lớp dẫn xuất cho lớp kế thừa ¾ Phát sinh source code để kiểm tra Assertion Project 16.2.2.3 BuildDone Trả source code cũ 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 Mảng đối tượng ClassInfo, classInfo ClassInfo[] đối tượng lưu trữ thông tin lớp project NumFile int Số file project 99 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# Danh sách hàm thành phần: STT Tên FileCount Tham số Kết Xử lý Đếm số file project, lưu vào biến NumFile Duyệt qua lớp, gọi ChangeAllFuncName phương thức đổi tên hàm lớp Duyệt qua lớp, gọi phương thức lưu thông SaveAssertionOfBase tin assertion Classes lớp dẫn xuất lớp Duyệt qua lớp, gọi phương thức thêm vào GenerateCode phần code kiểm tra Assertion lớp Duyệt qua lớp, gọi ReturnOriginalCode phương thức trả code cũ lớp 100 Tìm hiểu cơng nghệ Design By Contract Xây dựng cơng cụ hỗ trợ cho C# 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 Mảng đối tượng functionInfo FunctionInfo[] FunctionInfo, đối tượng lưu trữ thông tin hàm lớp NumFunc int Số hàm class Đối tượng lớp Assertion để Invariant Assertion lưu trữ thông tin Invariant lớp Mảng đối tượng lớp BaseInvariant Assertion[] Assertion để lưu trữ thông tin Invariant 101 Ghi Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# lớp dẫn xuất Mỗi file FileName string Tên file chứa lớp chứa lớp ClassName string BaseClassName string[] Tên lớp Mảng tên lớp dẫn xuất Đối tượng lớp Extra, dùng extra để gọi hàm riêng, Extra không thuộc trách nhiệm lớp Danh sách hàm thành phần: STT Tên FuncCount Tham số Kết Xử lý Đếm số hàm lớp, lưu vào biến NumFunc Phân tích code để lấy tên GetClassName lớp, lưu vào ClassName Phân tích code để lấy tên lớp dẫn xuất GetBaseClassesName lớp này, lưu vào BaseClassName Lưu Invarian, SaveAssertionOfBase ClassInfo Class PreCondition, PostCondition [] lớp dẫn xuất 102 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# Lưu thông tin Invariant SaveInvariantInfo lớp vào biến Invariant Duyệt qua hàm lớp, lưu thông tin hàm (tên hàm, ChangeFuncName PreCondition, PostCondition), sau đổi tên hàm Tìm vị trí thích hợp code, gọi hàm GenerateCode CodeGenerated để phát sinh code vào Duyệt qua hàm, gọi phương thức phát sinh CodeGenerated string code hàm tương ứng, trả chuỗi code phát sinh Xoá phần code phát sinh ReturnOriginalCode điều chỉnh tên hàm cũ 103 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# 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 PreCondition Assertion PostCondition Assertion FunctionName string Ý nghĩa Đối tượng lớp Assertion để lưu trữ thông tin PreCondition hàm Đối tượng lớp Assertion để lưu trữ thông tin PostCondition hàm Biến lưu tên hàm Mảng đối tượng lớp Assertion để lưu BasePreCondition Assertion[] trữ thông tin PreCondition lớp dẫn xuất Mảng đối tượng lớp Assertion để lưu BasePreCondition Assertion[] trữ thông tin PostCondition lớp dẫn xuất Đối tượng lớp Extra, dùng để gọi Extra Extra hàm riêng, khơng thuộc trách nhiệm lớp 104 Tìm hiểu công nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# Danh sách hàm thành phần: STT Tên Tham số Kết Xử lý Ghi Đổi tên hàm theo ChangeName dạng @origin_[Tên cũ] Lưu thông tin PreCondition PostCondition SaveContractsInfo hàm vào biến PreCondition PostCondition Phân tích mệnh đề GetVar string string[] Assertion để lấy biến kiểu liệu Với mệnh đề đối tượng GetVarHaveOLD Keyword Assertion string[][] Assertion, gọi hàm GetVar để lấy biến kiểu liệu Dùng tên hàm lưu, phát GenerateCode sinh hàm Những hàm gọi lại 105 dùng cho mệnh đề có từ khố OLD Chỉ làm việc với mệnh đề có từ khố OLD Tìm hiểu công nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# hàm gốc (đã bị đổi tên) với code kiểm tra PreCondition, PostCondition Invariant 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 Lưu tên thủ tục(tên Routine string hàm) chứa Assertion ConditionFull string[] Lưu trữ toàn mệnh đề Assertion 106 Ghi Giá trị rỗng Invariant Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# Khác ConditionFull Condition chỗ khơng lưu Lưu trữ tồn mệnh string kiểu liệu đề Assertion biến có từ khoá OLD Message Lưu Message string[] kèm với Condition Đối tượng lớp Extra, dùng để gọi Extra Extra hàm riêng, không thuộc trách nhiệm lớp Danh sách hàm thành phần: STT Tên Kết Tham số Xử lý Dựa vào FuncName Type (Precondition, PostCodition, Invariant, GenerateAssertion string FuncName, Code string Type string BasePreCondition, BasePostCondition, BaseInvariant) để phát sinh hàm kiểm tra Assertion Phát sinh hàm string FuncName, GenerateCode FuncName dòng string Type, code kiểm tra gọi đến string[][] OLDVar hàm kiểm tra Assertion tạo 107 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# GenerateAssertionCode OLDVar mảng chứa biến có từ khố OLD PostCondition kiểu liệu tương ứng để phát sinh code kiểm tra biến Dựa vào FuncName Type (Precondition, PostCodition, Invariant, BasePreCondition, BasePostCondition, BaseInvariant) để phát GenerateAssertion CodeBasePre Assertion ass, string FuncName, sinh hàm kiểm tra string Assertion Hàm tương tự hàm string Type GenerateAssertionCode dùng trường hợp lớp dẫn xuất có PreCondition, lúc cần truyền tham số kiểu Assertion cho hàm Chức giống hàm GenerateCode_Ba sePre string FuncName, Assertion[] BasePreCondition GenerateCode hỉ dùng trường hợp lớp dẫn xuất có chứa PreCondition, trường hợp code phát sinh 108 ... tên tất phương thức có liên quan đến contract 98 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# ¾ Lưu thơng tin contract lớp dẫn xuất cho lớp kế thừa ¾ Phát sinh source code... hàm Những hàm gọi lại 105 dùng cho mệnh đề có từ khố OLD Chỉ làm việc với mệnh đề có từ khố OLD Tìm hiểu công nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# hàm gốc (đã bị đổi tên) với... PreCondition, PostCondition [] lớp dẫn xuất 102 Tìm hiểu cơng nghệ Design By Contract Xây dựng công cụ hỗ trợ cho C# Lưu thông tin Invariant SaveInvariantInfo lớp vào biến Invariant Duyệt qua hàm lớp,