Chương 2 Kiến thức nền tảng
2.3. Bài toán kiểm chứng hệ thống thời gian thực
Song song với quá trình phát triển trong lĩnh vực phát triển phần mềm, các kỹ thuật kiểm chứng phần mềm cũng được cải tiến và ngày càng giải quyết những vấn đề phức tạp và khó. Kiểm chứng phần mềm được phát triển nhằm mục đích chứng minh phần mềm được sản xuất ra đúng với yêu cầu thiết kế. Để giải quyết bài tốn này, phương pháp hình thức là một cách tiếp cận tốt nhất. Khi dùng phương pháp hình thức, các nhà phát triển có thể khắc phục nhiều nhược điểm của cách tiếp cận truyền thống. Đó là áp dụng phương pháp hình thức vào tất cả các giai đoạn trong phát triển phần mềm, bắt đầu từ ngay pha thiết kế. Một lỗi được phát hiện trong giai đoạn thiết kế có thể giảm nhiều lỗi trong các giai đoạn phát triển sau này. Các kỹ thuật đã được áp dụng trong lĩnh vực kiểm chứng hệ thống được tóm tắt trong một số mục sau đây.
1. Mơ hình hóa hệ thống thời gian thực: Các phương pháp được áp dụng cho bài tốn này là sử dụng ơtơmát thời gian [5], biểu thức chính quy thời gian [35], ôtômát khoảng (Duration Automata) [36], Timed Petri Nets [37], v.v.
2. Đặc tả các tính chất của hệ thống: Các kỹ thuật dùng để đặc tả tính chất của hệ thống như: Timed regular expression, Timed LTL [1,3], WCTL [38], Timed CTL [1,3], MITL [6], DC [31] v.v.
3. Cơng cụ kiểm chứng: Có hai cách tiếp cận trong việc phát triển các công cụ kiểm chứng hệ thống thời gian thực được trình bày cụ thể như sau:
(a) Dựa trên mơ hình: Gồm các công cụ Kronos [39], HyTech [40], UP- PAAL [41], UPPAAL-SMC [42] và các phiên bản mở rộng, PRISM [43], MRMC [44], v.v.
(b) Dựa trên chứng minh định lý: Hiện nay, với hướng tiếp cận này, rất hiếm các công cụ được áp dụng cho hệ thống thời gian thực, có thể kể ra cơng cụ điển hình là PSV [45], hầu hết chỉ áp dụng cho hệ thống phi thời gian như: PVS phiên bản gốc, CafeOBJ, v.v. Ngồi ra, một số cơng cụ phát triển để kiểm tra tính thỏa được của các cơng thức lơgíc, đó là các cơng cụ sử dụng SAT-solver như Z3, MiniSAT, v.v.
2.3.1 Đặc tả và mơ hình hóa hệ thống
Mơ hình hóa hệ thống là một phần quan trọng trong bài tốn kiểm chứng phần mềm. Mơ hình của hệ thống là một dữ liệu vào của bộ kiểm chứng mơ hình. Do đó, mơ hình phải phản ảnh chi tiết và đầy đủ các hành vi của hệ thống cần kiểm chứng. Phương pháp phát triển phần mềm thời gian thực dựa trên thành phần dù có nhiều ưu điểm nhưng do các thành phần phần mềm được coi là “hộp đen” nên cần phải có phương pháp đặc tả các thành phần phần mềm một cách chi tiết, đầy đủ các chức năng và thuộc tính của hệ thống, và phải có tính trừu tượng cao để có thể dễ dàng áp dụng các kỹ thuật trong phương pháp kiểm chứng mơ hình. Hiện nay, một trong những phương pháp nổi bật nhất là sử dụng lý thuyết giao diện thành phần [15,46–51]. Các lý thuyết này đề cập đến các khía cạnh khác nhau về lý thuyết giao diện như tính đồng bộ, bất đồng bộ, ràng buộc thời gian, quan hệ vào/ra, v.v. Đối với hệ thống thời gian thực, người ta sử dụng ôtômát thời gian hoặc những lý thuyết tương đương để mơ hình hóa hệ thống.
Để biết được các giao diện thành phần hoạt động như thế nào, cần phải biểu diễn hữu hạn các hành vi của giao diện thành phần, có một số cơng trình điển hình như Đại số giao diện (Interface Algebra) đã mơ tả được các thành phần phần mềm bằng giao diện một cách ngắn gọn, rõ ràng [52–54]. Lý thuyết này đã đề cập đến các kỹ thuật đối với giao diện như: Cắm môi trường vào giao diện, làm mịn, các thao tác ghép các giao diện để có thể mơ tả được hệ thống phức tạp. Các phương pháp kiểm chứng cũng được đưa ra trong các lý thuyết này.
Kế tiếp đến các cơng trình lý thuyết sau được phát triển để có thể ứng dụng cho giao diện thành phần thời gian thực như Đại số giao diện cho hệ thống thời gian thực [55], phát triển mơ hình cho giao diện hệ thống thời gian thực [15,51], giao diện thời gian [56–58]. Tuy nhiên, chưa có phương pháp tồn diện cho lĩnh vực này.
2.3.2 Đặc tả tính chất của hệ thống
Đối với bài tốn kiểm chứng, các tính chất của hệ thống thời gian thực được đặc tả bằng các hệ lơgíc thời gian. Phương pháp đầu tiên là dùng hệ toán mệnh đề. Hệ toán mệnh đề đã mệnh đề hóa các phát biểu bằng các ký hiệu, từ đó kết hợp với các phép tốn trong lơgíc để hình thành nên cơng thức
trong lơgíc mệnh đề. Bài tốn chứng minh các cơng thức lơgíc đồng nhất đúng, đồng nhất sai sẽ có ứng dụng rất lớn trong việc chứng minh một chương trình máy tính chạy đúng hay sai. Tồn bộ kiến thức được trình bày trong cuốn sách lơgíc trong khoa học máy tính (Logic in Computer Science: Modelling and Reasoning about Systems) [59]. Tiếp theo có nhiều phương pháp được đề xuất như sử dụng LTL [30], CTL [3,60], RE [35], và MITL, MTL [6,7], DC [31], v.v.
2.3.3 Bài tốn kiểm tra tính rỗng
Khi cần kiểm chứng một hệ thống nào đó, đầu tiên, một thiết kế hoặc một cài đặt nào đó của hệ thống được mơ hình hóa bằng một mơ hình, phổ biến là một ơtơmát. Tiếp theo, một tính chất của hệ thống cần kiểm chứng được đặc tả bằng một trong các hệ lơgíc [1,3]. Các nhà nghiên cứu áp dụng bài tốn kiểm tra tính rỗng của ngơn ngữ để thực hiện việc kiểm chứng này. Đặt mơ hình của hệ thống là M, đặt ngơn ngữ của M là L(M). Đặt S là một đặc tả tính chất nào đó của hệ thống thể hiện bằng ngơn ngữ L(S). Khi thực hiện kiểm chứng
các tính chất của hệ thống, người ta kiểm tra xem L(M) có thỏa mãnL(S) hay
khơng? Điều này khó chứng minh bằng cách so sánh trực tiếp hai ngôn ngữ. Do vậy, người ta sẽ tìm ngơn ngữ bù của L(S), ký hiệu ¬L(S), rồi kiểm tra
giao củaL(M) với ¬L(S) có rỗng hay khơng, ký hiệu L(M)∩ ¬L(S) =∅? Nếu L(M)∩ ¬L(S) = ∅ khẳng định mơ hình của chương trình thỏa một tính chất được đặc tả bằng S, trường hợp ngược lại khẳng định không thỏa yêu cầu và
có thể cơ lập các lỗi để khắc phục. Nhưng điều quan trọng là khi mơ hình hóa hệ thống có đảm bảo được sự tương đương giữa chương trình phần mềm với mơ hình được đưa vào kiểm chứng. Đây là bài toán được nghiên cứu nhiều trong lĩnh vực kiểm chứng phần mềm.