Chƣơng 2 TỔNG QUAN KIỂM THỬ DỰA TRÊN MÔ HÌNH
3.6. Thuật toán sinh tự động các đƣờng kiểm thử
3.6.5. Thuật toán xác định đƣờng kiểm thử cho khối loop
Thuật toán 5: Thuật toán xác định đƣờng kiểm thử cho khối loop.
Đầu vào: Biểu đồ tuần tự của khối loop biểu diễn bằng tệp xmi.
Đầu ra: Đƣờng kiểm thử tƣơng ứng. 1: create results = new ArrayList 2: if option.getValue = True then
3: add guard.getValue() 4: else
5: add !guard.getValue() 6: end if
7: for all element in operand of ListElementdo
7: if break is instanceof then
8: if breakOption.getValue = True then
9: paths = breakOption.genPath()
10: newResults = new ArrayList<String>() 11: for all string in pathsdo
12: for all currentPath in results do
13: if break condition is correct then
14: newPath = currentPath + breakGuard.getValue() + path 15: add newResults.add(newPath)
16: else
17: newResults.add(currentPath)
18: end if
20: end for
21: results = newResults; 22: else
23: paths = element.genPath() 24: newResults = new ArrayList
25: if break condition is correct then
26: newPath = currentPath + path 27: add newResults.add(newPath) 28: else 29: newResults.add(currentPath); 30: end if 31: results = newResults; 32: else
33: newResults = new ArrayList
34: if break condition is correct then
35: path = path.substring(0, path.length() - 3) 36: add newResults.add(newPath) 37: else 38: newResults.add(currentPath); 39: end if 40: end if 41: return newResults;
Thuật toán 5 mô tả quá trình sinh đƣờng kiểm thử cho phân đoạn loop. Phân đoạn loop có thể chứa các phân đoạn break: nếu phân đoạn break này đƣợc thực thi thì các hành vi trong phần còn lại của phân đoạn loop sẽ đƣợc thay bằng các hành vi trong break, nếu không thì vòng lặp bỏ qua break và tiếp tục chạy. Điều này dẫn đến các trƣờng hợp: không thực hiện bất cứ phân đoạn break nào, thực hiện phân đoạn break đầu tiên, thực hiện phân đoạn break thứ hai. Do đó ta phải tìm các trƣờng hợp
thực thi break và sinh đƣờng kiểm thử của các trƣờng hợp đó và lƣu vào mảng
breakCase, đồng thời tìm đƣờng kiểm thử của phân đoạn loop ở các trƣờng hợp
không thực thi bất cứ phân đoạn break nào. Sau đó ta ghép các đƣờng kiểm thử lại với nhau.