Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)Xây dựng công cụ kiểm thử tự động cho các chương trình C (Đồ án tốt nghiệp)
Trang 1I H C QU C GIA HÀ N I
I H C CÔNG NGH
Ngành: Công ngh thông tin
HÀ N I 2015
Trang 2I H C QU C GIA HÀ N I
I H C CÔNG NGH
Ngành: Công Ngh Thông Tin
(ký tên)
HÀ N I - 2015
Trang 3L I C
VIETNAM NATIONAL UNIVERSITY, HANOI
UNIVERSITY OF ENGINEERING AND TECHNOLOGY
Nguyen Duc Anh
A METHOD AND TOOL SUPPORTING FOR AUTOMATED TESTING OF C PROGRAMS
THE BS THESIS Major: Information Technology
Supervisor: Dr Pham Ngoc Hung
HA NOI - 2015
Trang 4L I C
u tiên, tôi xin g i l chân thành t i Ti n s Ph m Ng c Hùng gi ng viên b môn Công Ngh Ph n M m ng d n t n tình, t m tôitrong su n t t nghi p Quãng th c th ng dgiúp tôi h c h c nhi u kinh nghi m v u, g giao ti Th y còn truy n cho tôi ng n l a yêu nghiên c u khoa h c, ni t qua nh c s ng và d y tôi cách
t qua nh Tôi c m th y t hào và may m n khi là m t sinh viê c
th ng d n trong nh i h c
Ngoài ra, tôi xin g i l i n t p th l tôi nhi t hoàn thành khóa lu t hi u qu cao nh t Các b tôi b ng
ng, b ng l i nói m i khi tôi g , th t b i B i
i v i gian tuy t v i nh t và không th nào quên
Ti p theo, tôi xin g i l i c n các th y cô gi i h c Công Ngh - i h c Qu c Gia Hà N i nh n tâm truy t nh ng ki n th c quý báu làm n n t tôi ti p t c công ngh thông tin
ích cho xã h i, giúp tôi có m t m t a v ng ch yên tâm h c hành trong su t bao
Tôi xin g i l i chân thành t i cha, m ng viên và c
i khi tôi g thách
Hà N i, ngày 03
Sinh viên
Nguy c Anh
Trang 5TÓM T T
Ngày nay, ngôn ng C là m t trong nh ng ngôn ng l p trình ph bi phát tri n ph n
m c bi t là các ph n m m h th ng M t trong nh ng t ki m th hi u qu c
s d ng là sinh ca ki m th trong ki m th h p tr ng u khi n ti t ki m chi phí ki m
th ph n m m, quá trình sinh ca ki m th c t ng hóa h t m c có th
các công c ki m th hi n nay ch t p trung vào th c thi các ca ki m th n sinh
ca ki m th t ng M t vài công c ki m th sinh ca ki m th t ng ca ki m
ki m th vòng l p (n u hàm C có vòng l p) C th u tiên, mã ngu n c phân tích
cùng, h ràng bu c c gi i sinh ca ki m th b ng cách k t h p t sinh ng u nhiên và
t n d ng th m nh các công c SMT-Solver K t qu th c nghi m cho th y kh n
c l i khá t t trong hàm C v i s b ca ki m th t i thi u mà v m b n cao
c a mã ngu n Ngoài ra, th i gian sinh ca ki m th c c i thi và gi c nhi u hràng bu c khác nhau vì k t h t sinh ng u nhiên và s d ng công c SMT-Solver
T khóa: Ki m th t ng, hàm C, th u khi n, ca ki m th , Symbolic Execution, SMT-Solver
Trang 6Nowadays, C programming language has been known as one of the most popular programming languages to develope applications, especially system applications Because of high demand in quality, testing phase is performed quite rigorously and strictly As a result, the cost of the testing phase can be up to 40% - 60% the total cost of application development process
Test case generation in white-box testing is an effective technique and used widely to ensure the high quality of applications To reduce the cost of the testing phase, the test case generation process should be automated as much as possible However, some testing tools focus
on executing test cases and output the testing report instead of generating test cases automatically Other testing tools assist to generate test cases automatically but the number of test cases may be a lot or un-known which cause many difficult and challenging problems such as management, time limit, etc
The thesis proposes an approach how to generate test cases automatically for C Unitcontaining integer variables, float variables, array variables The proposed approach is based on white-box testing and implements in CFT4CUnit tool to demonstrate the effectiveness of the approach Firstly, source code is analysed to generate corresponding Control Flow Graph (CFG) Then I traverse the CFG to obtain the independent paths After that, paths containing loop is re-constructed to create some new paths used to test the loop Next, each path is analysed by using symbolic execution technique to generate corresponding constraints Finally, the process of solving the constraints is performed to find solution as fast as possible by combining random technique and SMT-Solvers The experimental result shows the effectiveness of the approach with the minimum number of test cases but ensures the high quality of source code
Keywords: automated testing, C Unit, control flow testing, test case, symbolic execution,
SMT-Solver
Trang 7ng nh ng nghiên c u v ki m th t ng cho hàm C c trình bày trong lu n án này là c c n t báo cáo khóa lu n t i
Hà N i, ngày 03 tháng
Sinh viên
Nguy c Anh
Trang 8M C L C
t v 1
T t ki m th h p tr u khi n 4
2.1 T t ki m th h p tr u khi n 4
2.2 Quy trình chung c a ki m th h p tr u khi ng 4
2.3 Quy trình chung c a ki m th h p tr u khi 6
2.3.1 Các tiêu chí ph ki m th 7
th u khi n 8
ng ki m th 9
t ki m th h p tr u khi ng 10
2.5 T m quan tr ng c a t ng hóa quy trình ki m th h p tr u khi n 11 m th t ng hàm C s d t ki m th h p tr ng u khi 12
3.1 T m th h p tr u khi 12
th u khi n t mã ngu n 13
3.3 Xây d ng t ng ki m th t th u khi n 16
3.3.1 Xây d ng t c l p 16
3.3.2 Xây d ng ki m th vòng l p 17
3.3.2.1 Ki m th a vòng l 18
3.3.2.2 Ki m th a hai vòng l p l ng nhau 19
3.4 Sinh t p d li u ki m th t t ng ki m th 20
3.4.1 Xây d ng h ràng bu c 20
3.4.2 Tìm nghi m th a mãn h ràng bu c 22
3.4.2.1 Gi i h s d t sinh ng u nhiên 22
Trang 93.4.2.2 Gi i h s d ng SMT-Solver 23
m c ng sinh ca ki m th 29
Th c nghi m 31
n h tr 31
4.1.1 Gi i thi u v n SMT-Solver SmtInterpol 31
4.1.2 Gi i thi u v n CDT 31
4.1.3 Gi i thi u v n Jeval 32
4.2 Gi i thi u công c ki m th t ng hàm C 32
4.2.1 T ng quan v công c CFT4CUnit 32
u vào công c 33
u ra công c 34
th u khi n 34
4.2.2.2 T ng ki m th 35
4.2.2.3 T p ca ki m th 36
4.2.2.4 Bi u th c chu n SMT-Lib 37
4.2.2.5 Ki m th vòng l 37
4.2.2.6 Ki m th vòng l p l ng nhau 38
4.2.3 Th c nghi m 39
4.2.4 Ý c nghi m 43
K t lu n 45
Trang 10DANH SÁCH B NG
B 26
B ng 2 So sánh CFT4CUnit, công c xu t trong [5] và PathCrawler 40
B ng 3 Ki m th vòng l d ng công c CFT4CUnit 40
B ng 4 Ki m th hai vòng l p l ng nhau hàm SelectionSort s d ng công c CFT4CUnit 42
DANH SÁCH KÝ HI U, CH VI T T T
CVC Cooperating Validity Checker
DIMACS Center for Discrete Mathematics and Theoretical Computer Science
SMT-Solver Satisfiability Modulo Theories Solver
SAT Boolean Satisfiability Problem
T-Solver Theory-specific Solvers
Trang 11DANH SÁCH HÌNH V
Hình 2.1 Quy trình chung c a ki m th h p tr u khi ng .5
Hình 2.2: Ví d m t lu t chèn mã ngu n trong DMS/SRT 6
Hình 2.3 Mã ngu n hàm triangle sau khi thêm kh i mã ngu n m i .6
Hình 2.4 Quy trình chung c a ki m th h p tr ng u khi 7
Hình 2.5: Các c u khi n ph bi n .9
Hình 3.1 Quy trình ki m th m xu t .12
Hình 3.2 Thu t toán sinh CFG t mã ngu n 13
Hình 3.3 Mã ngu n hàm average .14
Hình 3.4 CFG hàm average tiêu chu n ph câu l nh, ph nhánh .15
u ki n kép (a>=0 || ((b>=0 && c>=0) || b+c>=0) || a+b+c>=0) 16
Hình 3.6 Thu t toán sinh t c l p t CFG .17
Hình 3.7 Thu ng ki m th vòng l p 18
Hình 3.8 Thu ng ki m th vòng l p trong .19
Hình 3.9 Thu ng ki m th vòng l p ngoài .20
Hình 3.10 Ví d m t h ràng bu c .21
Hình 3.11 Thu t toán sinh h ràng bu c t ng ki m th 21
Hình 3.12 Quá trình rút g n câu l nh .22
Hình 3.13 Mô t u ra SMT-Solver .24
Hình 3.14 Ví d h ràng bu c tuân theo chu n SMT-Lib .25
Hình 3.15 Quá trình chuy n m t bi u th c trung t v chu n SMT-Lib .25
Hình 3.16 Thu t toán xây d ng bi u th c h u t 27
Hình 3.17 Thu t toán xây d ng cây bi u th c t bi u th c h u t 28
Hình 3.18 Thu t toán duy t cây bi u th c 29
Hình 4.1 Minh h a cây AST ng v i mã ngu n return x*3 32
Trang 12Hình 4.2 Giao di n công c xu t .33
Hình 4.3 Ví d u vào công c CFT4CUnit .33
th CFG tiêu chí ph câu l nh và ph nhánh .34
th CFG tiêu chí ph u ki n con 34
khi click vào m ng ki m th b t kì 35 Hình 4.7 T ng ki m th th a mãn ph câu l nh hàm foo .35
Hình 4.8 T ng ki m th th a mãn ph nhánh hàm foo 35
Hình 4.9 T ng ki m th th a mãn ph u ki n con hàm foo 36
Hình 4.10 T c l sinh t ng ki m th ph nhánh và ph câu l nh .36
Hình 4.11 Ca ki m th th t ng u nhiên và dùng SMT-Solver 36
Hình 4.12 H ràng bu c chu n SMT- ng v ng ki m th 37
Hình 4.13 Ki m th vòng l 38
Hình 4.14 Ki m th m ng ki m th ch a hai vòng l p l ng nhau trong hàm SelectionSort 38
Trang 13Ngày nay, ngôn ng C là m t trong nh ng ngôn ng l p trình ph bi phát tri n các h th ng nhúng nói riêng, các ph n m m h th ng nói chung và các ph n m m ng
d ng Các th ng kê trên githut1 và TIOBE2 cho th y ngôn ng C là m i ngôn
ng l p trình ph bi n nh t
Th c t , các ph n m c bi t là ph n m m h th ng yêu c u cao v ch t
i quá trình ki m th th c hi n kh t khe và nghiêm ng t Vì th , ki m th
h p tr c coi là m t an toàn và hi u qu nh m b tin c y cao c a
Trong b i c nh ngành công nghi p ph n m m hi n nay, ki m th h p tr ng c n
c t ng hóa h t m c có th [1] Nói chung, ki m th là m t quá trình r t t n th i gian, công s c và chi phí có th chi m 40% 60% t ng chi phí trong toàn b quá trình phát tri n ph n m m [2] Thêm n ph c t p mã ngu n c a các ph n m m ngày càng
n kh ng mã ngu n c n ki m th h p tr ng không ch
t nhi u Vì th , ki m th t ng là m t gi i pháp hi u qu nh m giúp
ki m th viên b t nhàm chán, gi m thi u th i gian, công s c và chi phí trong khi v n m
b o tin c y cao c a ph n m m Ngoài ra, ki m th t ng không ch
tài nguyên mà còn trong ki m th h i quy khi ph n m m c n s i ho c nâng c p
m th h p tr ng, ki m th viên không ch c n hi u rõ gi i thu t mà còn c n có các k n th c t t v ngôn ng l p trình vi t mã ngu n,
Trang 14tr ng t n th i gian và công s c nh t là khi mã ngu n c n ki m th ph c t p cao Vì v y, các t ki m th h p tr ng ch y c s d ng cho ki m th
Ki m th h p tr t ph bi n là ki m th h p tr ng u khi n
và ki m th h p tr ng dòng d li u Ki m th h p tr ng dòng d li u là t tìm ki m
l ng hay xu t hi n phép gán và s d ng các bi
m th h p tr ng u khi n t p trung ki m th n c a các gi i thu t s d i m t t ki m th u có th
m nh riêng và không th thay th c
t ph bi n trong ki m th h p tr ng u khi n là theo
ki m th u tiên, hay h ràng bu u tiên, quá trình ki m th không th ti p t c H n
ch th hai, s b ki m th i l n (ho c nh) do s ng hràng bu c ph c bi t v i vòng l p có bi n l p l n ho c s l n l p không
nh H n ch th ba, th i gian sinh ca ki m th i th c thi l i mã ngu n nhi u l ng ch y H n ch th , s ng h ràng bu c c n gi i khá l c bi t mã ngu n có vòng l p) ng h ràng bu c nên ch dùng thu t sinh ng u nhiên là không kh thi mà ph i s d ng thêm SMT-Solver Tuy các công
c này t n d ng th m nh SMT-Solver, t ng chi phí th i gian sinh ca ki m th v
so v i ki m th
Khóa lu n xu t cách sinh ca ki m th cho m t hàm C s d ng t ki m
th h p tr ng u khi n gi i quy t nh ng h n ch
ng chính c xu t là t p trung phân tích c u trúc mã ngu sinh ca
ki m th thay vì th c thi mã ngu n l p l i nhi u l n K t qu là th i gian sinh t p ca ki m
Trang 15thi u thay vì khá l n mà v m b n cao c a mã ngu n Ngoài ra, th i gian sinh m t ca ki m th t n d ng th m nh công c SMT-Solver Cu i cùng, b i vì có s k t h t sinh ng u nhiên và t n d ng th m nh công c SMT-Solver nên gi c nhi u d ng h ràng bu c khác nhau.
Ph n còn l i khóa lu n u tiên, 2 gi i thi u t ng quan và so sánh v t ki m th h p tr ng u khi n
và ng ng Ti p theo, xu t d a trên t ki m th h p tr ng
công c tri xu t và th c nghi m Cu i cùng,
tóm t t các k t qu c, k t lu n, nh ng h n ch ng nghiên c u phát tri n
Trang 16ph n này, khóa lu n trình bày các ki n th c t ng quan v ki m th h p tr ng dòng
u khi n g m hai t ki m th ng ng th so sánh v m c a t ng t
ng ch y Hình 2.1 trình bày quy trình chung c a ki m th ng Nhìn
c t này g c di n gi i theo th t
n mã ngu n m i vào mã ngu n c n ki m th
Ch n ng u nhiên m t t p giá tr u vào h p l làm ca ki m th u tiên
Th i b giá tr v c N u không th c thi
c, quay l c 2 sinh b giá tr khác
Tìm t p các câu l i b giá tr c 3 xây d ng
nh m i sao cho khác h ràng bu c hi n t i c l i, quay lsinh ca ki m th k ti p
Trang 17Hình 2.1 Quy trình chung c a ki m th h p tr ng u khi n theo ng.
c 1, quá trình chèn thêm kh i mã ngu n m i vào mã ngu n c n ki m th
c ti n hành m t cách t ng Công c DMS/SRT5 nh m
th c hi n pha này n mã ngu n thêm vào có ch
ho c ghi thông tin v quá trình th c thi ra t p, v.v u này, chúng tôi c n xây d ng các lu t chèn thêm mã ngu n m i vào mã ngu n c n ki m th
V i công c DMS/SRT, m i m t lu t b u v i t khóa rule t cho lu t T khóa rewrite to nêu cách bi n mã ngu n g c v n mã ngu n
m i Ki u d li u có th là expression ( ng v i bi u th c), statement ( ng v i câu l nh gán ho c kh i t o), type ( ng v i ki u d li u), identifier ( ng v i
bi n, tên hàm), v.v Hình 2.2 mô t m t lu t chèn thêm câu l u vào kh i l nh
u khi n r nhánh C th , bi n m ng visited u v trí câu l c b
5
http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html
Trang 18sung vào mã ngu u ngay sau m i kh i l u khi n r nhánh Hình 2.3
mã ngu n triangle sau khi áp d ng lu t
Hình 2.2: Ví d m t lu t chèn mã ngu n trong DMS/SRT.
Hình 2.3 Mã ngu n hàm triangle sau khi thêm kh i mã ngu n m i.
2.3 Quy trình chung c a ki m th h p tr ng u khi n ng
Trong ki m th mã ngu c th ng ch y sinh
ca ki m th Trong ki m th y ca ki m th ch th c hi n duy nh t m t
Trang 19l n v i t ng ca ki m th tính toán giá tr tr v m b o ca ki m th th c thi không
có v c t c trình bày Hình 2.4
th u khi n c xây d ng d a trên mã ngu n và tiêu chí ph ki m th c
ti p theo, t th u khi n chúng tôi xây d c t ng ki m th M i
l m quy u ki ng thi hành ho c là s k t h p c a chúng
Trang 20Tiêu chí ph ki m th c gi i thi u l u tiên vào 1963 trong t p chí hàng
Cho t i nay, nhi u tiêu chí ph ki m th
ra Khóa lu n s d ng ba tiêu chí ph ki m th ph bi ng mã ngu n
Sinh ca ki m th d a trên mã ngu n ph c t i sinh ca ki m
th d a trên th u khi n (Control Flow Graph CFG) CFG là m th có
ng mô t c u trúc lôgic c t cách tr m có
ng v i các câu l nh/nhóm câu l nh và các c nh là các u khi n
gi a các câu l nh/nhóm câu l u tiên c a CFG là tr u tiên c a hàm,
nh cu i cùng c a CFG là tr ng thái k t thúc c a hàm nh i n nh j thì câu l nh
nh j có th c th c thi sau khi th c hi n câu l ng nh i.
Trong ngôn ng C, các c u khi n trong CFG g m tu n t , r nhánh,
khi n r nhánh, do while, while do Ví d c th , v i kh i l u khi if (a
nh
Trang 21nh x lí: ng v i câu l nh gán, câu l nh kh i t o ho c câu l nh khai báo và không ph nh k t n i Các kh i l u khi a các lo i câu l nh này Ví d , kh i l for (i = 0; i < 10; i++) nh x lí g m
n i v i nhau N u c nh (v i ,v j ) (i j) là nhánh false, câu l nh v i c vi t ph
nh T c l p g m k PATH 1 , PATH 2 PATH k th a mãn: gi a
m i c c l p PATH i và PATH j (i j) không chung ít nh t m t c nh tr lên.
Tìm ki m t p ng ki m th c trung gian trong quá trình sinh t p ca ki m
th Hai v n t p ng ki m th r t quan tr ng g m:
c n u tìm ki c m t ca ki m th sao cho khi th ng
th ng ki m th c l ng ki m th g i là không th c
Trang 22Tính ph c t p mã ngu n M t mã ngu n g i là ph c t p n u ch a nhi u vòng l p
u vòng l p l ng nhau ho c nhi u vòng l p n i ti p nhau, c l n
ho c thu t toán ph c t p Mã ngu n càng ph c t p càng khi n quá trình tìm ki m
V s ca ki m th Nhìn chung, v i mã ngu n ch ch a các câu l nh r nhánh và
không ch a vòng l p, hai t ki m th nêu trên cho s b ca ki m th
V i mã ngu n ch a vòng l p, ki m th ng s d t ph nh hsinh ca ki m th k ti p nên s ca ki m th có th r t l n ho nh C
th ng h p s ca ki m th r t l n x y ra khi vòng l p có c n l p l n, ví d ,
kh i l u khi n for (int i = 0; i < 1000; i+ có s l n l p t n
ng h p s ca ki m th nh x y ra khi s l n l c bi t
vào hàm gi i quy t hai v này, m t vài công c ki m th
chèn thêm mã ngu nh s l n l p t a m i vòng l p ho c thêm yêu
c u th i gian ch y Tuy nhiên, nhìn chung s ca ki m th v n khá l n gây khó
n lí
th l p l i nhi u l n nên th i gian sinh ca ki m th M m chung là hai
t c gi i h ràng bu sinh ca ki m th m i Th i gian gi i h
Trang 23chi m t l trong t ng th i gian sinh ca ki m th Tuy nhiên, các công c
có kh i h c phát tri n khá m nh m và công b r ng rãi trong th i gian g nên s so sánh v th i gian gi i h có th b qua
l p duy nh t t i m t th ng h p có nhi u vòng l p, ch ng
h ng ki m th p l ng nhau thì quy trình ki m th ti n hành v i t ng vòng l p riêng và tìm cách phá v c u trúc l p các vòng l p còn l i
Chi phí v ngu n nhân l c cho pha ki m th khá t n kém Mu m b o ch t
ng ph n m c bi t v i d án l n) thì chi phí ngu n nhân l c càng cao Do
qu n lí kh ng ngu n nhân l c tr nên ph c t p và r c r i
Các th ng kê cho th y chi phí pha ki m th có th chi m t i 40%-60% t ng chi phí phát tri n d án ph n m m [2] Các ph n m m h th ng, ph n m m doanh nghi p, v.v i ch ng cao nên pha ki m th c chú tr ng và không th b qua a, m i khi ph n m c nâng c p thì quá trình ki m
th c ti n hành l i d n c
Trang 24ng hàm C
xu m th t ng hàm C s d t ki m
th ki m th h p tr ng u khi n theo ng xu t cách xây
d th u khi n CFG, sinh t c l t ki m th
n v u vào ch a vòng l c hai vòng l p l ng nhau t
SE c mô t m t cách chi ti t nêu cách xây d ng h ràng bu c t m ng thi hành
b t kì T ng quan v SMT-Solver t sinh ng u nhiên c trình bày gi i hràng bu c sinh ca ki m th
Trang 25-toán là m t tiêu chí ph ki m th và m a các bi n s nguyên,
s th c và bi n m u ra là t p ca ki m th th a mãn tiêu chí ph ki m th nêu trên
xu c mô t khái quát Hình 3.1 u tiên, mã ngu sinh CFG ng v i tiêu chí ph ki m th chúng tôi xây d ng t p
c l p t CFG nêu trên Ti p theo, quá trình phân tích t c lsinh t p ng ki m th th a mãn tiêu chí ph ki m th c ti n hành
ki m th n c a vòng l p, ng ki m th m c xây d ng b ng cách
ng ki m th ch a vòng l p Ti ng ki m th c phân tích s d hu t SE sinh ra h ràng bu c M i h ràng bu c gi i b ng cách
s d t sinh ng u nhiên ho c s d ng công c SMT-Solver N u s d ng công
c SMT-Solver, các h ràng bu c s c chuy i v d ng chu n SMT-Lib Sau khi
c ca ki m th , quá trình th c thi ca ki m th c ti l y giá tr tr v c a
mã ngu n (n m b o ca ki m th th c thi không l i
3.2 Sinh
Hình 3.2 Thu t toán sinh CFG t mã ngu n.
Trang 26Chi ti t thu th u khi n c a hàm C th a mãn m t tiêu chu n
ph ki m th c trình bày Hình 3.2 u vào thu t toán g c
n f và tiêu chí ph ki m th n t u ra thu th dòng
u khi n n graph u vào cùng m t hàm C, CFG ng v i tiêu chí ph câu
l nh và ph nhánh gi i tiêu chí ph u ki c
u tiên thu t toán, t p các kh i mã ngu n con c u thành nên f
trong bi n B (dòng 1) Ti p the th G c sinh ra th a mãn m th G
m t kh i mã ngu n con, các c nh mô t th t th c hi n cúa các kh i mã ngu n con trong
M t kh i mã ngu n con không c n phân tích ti p ch a mãn tiêu chu n
ph ki m th C th , v i tiêu chu n ph câu l nh và ph
câu l u ki n trong các kh i l u khi u ki n c a kh i
Trang 27l n u khi n có th do m u ki n ho c nhi u ki p thành N u phân tách ti u ki n kh i l u khi th u ki
các c nh là nhánh true/false thì sinh ra CFG th a mãn tiêu chu n ph u ki n con
Ví d c th , Hình 3.4 th ng v i hàm average trình bày Hình 3.3 th a mãn tiêu chí ph câu l nh và ph c
t p kh i mã ngu n con g m 4 kh i : kh i while, kh i if, l nh return và câu l nh khai báo
dòng 2 B n kh i này c liên k t v i nhau theo d ng danh sách liên k t Ti p t c, kh i
c phân tích ti u ki n kép (value[i]!=-2&&tcnt<2) và kh i l nh
khi th u ki n Kh i if kh i while L nh return, câu l nh khai
u ki n kép không c n phân tích ti i l nh trong while c phân tích ti p và quá trình này c l p l
Hình 3.4 CFG hàm average tiêu chu n ph câu l nh, ph nhánh.
value[i] != -2 && tcnt < 2int tcnt = vcnt = sum = i = 0
return -9 return sum/vcnt
sum += value[i]
vcnt++
i++
T
Trang 28b+c>=0 và a+b+c>=0 u ki n a>=0 và a+b+c>=0 không c n phân tích ti p vì th a
u ki u l nh kép (b>=0 && c>=0) || b+c>=0 s c phân tích ti u ki n con: (b>=0 && c>=0) và b+c>=0 Quá trình phân tích
bi n graph u ra là t ng c l p P u tiên, quá trình n
nh t shortestPath c ti n hành b ng cách duy th graph theo nhánh false (dòng 1),
trên shortestPath c thêm vào t p S (dòng 3), bi n visited nh quy nh
t c hai nhánh -sai c kh i t o b ng r ng (dòng 4) Vòng l p while l p l i
-sai c a m nh quy nh t n t i trong t c l p
(dòng 5) Trong vòng while, m nh b t kì u trong t p S c l y ra (dòng 6) và tìm
c nh (u,v n t i trong t c l p (dòng 7) T c p c nh này, chúng tôi
n nh t nextPath p c nh (u,v thêm vào t c l p
(dòng 8) T p S c c p nh t b nh không thu c t p visited trên
Trang 29ng chung c xu t là vi t l a vòng l t o
Ba lo c l c ki m th vòng l p g m: