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

Tài liệu lý thuyết kiểm thử hộp trắng

54 1,3K 12

Đ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 54
Dung lượng 830 KB

Nội dung

•Kiểm tra các vòng lặp, các điều kiện trong các mã nguồn có thực hiện đúng không?. •Bước 2: Thiết kế các Test case để bao phủ toàn bộ các Thiết kế các Test case để bao phủ toàn bộ các p

Trang 1

White Box Testing

Trang 3

1/ Khái niệm (tt)

•Kiểm tra xem có các dead code (mã chết) trong mã nguồn hay không? (Sv tự xác định dead code)

•Kiểm tra các kết quả đầu ra có như mong đợi?

•Kiểm tra các vòng lặp, các điều kiện trong các mã nguồn có thực hiện đúng không?

•Xác minh từng dòng hoặc phần của các mục trong

mã nguồn & bao phủ các phân nhánh xử lý

Trang 4

Giải thích Dead code:

Dead code (mã chết) là một phần trong mã

nguồn của một chương trình được thực thi nhưng

có kết quả là không bao giờ được sử dụng trong bất

kỳ tính toán khác

Trong khi kết quả của một sự tính toán chết có thể không bao giờ được sử dụng, nó có thể làm tăng lỗi hoặc ảnh hưởng đến tốc độ toàn cục, do đó cần loại bỏ các mã như vậy nhằm thay đổi hiệu năng của chương trình

Trang 5

Lệnh là Z = X/Y; không bao giờ được dùng

và còn có khả năng gây lỗi khi Y = 0

Trang 7

2/ Các kỹ thuật kiểm thử hộp trắng

1 số tài liệu khác

Trang 8

2/ Các kỹ thuật kiểm thử hộp trắng (tt)

Một hình thức truyền thống của kiểm thử White-box thường trải qua là:

•Bước 1: Tạo 1 đồ thị mô tả luồng điều khiển từ mã nguồn

– Được gọi là đồ thị luồng điều khiển (CFG _ Control Flow Graph)

– Đồ thị được tạo từ mã nguồn thường tạo bằng tay.

•Bước 2: Thiết kế các Test case để bao phủ toàn bộ các Thiết kế các Test case để bao phủ toàn bộ các

phần tử của đồ thị (tùy theo kỹ thuật)

– Phần tử: các nút, cạnh, đường đi (nodes, edges, paths)

Trang 10

Ví dụ về Control Flow Graph (CFG)

7 8

Trang 11

Các phần tử của CFG

• Có 03 loại nút:

– Nút lệnh: mô tả nút vào, ra, tuần tự

– Nút điều kiện: nút mô tả điều kiện cho 1 nhánh.– Nút hỗ trợ: nút kết nối như IF, …

• Cạnh: biểu diễn các luồng điều khiển

Rất dễ khi tạo đồ thị, nó tương tự như vẽ lưu đồ chương trình (Flow Program)

Trang 12

Biểu diễn IF-THEN, IF-THEN-ELSE,

SWITCH

if (c) if (c) switch (c)

// join point else case 2:

// join point // join point

Trang 13

Biểu diễn vòng lặp (Loop)

Chú ý: Các vòng lặp khác như FOR, DO-WHILE được biểu diễn tương tự.

while (c)

{

…}

Trang 15

Tạo các khối lệnh (Block statement)

Để đơn giản hóa các mã nguồn lớn có nhiều lệnh, người ta thường tạo CFG bằng các khối lệnh thay vì cho từng lệnh

Khối lệnh là tập hợp các lệnh liên tiếp tuần tự, không có phân nhánh (trừ ở cuối), không chứa vòng lặp

Trang 16

Ví dụ:

Trang 17

Ví dụ: có 2 xử lý riêng biệt

Trang 18

Ví dụ: Khối lệnh If else

Trang 19

Ví dụ: Khối lệnh If không có else

Trang 20

Ví dụ: Khối lệnh chia nhiều nhánh như switch(), Select case,

Trang 21

Ví dụ: Khối lệnh có nhiều cạnh vào, nhiều cạnh ra.

Trang 22

Ví dụ: Khối lệnh có nhiều cạnh vào, nhiều cạnh ra.

Trang 23

Ví dụ: Khối lệnh

Trang 24

Ví dụ: Khối lệnh

Trang 25

Ví dụ: Khối lệnh

Trang 26

2/ Các kỹ thuật kiểm thử hộp trắng (tt)

A/ Statement Coverage

Lệnh là các dòng mã hoặc hướng dẫn cho máy tính hiểu và hành động phù hợp Một lệnh sẽ trở thành một lệnh thực thi khi nó được biên soạn và chuyển đổi thành mã đối tượng và thực hiện các hành động khi chương trình ở chế độ chạy

Do đó ‘Phủ lệnh’, cho thấy đó là phương pháp

chứng thực rằng mỗi dòng mã được thực hiện ít nhất

Trang 27

2/ Các kỹ thuật kiểm thử hộp trắng (tt)

B/ Branch Coverage

Branch trong NNLT là lệnh 'IF', lệnh có các nhánh:

