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

Slides:



Advertisements
Các bản thuyết trình tương tự
Công nghệ phần mềm Các quy trình phần mềm.
Advertisements

KQHT 9. HỌC THUYẾT KINH TẾ CỦA TRƯỜNG PHÁI KEYNES
Rừng bị tàn phá. Rừng bị tàn phá Tác hại của việc tàn phá rừng.
LỄ CÁC THÁNH TỬ ĐẠO VIỆT NAM
Bài 2: Tổ chức quản trị nhân sự
Mô hình thực thể liên kết (Entity-Relationship - ER)
Lời Hứa của Chúa Tháng 2, 2012 Ấn bản
BÀI TOÁN TỐI ƯU TRONG KINH TẾ MÔ HÌNH ĐƠN GIẢN
“QUẢN TRỊ DỰ ÁN VÀ DOANH NGHIỆP CÓ VỐN ĐẦU TƯ NƯỚC NGOÀI”
CHÀO MỪNG QUÝ THẦY CÔ VÀ CÁC EM HỌC SINH
Chương 2: Các kỹ thuật xây dựng chương trình phần mềm
Các nguyên tắc làm việc với ASP
Lễ Chúa Giêsu Lên Trời Năm C
Kiểm thử và đảm bảo chất lượng phần mềm
CHỦ ĐỀ 5 CẤU TRÚC TUẦN TỰ.
CÂU LỆNH MẶC ĐỊNH MENU MÃ LỆNH M VÍ DỤ THAO TÁC TẠO PROGRAM
Mixdeck Express MIXDECK EXPRESS MKII
Hướng dẫn lập trình trên
BÀI TẬP THỰC HÀNH 1 BƯỚC ĐẦU GIẢI BÀI TOÁN TIN HỌC.
CÁC HÀM CƠ BẢN TRONG EXCEL (1)
Chương 3 Exception.
Sử dụng các hàm để tính toán
HỘI THẢO "PHƯƠNG PHÁP GIẢI QUYẾT CÁC TÌNH HUỐNG SP"
Lê Tân Bộ môn: Lập trình máy tính
Chương 3 – Các kỹ thuật gỡ lỗi và kiểm thử chương trình
Chương 7 INTERFACE.
Giới thiệu môn học.
Ôn tập struct và bộ nhớ động Linked Lists
Class & Struct II Lập trình nâng cao.
Con trỏ Lập trình nâng cao
Đọc giá trị cảm biến mở rộng
Điều khiển LED và Động cơ DC
Bài 3: Ngôn ngữ lập trình C#
Chương 02 CẤU TRÚC VÀ CÁC THÀNH PHẦN CHƯƠNG TRÌNH C/C++
MÔN: HÌNH HỌC 8 CHÀO MỪNG QUÝ THẦY CÔ VÀ CÁC EM HỌC SINH THAM DỰ.
ĐẠI HỌC QUỐC GIA HÀ NỘI TRUNG TÂM THÔNG TIN – THƯ VIỆN
Chương 06 KIỂU DỮ LIỆU NGƯỜI LẬP TRÌNH ĐỊNH NGHĨA
Automata hữu hạn & Biểu thức chính quy
Gi¸o viªn :NguyÔn ThÞ Xu©n H»ng Tr­¦êNG TIÓU HäC Mü TH¸I
Chương 3: Các dị cấu trúc Chương này cho một tổng quan về tính chất của các dị cấu trúc. Đó là các bán dẫn bao gồm hơn một loại vật liệu. Những thay đổi.
Chương 2 Đại cương về máy tính điện tử (MTĐT)
Giới thiệu & Tập huấn Phần mềm TKB 11.0
KIỂM TRA BÀI CŨ Trình bày những khả năng to lớn của máy tính đã làm cho nó trở thành một công cụ xử lý thông tin hữu hiệu ? Khả năng tính toán nhanh.
Xin Còn Gọi Tên Nhau.
SỬ DỤNG LỆNH LẶP WHILE...DO
Line Clipping in 2D Xén đường thẳng trong 2D
Chương 03 TỔ CHỨC DỮ LIỆU TRONG CHƯƠNG TRÌNH
BÀI TẬP THỰC HÀNH 3 SỬ DỤNG LỆNH LẶP FOR...DO.
NHẬP MÔN LẬP TRÌNH MẢNG MỘT CHIỀU.
CÔNG TÁC CHUẨN BỊ BẢO VỆ LUẬN VĂN SAU ĐẠI HỌC NĂM 2019
Trainer: Bạch Ngọc Toàn Phát hành bởi: TEDU –
SẮP XẾP, TÌM KIẾM, LỌC DỮ LIỆU
Bài 5: Pháp luật trong sử dụng công nghệ thông tin
Đề kiểm tra 15’ lớp K58B Cho đồ thị không gian trạng thái của bài toán như sau: Trạng thái đầu: A Trạng thái đích: P Và cho giải thuật tìm kiếm theo chiều.
BÀI TẬP THỰC HÀNH 5 SỬ DỤNG DÃY SỐ.
Nhập môn Công nghệ học Phần mềm Introduction to Software Engineering
LỄ THĂNG THIÊN THE ASCENSION OF THE LORD.
Trainer: Bạch Ngọc Toàn Phát hành bởi: TEDU –
TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN
Hệ thống IO (Input Output System)
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQL SERVER 2012
THỦ TỤC KIỂM TOÁN CHU TRÌNH MUA HÀNG VÀ THANH TOÁN
GIẢI PHÁP CAMERA GIAO THÔNG
Hàm Lập trình nâng cao.
Bản ghi của bản thuyết trình:

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

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

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

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) 10 ELL: B(U+Q(V)):=U+V 11 IF U=V GOTO JOE 12 IF U>V THEN U:=Z 13 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

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.

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.

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.

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)

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.

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

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

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

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

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

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

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

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

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 }

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 }

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 }

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)

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

Đườ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

Đườ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

Đường đi All-p-uses/some-c-uses cho i: All-c-uses/some-p-uses cho AS: 1-2-3-4-5-6-3-7-9-10 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: 1-2-3-4-5-6-3-7-8-10 …. 1-2-3-7-9-10