Bản thuyết trình đang được tải. Xin vui lòng chờ

Bản thuyết trình đang được tải. Xin vui lòng chờ

Kiểm thử và đảm bảo chất lượng phần mềm

Các bản thuyết trình tương tự


Bản thuyết trình với chủ đề: "Kiểm thử và đảm bảo chất lượng phần mềm"— Bản ghi của bản thuyết trình:

1 Kiểm thử và đảm bảo chất lượng phần mềm
Kiểm thử luồng dữ liệu

2 Nội dung Kiểm thử cấu trúc Tổng quan Kiểm thử theo luồng điều khiển
Kiểm thử theo luồng dữ liệu Phương pháp kết hợp Tổng kết về kiểm thử cấu trúc

3 Ý tưởng của kiểm thử luồng dữ liệu
Kiểm thử luồng dữ liệu liên quan đến việc chọn đường đi với mục tiêu bao phủ các cặp gán (definition) và dùng (use) dữ liệu, được gọi là các tiêu chuẩn luồng dữ liệu Qui trình tổng quát của kiểm thử luồng dữ liệu là: Vẽ đồ thị luồng dữ liệu cho chương trình Chọn tiêu chuẩn kiểm thử luồng dữ liệu Xác định các đường đi trong đồ thị để thỏa mãn tiêu chuẩn lựa chọn (all-defs, all-uses, all-P-uses/some-C-uses, v.v..) Tạo các ca kiểm thử cho các đường đi đã xác định Kiểm thử luồng dữ liệu chọn đường đi với mục tiêu bao phủ các mẫu khai báo và sử dụng biến, hay còn gọi là theo luồng dữ liệu. Cách làm: Lập đồ thị luồng dữ liệu Chọn tiêu chuẩn kiểm thử theo luồng dữ liệu Xác định các đường đi thỏa mãn tiêu chuẩn đã chọn Tạo các ca kiểm thử cho các đường đi đã xác định

4 Đỉnh gán Đỉnh n trong CFG của chương trình P là đỉnh gán của biến v, viết là DEF(v, b), nếu và chỉ nếu giá trị của v được xác định không mơ hồ tại lệnh ở đỉnh n Đỉnh gán (defining node) cho biến v nếu giá trị của v được thiết lập tại lệnh ở đỉnh n. Đỉnh sử dụng của biến v là đỉnh giá trị của v được đọc ra bằng lệnh ở đỉnh n.

5 Đỉnh dùng Đỉnh n trong đồ thị CFG của chương trình P là đỉnh dùng của biến v, viết là USE(v, n), nếu và chỉ nếu giá trị của biến v được dùng ở lệnh tại đỉnh n. Một đỉnh dùng là dùng vị từ (predicate), ký hiệu P-use nếu và chỉ nếu lệnh tương ứng ở đỉnh n là lệnh vị từ Trái lại, nó là dùng tính toán, ký hiệu C-use Đỉnh tương ứng với P-use luôn có bậc ra >= 2 và các đỉnh tương ứng với C-use luôn có bậc ra <= 1 Đỉnh sử dụng là sử dụng mệnh đề (P-use) nếu lệnh tương ứng là lệnh mệnh đề, ngược lại là sử dụng tính toán (C-use) Đỉnh tương ứng với P-use luôn có số cạnh ra >= 2, đỉnh C-use có số cạnh ra <= 1.

6 Ví dụ luồng điều khiển có chú thích
Luồng dữ liệu cho biến Z: 1 INPUT X,Y Z:= X+Y Y:= X-Y 3 IF Z>=0 GOTO SAM 4 JOE: Z:=Z-1 5 SAM: Z:=Z+V U:=0 6 LOOP B(U),Q(V):=(Z+V)*U 7 IF B(U)=0 GOTO JOE Z:=Z-1 8 IF Z=0 GOTO ELL U:=U+1 9 UNTIL U=z B(U-1):=B(U+1)+Q(V-1) ELL: B(U+Q(V)):=U+V 11 IF U=V GOTO JOE 12 IF U>V THEN U:=Z YY:Z:=U 2 END p LOOP B(U)? JOE d 1 3 4 5 6 7 p cd cd c SAM Z? END cd p 2 ELL d p p c 13 12 11 10 9 8 U,Z? YY U,V? U,V? p

