• Tidak ada hasil yang ditemukan

Chương 3 Công cụ định vị lỗi HiFa cho các ứng dụng C/C++

3.1 Kỹ thuật định vị lỗi cho ứng dụng C/C++

3.1.2 Ví dụ minh họa

Để hiểu rõ hơn về kỹ thuật định vị lỗi dựa trên phổ, phần này miêu tả một ví dụ minh họa về quá trình thực hiện của kỹ thuật SFL. Xem xét hàm ví dụ mid [3]

có mã nguồn như trong Hình 3-2. Hàm mid() nhận 3 giá trị nguyên đầu vào và trả về giá trị trung vị của 3 giá trị đầu vào. Hàm mid có 2 phiên bản lỗi sau: phiên bản 1: thay đổi câu lệnh 7 (m = x) thành m = y; phiên bản lỗi 2: thay đổi câu lệnh 2 (m = z) thành m = x.

mid() { Câu lệnh

int x, y, z, m;

read(x, y, z); 1

m = z; 2

if (y < z) 3 if (x < y) 4 m = y; 5 else if (x < z) 6 m = x; 7

else 8

if (x > y) 9 m = y; 10 else if (x > z) 11 m = x; 12

print(m); 13

}

Hình 3-2: Mã nguồn hàm mid

Để kiểm thử hàm mid(), ta sử dụng bộ kiểm thử với 6 ca kiểm thử với các giá trị đầu vào được thể hiện ở Bảng 3.1. Phiên bản lỗi 1 có 5 ca kiểm thử thành công là T1, T2, T3, T4, T5; và 1 ca kiểm thử thất bại là T6. Phiên bản lỗi 2 cũng có số lượng ca kiểm thử thất bại là 1 nhưng là ca kiểm thử T5.

Bảng 3.1: Bộ kiểm thử của hàm mid Test

Case

Giá trị đầu vào

Giá trị đầu ra mong muốn

Phiên bản 1 Phiên bản 2 Giá trị đầu

ra thực tế

Trạng thái

Giá trị đầu ra thực tế

Trạng thái

T1 3, 3, 5 3 3 Pass 3 Pass

T2 1, 2, 3 2 2 Pass 2 Pass

T3 3, 2, 1 2 2 Pass 2 Pass

T4 5, 5, 5 5 5 Pass 5 Pass

T5 5, 3, 4 4 4 Pass 5 Fail

T6 2, 1, 3 2 1 Fail 2 Pass

Bảng 3.2 thể hiện ma trận phổ thực thi của mỗi câu lệnh ESHS (câu lệnh được thực thi) được thể hiện bằng dấu chấm đen.

Bảng 3.2: Phổ ESHS của hàm mid

Dòng Phiên bản 1 Phiên bản 2

T1 T2 T3 T4 T5 T6 Độ nghi

ngờ

T1 T2 T3 T4 T5 T6 Độ nghi

ngờ

1 ● ● ● ● ● ● 0.41 ● ● ● ● ● ● 0.41

2 ● ● ● ● ● ● 0.41 ● ● ● ● ● ● 0.41

3 ● ● ● ● ● ● 0.41 ● ● ● ● ● ● 0.41

4 ● ● ● ● 0.5 ● ● ● ● 0.5

5 ● 0.0 ● 0.0

6 ● ● ● 0.58 ● ● ● 0.58

7 ● ● 0.71 ● ● 0.0

8 ● ● 0.0 ● ● 0.0

9 ● ● 0.0 ● ● 0.0

10 ● 0.0 ● 0.0

11 ● 0.0 ● 0.0

12 0.0 0.0

13 ● ● ● ● ● ● 0.41 ● ● ● ● ● ● 0.41 Xem xét phiên bản lỗi 1 trong Bảng 3.2, câu lệnh 1 thực thi trong cả 6 ca kiểm thử bao gồm cả ca kiểm thử thành công và thất bại. Kỹ thuật Ochiai gán độ nghi ngờ của câu lệnh 1 theo như công thức như sau:

𝑠𝑢𝑠𝑝𝑖𝑐𝑖𝑜𝑢𝑠𝑛𝑒𝑠𝑠(1) = 1

√1 ∗ (1 + 5) = 0.41

Như vậy, độ nghi ngờ của câu lệnh 1 là 0.41. Sau khi thực hiện tính độ nghi ngờ của tất cả các câu lệnh của chương trình, ta được bộ giá trị độ nghi ngờ của chương trình mid(). Thực hiện sắp xếp độ nghi ngờ của các câu lệnh từ lớn tới bé ta được xếp hạng của câu lệnh. Câu lệnh 7 có độ nghi ngờ cao nhất nên câu lệnh này có xếp hạng 1 là xếp hạng cao nhất. Nhà phát triển sẽ kiểm tra các câu lệnh từ xếp hạng cao nhất tới thấp nhất. Câu lệnh 7 sẽ là câu lệnh đầu tiên được kiểm tra. Nếu lỗi không phải là câu lệnh 7, nhà phát triển tiếp tục kiểm tra câu lệnh có xếp hạng tiếp theo. Do có 4 câu lệnh có cùng độ nghi ngờ là 5 nên cả 4 câu lệnh này xếp hạng 7. Do câu lệnh 7 có xếp hạng đầu tiên nên nhà phát triển tìm được lỗi tại câu lệnh đầu tiên được kiểm tra.

Bảng 3.3 thể hiện phổ thực thi DHS của mỗi cặp Def-use. Xem xét phiên bản lỗi 2 trong Bảng 3.3, cặp def-use (2, 13) của biến m được thực thi trong 1 ca kiểm thử thành công T4 và 1 ca kiểm thử thất bại T5. Độ nghi ngờ của cặp def-use (2, 13, m) là 0.71. Cặp def-use này có độ nghi ngờ cao nhất nên câu lệnh 2 có xếp hạng nghi ngờ là 1.

