5.2 Các kỹ thuật kiểm chứng đặc tả an toàn
5.2.1 Kiểm chứng đặc tả
Chứng minh các đặc tả rất phức tạp và việc chứng minh thủ cơng có thể có lỗi đến mức khơng ai có thể tin tưởng do vậy cần có các cơng cụ tự động. Có hai cách tiếp cận là sử dụng cơng cụ chứng minh định lý (theorem prover) và kiểm chứng mơ hình (model
checker).
Chứng minh định lý. Các cơng cụ này có thể có các mức độ tinh vi và phức tạp
khác nhau từ việc kiểm tra các chứng minh các bước thủ công cho đến sử dụng các kỹ thuật của trí tuệ nhân tạo. Các hệ thống chứng minh và tích hợp đặc tả cho phép tạo ra một cách tựđộng các định lý dựa trên các tiên đề, hàm, bất biến, các hạn chế
và các thành phần khác của đặc tả.
Các công cụ hiện thời cho phép chứng minh các bất biến và các ràng buộc của các
đặc tả chứa hàng nghìn dịng với mức độ tin cậy thỏa đáng. Thông thường, các
công cụ này cần có sự trợ giúp từ phía người dùng trong việc sinh ra các tiên đề,
ràng buộc hay bất biến.
Kiểm chứng dựa trên mơ hình. Kỹ thuật này dựa trên việc mô tả các hành vi hệ
83 các mơ hình hệ thống được kiểm nghiệm tất cả các trạng thái có thể mà thỏa mãn các mơ tả ở trên bằng thuật toán. Việc này cho phép phát hiện sớm các lỗi như
thiếu đầy đủ, mơ hồ, không nhất quán trong giai đoạn phân tích thiết kế.
Kỹ thuật này là cơ sở từ kiểm nghiệm toàn bộ (kiểm chứng mơ hình – model checking) hay kiểm nghiệm các tình huống giới hạn (mơ phỏng) hay kiểm nghiệm
thực tế (test). Đáng chú ý nhất là kiểm chứng mơ hình. Đây là kỹ thuật xem xét tất cả các trạng thái hệ thống có thể theo kiểu vét cạn. Nhờ vậy có thể chứng minh
được mơ hình hệ thống cho trước thực sự thỏa mãn một thuộc tính nhất định được mô tả trong phần đặc tả.
Các công cụ. Phần dưới đây giới thiệu sơ bộ các công cụ hỗ trợ cho việc xây dựng và kiểm chứng hệ thống nói chung và ứng dụng cho phần mềm nói riêng.
Spin : được dùng để lập mơ hình phần mềm song song hay tiến trình dị bộ.
Được phát triển bởi Bell Labs, Spin chủ yếu nhắm đến kiểm chứng chính
tắc các thuật tốn máy tính.
Uppaal : được dùng để lập mơ hình hệ thống thời gian thực. Các chức năng cũng tương tự như Spin. Uppaal sử dụng ngôn ngữ riêng cho việc mơ tả các mơ hình cũng như các thuộc tính.
SMV, NuSMV : được dùng để lập mơ hình phần cứng (lơ-gíc số) tuy nhiên
cũng có thể dùng được cho lĩnh vực khác.
FDR : được dùng để lập mơ hình hệ thống dị bộđược phát triển bởi Trường Oxford. FDR sử dụng ngôn ngữ mô tả dành cho các tiến trình song song. Các hệ thống được lập mơ hình dựa trên các sự kiện đồng bộ. FDR có nhiều ảnh hưởng lên các cơng cụ khác như SPIN.
Alloy : được dùng để phân tích tính nhất quán của các cấu trúc dữ liệu dựa
trên lý thuyết tập hợp do Trường MIT phát triển. Alloy sử dụng lơ-gíc bậc nhất để chuyển các đặc tả thành các biểu thức Boolean và phân tích dựa trên bộ phân tích SAT.
Simulink Design Verifier : được dùng để kiểm chứng mơ hình được sinh ra
từ Simulink, một cơng cụ mô phỏng dựa trên luồng dữ liệu và máy trạng thái. Công cụ này được các kỹ sư sử dụng rộng rãi. Điểm khác biệt là
Simulink cho phép sinh ra mã C từ các mơ hình. Vì vậy, cơng cụ này cũng có thể coi là công cụ triển khai.
5.2.2 Kiểm chứng bằng Alloy
Phần dưới đây giới thiệu chi tiết cách thức sử dụng Alloy cho việc mô tả và kiểm chứng các yêu cầu của hệ thống máy tính và ứng dụng cho việc mô tả các yêu cầu của hệ thống file trong máy tính do Trường MIT cung cấp.
Trước hết, Alloy là ngôn ngữ rút gọn dùng để mô tả các thuộc tính có cấu trúc. Alloy
hỗ trợ việc mô tả các cấu trúc cơ sở (dạng đồ họa hay các khai báo dạng văn bản), cũng
84 biểu diễn bằng các cơng thức lơ-gíc). Như vậy, Alloy khơng chỉ tích hợp mơ hình đối
tượng mà cả mơ hình hoạt động theo phương pháp Fusion. Ngơn ngữ này có thể so sánh được với ngơn ngữ ràng buộc đối tượng OCL (Object Constraint Language) của ngơn
ngữ UML.
Alloy có khả năng phân tích ngữ nghĩa hồn tồn tự động mà có thể cho phép kiểm tra kết quả và tính nhất quán và việc thực hiện mơ phỏng. Để có được khả năng thực thi, Alloy hy sinh việc trừu tượng hóa, mà có thể tạo ra các chuyển dịch mẫu của một thao
tác được mô tả ngầm sử dụng phép phủđịnh và phép giao.
Ngôn ngữ này đã được sử dụng để lập mơ hình và phân tích nhiều vấn đề như giao thức Internet di động, mơ hình an tồn máy tính và mạng...
a. Lập mơ hình
Mục tiêu của việc viết một mơ hình là để mơ tả một vài khía cạnh của hệ thống, hạn chế nó để loại trừ các trường hợp khơng đúng, và kiểm tra các thuộc tính về hệ thống. Ví dụ, có thể mơ tả các thủ tục của công ty sử dụng cho việc chuyển hướng thư nội bộ, bổ sung một số ràng buộc về việc người chuyển thư cần phải xử lý như thế nào, và sau đó
kiểm tra liệu các phần nào của thư hoặc tới đúng nơi nhận hay trả lại người gửi. Cơng cụ lập mơ hình có thể trả lời “u cầu này ln đúng với bài tốn với kích cỡ là X” hoặc
“u cầu này khơng đáp ứng được và đây là phản ví dụ”. Mơ hình có thể coi là cách thức
diễn giải các đặc tả của hệ thống mong muốn và chính là cách thức hệ thống được triển khai.
Có hai dạng vấn đề có thể nảy sinh mơ hình được xây dựng:
Thiếu sót trong bản thân mơ hình. Điều này có thể xuất phát từ việc xây dựng thừa và thiếu các ràng buộc của mơ hình.
Lỗi trong đối tượng được lập mơ hình. Cần phải kiểm tra các khẳng định (assertion) của hệ thống bằng cách lần theo vết khẳng định bị lỗi.
Alloy giống với các kỹ thuật lập mơ hình và các ngơn ngữ khác nhưng có một số
khác biệt quan trọng:
Kiểm tra hữu hạn. Khi phân tích mơ hình, cần xây dựng phạm vi hữu hạn của mơ hình. Việc phân tích đảm bảo điều kiện cần nhưng khơng đủ. Dù vậy, nó
đủ với phạm vi hữu hạn của mơ hình và khơng bao giờ thiếu phản ví dụ.
Mơ hình vơ hạn. Mơ hình viết bằng Alloy khơng phản ánh thực tế là việc phân tích là hữu hạn. Tức là, người dùng mô tả các bộ phận của hệ thống và các
tương tác của chúng nhưng không chỉ rõ có bao nhiêu bộ phận có thể có.
Mơ tả. Người lập mơ hình mơ tả trả lời câu hỏi “hệ thống nhận biết được X xảy
ra như thế nào” ngược với người lập mơ hình thực thi yêu cầu “Làm sao để
85
Phân tích tự động. Khác với ngôn ngữ mô tả đặc tả khác như Z hay UML,
Alloy có thể tự động phân tích. Cụ thể, người dùng có thể tự sinh ra các ví dụ hay phản ví dụ về các yêu cầu của hệ thống được lập mơ hình.
Dữ liệu có cấu trúc. Alloy hỗ trợ các cấu trúc dữ liệu phức tạp như cây, như vậy mạng lại cách thức biểu diễn trạng thái phong phú.
b. Mơ hình hệ thống file
Phần này giới thiệu sử dụng Alloy để lập mơ hình hệ thống file và các ràng buộc đơn giản. Các đối tượng của hệ thống file có thể là file hay thư mục. Mỗi đối tượng file này có một gốc (thư mục chứa nó), các thư mục chứa nội dung (file hay thư mục mục con). Ngồi ra có thư mục gốc là đối tượng nằm trên đỉnh của hệ thống file.
Hệ thống file có thể có các ràng buộc như mỗi đối tượng của hệ thống file hoặc là file hoặc là thư mục, hệ thống file được kết nối, thư mục gốc khơng có cấp cao hơn,... Để khảo sát đặc tính động của hệ thống file cần bổ sung thêm thao tác di chuyển. Thao tác
cho phép thay đổi cấu trúc của hệ thống file.
Định nghĩa các thành phần cơ bản
Tập các đối tượng của hệ thống file FSObject được định nghĩa giống như một lớp
trong ngơn ngữ lập trình hướng đối tượng.
sig FSObject { parent: lone Dir }
Các quan hệ của FSObject được mô tả giống như một trường của đối tượng. Ở đây
FSObject có quan hệ với thư mục khác chứa bản thân nó gọi là parent. Từ khóa lone cho
thấy quan hệ này là quan hệ 0 hoặc 1. Nghĩa là FSObject có thể nằm trong thư mục khác hoặc khơng. Tương tự như vậy, có thể định nghĩa hai đối tượng khác của hệ thống file là
thư mục Dir và file File.
// Thư mục
sig Dir extends FSObject { contents: set FSObject }
// file
sig File extends FSObject { }
Từ khóa extends cho thấy các file File và thư mục Dir là tập con của FSObject và hai tập File và Dir khơng có thành phần chung. Tất cả các thuộc tích của FSObject đều được
86