7 Một số định nghĩa Gọi PATHS(P) là tập tất cả các đường đi có thể trong CFG của chương trình P. Một đường đi du-path (def-use) cho biến v là đường đi trong PATHS(P) thỏa mãn Tồn tại DEF(v, m) và USE(v, n) sao cho m và n tương ứng là đỉnh đầu và cuối của đường đi Một đường đi dc-path với biến v là một du-path với các đỉnh đầu DEF(v, m) và USE(v,n) sao cho không có đỉnh nào ở trên đường đi đó gán giá trị cho v. PATHS(P) là tập tất cả các đường đi trong CFG của P. Đoạn đường du-path là đường trong CFG với đỉnh đầu là đỉnh gán và đỉnh cuối là đỉnh sử dụng. Đoạn đường dc-path với biến v là đoạn đường du-path mà ở giữa không có gán lại giá trị của biến v.

8 Một số định nghĩa Gán toàn cục của biến x ở đỉnh n là DEF(x, n) và tồn tại một đường đi từ n đến một đỉnh m nào đó chứa C-use hoặc P-use toàn cục của x. Một C-use toàn cục của x tại đỉnh n là một C-use của x ở n và x chưa được gán ở đỉnh nào khác ngoài n biến x ở đỉnh n là gán toàn cục nếu x có đường dc-path đến đỉnh m chứa c-use hoặc p-use của x. C-use của x là toàn cục nếu x được sử dụng ở đỉnh n và không gán ở n.

9 Một số định nghĩa Đường đi đơn giản là đường có đỉnh đầu và cuối không trùng nhau. Đường đi không có vòng lặp là đường tất cả các đỉnh ko trùng nhau. Đường đi đầy đủ là đường từ đỉnh vào đến đỉnh ra của CFG Du-path với biến x ở đỉnh n1 là đường đi n1..nk mà n1 có gán toàn cục cho x và nk có c-use của x và đường đi này là đơn giản, hoặc nk có p-use của x và đường đi này là không có vòng lặp với x. Đường đơn giản là đường có đỉnh đầu và cuối không trùng nhau. Đường ko có vòng lặp là đường tất cả các đỉnh ko trùng nhau. Đường đầy đủ là đường từ đỉnh vào đến đỉnh ra của CFG Du-path với biến x ở đỉnh n1 là đường đi n1..nk mà n1 có gán toàn cục cho x và nk có c-use của x và đường đi này là đơn giản, hoặc nk có p-use của x và đường đi này là không có vòng lặp với x.

10 Ví dụ liên kết def-use Liên kết def-use của chương trình dươi đây là gì? read (z) x = 0 y = 0 if (z  0) { x = sqrt (z) if (0  x && x  5) y = f (x) else y = h (z) } y = g (x, y) print (y)

11 Ví dụ liên kết def-use read (z) x = 0 y = 0 if (z  0) {
x = sqrt (z) if (0  x && x  5) y = f (x) else y = h (z) } y = g (x, y) print (y) def-use cho biến z.

12 Ví dụ liên kết def-use Variable Defined at Used at Comment locks 9
Declaration 22 READ 23 Predicate use 26 Computation Use stocks 27 num_locks Assignment 33 WRITE

13 Tiêu chuẩn bao phủ kiểm thử DU-Path
Ý tưởng Sử dụng thông tin def-use và tiêu chuẩn cụ thể để nhận được các đường đi cụ thể trong đồ thị CFG Từ đó xác định các ca kiểm thử Chúng ta giả sử T là tập các đường đi đầy đủ và khả thi trong CFG của chương trình P và V là tập tất cả các biến trong P

14 Tiêu chuẩn bao phủ DU-Path
T thỏa mãn tiêu chuẩn All-Defs nếu và chỉ nếu với mọi v, T chứa các đường đi dc-path từ mọi đỉnh gán của v đến một đỉnh dùng của v Tập đến được của các gán T thỏa mãn tiêu chuẩn All-Uses nếu và chỉ nếu với mọi v, T chứa các đường đi dc-path từ mọi đỉnh gán của v đến mọi đỉnh dùng v và đến đỉnh tiếp theo của mỗi USE(v, n) Chúng ta có thể làm mịn hơn bằng All-C-Uses và All-P-Uses

15 Tiêu chuẩn bao phủ DU-Path
All-P-Uses/Some-C-Uses Với mọi v, T gồm các đường đi dc-path từ mọi đỉnh gán của v đến mọi đỉnh p-use của v và nếu một định nghĩa của v không có p-use thì tồn tại một đường đi dc-path đến ít nhất một c-use All-C-Uses/Some-P-Uses Với mọi v, T gồm các đường đi dc-path từ mọi đỉnh gán của v đến mọi đỉnh c-use của v và nếu một định nghĩa của v không có c-use thì tồn tại một đường đi dc-path đến ít nhất một p-use

