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

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

  • Upload
    jason

  • View
    67

  • Download
    1

Embed Size (px)

DESCRIPTION

Kiểm thử và đảm bảo chất lượng phần mềm. Kiểm thử luồng dữ liệu. 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. Ý tưởng của kiểm thử luồng dữ liệu. - PowerPoint PPT Presentation

Citation preview

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

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

Kiểm thử luồng dữ liệu

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

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

2

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

Ý 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

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

Đỉ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

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

Đỉ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

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

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-Y3 IF Z>=0 GOTO SAM4 JOE: Z:=Z-15 SAM: Z:=Z+V

U:=06 LOOP

B(U),Q(V):=(Z+V)*U7 IF B(U)=0 GOTO JOE

Z:=Z-18 IF Z=0 GOTO ELL

U:=U+19 UNTIL U=z

B(U-1):=B(U+1)+Q(V-1)10 ELL: B(U+Q(V)):=U+V11 IF U=V GOTO JOE12 IF U>V THEN U:=Z13 YY:Z:=U2 END

1 3 4 5 6 7

2

8910111213

Z?END

YY U,V? U,V? U,Z?

ELL

SAM

LOOP B(U)?d JOEp

p cd cd c

cdp

d c p p

p

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

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.

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

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

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

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.

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

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 = 0if (z 0) {

x = sqrt (z)if (0 x && x 5)

y = f (x) else

y = h (z)}y = g (x, y)print (y)

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

Ví dụ liên kết def-use

def-use cho biế"n z. read (z)x = 0 y = 0if (z 0){

x = sqrt (z)if (0 x && x 5)

y = f (x) else

y = h (z)}y = g (x, y)print (y)

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

Ví dụ liên kết def-use

Variable Defined at Used at Comment

locks 9 Declaration

locks 22 READ

locks 23 Predicate use

locks 26 Computation Use

stocks 9 READ

stocks 27 Computation Use

num_locks 26 Assignment

num_locks 26 Computation Use

num_locks 33 WRITE

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

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

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

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

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

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

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

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

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

Ví dụ All-DU-Paths: pow(x,y)

1 5 8 9 1614 17a

b

c

d

e

f

g

h

i

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.if (y < 0)15. z = 1.0 / z;16.printf(z);17.}

/* 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.*/

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

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 if (y < 0)15 z = 1.0 / z;16 printf(z);17 }

1 5 8 9 1614a

b

c

d

e

f

g

h

i17

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

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 if (y < 0)15 z = 1.0 / z;16 printf(z);17 }

1 5 8 9 1614 17a

b

c

d

e

f

g

h

i

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

All-DU-Paths với biến y

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 if (y < 0)15 z = 1.0 / z;16 printf(z);17 }

1 5 8 9 1614 17a

b

c

d

e

f

g

h

i

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

All-DU-Paths với biến y

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 if (y < 0)15 z = 1.0 / z;16 printf(z);17 }

1 5 8 9 1614 17a

b

c

d

e

f

g

h

i

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

All-DU-Paths với biến y

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 if (y < 0)15 z = 1.0 / z;16 printf(z);17 }

1 5 8 9 1614 17a

b

c

d

e

f

g

h

i

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

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) }

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

CFG của hàm tính trung bìnhInitialize: value[]AS, MIN, MAX

i=0; ti=0; tv=0, sum=0

((ti < AS) && (value[i] != -999))

tv > 0

av = (double) -999 av = (double) sum/tv

return(av)

ti++;(value[i] >= MIN &&value[i] <= MAX)

F

F

F TT

T

tv++; sum= sum+value[i]

i++

1

2

3

4

5

6

7

8

10

9

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

Đườ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: 2-3-4-5, 2-3-4-6

• Đường đi đơn giản: 2-3-4-5 và 3-4-6-3• Đường đi thỏa mãn All-defs cho biến tv: – 1-2-3-4-5-6-3-7-9-10, – Và với p-uses 1-2-3-7-8-10 và 1-2-3-4-5-6-3-7-

9-10

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

Đường đi

• Đường đi cho tiêu chuẩn All-c-uses cho biến ti: – 1-2-3-4-5-6-3-7-8-10, – 1-2-3-4-5-6-3-7-9-10, – 1-2-3-4-6-3-7-8-10, – 1-2-3-4-6-3-7-9-10

• Đường đi cho tiêu chuẩn All-p-uses cho biến tv:– 1-2-3-7-8-10– 1-2-3-7-9-10– 1-2-3-4-5-6-3-7-8-10– 1-2-3-4-5-6-3-7-9-10

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

Đường đi

• All-p-uses/some-c-uses cho i: – 1-2-3-4-5-6-3-7-9-10

• All-c-uses/some-p-uses cho AS: – 1-2-3-4-5-6-3-7-9-10

• All-uses: – Hợp của all-c-uses và all-p-uses

• All-du-paths choh tv: – 1-2-3-4-5-6-3-7-8-10 …. 1-2-3-7-9-10