1. Trang chủ
  2. » Công Nghệ Thông Tin

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)

59 285 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 59
Dung lượng 9,01 MB

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

Nội dung

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 1

I 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 2

I 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 3

L 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 4

L 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 5

TÓ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 6

Nowadays, 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 7

ng 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 8

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

3.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 10

DANH 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 11

DANH 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 12

Hì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 13

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 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 14

tr 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 15

thi 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 16

ph 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 17

Hì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 18

sung 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 19

l 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 20

Tiê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 21

nh 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 22

Tí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 23

chi 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 24

ng 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 26

Chi 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 27

l 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 28

b+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 29

ng 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:

Ngày đăng: 18/03/2018, 22:52

TỪ KHÓA LIÊN QUAN

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