Chƣơng 1 : GIỚI THIỆU
2.3 thị dòng điều khiển
Đồ thị dòng điều khiển (Control Flow Graph - CFG) là đồ thị đƣợc sinh ra từ biểu đồ tuần tự bởi một thuật toán hồi qui, với các ràng buộc và thông số trong thiết kế biểu đồ tuần tự thì sẽ đƣợc bóc tách, biến đổi để sinh dữ liệu kiểm thử. Đồ thị dòng điều khiển là một đồ thị biểu diễn trực tiếp của biểu đồ tuần tự và đƣợc tạo nên từ bảy loại nốt nối với nhau bởi các đƣờng. Bảy loại nốt đó là [4]:
Nốt bắt đầu (Start node): là nốt khởi đầu của đồ thị.
Nốt đơn vị (BN – Block node): là nốt biểu thị cho một thông điệp hoặc một tuần
tự của của các thông điệp. Mỗi thông điệp m(i) bao gồm thông tin của lớp gửi và lớp nhận và có cấu trúc ( m(i), ParameterList, returnValue ). Mỗi thông số của một thông điệp có thể là một thuộc tính của ràng buộc OCL.
Nốt quyết định (DC – Decision node): là nốt biểu thị cho một hàm điều kiện nhƣ
điều kiện đúng (hoặc sai) cần đƣợc thỏa mãn để lựa chọn các toán hạng tƣơng ứng trong một phân đoạn.
Nốt sáp nhập (MN – Merge node): là nốt biểu thị cho sự sáp nhập các nhánh ra từ
một hành vi lựa chọn (chẳng hạn nhƣ lối ra từ một phân đoạn ALT hoặc OPT).
Nốt rẽ nhánh (FN – Fork node): là nốt biểu thị đầu vào của phân đoạn PAR hoặc
SEQ.
Nốt kết hợp (JN – Join node): là nốt đầu ra (hay kết thúc) của phân đoạn PAR hoặc SEQ.
Nốt kết thúc (End node): là nốt kết thúc của tất cả các chu trình trong đồ thị. Một đồ thị dòng điều khiển G đƣợc biểu diễn nhƣ sau: G <A, E, in, F> với:
o „in‟ là nốt khởi tạo (nốt bắt đầu).
o F là tập các nốt hay trạng thái cuối cùng của đồ thị.
o A là tập các nốt bao gồm (BN CN) với BN là nốt đơn vị (Block node),
CN = (DN MN FN JN) đƣợc gọi là tập các nốt điều khiển.
o E là tập các cạnh nối giữa các nốt. E = {f (x; y) | x, y A F}
Cấu trúc mỗi nốt A đƣợc đề xuất nhƣ sau: < nodeId, nodeType, nodeDetails, outEdge > với:
nodeId: là nhãn duy nhất đƣợc đính kèm vào mỗi nốt.
nodeType = {decision, merge, fork, join} với mỗi và
nodeType = {block, initial, final} cho tất cả các nốt còn lại.
nodeDetails = { ,..., | q là số của một tin nhắn trong BN}. Mỗi
nodeDetails đƣợc định nghĩa là một bộ ba < m, s, r > với mỗi bản tin xác định đƣợc đối tƣợng gửi s, đối tƣợng nhận r và tên của mỗi bản tin m cho tất cả các nốt
đơn vị BN. Mỗi thông điệp bao gồm các thông tin bên gửi từ biểu đồ lớp
và có cấu trúc < m, ParamList, rValue >. Các thông tin này sẽ đƣợc đính kèm vào cả các bộ thông số ParamList = { } và trả về giá trị rValue. Ngoài ra, một
thông số của một phƣơng thức còn có thể đƣợc cung cấp từ các thuộc tính,
ràng buộc các lớp. Một thông số hay một giá trị trả về đƣợc tách riêng và các thông tin ràng buộc từ biểu đồ lớp và có cấu trúc < name, type, value, constraint > với
name là tên của bộ thông số hoặc thuộc tính, type là dạng dữ liệu, value là giá trị
đƣợc gán. Còn constraint đƣợc lấy từ ràng buộc OLC đƣợc khai báo từ các thuộc
tính biểu đồ lớp hoặc đã đƣợc đính kèm vào biểu đồ tuần tự.
outEdge = { ,…, | q là số cạnh nối}. Mỗi đƣợc xác định bằng < sourceNode, targetNode > [13].