ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
ĐINH QUANG ĐẠT
NGHIÊN CỨU PHƯƠNG PHÁP KIỂM CHỨNG MÔ
HÌNH PHẦN MỀM DỰA TRÊN SAT
Ngành: Công Nghệ Thông Tin
Chuyên ngành: Công Nghệ Phần Mềm
Mã số: 60 48 10
TÓM TẮT LUẬN VĂN THẠC SĨ
Hà Nội - 2013
1
Lời mở đầu
Ngày nay, với tốc độ phát triển cực kỳ nhanh của lĩnh vực công
nghệ thông tin tại Việt Nam và trên thế giới, nhất là đối với phần mềm
đã thâm nhập vào hầu hết các lĩnh vực của đời sống như mua bán (mua
hàng trực tuyến, các ứng dụng về kế toán, quản lý, . . . ), các lĩnh vực
ngân hàng (quản lý tài khoản, giao dịch tr ực tuyến, . ), các lĩnh vực
giải trí (trò chơi, phim ảnh, . . . ). Với sự bùng nổ về số lượng các phần
mềm thì việc đảm bảo về chất lượng đang là những yêu cầu cấp bách
trong hoàn cảnh hiện nay.
Trên thế giới đã có rất nhiều bài báo, đề tài, công trình nghiên cứu
về kiểm chứng mô hình, về các hướng khác nhau của kiểm chứng mô
hình nhưng hướng nghiên cứu tập trung vào giải quyết vấn đề bùng nổ
không gian trạng thái trong kiểm chứng mô hình luôn luôn là đề tài
mang lại nhiều tranh luận, cảm hứng cũng như nghiên cứu nhất. Tác
giả muốn nghiên cứu về vấn đề kiểm chứng mô hình liên quan tới vấn
đề bùng nổ không gian trạng thái của kiểm chứng mô hình với một kỹ
thuật mới nhất hiện nay đó là Bounded Model Checking (BMC) dựa
trên SAT. Đồng thời dựa trên các kết quả đã được nghiên cứu tìm hiểu,
tác giả cũng cài đặt thực nghiệm sử dụng kỹ thuật đã nghiên cứu, tìm
hiểu.
Chương 1: Kiểm chứng mô hình
1.1 Giới thiệu về kiểm chứng mô hình
1.1.1 Giới thiệu
Tầm quan trọng cũng như sự phức tạp của hệ thống ICT tăng lên
nhanh chóng. Các hệ thống ICT không còn độc lập, mà được nhúng
vào một hệ thống lớn, tương tác và kết nỗi với các thành phần và hệ
thống khác. Do đó, chúng trở nên dễ bị lỗi - số các lỗi phát triển theo
cấp số nhân đối với số các tương tác với các thành phần hệ thống. Đặc
biệt, tính tương tranh và tính không đơn định của mô hình tương tác hệ
thống lại khó xử lý với các kỹ thuật chuẩn. Độ phức tạp của hệ thống
ICT ngày càng tăng cùng với những áp lực làm cho thời gian phát triển
hệ thống, điều này đã làm cho việc cung cấp các hệ thống ICT với ít
khuyết điểm là vô cùng khó khăn và phức tạp.
1.1.2 Kiểm định trong phần cứng và phần mềm
2
Kiểm định hệ thống được sử dụng để xác minh xem hệ thống có đạt
được những đặc tính nhất định. Các đặc tính được kiểm chứng có thể
rất cơ bản, ví dụ, một hệ thống không nên đến được trạng thái mà ở đó
tiến trình không thể thực hiện (kịch bản của deadlock), và chủ yếu được
lấy từ đặc tả của hệ thống. Đặc tả này quy định những gì hệ thống phải
làm và những gì không, và do đó tạo nên cơ sở cho bất kỳ hoạt động
kiểm định nào. Một khuyết điểm được tìm thấy một khi hệ thống không
đáp ứng được một trong các thuộc tính của đặc tả. Hệ thống được xem
xét là "đúng" (correct) khi hệ thống thỏa mãn tất cả các thuộc tính lấy
từ đặc tả của hệ thống. Vì vậy, tính đúng đắn luôn luôn tương đối với
đặc tả, và không có một thuộc tính tuyết đối của hệ thống. Một sơ đồ
của kiểm định được mô tả trong hình 1.
Thiết kế
(Design)
Kiểm chứng
(Verification)
Đặc tả hệ thống
(System specification)
Sản phẩm/ bản thử
(Product/ Prototype)
Thuộc tính
(Properties)
Không tìm thấy
lỗi
Tìm thấy lỗi
Hình 1: Sơ đồ kiểm định hệ thống
1.1.3 Kiểm chứng mô hình
Kiểm chứng mô hình (Model Checking) là một kỹ thuật kiểm chứng
xem xét tất cả các trạng thái có thể của hệ thống theo cách vét cạn.
Tương tự như chương trình chơi cờ của máy tính kiểm tra những nước
đi có thể, model checker, công cụ giúp cho việc kiểm chứng mô hình,
xem xét tất cả các kịch bản hệ thống có thể xảy ra theo một cách có hệ
thống. Model checker kiểm tra tất cả các trạng thái có liên quan của hệ
thống để kiểm tra xem chúng có thỏa mãn với đặc tính mà bạn mong
3
muốn hay không. Nếu trạng thái gặp phải là vi phạm đặc tính đang xem
xét, model checker sẽ cung cấp một phản ví dụ cho thấy việc làm thế
nào mà mô hình có thể tới được trạng thái không mong muốn. Phản ví
dụ cũng mô tả một đường dẫn thực thi có thể dẫn tới từ những trạng
thái khởi tạo của hệ thống tới những trạng thái vi phạm thuộc tính đang
được kiểm chứng. Với sự giúp đỡ của mô phỏng, người sử dụng có thể
xem lại các kịch bản vi phạm để có được những thông tin gỡ lỗi có ích
và tích hợp các mô hình phù hợp (xem hình 2).
Ki m ch ng mô hình
(Model checking)
Y u c u
(Requirements)
L i a ph ng
(Location error)
Th a mãn
(satisfied)
H th ng
(System)
c t thu c tính
(Property specification)
Mô hình h th ng
(System model)
Vi ph m, ph n ví d
(Violated, counterexample)
Mô ph ng
(Simulation)
Mô hình hóa
(Modeling)
Hình th c hóa
(Formalizing)
Hình 2: Sơ đồ tổng quan hướng tiếp cận kiểm chứng mô hình
1.1.4 Các tiến trình trong kiểm chứng mô hình
Trong việc áp dụng kiểm chứng mô hình để thiết kế các pha khác
nhau như sau:
• Pha Modeling:
– Mô hình hóa hệ thống dưới sự xem xét bằng cách sử dụng
ngôn ngữ mô tả mô hình của model checker bằng tay.
– Kiểm tra tính đúng đắn trước tiên và các đánh giá nhanh
của mô hình để thực thi một vài mô phỏng.
– Mô hình hóa các đặc tính để kiểm tra sử dụng ngôn đặc tả
các thuộc tính.
4
• Pha Running: chạy model checker để kiểm tra tính hợp lệ của
thuộc tính trong mô hình hệ thống.
• Pha Analysis:
– Thuộc tính có an toàn hay không? → kiểm tra thuộc tính
tiếp theo (nếu có thể);
– Thuộc tính có vi phạm hay không? →
∗ Phân tích phản ví du được sinh ra từ mô phỏng.
∗ Làm mịn mô hình, thiết kế, và các thuộc tính.
∗ Lặp lại toàn bộ thủ tục.
– Thoát ra khỏi bộ nhớ? → Cố gắng làm giảm mô hình và
thử lại.
1.1.5 Mặt mạnh và mặt yếu của kiểm chứng mô hình Mặt mạnh của
kiểm chứng mô hình:
• Áp dụng với một phạm vi rộng lớn các ứng dụng như các hệ
thống nhúng, công nghệ phần mềm và thiết kế phần cứng.
• Cho phép tập trung vào những đặc tính quan trọng trước tiên.
Không có đặc tả yêu cầu nào trọn vẹn là cần thiết.
• Tìm ra các lỗi khó bị phát hiện.
• Cung cấp các chuẩn đoán về thông tin trong trường hợp thuộc
tính không có giá trị.
• Được sự quan tâm, thu hút tăng lên nhanh chóng bởi ngành công
nghiệp;
• Dễ dàng tích hợp trong vòng đời phát triển hiện có;
• Dựa trên một nền tảng toán học vững chắc;
Mặt yếu của kiểm chứng mô hình:
• Chưa phù hợp với các ứng dụng chuyên về cơ sở dữ liệu.
5
• Tính toán không hiệu quả đối với hệ thống vô hạn trạng thái hoặc
luận lý về kiểu dữ liệu trừu tượng.
• Không kiểm chứng hệ thống thực sự
• Kiểm tra những trạng thái yêu cầu. Không có đảm bảo nào là
kiểm tra được hết các trạng thái.
• Vướng phải vấn đề bùng nổ không gian trạng thái.
• Đòi hỏi phải có một số chuyên gia trong việc trừu tượng hóa hệ
thống để có được mô hình hệ thống nhỏ hơn với ít thuộc tính
trạng thái hơn.
• Không đảm bảo mang lại kết quả chính xác.
• Không cho phép kiểm tra một cách tổng quát.
1.2 Các kiến thức nền tảng
1.2.1 Hệ thống dịch chuyển
Hệ thống dịch chuyển thường được sử dụng trong khoa học máy
tính như các mô hình mô tả hành vi của hệ thống. Hệ thống dịch chuyển
về cơ bản là các đồ thì có hướng với các nút thể hiện các trạng thái, các
cạnh mô hình cho các sự chuyển dịch.
Định nghĩa 1.1 Hệ thống dịch chuyển(Transition Systems)
Một hệ thống dịch chuyển TS là một bộ (S, Act, −→, I, AP, L) với
• S là tập hợp các trạng thái,
• Act là tập hợp các hành động,
• −→⊆ S × Act × S là một quan hệ dịch chuyển,
• I ⊆ S là tập hợp các trạng thái khởi tạo,
• AP là tập hợp những mệnh đề nguyên tử, và
• L : S −→ 2
AP
là một nhãn của hàm.
6
T S được gọi là hữu hạn nếu S, Act, và AP là hữu hạn.
1.2.2 Logic thời gian
Đối với các hệ thống phản ứng (reactive systems), tính đúng đắn
phụ thuộc vào sự thực thi của hệ thống, không chỉ là đầu vào và đầu
ra của việc tính toán mà còn là vấn đề công bằng (fairness). Logic thời
gian là một hình thức vượt trội để xử lý các vấn đề này. Logic thời gian
mở rộng logic mệnh đề hoặc logic tân từ bằng cách cho phép chuyển
tới hành vi vô hạn của một hệ thống phản ứng. Chúng cung cấp các ký
hiệu một cách trực quan nhưng có một nền tảng toán học chính xác để
diễn tả tính chất về mối quan hệ giữa các nhãn trạng thái trong thưc thi.
Các hình thức cơ bản của thời gian được thể hiện trong phần lớn các
logic thời gian bao gồm hai toán hạng:
♢(hay còn được ký hiệu là F): cuối cùng trong tương lai.
(hay còn được ký hiệu là G): bây giờ và sau này trong tương lai.
1.2.2 Logic thời gian tuyến tính (LTL)
Lý luận của logic thời gian tuyến tính qua những dấu vết tuyến tính
theo thời gian. Ở mỗi thời điểm, chỉ có một lịch trình trong tương lai
thực sự xảy ra. Thông thường, lịch trình được định nghĩa như bắt đầu
ở “hiện tại” (now), trong các bước thời gian hiện hành, và tiến triển vô
hạn trong tương lai.
Định nghĩa 1.2 Công thức của mệnh đề LTL
Những công thức của mệnh đề logic thời gian PTL trong thời gian
tuyến tính được định nghĩa quy nạp như sau:
- Mọi mệnh đề cơ bản v ∈ V là công thức.
- Hợp của hai mệnh đề là một mệnh đề.
- Nếu φ và ψ là các công thức thì Xφ và φUψ cũng là các công
thức.
Định nghĩa 1.3 Quan hệ nắm giữ LTL
Quan hệ σ |= φ (σ nắm giữ của φ) được định nghĩa quy nạp như sau:
- σ |= v (với v ∈ V) khi và chỉ khi v ∈ σ
0
(V).
7
- Ngữ nghĩa của phép hợp được định nghĩa như bình thường.
- σ |= Xφ khi và chỉ khi σ
1
|= φ.
- σ |= φU khi và chỉ khi với một số k ≥ 0, σ|
k
|= ψ và σ|
j
|= φ nắm
giữ với mọi 0 ≤ j ≤ k.
Những công thức PTL hữu ích khác có thể được đưa ra như những
từ viết tắt: Fφ (“cuối cùng φ”) được định nghĩa như true U φ; nó khẳng
định rằng φ nắm giữ của một vài hậu tố. Công thức kép Gφ ≡ ¬F¬φ
(“luôn luôn” φ) yêu cầu φ nắm giữ tất cả các hậu tố. Công thức φWψ
(“φ chờ đợi ψ”,“φ trừ khi ψ”) được định nghĩa như (φUψ) ∨Gφ và yêu
cầu φ nắm giữ cho đến khi ψ không nắm giữ; không giống như φUψ,
nó không yêu cầu ψ trở thành đúng ở sau cùng.
1.2.3 Logic tính toán cây CTL
Các công thức PTL khẳng định các thuộc tính của các hành vi đơn
lẻ, nhưng chúng cũng quan tâm đến giá trị của hệ thống: chúng ta nói
rằng công thức φ nắm giữ của T (viết là T |= φ) nếu φ nắm giữ của tất
cả các hoạt động của T . Theo nghĩa này, các công thức PTL biểu thị
các tính chất đúng đắn của hệ thống. Sự hiện diện của một hoạt động
thỏa mãn một thuộc tính nhất định không thể biểu thị trong PTL. Các
thuộc tính có khả năng như vậy thuộc về logic thời gian phân nhánh
như logic CTL. Trong mô hình thời gian nhánh, tại mỗi thời điểm t có
thể có rất nhiều khả năng trong tương lai. Với những khả năng tương
lai tương ứng là một đường đi được tổ chức từ t. Do đó, một đường đi
biểu diễn một khả năng xảy ra trong tương lai. Các toán tử thường biểu
thị hoặc là “A” nghĩa là với mọi khả năng trong tương lai diễn tả luôn
luôn, chắc chắn hoặc là “E” nghĩa là có thể tồn tại khả năng tương lai
diễn tả sự có thể, không chắc chắn.
Định nghĩa 1.4 Công thức mệnh đề CTL
Các công thức của mệnh đề CTL được định nghĩa quy nạp như sau:
- Mọi mệnh đề nguyên tử v ∈ V đều là công thức.
- Hợp của hai mệnh đề là một mệnh đề.
8
- Nếu φ và ψ là các công thức thì EXφ, EGφ, và φEUψ là các
công thức.
Định nghĩa 1.5 Quan hệ nắm giữ CTL
Quan hệ T , s |= φ được định nghĩa theo quy nạp như sau:
- T , s |= v (với v ∈ V) khi và chỉ khi v ∈ s(V).
- Ngữ nghĩa của phép hợp được định nghĩa như bình thường.
- T , s |= EXφ khi và chỉ khi tồn tại một s-path s
0
s
1
. . . sao cho
T , s
1
|= φ.
- T , s |= EGφ khi và chỉ khi có một s-path s
0
s
1
. . . sao cho T , s
i
|=
φ. nắm giữ với mọi i.
- T , s |= φEUψ khi và chỉ khi tồn tại một s-path s
0
s
1
. . . và k ≥ 0
sao cho T , s
k
|= ψ và T , s
i
|= φ nắm giữ với mọi 0 ≤ j < k.
Các công thức CTL được suy ra gồm có EFφ ≡ true EU φ, AXφ ≡
¬EX¬φ, và AGφ ≡ ¬EFφ. Những biểu diễn của CTL và PTL có thể
được so sánh bằng cách phân tích các thuộc tính của những hệ thống
dịch chuyển có thể được xây dựng. Nó chỉ ra rằng, không thể xếp gộp
logic vào nhau được. Trong khi PTL không thể đủ khả năng để thể
hiện các các tính chất về khả năng, thì tính công bằng không thể được
trình bày trong CTL. Cụ thể hơn, không có công thức CTL làm cho hệ
thống hợp lệ với trường hợp công thức PTL là FGφ. Đặc biệt, không
có sự tương ứng với AFAGφ(xem hình 3): mọi hoạt động của hệ thống
dịch chuyển T thỏa mãn FGp (hoặc là ở trạng thái s
0
mãi mãi hoặc là
kết thúc ở trạng thái s
2
), nhưng T , s
0
̸|= AFAG p (với hoạt động ở tại
trạng thái s
0
luôn luôn có những khả năng chuyển tới trạng thái s
1
).
p
¬ p
p
S
0
S
1
S
2
Hình 3: Một hệ thống dịch chuyển T mà T |= FGp nhưng T ̸|=
AFAGp.
Chương 2: Vấn đề bùng nổ trạng thái và giải quyết hướng cổ điển
9
2.1 Vấn đề của bùng nổ không gian trạng thái trong kiếm chứng
mô hình
Số lượng các trạng thái của một mô hình có thể rất to lớn. Một ví
dụ, xem xét hệ thống gồm n tiến trình, mỗi tiến trình có m trạng thái.
Do đó, sự hợp thành không đồng bộ của các tiến trình có thể có m
n
trạng thái. Tương tự vậy, trong n − bit bộ đếm, số lượng các trạng thái
của bộ đếm trong là hàm mũ của số lượng các bit, nghĩa là có 2
n
. Trong
kiểm chứng mô hình vấn đề này được biết như vấn đề bùng nổ trạng
thái. Tất cả các công cụ kiểm chứng đều gặp phải vấn đề này, và đây là
điều không thể tránh khỏi. Tuy nhiên, đã có nhiều kỹ thuật được đươc
đua ra để giải quyết vấn đề bùng nổ trạng thái. Những kỹ thuật này
thường xuyên được sử dụng trong các ứng dụng công nghiệp của kiểm
chứng mô hình. Đã có nhiều tiến bộ quan trọng trong việc giải quyết
vấn đề bùng nổ trạng thái. Một trong những tiến bộ quan trọng đầu tiên
là sử dụng kiểm chứng mô hình biểu trưng (symbolic model checking)
với lược đồ quyết định nhị phân (BDD). Trong hướng tiếp cận này, một
tập hợp các trạng thái được biểu diễn bởi BDD thay vì biểu diễn danh
sách của mỗi trạng thái riêng lẻ. Biểu diễn BDD thường theo hàm mũ
nhỏ trong thực tiễn. Kiểm chứng mô hình với các BDD được thực thi
sử dụng thuật toán điểm cố định (fixed point). Một hướng đi khác đang
được áp dụng nhiều trong ngành công nghiệp hiện nay là kiểm chứng
mô hình giới hạn (bounded model checking) khai thác bộ giải công cụ
SAT (SAT Solver) để tìm kiếm các phản ví dụ của độ dài giới hạn. Luận
văn nêu tìm hiểu về kiểm chứng mô hình biểu trưng với BDD và tập
trung vào kiểm chứng mô hình giới hạn dựa trên SAT.
2.2 Cách giải quyết theo hướng tiếp cận cổ điển với BDD
Ý tưởng chính của kiểm chứng mô hình tượng trưng là thể hiện
và thao tác với một hệ thống hữu hạn chuyển trạng thái như một hàm
Boolean. Cụ thể, các lược đồ quyết định nhị phân sắp xếp (OBDDs) là
một dạng chính tắc của các công thức Boolean. OBDDs về bản chất là
cô đọng hơn so với các dạng chuẩn truyền thống, hơn nữa OBDDs có
thể thao tác rất hiệu quả.
Xem xét các công thức Boolean qua n biến x
1
, x
2
, , x
n
. Một lược đồ
quyết định nhị phân (BDD) là đồ thị có hướng không có vòng và có
một gốc với hai loại đỉnh là đỉnh kết thúc và đỉnh không kết thúc. Mỗi
10
đỉnh không kết thúc v được gán nhãn bởi một biến var(v) và có hai
phần tử kế tiếp, low(v) và high(v). Mỗi đỉnh kết thúc v được gán nhãn
bởi 0 hoặc 1 qua hàm Boolean value(v) Một BDD với gốc v xác định
một hàm Boolean f
v
(x
1
, , x
n
) theo cách sau:
• Nếu v là đỉnh kết thúc thì f
v
(x
1
, , x
n
) = value(v).
• Nếu v là đỉnh không kết thúc với var(v) = x
i
thì f
v
(x
1
, , x
n
)
được cho bởi
¬x
i
∧ f
low(v)
(x
1
, , x
n
)
∨
x
i
∧ f
high(v)
(x
1
, , x
n
)
.
OBDD là một biểu diễn chính tắc của hàm Boolean. Điều này giúp
đơn giản hóa các tác vụ như kiểm tra hai công thức có tương với nhau
không và quyết định xem một công thức có thỏa mãn hay không. Biễu
diễn như vậy phải đảm bảo rằng hai hàm Boolean là tương đương một
cách logic khi và chỉ khi hai hàm Boolean có biểu diễn đẳng cấu. Hai
lược đồ quyết định nhị phân là đẳng cấu nếu tồn tại một song ánh H
giữa hai đồ thị sao cho:
• Các nút lá được ánh xạ tới các nút lá, và các đỉnh được ánh xạ tới
các đỉnh.
• Với mọi nút lá v, value(v) = value(H (v)).
• Với mọi đỉnh v:
• var(v) = var(H(v)).
• H(low(v)) = low(H(v)).
• H(high(v)) = high(H(v)).
Các Biểu đồ chuyển trạng thái có thể được thể hiện với các BDD như
sau. Trước tiên, phải thể hiện các trạng thái về n biến trạng thái Boolean
v = (v
1
, v
2
, , v
n
). Sau đó, thể hiện quan hệ chuyển R như công thức
Boolean về trạng thái các biến.
Biểu diễn chính tắc của các hàm Boolean có thể đạt được bằng cách
thay thế hai hạn chế trên cây quyết định nhị phân:
11
• Các biến xuất hiện trong cùng thứ tự theo mỗi đường từ gốc tới
lá. (Viết x < y biểu diễn x là trước y trong sắp xếp này)
• Không có cây con đẳng cấu hoặc các đỉnh dư thừa trong lược đồ.
Kích cỡ của các BDD phụ thuộc vào sự lựa chon sắp xếp các biến. Ví
dụ, BDD thể hiện cho so sanh n-bit là tuyến tính với sắp xếp tốt, nhưng
sẽ là theo hàm mũ với sắp xếp tồi.
Biểu đồ chuyển trạng thái có thể được thể hiện với BDD như sau. Trước
tiên, thể hiện các trạng thái theo n biến Boolean v = (v
1
, , v
n
). Sau đó,
thể hiện quan hệ chuyển R như một công thức Boolean theo các biến
trạng thái:
f
R
(v
1
, , v
n
, v
′
1
, , v
′
n
) = 1 khi và chỉ khi R(v
1
, , v
n
, v
′
1
, , v
′
n
).
với v
1
, , v
n
thể hiện trạng thái hiện tại và v
′
1
, , v
′
n
thể hiện trạng thái
kế tiếp. Cuối cùng, chuyển f
R
thành một BDD.
Thủ tục ToBDD lấy đầu vào là một công thức CTL f (v) và trả về là
một BDD thể hiện chính xác các trang thái của hệ thống thỏa mãn công
thức CTL. Các phép toán thời gian được xử lý như sau:
• T oBD D (EX f (v)) = ToBDD(∃v
′
. f
R
(v, v
′
) ∧ f (v
′
)).
• T oBD D (EF f (v)) = L f p(λZ.T oBDD( f (v) ∨ EXZ)).
• T oBD D (E[ f (v)∪g(v)]) = L f p(λZ.T oBDD(g(v)∨( f (v)∧EXZ))).
Nếu f (v) có dạng ∃v
i
.g, thì ToBDD( f (v)) = ToBDD(g|
v
i
←0
∨ g|
v
i
←1
).
Cuối cùng, để xem công thức f (v) là true trong tập các trạng thái khởi
tạo I(v), kiểm tra xem liệu công thức I(v) ⇒ f (v) có nắm giữ hay
không. Cách giải quyết vấn đề bùng nổ không gian trạng thái bằng
cách sử dụng kiểm chứng mô hình tượng trưng với BDD đã được áp
dụng từ lâu nhưng hiện nay đã không còn áp dụng nhiều nữa vì những
nguyên nhân, hạn chế sau:
• BDD phải lưu giữ các trạng thái, nên nó thường xuyên trở nên
quá lớn với các hệ thống lớn.
• Việc chọn cách sắp xếp các biến rất quan trọng cho việc thu về
những BDD nhỏ, thường tốn thời gian hoặc phải làm thủ công,
và đôi khi, không tồn tại những cách sắp xếp biến hiệu quả,
12
Chương 3: Kiểm chứng mô hình giới hạn dựa trên SAT
Kiểm chứng mô hình giới hạn (BMC) là phương pháp được sử dụng
trong các công cụ kiểm chứng dùng trong các ngành công nghiệp hiện
nay. Cho một hệ thống dịch chuyển trạng thái hữu hạn, một thuộc tính
logic thời gian, và giới hạn k, BMC sinh ra một công thức mệnh đề
thỏa mãn khi và chỉ khi thuộc tính có thể bị bác bỏ bởi phản ví dụ
của độ dài k. Công thức mệnh đề này dẫn tới một giải SAT (Boolean
satisfiability). Nếu không có phản ví dụ độ dài k được tìm thấy, thì tăng
giới hạn k và tìm xem có thấy phản ví dụ không. Với các thuộc tính
thỏa mãn (nghĩa là kiểm tra xem có thể tới được các trạng thái xấu hay
không), có thể chỉ ra rằng chỉ cần kiểm tra các phản ví dụ với độ dài
nhỏ hơn “diameter” của hệ thống ( số các dịch chuyển nhỏ nhất để tới
được tất cả các trạng thái của hệ thống). Hơn nữa, BMC có thể được
sử dụng để bắt các lỗi (hơn là kiểm chứng đầy đủ) bởi đơn giản chỉ cần
chạy với một độ dài phản ví dụ được cho hoặc với thời gian cho trước.
BMC có nhiều tiến bộ hơn so với kiểm chứng mô hình biểu trưng với
BDD:
1. BMC tìm các phản ví dụ nhanh hơn so với các hướng tiếp cận
dựa trên BDD.
2. BMC tìm các phản ví dụ của độ dài tối thiểu.
3. BMC sử dụng ít bộ nhớ hơn nhiều so với các hướng tiếp cận dựa
trên BDD.
4. BMC không yêu cầu người dùng chọn lựa sự sắp xếp các biến và
không cần thực hiện lại việc sắp xếp.
Trong BMC, các trạng thái của mô hình được thể hiện như các vectơ
của Boolean. Hệ thống chuyển dịch được mã hóa như sau:
• Tập hợp các trạng thái khởi tạo được quy định bởi một công thức
mệnh đề I(s), I(s) là true khi và chỉ khi s là một trạng thái khởi
tạo.
• Quan hệ dịch chuyển được quy định bởi một công thức mệnh đề
R(s, s
′
),R(s, s
′
) là true khi và chỉ khi tồn tại một dịch chuyển từ
s sang s
′
.
13
• Mỗi mệnh đề nguyên tử p, có một công thức mệnh đề p(s), p(s)
là true khi và chỉ khi p là true ở trạng thái s.
Định nghĩa 3.1 Đường dẫn tiến tố hợp lệ
Một dãy các trạng thái ( s
0
, , s
k
) là một đường dẫn tiền tố hợp lệ khi
và chỉ khi:
• I(s
0
) là true (s
0
là một trạng thái khởi tạo).
•
k−1
i=0
R(s
i
, s
i+1
) là true (với mọi i < k tồn tại một dịch chuyển
s
i
→ s
i+1
).
Sau đây, chúng ta mô tả BMC cho các thuộc tính an toàn LTL của dạng
G(p), vơi p là một mệnh đề nguyên tử.
3.1 Các thuộc tính an toàn
Thuộc tính Gp khẳng định rằng p là true trong tất cả các trạng thái
tới được. Chúng ta đạng mong muốn xác định xem có tồn tại một phản
ví dụ có chiều dài không lớn hơn giới hạn cố định k. Nói cách khác,
chúng ta mong muốn xác định xem liệu có tồn tại một đường dẫn tiền
tố hợp lệ (s
0
, , s
k
) trong đó p không đạt tại một vài trạng thái s
i
, với
i ≤ k. Do vậy, dãy (s
0
, , s
k
) là một phản ví dụ cho Gp khi và chỉ khi
công thức sau thỏa mãn:
I( s
0
) ∧
k−1
i=0
R(s
i
, s
i+1
)
đường dẫn tiền tố hợp lệ (s
0
, ,s
k
)
∧
k
i=0
¬p(s
i
)
p không đạt trong (s
0
, ,s
k
)
(1)
Trong thực tế, công thức (1) có thể rất lớn, do vậy việc sử dụng bộ giải
công cụ SAT vào trong BMC là rất hiệu quả, do SAT có thể xử lý các
công thức với hàng triệu mệnh đề.
3.2 Giải công cụ SAT
Boolean satisfiability (SAT) là một trong những vấn đề quan trọng
nhất của khoa học máy tính. SAT là bài toán quyết định xem có tồn tại
một thể hiện thỏa mãn với công thức Boolean đã cho. Nói cách khác,
các biến trong công thức Boolean được gán các giá trị làm cho công
14
thức có giá trị true. Quan trọng không kém là xác định không có phép
gán nào như vậy tồn tại. Tức là với tất các các phép gán biến đều cho
ra kết quả false. Trường hợp thứ hai, ta có thể nói rằng hàm là không
thỏa mãn. Ví dụ như công thức a ∧ b là thỏa mãn vì tồn tại phép gán
a = T rue và b = True để công thức a ∧ b = T rue .
Hầu hết các bộ giải công cụ SAT đều dựa trên thuật toán DPLL (Davis
Putnam Logemann Loveland). Thuật toán DPLL dựa trên tìm kiếm
theo chiều sâu của phép gán chân lý cục bộ với ba cải tiến bổ xung.
Sự giải thích cho ba cải tiến đó cho công thức CNF như sau:
• Kết thúc sớm: Một mệnh đề là true nếu có một literal là đúng.
Một mệnh đề là false nếu tất các các literal là sai.
• Xóa bỏ các pure literal: pure literal là các literal có cung dấu
trong tất cả các mệnh đề. Ví dụ như (A∨¬B), (¬B∨¬C), (A∨C),
A, B là các pure literal, C không phải là pure literal. Các pure
literal được gán giá trị true. Do đó, trong các mệnh đề thì các
pure literal sẽ được xóa bỏ.
• Lan truyền đơn vị: Mệnh đề đơn vị chứa một literal. Ví dụ như
nếu B = true thì (¬B ∨ ¬C) được rút gon thành ¬C và do đó C
phải được gán giá trị false. Nói chung, nếu tất cả literal là false
trừ một literal, thì literal đó phải là true.
3.3 Xác định giới hạn
Sử dụng hai phương pháp để xác định độ dài của phản ví dụ khi
kiểm chứng một thuộc tính an toàn như Gp. Lấy d là diameter của
hệ thống, tức là số bước đi nhỏ nhất để tới được tất cả các trạng thái.
Ngoài ra, d là số nhỏ nhất mà thỏa mãn: với mọi trạng thái s, nếu tồn
tại một đường dẫn tiền tố hợp lệ chứa s(tức là có thể tới được s), thì tồn
tại một đường dẫn tiền tố hợp lệ của độ dài tối đa là d chứa s. Rõ ràng,
nếu thuộc tính p nắm giữ tất các đường dẫn tiền tố hợp lệ của độ dài k,
với k ≥ d, thì p nắm giữ tất cả các trạng thái có thể tới được. Vì vậy,
chỉ cần xem xét các phản ví dụ của độ dài ở d. Nhứng việc tìm d là bài
toán khó.
Cho một giới hạn k, có thể quyết định xem liệu k ≥ d bằng việc giải
quyết một công thức định lương Boolean(quantified Boolean formula).
15
Cụ thể, nếu mọi trạng thái tới được trong k + 1 bước cũng có thể tới
được trong k bước, thì k ≥ d. Lấy reach
=n
và reach
≤n
là các vị từ được
định nghĩa thông qua không gian trạng thái S như sau:
reach
=n
(s) = ∃s
0
, , s
n
I( s
0
) ∧
n−1
i=0
R(s
i
, s
i+1
) ∧ s = s
n
reach
≤n
(s) = ∃s
0
, , s
n
I( s
0
) ∧
n−1
i=0
R(s
i
, s
i+1
) ∧ (
n
i=0
s = s
i
)
Vị từ reach
=n
(s) nắm giữ khi và chỉ khi s có thể tới được trong chính
xác n dịch chuyển, trong khi reach
≤n
nắm giữ khi và chỉ khi s có thể
tới được trọng không quá n dịch chuyển. Từ đó, k ≥ d khi và chỉ khi:
∀s ∈ S r each
=k+1
(s) ⇒ reach
≤k
(s) (2)
Phương pháp giới hạn phản ví dụ độ dài ở trên hạn chế giá trị do khó
khăn trong việc giải quyết công thức 2. Có một cách khác là sử dụng
BMC để chứng minh các thuộc tính (nghĩa là không chỉ đơn thuần cho
tìm kiếm các lỗi) theo quy nạp k bước(k-induction). Để chứng minh
thuộc tính Gp theo quy nạp k bước, một điều cần thiết là tìm một bất
biến q sao cho:
1. q(s) ⇒ p(s), ∀s ∈ S .
2. Với mọi đường dẫn tiền tố hợp lệ (s
0
, , s
k
), q(s
0
) ∧ ∧ q(s
k
)
nắm giữ true.
3. Với mọi dãy trạng thái (s
0
, , s
k
), nếu
k
i=0
R(s
i
, s
i+1
) nắm giữ
tru sau (q(s
0
) ∧ ∧ q(s
k
)) ⇒ q(s
k+1
) nắm giữ true.
3.2 BMC cho các thuộc tính LTL
Một phản ví dụ cho Fp chỉ có thể là một đường dẫn vô hạn. Để sử
dụng một đường dẫn tiền tố hữu hạn để thể hiện một đường dẫn vô hạn,
chúng ta xem xét tiềm năng của quay lui từ trạng thái cuối cùng của một
đường dẫn tiền tố hữu hạn tới một trạng thái trước đây, minh họa như
hình , một đường dẫn tiền tố hợp lệ (s
0
, , s
l
, , s
k
) có một quay lui từ
k tới l khi và chỉ khi quan hệ dịch chuyển R chứa cặp (s
k
, s
l
).
16
s
l
s
k
Hình 4: Một đường dẫn dạng lasso.
Công thức LTL là false nếu phủ định là true. Do đó, việc tìm phản
ví dụ của công thức LTL f là tương đương với với việc tìm một bằng
chứng cho phủ định của f . Đây sẽ là hướng tiếp cập của BMC cho công
thức LTL.
Với một hệ dịch chuyển trạng thái M, một công thức LTL f , và một
giới hạn k, xây dựng một công thức mệnh đề M, f
k
nắm giữ true khi
và chỉ khi tồn tại một đường dẫn tiền tố (s
0
, , s
k
) mà f nắm giữ true.
Giả sử rằng tất cả phủ định trong f đã được đưa vào bên trong để các
phủ định này xảy ra chỉ ngay trước các mệnh đề nguyên tử. Trước tiên,
định nghĩa một công thức mệnh đề M
k
chứa (s
0
, , s
k
) là một đường
dẫn tiền tố hợp lệ:
M
k
= I(s
0
) ∧
k−1
i=0
R(s
i
, s
i+1
)
Xem xét hai trường hợp sau. Trường hợp đầu tiên chuỗi (s
0
, , s
k
)
không có quay lui:
Với một giới hạn k và một chuỗi hữu hạn hoặc vô hạn π của k trạng
thái (s
0
, , s
k
), một công thức LTL f nắm giữ true theo π với giới hạn
k khi và chỉ khi π |=
0
k
là true, với π |=
i
k
được định nghĩa một cách quy
nạp như sau với i ∈ {0, , k}:
π |=
i
k
p khi và chỉ khi mệnh đề nguyên tử p là true ở trạng thái s
i
.
π |=
i
k
¬p khi và chỉ khi mệnh đề nguyên tử p là false ở trạng thái
s
i
.
π |=
i
k
f ∨ g khi và chỉ khi π |=
i
k
f hoặc π |=
i
k
g.
π |=
i
k
f ∧ g khi và chỉ khi π |=
i
k
f và π |=
i
k
g.
17
π |=
i
k
X f khi và chỉ khi i < k và (π |=
i+1
k
f ).
π |=
i
k
F f khi và chỉ khi π |=
i
k
f ∨ XFf .
π |=
i
k
G f khi và chỉ khi π |= f ∧ XGf .
π |=
i
k
f Ug khi và chỉ khi π |=
i
k
g ∨ ( f ∧ X[ f Ug]).
Dễ dàng thấy rằng π |=
0
k
f có nghĩa là π |= f với bất kỳ đường dẫn vô
hạn π và công thức LTL f . Cho một giới hạn k, một công thức LTL
f , và một đường dẫn tiền tố hợp lệ (s
0
, , s
k
), xây dựng một công thức
mệnh đề f
0
k
là true khi và chỉ khi π |=
0
k
f như sau:
p
i
k
:= p(s
i
) với p là một mệnh đề nguyên tử.
¬p
i
k
:= ¬p(s
i
) với p là một mệnh đề nguyên tử.
f ∨ g
i
k
:= f
i
k
∨ g
i
k
.
f ∧ g
i
k
:= f
i
k
∧ g
i
k
.
X f
i
k
:=
f
i+1
k
nếu i < k
False nếu ngược lại
.
F f
i
k
:= f
i
k
∨ XF f
i
k
.
G f
i
k
:= f
i
k
∧ XG f
i
k
.
f Ug
i
k
:= g
i
k
∨ ( f
i
k
∧ X( f Ug)
i
k
).
Với trường hợp có quay lui, xét một đường dẫn tiền tố (s
0
, , s
k
) với
quay lui từ k tới l. Xác định một đường dẫn vô hạn lasso π như hình :
π = (s
0
, , s
l−1
, sl, , s
k
, ). Xây dựng một công thức mệnh đề
l
f
0
k
nắm giữ khi và chỉ khi f nắm giữ trên π(trong ngữ nghĩa thông thường
LTL) như sau:
l
p
i
k
:= p(s
i
) với p là một mệnh đề nguyên tử.
l
¬p
i
k
:= ¬p(s
i
) với p là một mệnh đề nguyên tử.
l
f ∨ g
i
k
:=
l
f
i
k
∨
l
g
i
k
18
l
f ∧ g
i
k
:=
l
f
i
k
∧
l
g
i
k
l
X f
i
k
:=
l
f
i+1
k
nếu i<k
l
f
l
k
nếu i=k
l
G f
i
k
:=
k
j=min(i,l)
l
f
i
k
l
F f
i
k
:=
k
j=min(i,l)
l
f
i
k
l
f UG
i
k
:=
k
j=i
l
g
i
k
∧
j−1
n=i
l
f
n
k
∨
i−1
j=l
l
g
j
k
∧
j−1
n=l
l
f
n
k
Sau khi có được định nghĩa chuyển dịch cho đường dẫn với cả hai
trường hợp, chỉ cần định nghĩa dịch chuyển vào trong SAT. Trước tiên,
cần hai ký hiệu bổ trợ. Đặt
l
L
k
là true khi và chỉ khi tồn tại một dịch
chuyển từ s
k
tới s
l
, và L
k
là true nếu tồn tại bất kỳ quay lui nào trong
(s
0
, , s
k
).
Điều kiện lặp : Với l ≤ k, cho
l
L
k
:= R(s
k
, s
l
), và cho L
k
:=
k
l=0
l
L
k
.
Biểu diễn M, f
k
như sau:
M, f
k
:= M
k
∧
(¬L
k
∧ f
0
k
) ∨
k
l=0
(
l
L
k
∧
l
f
0
k
)
Từ đó, lấy một công thức LTL f , tồn tại một đường dẫn π thỏa mãn
f khi và chỉ khi tồn tại k sao cho M, f
k
thỏa mãn. Điều này tương
đương với M |= A f khi và chỉ khi M, f
k
là không thỏa mãn với mọi
k.
Chương 4: Ngôn ngữ SMV, công cụ NuSMV và thực nghiệm
4.1 Ngôn ngữ SMV
Ngôn ngữ SMV dùng để mô tả các hệ thống hữu hạn trạng thái. Các
kiểu dữ liệu mà ngôn ngữ này cung cấp bao gồm: kiểu logic (boolean),
kiểu số nguyên (bounded interger subrange) và các kiểu dữ liệu liệt kê
symbolic enum. Các mô tả của một hệ thống phức tạp có thể được chia
nhỏ thành các module và mỗi một module này có thể được thực thi
nhiều lần.
4.2 Công cụ NuSMV
NuSMV là một công cụ kiểm chứng mô hình được trường đại học
Carnegie Mellon University (CMU) và viện per la Ricerca Scientifica
19
e Tecnolgica (IRST). NuSMV hỗ trợ cả đặc tả thuộc tính bằng LTL và
CTL. Mục đích của dự án mã nguồn mở NuSMV là để cung cấp cho
cộng đồng kiểm tra mô hình một nền tảng chung cho việc nghiên cứu,
thực hiện, và so sánh các kỹ thuật kiểm tra mô hình tượng trưng mới.
Từ việc phát hành NuSMV2, nhóm nghiên cứu NUSMV đã nhận được
sự đóng góp mã cho các phần khác nhau của hệ thống. Một số công
ty, viện nghiên cứu và thương mại đã bày tỏ quan tâm hợp tác để phát
triển NuSMV. Các tính năng chính của NuSMV như sau: NuSMV cho
phép các thể hiện đồng bộ hoặc bất đồng bộ các hệ thống hữu hạn, và
phân tích các đặc tả thể hiện trong CTL và LTL, sử dụng kỹ thuật kiểm
chứng mô hình dựa trên BDD và SAT.
4.3 Thực nghiệm sử dụng NuSMV
Ví dụ thể hiện các yêu cầu người dùng của một hệ thống thư viện,
thể hiện dưới dạng biểu đồ lớp như 5:
Hình 5: Biểu đồ lớp các yêu cầu của hệ thống thư viện
Từ mô hình này có thể kiểm chứng thuộc tính như:
Một quyển sách(book) có thể được đặ trước(Reserve) chỉ khi nó đã
được mượn(Lend) hoặc sẵn sàng đặt trước(Reserve) bởi thành viên
khác(member).
hay một số thuộc tính khác trên bộ công cụ NuSMV.
Kết luận
Trong luận văn này tôi đã trình bày các kiến thức nền tảng của
kiểm chứng mô hình cũng như vấn đề của kiểm chứng mô hình. Các
tư tưởng, nội dụng để giải quyết vấn đề của kiểm chứng mô hình theo
cách tiếp cận cổ điển sử dụng BDD cũng như cách tiếp cận dựa trên bộ
giải công cụ SAT, đồng thời cũng giới thiệu về nguyên lý của bộ giải
20
công cụ SMT. Đây cũng là một hướng đi mới trong kiểm chứng mô
hình, đó là kiểm chứng mô hình dựa trên SMT thay vì sử dụng SAT
như hiện nay. Tác giả cũng mong muốn có thể phát triển luân văn tiếp
tục theo hướng này cũng như có thể kết hợp kiểm chứng mô hình với
các ngôn ngữ mô hình hóa thống nhất được sử dụng rộng tãi hiện nay
như UML. Đóng góp chính của luận văn bao gồm:
1 Tìm hiểu các vấn đề nền tảng trong kiểm chứng mô hình như
cách tiếp cận từ một vấn đề thực tiễn để đưa về bài toán kiếm
chứng mô hình, các loại logic thời gian, hệ thống dịch chuyển
trạng thái, cách sử dụng logic thời gian để đặc tả các thuộc tính
cần kiểm chứng cũng như cách mô hình hóa từ hệ thống thành
hệ dịch chuyển trạng thái.
2 Nghiên cứu về vấn đề bủng nổ không gian trạng thái trong kiểm
chứng mô hình, đây là vấn đề quan trọng trong kiểm chứng mô
hình và đã có nhiều công trình khoa học trên thế giới tập trung
giải quyết vấn đề này. Cách giải quyết theo hướng tiếp cận BDD
đã được phát triển từ những năm 90, luận văn trình bày những
điểm liên quan tới hướng tiếp cận này để sử dụng cho phần chính
của luận văn là tiếp cận theo hướng SAT.
3 Nghiên cứu giải quyết vấn đề bùng nổ không gian trạng thái
trong kiểm chứng mô hình dựa trên SAT. Tiếp cận theo hướng
kiểm chứng mô hình giới hạn (BMC) dựa trên SAT. Nghiên cứu
về các thuộc tính an toàn, giải công cụ SAT, thuật toán DPLL,
và kiểm chứng mô hình giới hạn cho LTL. Luân văn cũng trình
bày về một công cụ sử dụng SAT đang được các nhà khoa học
phát triển nhiều trong thời gian gần đây là NuSMV, tìm hiểu và
cài đặt một chương trình quản lý thư viện trên NuSMV.