Bảng 3.3: Phổ DHS của hàm mid

Def-use

Phiên bản 1 Phiên bản 2

T1 T2 T3 T4 T5 T6 Độ nghi

ngờ

T1 T2 T3 T4 T5 T6 Độ nghi

ngờ 1, 2, z ● ● ● ● ● ● 0.41 ● ● ● ● ● ● 0.41 1, 3, y ● ● ● ● ● ● 0.41 ● ● ● ● ● ● 0.41 1, 3, z ● ● ● ● ● ● 0.41 ● ● ● ● ● ● 0.41

1, 4, x ● ● ● ● 0.5 ● ● ● ● 0.5

1, 4, y ● ● ● ● 0.5 ● ● ● ● 0.5

1, 5, y 0.0 0.00

1, 6, x ● ● ● 0.58 ● ● ● 0.58

1, 6, z ● ● ● 0.58 ● ● ● 0.58

1, 7, x ● ● 0.71 ● ● 0.0

1, 9, x ● ● 0.0 ● ● 0.0

1, 9, y ● ● 0.0 ● ● 0.0

1, 10, y ● 0.0 ● 0.0

1, 11, x ● 0.0 ● 0.0

1, 11, z ● 0.0 ● 0.0

1, 12, x 0.0 0.0

2, 13, m ● ● 0.0 ● ● 0.71

5, 13, m ● 0.0 ● 0.0

7, 13, m ● ● 0.71 ● ● 0.0

10, 13, m ● 0.0 ● 0.0

12, 13, m 0.0 0.0

Từ mức độ nghi ngờ trong Bảng 3.2 và Bảng 3.3, ta thu được thứ hạng nghi ngờ của các câu lệnh của phiên bản lỗi 1 như Bảng 3.4. Cả 4 phổ đều đưa ra độ nghi ngờ cho câu lệnh 7 là 0.71. Phổ ESHS và DHS-def xếp hạng câu lệnh 7 có mức độ nghi ngờ cao nhất (xếp hang 1) do chỉ có duy nhất câu lệnh này có độ nghi ngờ là 0.71. DHS xếp hạng câu lệnh 7 thứ hạng nghi ngờ thứ 3 do có 2 câu lệnh 1 và 13 cùng có mức nghi ngờ là 0.71. Câu lệnh 7 được DHS-use xếp hạng nghi ngờ thứ 2 do có cùng mức độ nghi ngờ với câu lệnh 13.

Bảng 3.4: Độ nghi ngờ và thứ hạng của từng câu lệnh phiên bản lỗi 1 Câu lệnh

Độ nghi ngờ Xếp hạng

ESHS DHS DHS- def

DHS-

use ESHS DHS DHS- def

DHS- use

1 0.41 0.71 0.41 0.41 7 3 7 8

2 0.41 0.00 0.41 0.41 7 13 7 8

3 0.41 0.41 0.41 0.41 7 7 7 8

4 0.50 0.50 0.50 0.50 3 6 3 5

5 0.00 0.00 0.00 0.00 13 13 13 13

6 0.58 0.58 0.58 0.58 2 5 2 3

7 0.71 0.71 0.71 0.71 1 3 1 2

8 0.00 0.00 0.00 0.00 13 13 13 13

9 0.00 0.00 0.00 0.00 13 13 13 13

10 0.00 0.00 0.00 0.00 13 13 13 13

11 0.00 0.00 0.00 0.00 13 13 13 13

12 0.00 0.00 0.00 0.00 13 13 13 13

13 0.41 0.71 0.41 0.71 7 3 7 2

Bảng 3.5 thể hiện độ nghi ngờ và thứ hạng của từng câu lệnh phiên bản lỗi 2. Ba phổ DHS đều đưa ra độ nghi ngờ cho câu lệnh 2 là 0.71. Phổ ESHS lại có

giá trị nghi ngờ của câu lệnh 2 là 0.41 nên thứ hạng của câu lệnh này là 6. Phổ DHS và DHS-use cùng đưa ra thứ hạng nghi ngờ là 2. Phổ DHS-def tiếp tục đưa ra đánh giá đúng về câu lệnh lỗi khi ở phiên bản 2 câu lệnh 2 có thứ hạng nghi ngờ cao nhất.

Bảng 3.5: Độ nghi ngờ và thứ hạng của từng câu lệnh phiên bản lỗi 2 Câu lệnh

Độ nghi ngờ Xếp hạng

ESHS DHS DHS- def

DHS-

use ESHS DHS DHS- def

DHS- use

1 0.41 0.58 0.58 0.41 6 4 2 6

2 0.41 0.71 0.71 0.71 6 2 1 2

3 0.41 0.41 0.41 0.41 6 6 6 6

4 0.50 0.50 0.50 0.50 2 5 4 3

5 0.00 0.00 0.00 0.00 13 13 13 13

6 0.58 0.58 0.58 0.58 1 4 2 2

7 0.00 0.00 0.00 0.00 13 13 13 13

8 0.00 0.00 0.00 0.00 13 13 13 13

9 0.00 0.00 0.00 0.00 13 13 13 13

10 0.00 0.00 0.00 0.00 13 13 13 13

11 0.00 0.00 0.00 0.00 13 13 13 13

12 0.00 0.00 0.00 0.00 13 13 13 13

13 0.41 0.71 0.41 0.71 6 2 6 2

Dokumen terkait