3.3. Pha sinh dữ liệu kiểm thử
3.3.1. Xây dựng đồ thị dòng điều khiển từ mã nguồn
Phần này trình bày bước đầu tiên trong thuật toán LDFS (dòng 1). Đồ thị dòng điều khiển được sử dụng để tính độ phủ đạt được từ đường thi hành, và sinh tập đường thi hành có thể thực thi được. Tư tưởng chính của thuật toán xây dựng đường thi hành có thể thực thi được là duyệt đồ thị theo chiều sâu (depth-first search).
double average(int value[], int min, int max){ int tcnt = 0, vcnt = 0;
int sum = 0, i = 0;
while (value[i] != -2 && tcnt < 10){ tcnt++;
if (min <= value[i] && value[i] <= max){ sum = sum + value[i];
vcnt++; }
return -9; return sum/vcnt; }
Mã nguồn 3.3. Mã nguồn hàm average.
Hình 3.3. Minh họa đồ thị CFG phủ câu lệnh/nhánh.
Tư tưởng chính để xây dựng đồ thị dòng điều khiển từ mã nguồn là áp dụng thuật toán chia để trị. Ví dụ cụ thể, Hình 3.3 trình bày đồ thị CFG phủ câu lệnh/nhánh tương ứng với hàm average trình bày ở Mã nguồn 3.3 thỏa mãn tiêu chí phủ câu lệnh. Khởi đầu, hàm average được chia nhỏ thành bốn khối con gồm khối while, khối if, lệnh return và câu lệnh khai báo dòng 2. Như vậy, đồ thị CFG khởi đầu gồm bốn đỉnh ứng với bốn khối này. Bốn khối này được liên kết với nhau theo dạng danh sách liên kết trong đồ thị CFG. Nhận thấy khối while còn có thể phân tích tiếp được, ta tiếp tục chia nhỏ khối while này thành các khối nhỏ hơn gồm (value[i]!=- 2&&tcnt<2) và khối lệnh khi thỏa mãn điều kiện. Khối if phân tích tương tự khối
đó, khối lệnh trong while được phân tích tiếp và quá trình này cứ lặp lại như thế. Quá trình phân tích kết thúc khi mọi đỉnh trong đồ thị CFG không thể chia nhỏ được nữa. Bên cạnh đồ thị phủ cấp câu lệnh/nhánh, đồ thị CFG MC/DC hàm average thể hiện ở Hình 3.4.
Hình 3.4. Minh họa đồ thị CFG phủ MC/DC.