.Xây dựng đồ thị dòng điều khiển từ mã nguồn

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp sinh dữ liệu kiểm thử tự động cho các ứng dụng java (Trang 28 - 32)

Chi tiết thuật toán sinh đồ thị dòng điều khiển của hàm Java thỏa mãn một tiêu chuẩn phủ kiểm thử cho trước được trình bày ở hình 3.2. Đầu vào thuật toán gồm hàm Java được lưu trong biến f và tiêu chí phủ kiểm thử lưu trong biến t. Đầu ra thuật toán là đồ thị dòng điều khiển(CFG) lưu trong biến graph. Đầu vào cùng một hàm Java, CFG ứng với tiêu chí phủ câu lệnh và phủ nhánh giống nhau và đơn giản hơn so với tiêu chí phủ điều kiện con.

Bước đầu tiên thuật toán, ta gán CFG chính là hàm đầu vào f. Ta sẽ kiểm tra xem

CFG có thỏa mãn độ phủ t hay không. Nếu CFG chưa thỏa mãn độ phủ t, ta tiến hành phân tách f thành một tập các khối mã nguồn con và lưu trong biến B. Tiếp theo, ta xây dựng đồ thị G(V,A) thỏa mãn mỗi đỉnh đồ thị G(trong tập đỉnh V) lưu một khối mã nguồn con, các cạnh mô tả thứ tự thực hiện của các khối mã nguồn con trongf (được lưu trong tập các cạnh A). Sau đó, đỉnh của graph lưu f được thay thế thành đồ thị G. Nếu đồ thị G tồn tại các đỉnh lưu câu lệnh break, continuereturn thì con trỏ mà các đỉnh này trỏ tới đỉnh khác sẽ trỏ lại đến đúng đỉnh khác trong graph. Cuối cùng, những khối mã nguồn con còn khả năng phân tích tiếp ra các khối mã nguồn con khác, hàm đệ quy được gọi.

Một khối mã nguồn con không cần phân tích tiếp chỉ khi đã thỏa mãn tiêu chuẩn phủ kiểm thử. Cụ thể, với tiêu chuẩn phủ câu lệnh và phủ nhánh, các đỉnh trong CFG lưu câu lệnh đơn và điều kiện trong các khối lệnh điều khiển. Tuy nhiên, điều kiện của khối lệnh điều khiển có thể do một điều kiện hoặc nhiều điều kiện đơn hợp thành. Nếu phân tách tiếp các điều kiện khối lệnh điều khiển thành đồ thị mà các đỉnh là điều kiện

17

đơn và các cạnh là nhánh true/false thì sinh ra CFG thỏa mãn tiêu chuẩn phủ điều kiện con.

Begin

f: hàm đầu vào - Java

t: độ phủ (0 hoặc 1) Khởi tạo CFG:=f CFG thỏa mãn độ phủ t Chọn B:= {M1, M2, …, Mn} mà Mi có thể chia nhỏ được (1≤ i ≤ n) False Chia nhỏ B End True Cập nhật CFG

Hình 3.2. Thuật toán sinh CFG từ mã nguồn.

Ví dụ cụ thể, hình 3.3 mô tả hàm kiemTraNamNhuan. Hình 3.4đưa ra đồ thị CFG tương ứng với hàm kiemTraNamNhuantrình bày ở hình 3.3 thỏa mãn tiêu chí phủ câu lệnh và phủ nhánh. Phân tích hàm kiemTraNamNhuanthu được tập khối mã nguồn con gồm 3 khối: khối if, lệnh return và câu lệnh khai báo dòng 2. Ba khối này đượcliên kết với nhau theo dạng danh sách liên kết.

Tiếp tục, khối if được phân tích tiếp thu được ba khối mã nguồn con khác: câu lệnh gán giá trị leaped=true, khối con ifvới điều kiện đơn (year%4==0) và một khối con ifkhác với điều kiện kép (year%100==0 &&year%400!=0). Lệnh return, câu lệnh khai báo và điều kiện kép không cần phân tích tiếp.

18 Hình 3.3. Mã nguồn hàm kiemTraNamNhuan. Bắt đầu boolean leaped=false int year year %4 ==0

year%100==0 && year%400!=0 year >1582

leaped=false return leadped

Kết thúc hàm True False True False True False False

Hình 3.4. CFG hàm kiemTraNamNhuantiêu chuẩn phủ câu lệnh, phủ nhánh

19

Để sinh ra CFG thỏa mãn tiêu chuẩn phủ điều kiện con cho hàm kiemTraNamNhuan, ta tiếp tục phân tích tiếp khối con if với điều kiện kép

(year%100==0 &&year%400!=0)để thu được hai khối con if đơn (year%100==0)

(year%400!=0). Hình 3.5 mô tả CFG hàm kiemTraNamNhuan thỏa mãn tiêu chuẩn phủ

điều kiện con.

Bắt đầu boolean leaped=false int year year %4 ==0 year%400!=0 year >1582

leaped=false return leadped

Kết thúc hàm True False True False True False year%100==0 True False False

Hình 3.5. CFG hàm kiemTraNamNhuan tiêu chuẩn phủ điều kiện con

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>=0a+b+c>=0. Điều kiện a>=0a+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)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

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp sinh dữ liệu kiểm thử tự động cho các ứng dụng java (Trang 28 - 32)

Tải bản đầy đủ (PDF)

(62 trang)