Ví dụ tiếp theo, trường hợp phủ điều kiện con, điều kiện kép (a>=0 || ((b>=0 && c>=0) || b+c>=0) || a+b+c>=0) phân tích thành đồ thị tương ứng mô tả ở hình 3.6. Điều kiện kép nêu trên do ba điều kiện con hợp thành là a>=0, (b>=0 && c>=0)
20
|| b+c>=0 và a+b+c>=0. Điều kiện a>=0và a+b+c>=0 không cần phân tích tiếp vì thỏa mãn điều kiện đơn. Trong khi đó, điều lệnh kép (b>=0 && c>=0) || b+c>=0 sẽ được phân tích tiếp thành 2 điều kiện con: (b>=0 && c>=0) và b+c>=0. Quá trình phân tích cứ lặp lại như thế cho đến khi mọi điều kiện con này đều là các điều kiện đơn. Cuối cùng, đồ thị ứng với điều kiện kép cần phân tích sẽ cập nhật trong đồ thị CFG kết quả.
Bắt đầu
a >= 0
Khối lệnh tiếp theo khi các điều kiện
được thỏa mãn c >= 0 b+c >= 0 Kết thúc hàm T F F T F T F T b >= 0 a+b+c >= 0
Khối lệnh tiếp theo khi các điều kiện
được thỏa mãn T
Hình 3.6. CFG điều kiện kép(a>=0 || ((b>=0 && c>=0) || b+c>=0) || a+b+c>=0)
3.3.Xây dựng tập đường kiểm thử 3.3.1.Xây dựng tập đường đi độc lập 3.3.1.Xây dựng tập đường đi độc lập
Hình 3.7mô tả thuật toán sinh tập đường đi độc lập dựa trên ý tưởng sinh tập đường đi độc lập do MC-Cabe đề xuất nêu trong [6]. Đầu vào thuật toán là CFG được lưu bởi biến graph, đầu ra là tập đường đi độc lập P.
21 Bắt đầu Khởi tạo graph, P shortestPath:= Duyệt graph
theo nhánh false
Lưu shortestPath vào
tập đường đi độc lập
S:= tập các đỉnh quyết định trên shortestPath
visited:= Ø
u:= một đỉnh bất kỳ trong tập S
v:= một đỉnh kế tiếp trong S thỏa mãn (u,v)
chưa có trong P
nextPath:= đường đi ngắn nhất qua (u,v)
Lưu nextPath vào P
S:= S Ո tập các đỉnh quyết định trên
nextPath không thuộc visited
S.remove(u) visited.add(u) True False Kết thúc S != Ø