Khóa luận Tìm hiểu công nghệ Design By Contract và xây dựng công cụ hỗ trợ cho C#

TRƯỜNG ĐẠI HC KHOA HC TNHIÊN  
KHOA CÔNG NGHTHÔNG TIN  
BMÔN CÔNG NGHPHN MM  
LÊ TRN HOÀNG NGUYÊN – 0112103  
NGUYN BÁCH KHOA - 0112140  
TÌM HIU CÔNG NGHỆ  
DESIGN BY CONTRACT VÀ XÂY DNG  
CÔNG CHTRCHO C#  
KHÓA LUN CNHÂN TIN HC  
GIÁO VIÊN HƯỚNG DN  
Th.s: NGUYN ĐÔNG HÀ  
NIÊN KHÓA 2001 – 2005  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
LI CM ƠN  
Đầu tiên, xin chân thành cm ơn cô Nguyn Đông Hà đã trc tiếp hướng  
dn cũng như cung cp tài liu để chúng em có thtiếp cn và tìm hiu vcông  
nghDesign By Contract hu ích này.  
Bên cnh đó, xin đồng gi li cm ơn đến các thy cô ca bmôn Công  
nghPhn mm Nâng cao đã to điu kin cho chúng em dành nhiu thi gian  
nghiên cu đề tài này.  
Cui cùng, qulà mt điu thiếu sót nếu không kể đến sự ủng hto ln về  
mt tinh thn cũng như sgiúp đỡ tn tình ca gia đình, bn bè, đặc bit là bn  
Nguyn Lương Ngc Minh và Nguyn Ngc Khánh.  
Xin chân thành cm ơn tt c, nhng người đã góp phn giúp cho lun văn  
này được hoàn thành.  
Thành phHChí Minh,  
Tháng 7, 2005.  
2
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
MC LC  
LI NÓI ĐẦU  
7
8
TNG QUAN  
Chương 1: Gii thiu vEiffel  
9
1.1.  
1.2.  
1.3.  
Gii thiu  
9
Design By Contract trong Eiffel  
EiffelStudio  
10  
10  
11  
11  
1.3.1. Giao din  
1.3.2. Các thao tác căn bn trên EiffelStudio  
Chương 2: Mt scơ chế mang li tính đáng tin cy cho phn mm  
Chương 3: Tính đúng đắn ca phn mm  
17  
18  
20  
Chương 4: Biu din mt đặc tả  
4.1.  
4.2.  
Nhng công thc ca tính đúng đắn  
Nhng điu kin yếu và mnh  
20  
22  
24  
25  
25  
Chương 5: Gii thiu vsxác nhn trong văn bn ca phn mm  
Chương 6: Tin điu kin và hu điu kin  
6.1.  
6.2.  
6.3.  
Lp ngăn xếp  
Tin điu kin  
Hu điu kin  
28  
28  
Chương 7: Giao ước cho tính đáng tin cy ca phn mm  
29  
7.1.  
Quyn li và nghĩa vụ  
7.1.1. Nhng quyn li  
7.1.2. Nhng nghĩa vụ  
29  
30  
30  
7.2.  
Nghthut ca stin cy phn mm: kim tra ít hơn, bo đảm nhiu  
hơn  
7.3.  
31  
Nhng xác nhn không phi là mt cơ chế kim tra đầu vào  
33  
3
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Chương 8: Làm vic vi nhng xác nhn  
35  
35  
8.1.  
8.2.  
8.3.  
8.4.  
8.5.  
Lp stack  
Mnh lnh và yêu cu  
38  
41  
42  
43  
Lưu ý vnhng cu trúc rng  
Thiết kế tin điu kin: tolerant hay demanding?  
Mt môđun tolerant  
Chương 9: Nhng điu kin bt biến ca lp  
47  
9.1.  
9.2.  
9.3.  
9.4.  
9.5.  
Định nghĩa và ví dụ  
48  
49  
51  
52  
Định dng và các thuc tính ca điu kin bt biến ca lp  
Điu kin bt biến thay đổi  
Ai phi bo qun điu kin bt biến?  
Vai trò ca nhng điu kin bt biến ca lp trong kthut xây dng  
phn mm 53  
9.6.  
Nhng điu kin bt biến và hp đồng  
54  
56  
Chương 10: Khi nào mt lp là đúng?  
10.1.  
10.2.  
10.3.  
Tính đúng đắn ca mt lp  
Vai trò ca nhng thtc khi to  
Xem li vmng  
57  
60  
60  
Chương 11: Kết ni vi kiu dliu tru tượng  
62  
11.1.  
11.2.  
11.3.  
11.4.  
So sánh đặc tính ca lp vi nhng hàm ADT  
Biu din nhng tiên đề  
63  
64  
65  
66  
Hàm tru tượng  
Cài đặt nhng điu kin bt biến  
Chương 12: Mt chthxác nhn  
68  
71  
71  
Chương 13: Vòng lp có điu kin bt biến và điu kin biến đổi  
13.1.  
13.2.  
13.3.  
13.4.  
Vn đề vòng lp  
Nhng vòng lp đúng  
71  
72  
74  
Nhng thành phn ca mt vòng lp đúng  
Cú pháp ca vòng lp  
4
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Chương 14: Sdng nhng xác nhn  
77  
77  
14.1.  
14.2.  
Nhng xác nhn như mt công cụ để viết phn mm chính xác  
Sdng nhng xác nhn cho vic viết tài liu: thrút gn ca mt lp  
đối tượng  
78  
Chương 15: Gii thiu công cXC#  
81  
81  
15.1.  
15.2.  
15.3.  
Gii thiu  
XC# hot động như thế nào  
Khai báo các xác nhn  
82  
82  
82  
83  
83  
86  
15.3.1. Tin điu kin  
15.3.2. Hu điu kin  
15.3.3. Mt sthuc tính mà XC# qui ước sn  
Ví dlp Stack  
15.4.  
Chương 16: Kết quthc nghim: công cDCS  
88  
16.1.  
16.2.  
Nguyên lý làm vic  
Thiết kế  
88  
94  
16.2.1. Tng thể  
94  
16.2.2. Chi tiết các lp đối tượng  
16.2.2.1 Màn hình Configuration  
16.2.2.2 Lp Connect  
16.2.2.3 Lp ProjectInfo  
16.2.2.4 Lp ClassInfo  
16.2.2.5 Lp FunctionInfo  
16.2.2.6 Lp Assertion  
16.2.2.7 Lp Extra  
95  
95  
98  
99  
101  
104  
106  
109  
111  
112  
113  
114  
KT LUN  
HƯỚNG PHÁT TRIN  
TÀI LIU THAM KHO  
Ý KIN CA GIÁO VIÊN PHN BIN  
5
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
BNG CÁC HÌNH VẼ  
Hình 1-1: Giao din EiffelStudio---------------------------------------------------------- 11  
Hình 1-2: Thông báo khi li xy ra tin điu kin ------------------------------------ 14  
Hình 1-3: Code gây ra li tin điu kin ----------------------------------------------- 14  
Hình 1-4: Thông báo khi li xy ra hu điu kin ------------------------------------ 15  
Hình 1-5: Code gây ra li hu điu kin ----------------------------------------------- 15  
Hình 1-6: Thông báo khi li xy ra ở điu kin bt biến------------------------------- 16  
Hình 1-7: Code gây ra li ở điu kin bt biến ------------------------------------------ 16  
Hình 7-1: Sdng blc các module ---------------------------------------------------- 34  
Hình 8-1: Stack được cài đặt bng mng------------------------------------------------- 35  
Hình 9-1: Thi gian tn ti ca mt đối tượng ------------------------------------------ 50  
Hình 10-1: Thi gian tn ti ca mt đối tượng----------------------------------------- 58  
Hình 11-1: Sbiến đổi gia nhng đối tượng tru tượng và cth------------------ 65  
Hình 11-2: Hai cài đặt ca cùng mt đối tượng tru tượng---------------------------- 67  
Hình 13-1: Mt vòng lp tính toán -------------------------------------------------------- 73  
Hình 16-1: Sơ đồ thiết kế tng th-------------------------------------------------------- 94  
Hình 16-2: Màn hình Configuration ------------------------------------------------------ 95  
Hình 16-3: Chi tiết màn hình Configuration --------------------------------------------- 96  
Hình 16-4: Lp Connect-------------------------------------------------------------------- 98  
Hình 16-5: Lp ProjectInfo ---------------------------------------------------------------- 99  
Hình 16-6: Lp ClassInfo -----------------------------------------------------------------101  
Hình 16-7: Lp FunctionInfo -------------------------------------------------------------104  
Hình 16-8: Lp Assertion -----------------------------------------------------------------106  
Hình 16-9: Lp Extra ----------------------------------------------------------------------109  
6
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
LI NÓI ĐẦU  
Trong ngành công nghthông tin, thay đổi là mt tt yếu din ra hết sc  
thường xuyên mà ta phi chp nhn và cgng điu chnh nó. Phn mm này ra đời  
thay thế phn mm khác là mt điu vô cùng bình thường, dhiu. Ti sao li như  
thế? Bi vì người sdng luôn mong mun có được mt phn mm hu ích. Tuy  
nhiên, dù phn mm có thể đáp ng nhng nhu cu ca người sdng trong thi  
gian hin ti thì cũng không thể đảm bo nó sluôn được ưa chung. Để có thtn  
ti lâu dài, phn mm phi tht scht lượng. Điu này đồng nghĩa vi vic nó phi  
không ngng được cp nht. Mà ta cũng biết, phn mm càng đúng đắn, đáng tin  
cy và rõ ràng bao nhiêu thì công vic nâng cp và phát trin nó càng ddàng by  
nhiêu. Do đó, có thnói, mt trong nhng tiêu chí ca ngành công nghphn mm  
mà bt kthi đại nào, bt ksn phm phn mm nào cũng đều hướng đến là tính  
đáng tin cy và đúng đắn. Xut phát tnhu cu y, công nghDesign By Contract  
đã ra đời nhm giúp đảm bo cho tính đáng tin cy ca phn mm. Đó cũng chính là  
lý do mà chúng em đã chn đề tài này.  
Vi mc đích tìm hiu công nghDesign By Contract mt cách khá kỹ  
lưỡng, chúng em đã tiếp cn nó bng các tài liu lý thuyết cũng như qua các công cụ  
có khnăng htrDesign By Contract cho các ngôn nglp trình hin đại. Không  
dng ở đó, chúng em còn xây dng mt công chtrcông nghnày cho C# vi  
tên gi là DCS (Design By Contract for C Sharp).  
Đối tượng và phm vi nghiên cu: ý tưởng chính ca Design By Contract là  
lp mt “hp đồng” gia mt lp đối tượng (supplier) và nhng khách hàng (client)  
ca nó, tc là nhng lp đối tượng khác gi đến các phương thc ca lp này.  
Nhng client này phi bo đảm mt số điu kin nht định khi gi mt phương thc  
ca mt supplier gi là tin điu kin (precondition); đáp li, sau khi thc thi thủ  
tc, supplier phi đáp ng mt số điu kin tương ng gi là hu điu kin  
(postcondition). Nhng điu kin ca hp đồng sẽ được kim tra bi trình biên dch,  
và bt csvi phm nào ca phn mm cũng sẽ được phát hin.  
7
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
TNG QUAN  
Các hướng nghiên cu đã có ca mt stác gi:  
-
Bertrand Meyer, tác gica công nghDesign By Contract và ngôn  
ngEiffel, ngôn nghtrhoàn toàn Design By Contract.  
Vn đề tn ti: Bi vì đây là ngôn nglp trình do chính tác gica Design  
By Contract to ra nên htrrt đầy đủ và rõ ràng cho công nghnày, nhưng vn  
đề ở đây là ngôn ngEiffel còn xa lvi người lp trình dù đã ra đời gn 10 năm,  
được ít người sdng ngôn ngnày để phát trin phn mm.  
-
ResolveCorp và eXtensible C# (XC#), mt Add-In htrDesign By  
Contract cho C#. Đây là mt công crt tt, htrợ đầy đủ Design By Contract cho  
C#. Tuy nhiên, công cnày chỉ được sdng min phí mt vài DLL và source code  
không m.  
-
Man Machine Systems và JMSAssert, công chtrDesign By  
Contract cho Java. Đây cũng là mt công ctt. Tuy nhiên, JMSAssert chhtrợ  
biên dch command line và sdng cho JDK t1.2 trxung, không thtích hp  
vào các môi trường htrlp trình Java như JBuilder, Sun One Studio hay Eclipse.  
8
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Chương 1: Gii thiu vEiffel  
1.1. Gii thiu  
Đầu tiên, chúng ta slàm quen vi phn mm Eiffel trước khi tìm hiu về  
công nghDesign By Contract. Vì sao li như vy? Vì tt cví ddùng trong lun  
văn đều sdng cu trúc ca ngôn ngEiffel. Còn nhng khái nim nào mi được  
đề cp trong chương này sẽ được gii thích khơn trong các phn sau khi gii thiu  
vDesign By Contract  
Qua hơn 10 năm tn ti, Eiffel hin nay được coi là mt trong nhng môi  
trường phát trin phn mm tt nht. Trước sc mnh to ln ca Eiffel trong lĩnh  
vc phn mm thì dù mun dù không, bn cũng nên biết qua vnó. Vy thc cht  
Eiffel là gì?  
Eiffel là khung làm vic trgiúp cho vic suy nghĩ, thiết kế và thc thi phn  
mm hướng đối tượng.  
Eiffel là mt phương pháp, mt ngôn nghtrmô tmt cách hiu quvà  
phát trin nhng hthng có cht lượng.  
Eiffel là ngôn ngthiết kế  
Vai trò ca Eiffel còn hơn mt ngôn nglp trình. Nhng gì nó đem li  
không chgii hn trong ngcnh lp trình mà tri rng khp công vic phát trin  
phn mm: phân tích, lên mô hình, viết đặc t, thiết kế kiến trúc, thc hin, bo trì,  
làm tài liu.  
Eiffel là mt phương pháp.  
Eiffel dn đường các nhà phân tích và nhng nhà phát trin xuyên sut tiến  
trình xây dng mt phn mm.  
Phương pháp Eiffel tp trung cvyếu tsn phm và cht lượng, vi  
nhng đim nhn: tính đáng tin cy, tính tái sdng, tính mrng, tính khdng,  
tính bn vng.  
9
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
1.2. Design By Contract trong Eiffel  
Eiffel htrrt nhiu tính năng: tiếp cn hướng đối tượng hoàn thin, khả  
năng giao tiếp bên ngoài (có thgiao tiếp vi các ngôn ngC, C++, Java,…), htrợ  
vòng đời phn mm bao gm vic phân tích, thiết kế, thc thi và bo trì, htrợ  
Design By Contract, viết xác nhn, qun lý ngoi l…  
Design By Contract hu như là vn đề luôn được nhc đến khi đề cp về  
Eiffel. Trong Eiffel, mi thành phn ca hthng đều có thể được thc hin theo  
mt đặc ttiên quyết vcác thuc tính tru tượng ca nó, liên quan đến nhng thao  
tác ni ti và nhng giao tác ca nó vi các thành phn khác.  
Eiffel thc thi mt cách trc tiếp ý tưởng Design By Contract, mt phương  
pháp làm nâng cao tính đáng tin cy ca phn mm, cung cp mt nn tng cho vic  
đặc t, làm tài liu và kim nghim phn mm, cũng như vic qun lý các ngoi lệ  
và cách sdng kế tha thích hp.  
1.3. EiffelStudio  
EiffelStudio là trình biên dch ca Eiffel. Ngoài ra, nó còn là mt IDE rt  
mnh vi nhng tính năng độc nht như: công ccông nghệ đảo tích hp, bmáy  
phân tích mã ngun định lượng.  
Tùy vào nhu cu ca mình, bn có thsdng EiffelStudio như mt môi  
trường lp trình hoc chnhư mt công cgiúp mô hình hóa, xây dng các mô thệ  
thng bao gm các lp tru tượng mà không thc thi bng công cDiagram hoc  
kết hp c2 khnăng để đạt đến hiu qucao nht.  
10  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
1.3.1. Giao din  
Hình 1-1: Giao din EiffelStudio  
Giao din làm vic ca EiffelStudio có 4 khung chính: Features, Class,  
Clusters, Context. Để thun tin cho vic lp trình, các bn có thể đóng bt các  
khung ca sổ đi. Tt ccác khung ca snày đều có thể đóng li ngai trClass.  
1.3.2. Các thao tác căn bn trên EiffelStudio  
Khi động chương trình: Programs --> EiffelStudio Version --> EiffelStudio  
Chn "Create a new project" > OK.  
Class view là khung làm vic chính ca bn. Sau khi lp trình xong, bn có  
thbiên dch và cho chy chương trình bng công cCompile (F7).  
Debug chương trình: F10, F11.  
Lưu project: File > Save.  
11  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Biu din Design By Contract trong Eiffel:  
Precondition:  
require  
boolean expressions  
Postcondition:  
ensure  
boolean expressions  
Class invariant:  
invariant  
boolean expressions  
ChthCheck:  
check  
assertion_clause1  
assertion_clause2  
assertion_clausen  
end  
Loop invariant, loop variant:  
from  
initialization  
until  
exit  
invariant  
inv  
variant  
12  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
var  
loop  
body  
end  
Demo: Project stack  
STACK_CLASS: lp stack chính, cha các định nghĩa các thao tác trên  
stack.  
make: Hàm khi to ca stack.  
item: hàm ly phn ttrên cùng stack.  
get(t): hàm ly phn ttht  
empty: kim tra stack có rng.  
full: kim tra stack có đầy  
put(x): thêm phn tx vào stack  
remove: bphn ttrên cùng stack  
TEST_CLASS: lp chính(main), lp gi các hàm ca lp STACK_CLASS.  
Ta sthvài trường hp cho thy khnăng bt li ca Eiffel.  
Lưu ý: Sau mi trường hp hãy sa li code như ban đầu ri mi thtiếp  
trường hp khác.  
Mtp tin test_class.e.  
Chy thchương trình (F5).  
Chương trình khi to stack gm 8 phn tt0 đến 7 và xut stack. Stack  
được xut ra màn hình.  
TH1: Li xy ra tin điu kin  
Sa n:=8 thành n:=-8.  
Ti dòng if (n >= 0) then nhn thp phím Ctrl-K.  
Ti dòng end --end if , nhn thp phím Ctrl-K.  
Recompile (Shift-F7) và cho chy li chương trình (F5).  
13  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Xut hin thông báo ngoi lsau:  
Hình 1-2: Thông báo khi li xy ra tin điu kin  
và con trdng li câu lnh  
Hình 1-3: Code gây ra li tin điu kin  
Nguyên nhân:  
Khi bn gi thtc a.make(n), do trước đó khi to n là mt sâm (=-8),  
client không đảm bo contract, nên trong thtc make ca lp STACK_CLASS,  
thtc make kim tra không tha tin điu kin positive_capacity: n>=0, nó  
dng li và thông báo cho người lp trình biết.  
TH2: Li xy ra hu điu kin  
Trong lp TEST_CLASS, ti thtc make, sa như sau:  
14  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Capacity := n  
capacity := n-1  
Recompile (Shift-F7) và cho chy li chương trình (F5).  
Xut hin thông báo ngoi lsau:  
Hình 1-4: Thông báo khi li xy ra hu điu kin  
và con trdng li câu lnh  
Hình 1-5: Code gây ra li hu điu kin  
Nguyên nhân:  
Trước đó, ta gán capacity := n-1, hu điu kin li yêu cu capacity = n.  
TH3: Li xy ra ở điu kin bt biến.  
Trong lp TEST_CLASS, ti thtc make, thêm vào dòng sau:  
count:=-1  
15  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Chn menu Project > Project Setting… Bdu check ensure. Đánh du  
check invariant. Hành động này nhm bqua chế độ kim li hu điu kin. Ở  
đây chmun minh ha cho vic phát hin li ở điu kin bt biến.  
Recompile (Shift-F7) và cho chy li chương trình (F5).  
Xut hin thông báo ngoi lsau:  
Hình 1-6: Thông báo khi li xy ra ở điu kin bt biến  
và con trdng li câu lnh  
Hình 1-7: Code gây ra li ở điu kin bt biến  
Nguyên nhân:  
Trước đó, ta gán count := -1, điu kin bt biến yêu cu count>=0.  
16  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Chương 2: Mt scơ chế mang li tính đáng tin cy  
cho phn mm  
Trước hết, phi nói rng kthut định nghĩa thuc tính ca mt đối tượng  
gn như là có liên quan vi cu trúc ca nhng hthng phn mm. Nhng kiến  
trúc đơn gin, riêng bit và có khnăng mrng sgiúp chúng ta đảm bo tính  
đáng tin cy ca phn mm ddàng hơn so vi nhng cu trúc vn vo. Đặc bit, cố  
gng gii hn sliên quan gia các môđun vi nhau đến mc ti thiu nht slà  
tiêu đim cho vic tho lun vtính riêng bit. Điu này giúp ngăn chn nhng ri  
ro thông thường ca tính đáng tin cy, ví dnhư nhng biến toàn cc và vic định  
nghĩa nhng cơ chế liên lc bgii hn, client và nhng mi quan hkế tha. Nói  
đến cht lượng phn mm thì không thbqua tính đáng tin cy. Chúng ta cgng  
gicho nhng cu trúc càng đơn gin càng tt. Tuy rng điu này vn chưa đủ đảm  
bo cho tính đáng tin cy ca phn mm, nhưng dù sao, nó cũng là mt điu kin  
cn thiết.  
Mt điu kin khác cũng cn thiết na là làm cho phn mm ca chúng ta ti  
ưu và dễ đọc. Văn bn phn mm không nhng được viết mt ln mà nó còn phi  
được đọc đi đọc li và viết đi viết li nhiu ln. Strong sáng và tính đơn gin ca  
các câu chú thích là nhng yêu cu cơ bn để nâng cao tính đáng tin cy ca phn  
mm.  
Mt vũ khí khác cũng rt cn thiết là vic qun lý bnhmt cách tự động,  
đặc bit là bthu gom rác (garbage collection). Bt khthng nào có khi to và  
thao tác vi cu trúc dliu động mà li thc hin thu hi bnhbng tay (tc là  
do người lp trình điu khin) hoc bnhkhông hề được thu hi thì tht là nguy  
him. Bthu gom rác không hlà mt sxa xmà nó là thành phn thiết yếu để mở  
rng tính đáng tin cy cho bt kmt môi trường hướng đối tượng nào.  
Mt kthut khác na mà cũng có thlà thiết yếu mà có liên quan đến  
genericity là static typing. Nếu không có nhng lut như thế thì chúng ta skhông  
kim soát được nhng li xy ra lúc run-time do quá trình gõ code gây nên.  
17  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Tóm li, tt cnhng kthut này cung cp mt nn tng cn thiết để ta có  
cái nhìn gn hơn vmt hthng phn mm đúng đắn và bn vng.  
Chương 3: Tính đúng đắn ca phn mm  
Giscó mt người đưa cho bn mt chương trình C vi 300 000 dòng lnh  
và hi rng nó có đúng không. Tôi nghĩ rng rt có khnăng bn thy khó và thm  
chí là không thtrli được. Tuy nhiên, nếu là mt cvn viên, bn hãy trli  
“Không” và sau đó tính mt giá tht cao vì rt có thbn đúng.  
Tht s, để có thtrli câu hi trên mt cách đúng nghĩa, bn không nhng  
cn phi ly chương trình đó mà còn phi ly cli din gii vnhng gì mà  
chương trình đó làm được hay ta gi chúng là nhng đặc tca chương trình.  
Có nhng chú thích ging nhau cũng chng sao, dĩ nhiên, khi đó ta không để  
ý đến kích thước ca chương trình. Ví d, câu lnh x := y+1 không đúng cũng  
không sai. Vì đúng hay sai chcó ý nghĩa khi xét trong quan hca nó vi mt li  
chú dn, tc là cái mà người ta mong đợi có được sau khi thc hin câu lnh hay ít  
ra thì cũng là sự ảnh hưởng đến trng thái ca các biến trong chương trình. Do đó,  
câu lnh trên sẽ đúng vi đặc t:  
Điu này đảm bo cho x và y có giá trkhác nhau”  
nhưng nó ssai vi đặc t:  
Điu này đảm bo rng x có giá trâm”  
(giscác thc thcó kiu snguyên. Như vy, x có thcó kết qukhông âm sau  
khi gán. Điu đó tùy thuc vào giá trca y).  
Ví dnày nhm minh ha cho khái nim “tính đúng đắn” được trình bày bên  
dưới:  
18  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Tính đúng đắn ca phn mm  
Tính đúng đắn là mt khái nim quan hệ  
Mt hthng phn mm hay mt thành phn phn mm thì không đúng cũng  
không sai. Nó chỉ đúng hay sai khi có liên quan vi mt đặc tnào đó. Nói mt  
cách chính xác, ta không tho lun nhng thành phn phn mm có đúng hay  
không, mà là tho lun chúng có phù hp vi nhng đặc tca chúng hay không.  
Do đó, thut ng“tính đúng đắn” không được dùng cho nhng thành phn phn  
mm, mà nó được dùng cho tng cp, mi cp bao gm mt thành phn phn mm  
và mt đặc t.  
Trong phn này, ta sbiết cách biu din nhng đặc tthông qua mt xác  
nhn (assertion) để giúp ta xác nhn tính đúng đắn ca phn mm. Điu này cho  
thy kết quca vic viết nhng đặc tlà mt bước đầu tiên quan trng để đảm bo  
rng phn mm tht sự đúng. Vic viết nhng xác nhn cùng lúc hoc đúng ra là  
trước khi viết phn mm smang li nhng li ích tuyt vi như sau:  
Sn xut được phn mm đúng vi khi bt đầu vì nó được thiết kế  
đúng. Ích li này đã được Harlan D.Mills (mt trong nhng người khi đầu đề  
xướng vic lp trình có cu trúc “Structured Programming”) trình bày vào năm  
1970 trong quyn sách “How to write correct programs and know it” (có nghĩa là  
“Làm thế nào để viết được nhng chương trình đúng và biết được nó đúng”). “Biết”  
ở đây có nghĩa là trang bcho phn mm nhng đối skhi ta viết nó nhm hin thị  
tính đúng đắn ca nó.  
cùng ca nó.  
được shiu biết tt hơn vvn đề và nhng cách gii quyết cui  
Vic thc hin các tài liu cho phn mm ddàng. Chúng ta sthy  
được phn sau rng nhng xác nhn sẽ đóng mt vai trò trung tâm trong vic  
hướng đối tượng đến gn tài liu.  
19  
Tìm hiu công nghDesign By Contract và Xây dng công chtrcho C#  
Cung cp mt căn bn cho vic kim tra và debug hthng.  
Trong nhng phn còn li chúng ta stìm hiu nhng ng dng này.  
Trong C, C++ và mt sngôn ngkhác (dưới schỉ đạo ca Algol W), ta có  
thviết mt câu lnh đóng vai trò mt xác nhn để kim tra mt tình trng nào đó  
được giữ ở mt trng thái nào đó như mong mun hay không khi thc thi phn  
mm, và chương trình skhông được thc thi nếu nó không tho. Mc dù như thế  
cũng có thlàm được nhng gì mà ta mun, nhưng vic làm vy chtượng trưng  
cho mt phn nhca vic sdng nhng li xác nhn trong phương pháp hướng  
đối tượng. Do đó, nếu ging như nhiu người phát trin phn mm khác thì bn sẽ  
quen vi nhng câu lnh như thế nhưng li không thy được bc tranh toàn cnh.  
Hu hết tt cnhng khái nim được bàn ở đây đều smi lvi bn.  
Chương 4: Biu din mt đặc tả  
Chúng ta có thtrli nhn xét trước vi hình nh mt ký hiu toán hc đơn  
gin được mượn tlý thuyết ca vic kim tra mt chương trình hình thc và nhng  
lý do quý giá để lp lun vtính đúng đắn ca các thành phn phn mm.  
4.1. Nhng công thc ca tính đúng đắn  
GisA thc hin mt vài thao tác (ví dA là mt câu lnh hay thân ca  
mt thtc). Mt công thc ca tính đúng đắn là mt cách biu din theo dng sau:  
{P} A {Q}  
Ý nghĩa ca công thc tính đúng đắn {P} A {Q}  
Bt kthi hành nào ca A, bt đầu trng thái P thì skết thúc vi trng thái Q  
Nhng công thc ca tính đúng đắn (còn được gi là bba Hoare) là mt ký  
hiu toán hc, không phi là mt khái nim lp trình; chúng không phi là mt trong  
20  
Tải về để xem bản đầy đủ
pdf 114 trang yennguyen 29/03/2022 7140
Bạn đang xem 20 trang mẫu của tài liệu "Khóa luận Tìm hiểu công nghệ Design By Contract và xây dựng công cụ hỗ trợ cho C#", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfkhoa_luan_tim_hieu_cong_nghe_design_by_contract_va_xay_dung.pdf