16 Tiêu chuẩn bao phủ DU-Path
All-DU-Paths Với mọi v, T gồm các đường đi dc-path từ mọi đỉnh gán của v đến mọi đỉnh dùng của v và đến đỉnh tiếp theo của mỗi USE(v, n) và các đường đi này hoặc là lặp một lần hoặc không lặp

17 Ví dụ All-DU-Paths: pow(x,y)
/* pow(x,y) tính x mũ y với x, y là số nguyên INPUT: giá trị của x và y. OUTPUT: in x mũ y ra màn hình. */ void pow (int x, y) { float z; int p; if (y < 0) p = 0 – y; else p = y; z = 1.0; while (p != 0) z = z * x; p = p – 1; } z = 1.0 / z; printf(z); b g a f i d 1 5 8 9 14 16 17 c h e

18 All-DU-Paths vơi biến x
1 void pow (int x, y) 2 { 3 float z; 4 int p; 5 if (y < 0) 6 p = 0 – y; 7 else p = y; 8 z = 1.0; 9 while (p != 0) 10 11 z = z * x; 12 p = p – 1; 13 } 14 15 z = 1.0 / z; 16 printf(z); 17 b g a f i d 1 5 8 9 14 16 17 c h e

19 All-DU-Paths với biến x
1 void pow (int x, y) 2 { 3 float z; 4 int p; 5 if (y < 0) 6 p = 0 – y; 7 else p = y; 8 z = 1.0; 9 while (p != 0) 10 11 z = z * x; 12 p = p – 1; 13 } 14 15 z = 1.0 / z; 16 printf(z); 17 b g a f i d 1 5 8 9 14 16 17 c h e

20 All-DU-Paths với biến y
1 void pow (int x, y) 2 { 3 float z; 4 int p; b g 5 if (y < 0) 6 p = 0 – y; a f i d 7 else p = y; 1 5 8 9 14 16 17 8 z = 1.0; 9 while (p != 0) c h 10 { e 11 z = z * x; 12 p = p – 1; 13 } 14 if (y < 0) 15 z = 1.0 / z; 16 printf(z); 17 }

21 All-DU-Paths với biến y
1 void pow (int x, y) 2 { 3 float z; 4 int p; b g 5 if (y < 0) 6 p = 0 – y; a f i d 7 else p = y; 1 5 8 9 14 16 17 8 z = 1.0; 9 while (p != 0) c h 10 { e 11 z = z * x; 12 p = p – 1; 13 } 14 if (y < 0) 15 z = 1.0 / z; 16 printf(z); 17 }

22 All-DU-Paths với biến y
1 void pow (int x, y) 2 { 3 float z; 4 int p; b g 5 if (y < 0) 6 p = 0 – y; a f i d 7 else p = y; 1 5 8 9 14 16 17 8 z = 1.0; 9 while (p != 0) c h 10 { e 11 z = z * x; 12 p = p – 1; 13 } 14 if (y < 0) 15 z = 1.0 / z; 16 printf(z); 17 }

23 Ví dụ tính trung bình public static double ReturnAverage(int value[], int AS, int MIN, int MAX) { int i, ti, tv, sum; double av; i = 0; ti = 0; tv = 0; sum = 0; while (ti < AS && value [i] != -999) { ti++; if (value[i] >= MIN && value[i} <= MAX) { tv++; sum = sum + value[i]; } i++; if (tv > 0) av = (double) sum/tv; else av = (double) -999; return (av)

24 CFG của hàm tính trung bình
Initialize: value[] AS, MIN, MAX 1 2 i=0; ti=0; tv=0, sum=0 3 ((ti < AS) && (value[i] != -999)) F T 7 ti++; (value[i] >= MIN && value[i] <= MAX) 4 tv > 0 T F T F 9 av = (double) sum/tv tv++; sum= sum+value[i] av = (double) -999 8 5 i++ 10 return(av) 6

25 Đường đi c-use toàn cục cho biến tv: đỉnh 9 (tv được gán ở đỉnh 2 và 5) Các đường đi def-clear cho biến tv: , Đường đi đơn giản: và Đường đi thỏa mãn All-defs cho biến tv: , Và với p-uses và

26 Đường đi Đường đi cho tiêu chuẩn All-c-uses cho biến ti:
, , , Đường đi cho tiêu chuẩn All-p-uses cho biến tv:

27 Đường đi All-p-uses/some-c-uses cho i: All-c-uses/some-p-uses cho AS:
All-c-uses/some-p-uses cho AS: All-uses: Hợp của all-c-uses và all-p-uses All-du-paths choh tv:


Tải xuống ppt "Kiểm thử và đảm bảo chất lượng phần mềm"

Các bản thuyết trình tương tự


Quảng cáo bởi Google