Tính chất mong muốn được đặc tả bằng cơng thức LDI: 0 l s1 - s2 5 Khi đó file otomat1.txt có nội dung như sau:
0_U_5 2_s1 s1#x2_0_5#1 s2#x1_0_8|x2_0_10#-1 2 s1#x2_x0_3_U#a#x2_1#s2 s2#x1_x0_6_U|x2_x0_4_U#b#x1_1#s1
3.4.2. Ơtơmat
Thiết kế cấu trúc dữ liệu để lưu trữ các thành phần của ôtômat thời gian A=<L, l0, , X, I, E> được lưu trong file *.txt, ta sẽ sử dụng cấu trúc mảng trong PHP để lưu các thành phần của ơtơmat A như sau:
(kí hiệu xxx bên dưới thể hiện 1 giá trị nào đó của phần tử tương ứng)
$aryOtomat = array(
‘init’ => l0, //Vị trí ban đầu
‘numLocation’ => xxx, //số vị trí của ơtơmat
‘numTransition’ => xxx, //số phép chuyển của ôtômat
‘clocks’ => array(x1,x2, …, xn), //là mảng chứa tập các đồng hồ X
‘aryLocation’ => array( //Mảng chứa vị trí và thơng tin các vị trí của ơtơmat ‘{tên vị trí}’ => array( //Mảng chứa thơng tin của 1 vị trí
‘invar’ => array( //Mảng chứa các bất biến của vị trí ‘xi’ => array( // Ràng bc đồng hồ xi: low <= xi <= up
‘low’ => xxx, //Cận dưới của đồng hồ xi ‘up’ => xxx, //Cận trên của đồng hồ xi ), … ), ‘c’ => xxx //Hệ số LDI ), … ),
‘aryTransition’ => array( //Mảng chứa các phép chuyển i => array( //Phép chuyển thứ i
‘loc_name_from’ => xxx, //Tên vị trí đầu(source) ‘loc_name_to’ => xxx, // Tên của vị trí cuối(target) ‘label’ => xxx, //Nhãn của phép chuyển
‘reset’ => array( //Tập các đồng hồ thiết lập lại bằng 0 (reset) ‘xi’ => 1, //Đồng hồ xi sẽ được gán lại giá trị 0
),
‘guard’ => array( //Mảng chưa các ràng buộc của phép chuyển ‘xi-xj’ => array( //Ràng buộc dạng: low <= xi-xj<= up
‘low’ => xxx, ‘up’ => xxx
),
‘xi’ => array( //Ràng buộc dạng: low <= xi<= up ‘low’ => xxx, ‘up’ => xxx ), … ), ), … ) ); 3.4.3. Công thức LDI
Các hệ số LDI ứng với từng vị trí của ơtơmat được đưa vào cấu trúc vị trí của ơtơmat (xem trong phần 3.3.2), cịn các hệ số A, B, M của công thức LDI sẽ được đưa vào trong cấu trúc mảng sau:
$aryLdi = array( ‘A’ => xxx, //Hệ số A ‘B’ => xxx, //Hệ số B ‘M’ => xxx //Hệ số M ); 3.4.4. Đồ thị vùng đạt được nguyên
Đồ thị vùng được thể hiện là 1 mảng chứa các thông tin gồm: số đỉnh, số cạnh, 1 mảng chứa tập đỉnh, 1 mảng chứa tập cạnh.
$aryRegionGraph = array(
‘num_vertex’ => xxx, //số đỉnh
‘num_edge’ => xxx, //số cạnh
‘aryVertex’ => array( //Mảng chứa thông tin các đỉnh
i => array( //Đỉnh thứ i = ID đỉnh, i là số tự tăng, bắt đầu từ 1
‘vertex’ => xxx, //Tên đỉnh có dạng: {tên vị trí}_[region]
‘ldi_c’ => xxx, //Hệ số LDI
),
…
),
‘aryEdge’ => array( //mảng chứa thông tin các cạnh
i => array( //thông tin cạnh thứ i+1, chỉ số bắt đầu từ 0
‘id_form’ => xxx, //ID của đỉnh đầu(source)
‘id_to’ => xxx, //ID của đỉnh cuối (target)
‘duration_low’ => xxx, //Cận dưới thời gian
‘duration_up’ => xxx //Cận trên thời gian
), …
)
);
3.4.5. Đồ thị trọng số phục vụ kiểm chứng LDI
Về mặt cấu trúc thì mảng chứa đồ thị trọng số LDI và mảng chứa đồ thị vùng giống nhau, cụ thể cấu trúc mảng của đồ thị trọng số LDI như sau:
$aryWeighGraphLdi = array( ‘num_vertex’ => xxx, //số đỉnh ‘num_edge’ => xxx, //số cạnh
‘aryVertex’ => array( //Mảng chứa thông tin các đỉnh
i => array( //Đỉnh thứ i = ID đỉnh, i là số tự tăng, bắt đầu từ 1 ‘vertex’ => xxx, //Tên đỉnh
‘ldi_c’ => xxx, //Hệ số LDI ),
… ),
‘aryEdge’ => array(( //mảng chứa thông tin các cạnh i => array( //thông tin cạnh thứ i
‘id_form’ => xxx, //ID của đỉnh đầu(source) ‘id_to’ => xxx, //ID của đỉnh cuối (target) ‘w’ => xxx, //trọng số của cung (weigh)
), … )
);
3.4.6. Đường đi của đồ thị
Sử dụng ngăn xếp là 1 mảng để lưu vết đường đi phục vụ cho thuật toán (vét cạn) duyệt đồ thị trọng số LDI để kiểm chứng công thức LDI, ngăn xếp này lưu tên mỗi đỉnh và tập các đỉnh kề với nó khi thuật toán duyệt đi qua. Ngăn xếp này được thiết kế như sau:
$aryStackPath = array(
i => array( //thông tin đỉnh thứ i+1 trong đường đi
v => array(v1,v2,…,vk), //đỉnh v và các đỉnh kề với v
…
),
3.5. Thiết kế chương trình
Trong mục này sẽ trình bày một số biểu đồ thiết kế cơ bản chương trình của bộ kiểm thử.
3.5.1. Biểu đồ use case
Dựa trên các yêu cầu của bộ công cụ kiểm chứng được mô tả ở trên, ta xác định và đưa ra use case tổng quát của hệ thống với tác nhân (Actor) ở đây là người thiết kế hoặc người lập trình như sau: