Các phương pháp kiểm chứng đang được quan tâm số một trong việc chứng minh tính đúng đắn của hệ thống với các tính chất cho trước ví dụ: chỉ số mảng luôn nằm trong biên, giá trị số luôn
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
-
Đỗ Thái Ngọc Trung
TÓM TẮT LUẬN VĂN THẠC SĨ KỸ THUẬT
HÀ NỘI - 2021
Trang 2-
Đỗ Thái Ngọc Trung
NGHIÊN CỨU PHƯƠNG PHÁP GIẢI RÀNG BUỘC SMT VÀ ÁP DỤNG
ĐỂ PHÁT HIỆN LỖI TRÀN SỐ CHO MÔ HÌNH SIMULINK
CHUYÊN NGÀNH : HỆ THỐNG THÔNG TIN
MÃ SỐ : 8.48.01.04
TÓM TẮT LUẬN VĂN THẠC SĨ KỸ THUẬT
NGƯỜI HƯỚNG DẪN KHOA HỌC: TS ĐỖ THỊ BÍCH NGỌC
HÀ NỘI - 2021
Trang 3MỞ ĐẦU
1 Tính cấp thiết của đề tài
Thế giới đang trong cuộc cách mạng công nghiệp 4.0, tập trung vào ứng dụng công nghệ trong cuộc sống Vì vậy các sản phẩm phần mềm được yêu cầu rất khắt khe
về chất lượng và độ tin cậy, đặc biệt là các sản phẩm ứng dụng trong các ngành công nghệ cao như vận tải, y tế,… Bởi chỉ cần một sai sót nhỏ của hệ thông cũng có thể gây nên những thiệt hại to lớn về kinh tế và có thể là cả con người Với yêu cầu khắt khe như vậy, các công cụ kiểm thử và kiểm chứng tự động ra đời sẽ giúp các nhà phát triển đảm bảo độ tin cậy đồng thời giảm chi phí sản xuất hệ thống phần mềm cũng như hệ thống nhúng
Hiện nay rất nhiều kỹ thuật được nghiên cứu và sử dụng để đảm bảo chất lượng của hệ thống nhúng Hai kỹ thuật truyền thống đã và đang được sử dụng để đảm bảo chất lượng hệ thống là kiểm thử hệ thống (Software testing) và kiểm chứng hệ thống (Software verification) Tuy nhiên việc sử dụng các phương pháp kiểm thử chỉ làm giảm bớt lỗi của hệ thống mà không thể kết luận được hệ thống không có lỗi Các phương pháp kiểm chứng đang được quan tâm số một trong việc chứng minh tính đúng đắn của hệ thống với các tính chất cho trước (ví dụ: chỉ số mảng luôn nằm trong biên, giá trị số luôn nằm trong giới hạn biểu diễn…) Hiện nay các hướng nghiên cứu
về SMT (Satisfiability Modulo Theories) đang được quan tâm rộng rãi bởi chúng đóng vai trò quan trọng trong bài toán kiểm chứng hệ thống thoả mãn các tính chất cho trước hay không SMT đóng vai trò là công cụ nền (backend engine) trong các công cụ kiểm chứng hệ thống Các bài toán kiểm chứng 1 tính chất cho trước được đưa về giải tính thỏa mãn (SAT/UNSAT) của các công thức logic bằng các công cụ SMT
Lỗi tràn số xảy ra khi giá trị số trong hệ thống vượt quá khả năng biểu diễn như
trường hợp số lớn hơn sẽ vượt quá khả năng biểu diễn Lỗi tràn số có dẫn tới hệ thống tính toán sai lệch nghiêm trọng Vì vậy việc kiểm soát để hệ thống không bị tràn số là quan trọng, đặc biệt trong các hệ thống nhúng thường cần dùng các kiểu dữ liệu với khả năng biểu diễn giá trị nhỏ (8 bit, 16 bit) Tuy nhiên, lỗi tràn số thường khó có thể phát hiện Lý do là lỗi tràn số thường xảy ra sau một chuỗi các tính toán số học trong quá trình hệ thống thực hiện, chứ không phải chỉ xảy ra ngay từ input đầu vào Việc kiểm thử để phát hiện lỗi tràn số cũng gặp thách thức lớn vì phải nghĩ ra các bộ dữ liệu
để có thể dẫn tới các giá trị tràn số
Ở luận văn này, tôi sẽ tập trung nghiên cứu về phương pháp giải ràng buộc sử dụng SMT và thực nghiệm trên công cụ Z3 của Microsoft để phát hiện lỗi tràn số cho các mô hình hệ thống nhúng trong Matlab Simulink
Trang 42 Tình hình nghiên cứu và tính mới của đề tài
Hiện nay, đã có nhiều công trình nghiên cứu về các kỹ thuật kiểm thử phần mềm và kiểm chứng phần mềm Tuy nhiên, các công trình nghiên cứu về SMT trong
kỹ thuật kiểm chứng lỗi tràn số trong hệ thống nhúng chưa có nhiều Một số công trình kiểm chứng áp dụng SMT tiêu biểu là:
Trong nghiên cứu raSAT: An SMT Solver for Polynomial Constraints, International Joint Conference on Automated Reasoning 2016, tác giả đã tìm hiểu về
các phương pháp tính toán khoảng (Interval Arithmetic) để giải các ràng buộc phi tuyến tính bằng phương pháp tính toán xấp xỉ (approximation methods) và thực nghiệm trên công cụ SMT Solver raSAT Đây là một cải tiến cho SMT solver để giải các ràng buộc phi tuyến chứ không nhằm vào một bài toán kiểm chứng nào cụ thể
Trong nghiên cứu Integer Overflow Detection in Hardware Designs at the Specification Level In Proceedings of the 8th International Conference on Model-Driven Engineering and Software Development - MODELSWARD, ISBN 978-989-758-400-8 ISSN 2184-4348, pages 41-48 DOI: 10.5220/0008960200410048, tác giả
đề xuất một phương pháp thiết kế phần cứng cho phép phát hiện các lỗi tràn số nguyên
ở mức đặc tả Cách tiếp cận thiết kế đã thiết lập sử dụng ngôn ngữ đặc tả SysML / OCL ở cấp đặc tả trong đó các kiểu số nguyên là vô hạn Các kiểu này không chia sẻ hành vi ngữ nghĩa của các kiểu được triển khai trong ngôn ngữ lập trình SystemC vì trong SystemC, số nguyên là hữu hạn Do vậy, vấn đề nảy sinh là khoảng cách ngữ nghĩa giữa hai cấp độ này Để khắc phục điều này, tác giả đã sử dụng 1 công cụ trợ lý chứng minh Coq và sử dụng thư viện số nguyên CompCert mô tả các kiểu số nguyên hữu hạn thông qua các kiểu phụ thuộc Bằng cách đó, các lỗi tràn số có thể được phát hiện và xác minh Nghiên cứu đã hướng tới phát hiện lỗi tràn số, nhưng yêu cầu các đặc tả phải được biểu diễn bằng SysML/OCL
Trong nghiên cứu Bounded invariance checking of simulink models SAC '19: Proceedings of the 34th ACM/SIGAPP Symposium on Applied Computing
2168-2177 10.1145/3297280.3297493, tác giả đã trình bày một cách tiếp cận để kiểm tra bất biến của mô hình Simulink dựa trên các nguyên tắc của Bounded model checking (BMC) bằng cách sử dụng lý thuyết mô đun thỏa mãn (SMT) Hai đóng góp của tác giả: thứ nhất, tác giả cho thấy rằng có thể tự động tạo ra các đường thực thi hữu hạn trực tiếp dựa trên mô hình Simulink và thứ hai, tác giả cho thấy rằng có một số thiết kế Simulink nhất định mà thủ tục bất biến giới hạn đã hoàn tất Để tự động hóa cách tiếp cận được đề xuất, tác giả giới thiệu những điều sau: i) một thủ tục tự động (được triển khai trong công cụ SyMC) để tạo đường dẫn thực thi có độ dài hữu hạn dựa trên mô hình Simulink và thứ tự thực thi của các khối, ii) mã hóa dựa trên khuôn mẫu của các đường dẫn thực thi sang định dạng SMT-LIB phù hợp để phân tích bằng bộ giải Z3 SMT Nghiên cứu hướng tới kiểm chứng các tính chất bất biến cho mô hình Simulink, nhưng không đề cập tới bài toán kiểm chứng cho lỗi tràn số
Trang 5Chính vì thế, luận văn này tập trung nghiên cứu công cụ SMT solver Z3 của Microsoft và áp dụng vào phát hiện lỗi tràn số cho các mô hình Simulink
3 Mục tiêu nghiên cứu
Đề tài nghiên cứu về phương pháp giải ràng buộc SMT và áp dụng công cụ Z3 phát hiện lỗi tràn số cho các mô hình Matlab/Simulink Từ đó có thể xây dựng hệ thống tự động phát hiện lỗi tràn số
4 Phương pháp nghiên cứu
4.1 Nghiên cứu lý thuyết
Nghiên cứu về kiểm chứng hệ thống nhúng, phương pháp giải ràng buộc SMT, công cụ Z3, mô hình Simulink, lỗi tràn số
4.2 Nghiên cứu thực nghiệm
Chạy thực nghiệm công cụ Z3 phát hiện lỗi tràn số cho các mô hình Simulink
5 Giới thiệu về SMT
Trong khoa học máy tính, lý thuyết tính thỏa được (SMT - Satisfiability Modulo Theories) là kiểm tra sự thỏa mãn của một biểu thức logic bằng một hay nhiều kiểu dữ liệu Các kiểu dữ liệu và phép toán tương ứng trên nó được sử dụng là số thực,
số nguyên và các cấu trúc dữ liệu như danh sách, mảng, bit vector
SMT là dạng tổng quát của boolean satisfiability (SAT), Satisfiability modulo theories = Propositional satisfiability + Background Theories Một SMT solver là công
cụ để kiểm tra việc thỏa mãn (hoặc kiểm tra sự hợp lệ) của các công thức SMT cho phép các mở rộng các ứng dụng như mở rộng kiểm tra tĩnh (extended static checking), lập kế hoạch, quy hoạch, bài toán đồ thị (graph problems), thiết kế test cases
Nhiệm vụ của SMT là kiểm tra xem một công thức logic F có thoả mãn hay không Chúng ta có biểu thức F là thỏa mãn nếu có một phép gán làm cho F đúng, ví
dụ công thức sau:
a + b > 3 and a < 0 and b > 0
là thỏa mãn khi a = -1 và b = 5 (biểu thức đúng)
6 Bố cục của luận văn
Ngoài phần mở đầu và tổng kết, mục lục, danh sách bảng, danh sách hình vẽ, danh mục từ viết tắt, phụ lục và danh mục tài liệu tham khảo, nội dung luận văn được chia thành 3 chương:
Chương 1: Tổng quan
Nội dung Chương I sẽ khái quát các kiến thức cần thiết về mô hình hệ thống nhúng, bộ giải SMT và cách biến đổi mô hình hệ thống nhúng thành ràng buộc SMT Đồng thời, Chương 1 phát biểu bài toán
Trang 6Chương 2: Kiểm chứng lỗi tràn số của mô hình hệ thống nhúng
Chương 2 sẽ phân tích các nguyên nhân gây ra lỗi tràn số trên mô hình Simulink Từ đó, đưa ra phương pháp để biến đổi bài toán kiểm chứng lỗi tràn số của
mô hình hệ thống nhúng thành ràng buộc SMT
Chương 3: Thực nghiệm và đánh giá
Nội dung của Chương 3 trình bày quá trình thực nghiệm và đánh giá phương pháp sử dụng bộ giải SMT kiểm chứng lỗi tràn số trên mô hình hệ thống nhúng Matlab/Simulink
Trang 7CHƯƠNG I: TỔNG QUAN
1.1 Hệ thống nhúng và vấn đề lỗi tràn số
1.1.1 Hệ thống nhúng
Hệ thống nhúng là một hệ thống được tích hợp cả phần cứng và phần mềm phục vụ cho các bài toán chuyên dụng trong nhiều lĩnh vực công nghiệp, tự động hóa điều khiển, quan trắc và truyền thông
Hệ thống nhúng hiện diện khắp nơi trong thế giới hiện đại, ví dụ như:
- Các hệ thống dẫn đường trong không lưu, hệ thống định vị toàn cầu, vệ tinh
- Các thiết bị gia dụng: tủ lạnh, lò vi sóng, lò nướng,…
- Các thiết bị kết nối mạng: router, hub, gateway,…
- Các thiết bị văn phòng: máy photocopy, máy fax, máy in, máy scan,…
- Các thiết bị y tế: máy thẩm thấu, máy điều hòa nhịp tim,…
- Các máy trả lời tự động
- Dây chuyền sản xuất tự động trong công nghiệp, robots
1.1.2 Vấn đề lỗi tràn số
Khi sử dụng dữ liệu trên hệ thống nhúng, dữ liệu sẽ được mã hoá về dạng nhị phân (bit) Trong Matlab, một biến dạng số khi được khai báo sẽ phải khai báo cùng kiểu dữ liệu, máy tính sẽ cấp cho biến đó một số lượng bit nhất định để lưu trữ, ví dụ : int8 – 8 bit, int16 – 16 bit, … nên giá trị của số mà những biến này biểu diễn được sẽ
có giới hạn : [-128, 127] với 8 bit, [-32768, 32767] với 16 bit, … Sử dụng kiểu dữ liệu hợp lý sẽ giúp mô hình tiết kiệm bộ nhớ và tối ưu tốc độ, tuy nhiên việc lựa chọn kiểu
dữ liệu đòi hỏi người lập trình có kinh nghiệm, lường được hết trước các khả năng có thể xảy ra, nếu không, khi cố gắng tạo một giá trị số nằm ngoài của phạm vi có thể được biểu diễn bằng một số chữ số nhất định - cao hơn giá trị tối đa hoặc thấp hơn giá trị nhỏ nhất có thể biểu diễn, hiện tượng tràn số sẽ xảy ra Hậu quả phổ biến nhất của tràn là các chữ số có nghĩa nhỏ nhất có thể biểu diễn của kết quả được lưu trữ; kết quả được cho là bao quanh mức tối đa (tức là modulo một lũy thừa của cơ số , thường là hai trong các máy tính hiện đại, nhưng đôi khi là mười hoặc một cơ số khác) Vấn đề này ảnh hưởng đến độ tin cậy và bảo mật của mô hình
Vì vậy việc kiểm soát để hệ thống không bị tràn số là quan trọng, đặc biệt trong các hệ thống nhúng thường cần dùng các kiểu dữ liệu với khả năng biểu diễn giá trị nhỏ (8 bit, 16 bit) Tuy nhiên, lỗi tràn số thường khó có thể phát hiện Lý do là lỗi tràn
số thường xảy ra sau một chuỗi các tính toán số học trong quá trình hệ thống thực hiện, chứ không phải chỉ xảy ra ngay từ input đầu vào Việc kiểm tra để phát hiện lỗi tràn số cũng gặp thách thức lớn vì phải nghĩ ra tất cả các trường hợp có thể dẫn tới tràn
số
Trang 81.1.3 Mô hình hệ thống nhúng Matlab/Simulink
Matlab (Matrix Laboratory) là một phần mềm khoa học được thiết kế để cung cấp việc tính toán số và hiển thị đồ họa bằng ngôn ngữ lập trình cấp cao Matlab cung cấp các tính năng tương tác tuyệt vời cho phép người sử dụng thao tác dữ liệu linh hoạt dưới dạng mảng ma trận để tính toán và quan sát Các dữ liệu vào của Matlab có thể được nhập từ "Command line" hoặc từ "mfiles", trong đó tập lệnh được cho trước bởi Matlab
Simulink là một công cụ trong Matlab dùng để mô hình, mô phỏng và phân tích các hệ thống động với môi trường giao diện sử dụng bằng đồ họa Việc xây dựng mô hình được đơn giản hóa bằng các hoạt động nhấp chuột và kéo thả Simulink bao gồm một bộ thư viện khối với các hộp công cụ toàn diện cho cả việc phân tích tuyến tính và phi tuyến Simulink là một phần quan trọng của Matlab và có thể dễ dàng chuyển đổi qua lại trong quá trình phân tích, và vì vậy người dùng có thể tận dụng được ưu thế của cả hai môi trường
1.1.4 Lỗi tràn số trên MATLAB/Simulink
Xét một ví dụ đơn giản, mô hình Simulink tính tổng của 2 số:
Giá trị của Variable 1, Variable 2 và Add đều để kiểu uint8, có giới hạn từ
0-255, vì vậy khi không xảy ra lỗi tràn số (tổng của hai biến không vượt quá 255) thì kết quả sẽ ra đúng Tuy nhiên, khi tổng của hai biến vượt quá 255, kết quả không còn chính xác nữa
Lỗi tràn số trong Matlab/Simulink rất dễ xảy ra, vì vậy việc phát hiện vô cùng quan trọng để đảm bảo mô hình hoạt động chính xác Sử dụng ràng buộc SMT là một phương pháp để giải quyết vấn đề này Mô hình Matlab/Simulink sẽ được encode thành định dạng SMT sau dó dùng một SMT Solver để kiểm tra SAT/unSAT hay chính là lỗi tràn số của mô hình
Trang 91.2 Kiểm chứng hệ thống dựa trên bộ giải SMT
Kiểm chứng các hệ thống phần mềm hoặc phần cứng bằng cách tự động phân tích và chứng minh cần các công cụ hiệu quả và có khả năng giải quyết được các bài toán phức tạp SAT Solver là công cụ tốt cho việc giải logic mệnh đề SAT Solver có thể giải hiệu quả với hàng triệu biến trong một mệnh đề và có thể tìm được lời giải tốt nhất SMT Solver được coi là sự mở rộng của SAT đối với từng lý thuyết (Theory) nhất định SMT Solver ứng dụng trong việc giải các công thức biểu diễn dưới dạng logic vị từ (First order logic – FOL) thay vì logic mệnh đề của SAT Solver Cả SAT Solver và SMT Solver đều đóng vai trò là công cụ nền (backed engine) trong các công
cụ kiểm chứng phần mềm
1.2.1 Giới thiệu về SAT Solver
SAT (satisfiability) là công cụ chứng minh một bài toán logic mệnh đề là SAT hoặc UNSAT Bài toán SAT là bài toán chứng minh tính thỏa mãn hay không thỏa mãn (SAT/UNSAT) của một công thức mệnh đề logic Các công cụ chứng minh tự động cho bài toán này gọi là SAT Solver SAT Solver được ứng dụng trong việc giải các bài toán trí tuệ nhân tạo và xây dựng các công cụ kiểm thử tự động trong các phần mềm SAT Solver đóng vai trò như các công cụ nền hỗ trợ cho các SMT Solver (SAT Modul Thoeries), là các công cụ chứng minh tính thỏa mãn của các công thức logic xây dựng trên lý thuyết logic vị từ cấp 1 SAT Solver có thể giải được biểu thức logic với hàng trăm ngàn hoặc thậm chí hàng triệu biến trong một mệnh đề dưới dạng chuẩn tắc hội (CNFConjunctive Normal Form) với khoảng thời gian hợp lý Những vấn đề cần thiết lập khi sử dụng SAT để giải quyết bao gồm:
- Mã hóa bài toán theo biểu thức logic mệnh đề
- Chuyển đổi biểu thức sang dạng CNF (conjunctive normal form)
- Sử dụng SAT Solver để tìm mối quan hệ của các biến logic
- Đưa vào một bộ giải mã để tạo ra lời giải
1.2.2 Giới thiệu về SMT Solver
Các hệ thống hiện nay được thiết kế ngày càng phức tạp, do đó cần có công cụ hiệu quả và phức tạp hơn để đảm bảo tính chính xác là cần thiết SMT Solver (satisfiability modulo theories) là một giải pháp hiệu quả cho vấn đề trên SMT Solver được sử dụng giải quyết nhiều vấn đề thực tế như các bài toán sinh ca kiểm thử tự động, bài toán lập lịch, kiểm thử mô hình SMT là vấn đề quyết định tính thỏa mãn của công thức được biểu diễn trên nền tảng lý thuyết Logic vị từ cấp I (First order logic) Có thể coi SMT là phần mở rộng của SAT trong lý thuyết logic vị từ cấp I Để duy trì quá trình quyết định lý thuyết bậc nhất thường được giới hạn không chứa các phép toán lượng tử tồn tại (∃) và với mọi (∀) Cũng tương tự SAT, việc chỉ ra một phép gán M thỏa mãn công thức đầu vào F trên nền tảng Logic vị từ cấp I được gọi là SMT solver
Trang 101.2.3 Chuẩn SMT-LIB
Nhằm tạo điều kiện thuận lợi cho nghiên cứu và phát triển trong SMT, một nhóm các tác giả đã đề xuất SMT-LIB [7] như một tiêu chuẩn chung cho toàn thế giới
Cũng như các ngôn ngữ lập trình truyền thống, SMT-LIB cũng định nghĩa ra một bộ cú pháp để làm chuẩn chung cho đầu vào của các bộ giải SMT Cú pháp SMT-LIB (hay ngôn ngữ SMT-SMT-LIB) bao gồm có 3 thành tố chính: khai báo lý thuyết, khai báo logic, và scripts Cú pháp này được xây dựng tương tự với ngôn ngữ lập trình LISP Mỗi biểu thức trong SMT-LIB, thực ra, là một biểu thức-S hợp lệ trong Common Lisp Điều quan trọng nhất là, cú pháp của các biểu thức-S được lựa chọn và thiết kế để tối ưu cho việc phân tích cú pháp, chứ không mang tính dễ đọc cho con người
1.2.4 Bộ giải SMT Z3
Trong luận văn này, bộ giải SMT được đề xuất sử dụng là Z3 Theorem Prover Z3 Theorem Prover là một bộ chứng minh định lý hiện đại nhất được nghiên cứu và phát triển bởi nhóm nghiên cứu của Microsoft Nó có thể được sử dụng để kiểm tra tính thỏa đáng của các biểu thức logic trên một hoặc nhiều lý thuyết khác nhau Z3 Theorem Prover còn là một công cụ hoàn hảo cho cả phân tích và kiểm tra phần mềm, bởi vì một số phần mềm phổ biến có thể được ánh xạ sang tập các lý thuyết mà nó hỗ trợ
1.2.5 Biến đổi các mô hình hệ thống nhúng thành ràng buộc số
Với mỗi block trong Simulink, và cho từng bước thời gian (time step), ta sẽ tạo
ra một công thức ràng buộc SMT sao cho ngữ nghĩa vẫn được bảo toàn Cụ thể là công thức ràng buộc SMT thể hiện được giá trị đầu vào (input), đầu ra (output) tương ứng với ngữ nghĩa của block Bên cạnh đó, do trong SMT không có khái niệm vòng lặp, để thể hiện vòng lặp trong mô hình hệ thống nhúng, ta thực hiện trải mô hình hệ thống nhúng ra k lần bằng cách tạo k ràng buộc cho mỗi block, đánh số t Phần dưới đây minh hoạ cách biến đổi một số block điển hình: block thực hiện phép toán, phép so sánh, rẽ nhánh, trễ thời gian Với lưu ý j thể hiện ràng buộc ở lần lặp thứ j, k là số lần lặp
1.3 Phát biểu bài toán
Bài toán trong luận văn là phát hiện lỗi tràn số trong mô hình hệ thống nhúng Matlab/Simulink Cụ thể:
- Đầu vào: mô hình hệ thống nhúng biểu diễn bằng Matlab/Simulink, file SMT2 biểu diễn mô hình Matlab/Simulink
- Đầu ra: kết luận hệ thống có tồn tại lỗi tràn số hay không và nếu có tràn số thì đưa bộ dữ liệu giá trị của các block khi gặp lỗi tràn số ra