Chương 3: Kiểm chứng thiết kế
3.3. Kiểm chứng thiết kế bằng LTSA
Sau khi đã đặc tả xong thiết kế của bài toán bằng FSP chúng ta tiến hành kiểm chứng thiết kế đó bằng cách sử dụng công cụ hỗ trợ kiểm chứng LTSA để phân tích mẫu LTS vừa được tạo ra.
3.3.1 Giao diện của công cụ LTSA
LTSA có giao diện trực quan rất dễ sử dụng như ảnh bên dưới:
Hình 3.3.1: Giao diện công cụ LTSA
Trong cửa sổ giao diện của chương trình có 3 khung nhìn:
- Edit: để soạn thảo mã cho chương trình hoặc hiển thị đoạn mã đã có sẵn.
- Output: nơi trả về kết quả khi kiểm tra độ an toàn hoặc khi biên dịch đoạn mã.
- Draw: Hiển thị kết quả là các mô hình khi biên dịch đoạn mã LTS.
Chi tiết về 3 khung nhìn này chúng ta sẽ tìm hiểu ở các phần tương ứng tiếp theo.
Nếu muốn viết một đoạn mã mới, chúng ta chỉ cần nhấn vào biểu tượng New File hoặc vào thực đơn File chọn New. Khi muốn lưu đoạn mã lại ta nhấn vào biểu tượng Save File hoặc tại hộp chọn File chọn Save, đặt tên cho đoạn mã và chọn OK.
Kiểu file mặc định là lts.
Nếu muốn mở một đoạn mã có sẵn, nhấn và biểu tượng Open file hoặc tại thực đơn File chọn Open… .
Khi công việc chuẩn bị mã đã xong, ta tiến hành kiểm tra đoạn mã:
3.3.2 Check safety
Check safety sẽ kiểm tra xem chương trình của bạn đã được thiết kế có an toàn hay không? Chương trình sẽ phân tích những tiến trình có trong thiết kế của bạn và phân tích xem trong quá trình các tiến trình đó hoạt động có xảy ra deadlock hay không?
Tại thực đơn Check chọn Safety
Hình 3.3.2: Kết quả hiển thị sau khi check safety
Trên hình vẽ, công cụ LTSA đã phân tích tất cả các máy trạng thái được tạo ra để kiểm tra xem thiết kế có an toàn không? Cụ thể trong bài toán này chúng ta có kết quả kiểm tra là “ No deadlock/errors” tức là thiết kế không có lỗi và không có deadlock.
3.3.3 Check Progress
Check progess có tác dụng tìm ra những hành động có vi phạm hay không, điển hình là hành động đó không có trạng thái kết thúc và không thể thực hiện được.
Tại thực đơn Check chọn Progress
Hình 3.3.3: Kết quả hiển thị khi check progress
Trong cửa sổ output, tất cả các máy trạng thái được phân tích để tìm các vi phạm có thể có. Cụ thể trong thiết kế này kết quả kiểm tra là “ No progress violations detected” nghĩa là không có progress nào vi phạm.
3.3.4 Compile
Chức năng Compile dùng để biên dịch đoạn mã LTS thành các máy trạng thái tương ứng, tại đó, ta có thể kiểm tra xem thiết kế có chính xác thieo yêu cầu không?
Muốn biên dịch đoạn mã tại cửa sổ của chương trình nhấn biển tượng chữ C (Compile) hoặc tại thực đơn Build chọn Compile.
Hình 3.3.4: Kết quả hiển thị khi biên dịch đoạn mã LTS
Sau khi chọn Compile khung nhìn Output sẽ hiện ra thông báo kết quả biện dịch, nếu đoạn mã không có lỗi, chương trình sẽ thông báo biên dịch thành công. Nếu đoạn mã có lỗi, cửa sổ sẽ thông báo có lỗi ở dòng bao nhiêu để sửa.
Trên màn hình hiển thị có 3 dòng chữ bắt đầu bằng “Conpiled” điều đó có nghĩa có 3 máy trạng thái được biên dịch và không có lỗi về cú pháp. Ba máy trạng được tạo ra thành công là CAR, NOPASS, và NOPASS2. Nếu cõ lỗi về cú pháp, chương trình sẽ không biên dịch được và sẽ báo lỗi đó là lỗi ở dòng bao nhiêu để ta có thể biết và sửa.
Các mô hình được tạo ra sẽ được hiển thị ở khung nhìn Draw mà được mô tả trong phần 3.3.5.
3.3.5 LTS Analiser
Kết quả phân tích ví dụ trên bằng LTSA:
Hình 3.3.5: LTS Analiser SingleLaneBridge
Mỗi mô tả FSP được mô tả bằng một mô hình tương ứng trong LTSA. Phần bên trái là danh sách các mô hình, phần bên phải hiển thị mô hình tương ứng được chọn ở danh sách bên trái.
Trên hình ta thấy một máy trạng thái với tên trạng thái ban đầu là red:CONVOY.NOPASS1. Máy trạng thái này tương ứng với đoạn mã sau trong LTS:
NOPASS1 = C[1],
C[i:ID] = ([i].enter -> C[i%N+1]).
NOPASS2 = C[1],
C[i:ID] = ([i].exit -> C[i%N+1]).
||CONVOY = ([ID]:CAR || NOPASS1 || NOPASS2).
||CARS = (red:CONVOY || blue:CONVOY).
3.3.6 LTSA Animator
LTSA Animator là chức năng để điều khiển cách hành động có thể xảy ra theo như thiết kế. Để sử dụng chức nằng này ta vào thực đơn Check chọn Run và chọn DEFAULT. Cửa sổ Animator sẽ hiện ra:
Hình 3.3.6: Animator SingleLandBridge
Các hành động trong Animator sẽ tương ứng với các hành động trong mô hình.
Hành động được chọn trong Animator sẽ điều khiển hoạt động của mô hình trong LTSA. Khi một hành động được thực thi, mỗi mô hình có hành động được thự hiện sẽ chuyển thành màu đỏ ở phần bên trái của cửa sổ LTSA. Hành động được thực thi cũng được thể hiện bằng màu đỏ trong mô hình ở phần bên phải của cửa sổ LTSA.
Toàn bộ các hành động trong thiết kế sẽ được Animator ghi lại, nhờ đó LTSA có thể kiểm tra được toàn bộ các hành động có thể xảy ra trong thiết kế. Với cách kiểm tra bằng mô hình như vậy, chúng ta có thể dễ dàng kiểm tra xem thiết kế có đúng với yêu cầu bài toán đặt ra không?
Bằng việc lựa chọn tất cả các hành động có thể xảy ra trong animator chúng ta đã kiểm tra được toàn bộ hoạt động của hệ thống tương tranh trong thiết kế. Qua đó chúng ta kết luận được thiết kế có hoạt động chính xác hay không. Cụ thể trong thiết
kế đang được kiểm chứng này, em đã kiểm tra các hoạt động xảy ra trong thiết kế và thấy thiết kế hoạt động đúng theo yêu cầu.