đúng và sai, hoặc các lệnh chuyển hướng điều khiển trong mã nguồn như switch(), goto, …

Trong phạm vi phủ nhánh (Branch Coverage _ còn gọi là phủ quyết định), chúng ta chứng thực rằng mỗi nhánh được thực hiện ít nhất một lần

Trang 29

2/ Các kỹ thuật kiểm thử hộp trắng (tt)

C/ Path Coverage

Phủ đường đi là kiểm tra tất cả các đường đi của chương trình Đây là một kỹ thuật toàn diện, đảm bảo rằng tất cả các đường đi của chương trình được

đi qua ít nhất một lần Phủ đường đi thậm chí còn mạnh mẽ hơn phủ nhánh Kỹ thuật này rất hữu ích

để kiểm thử các chương trình phức tạp.Hãy lấy một ví dụ đơn giản để hiểu tất cả các kỹ

Trang 30

2/ Các kỹ thuật kiểm thử hộp trắng (tt)

1 INPUT A & B

3 IF C>100

Xem xét đoạn mã giả sau (pseudo code):

Trang 31

* Đối với Statement Coverage: ta chỉ có một trường hợp kiểm thử để kiểm tra tất cả các dòng m

Xét Test Case_01 với (A = 40 và B = 70), ta thấy tất

Trang 32

* Đối với Branch Coverage: ta có thể phủ hết các nhánh, và sẽ đánh giá cả điều kiện "FALSE".

Vì vậy, bây giờ mã giả trở thành:

Trang 33

* Đối với Branch Coverage: ta có thể phủ hết các nhánh, và sẽ đánh giá cả điều kiện "FALSE".

Vì vậy, bây giờ mã giả trở thành: (Sv tự vẽ CFG và tạo Test case)

Trang 34

Ví dụ về Statement Coverage

Giả sử, chúng ta viết và thực

hiện 2 Test case:

•Test case #1: 1-2-exit (không

bao giờ vào vòng lặp)

7 8

Trang 35

• Mục tiêu: bao phủ lệnh (statement coverage)

– Cần các Test case thực hiện bao phủ tất cả các nút trong CFG.

Trang 36

7 8

Trang 37

Ví dụ về Branch Coverage

• Mục tiêu: viết các Test case mà nó bao phủ tất cả các nhánh của các nút điều kiện

– True và False là các nhánh của IF

– Có 2 nhánh tương ứng với điều kiện của vòng lặp

– Tất cả các trường hợp của lệnh SWITCH

Trang 38

Ví dụ về Branch Coverage

Nhận xét:

•Statement coverage không bao hàm branch coverage

•Kinh nghiệm cho thấy rằng có nhiều lỗi xảy

ra tại nút quyết định (ví dụ rẽ nhánh, chuyển điều khiển, )

Trang 39

cạnh, N: số nút).

Trang 40

7 8

Trang 41

Ví dụ về Path Coverage

Trang 42

Kinh nghiệm

• Làm thế nào chúng ta có thể chọn các đường đi bao phủ 100% các nhánh?

• Có thể không có con đường nào đi từ Start

 End, vì vậy cần phải chọn nhiều con đường đi khác nhau để bao phủ tất cả các nhánh, các nút

Trang 43

• Thường xảy ra nhiều lỗi trong vòng lặp với điều

kiện / giá trị tại biên vậy cần có sự kết hợp.

• Kiểm thử vòng lặp tập trung vào kiểm chứng tính

Trang 45

3/ Kiểm thử vòng lặp

Giả sử min là số lần lặp tối thiểu, max là số lần lặp đối đa của vòng lặp Cần viết các Test case sau: (5 test case)

•1 test case thực hiện lặp min lần, 1 test case thực

Trang 46

Vòng lặp lồng nhau (Nested Loops)

thay hình khác

Outer loop

Trang 47

Vòng lặp lồng nhau (Nested Loops)

Đối với vòng lặp lồng nhau, cho mỗi lần lặp của vòng lặp bên ngoài _ Outer loop, chúng ta có một số lần lặp của vòng lặp bên trong Inner loop:

•Thực hiện kiểm thử từ trong ra ngoài (bắt đầu từ vòng lặp trong nhất)

Trang 48

Vẽ CFG cho các Source code sau

Trang 49

Vẽ CFG cho các Source code sau

4

Trang 50

Vẽ CFG cho các Source code sau

Trang 51

Vẽ CFG cho các Source code sau

4

3 4,5

6

Jo in

9

7,8 1,2

Trang 54

Vòng lặp lồng nhau (Nested Loops)

• Giả sử: Có 3 vòng lặp lồng nhau và 5 test case cho mỗi mức, tổng số các kết hợp có thể là 125 test case vậy là quá nhiều!

• Bắt đầu với vòng lặp trong cùng, thực hiện (m, m-1,

typical) test case và tương tự cho các vòng lặp khác với số min của nó.

• Tiếp tục ra bên ngoài cho mỗi vòng lặp, thực hiện

kiểm thử (m, m+1, typical, ) test case

– Vòng lặp trong với typical test case.

– Vòng lặp ngoài với min test case.

Ngày đăng: 27/09/2016, 13:08

w