Tải bản đầy đủ (.pdf) (53 trang)

(Luận văn thạc sĩ) nghiên cứu phương pháp xây dựng mô hình tự động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.15 MB, 53 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

LÊ BÁ CƯỜNG

NGHIÊN CỨU PHƯƠNG PHÁP XÂY DỰNG MƠ HÌNH
TỰ ĐỘNG

Ngành: Công nghệ thông tin
Chuyên ngành: Công nghệ phần mềm
Mã Số: 60 48 10

LUẬN VĂN THẠC SĨ

NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. PHẠM NGỌC HÙNG

Hà nội – 11/2011


i

Mục lục
LỜI CẢM ƠN ...................................................................................................ii
LỜI CAM ĐOAN ........................................................................................... iii
DANH MỤC HÌNH VẼ .................................................................................. iv
DANH MỤC THUẬT TỐN .......................................................................... v
Chương 1: Giới thiệu ....................................................................................... 1
Chương 2: Các phương pháp hình thức cho đặc tả phần mềm......................... 3
2.1
2.2
2.3


2.4
2.5

Hệ thống chuyển trạng thái được gán nhãn ................................. 3
Phép ghép nối song song .............................................................. 7
Hệ chuyển trạng thái được gán nhãn an toàn, thuộc tính an
tồn, tính thỏa mãn ....................................................................... 9
Thành phần phần mềm ............................................................... 12
Ơtơmát hữu hạn trạng thái.......................................................... 12

Chương 3: Các phương pháp sinh tự động mơ hình thành phần phần mềm .. 17
3.1

Phương pháp học sử dụng giải thuật L* ..................................... 18
3.1.1 Phương pháp xây dựng mơ hình sử dụng thuật toán L*.. 19
3.1.2 Giải thuật Vasilevskii-Chow ........................................... 22

3.2

Phương pháp xây dựng mơ hình sử dụng thuật tốn Thompson24
3.2.1 Sinh dẫn xuất................................................................... 24
3.2.2 Xây dựng mơ hình........................................................... 27
3.2.3 Tối ưu hóa mơ hình ......................................................... 34
3.2.4 Độ phức tạp tính tốn ...................................................... 40

Chương 4: Thực nghiệm ................................................................................. 41
4.1
4.2
4.3


Công cụ xây dựng mô hình thành phần phần mềm ................... 41
Thực nghiệm .............................................................................. 43
Ý nghĩa cơng cụ xây dựng mơ hình ........................................... 45

KẾT LUẬN ..................................................................................................... 47
TÀI LIỆU THAM KHẢO .............................................................................. 49


iv

DANH MỤC HÌNH VẼ
Hình 2.1: Một hệ thống chuyển trạng thái được gán nhãn. .............................. 4
Hình 2.2 – a: Hệ chuyển trạng thái được gán nhãn không đơn định. ............... 5
Hình 2.2 – b: Hệ chuyển trạng thái được gán nhãn đơn định. .......................... 6
Hình 2.3: Hệ chuyển trạng thái được gán nhãn. ............................................... 6
Hình 2.4: Ghép nối song song hai hệ chuyển trạng thái được gán nhãn. ......... 9
Hình 2.6: Xây dựng LTS ghép nối song song Input || Output || perr. .............. 11
Hình 2.7: Minh họa ơtơmát M được mơ tả ở trên........................................... 14
Hình 2.8: Phương pháp chuyển một ơtơmát M thành LTS L. ........................ 15
Hình 3.1: Mơ hình giả thiết về thành phần phần mềm C................................ 17
Hình 3.2: Sơ đồ thuật tốn L*. ........................................................................ 19
Hình 3.3: Xây dựng một DFA tương ứng với bảng quan sát đóng (S, E, T). 20
Hình 3.4: Sơ đồ thuật tốn Vasilevskii – Chow. ............................................ 23
Hình 3.5–a: Ơtơmát thành phần. ..................................................................... 29
Hình 3.5–b: Ơtơmát thành phần...................................................................... 29
Hình 3.5–c: Ơtơmát thành phần. ..................................................................... 30
Hình 3.5–d: Ơtơmát thành phần...................................................................... 30
Hình 3.6–a: Ơtơmát thành phần. ..................................................................... 33
Hình 3.6–b: Ơtơmát thành phần...................................................................... 33
Hình 3.6–c: Ơtơmát thành phần. ..................................................................... 33

Hình 3.6–d: Ơtơmát đốn nhận tập dẫn xuất đã cho. ..................................... 34
Hình 3.7–a: Ơtơmát đã loại bỏ quy tắc rỗng................................................... 38
Hình 3.7–b: Ơtơmát đơn định. ........................................................................ 39
Hình 4.1: Kiến trúc cơng cụ sinh mơ hình. ..................................................... 42
Hình 4.2: Giao diện GenModelTool. .............................................................. 42
Hình 4.3: Đầu vào cho cơng cụ GenModelTool. ............................................ 43
Hình 4.4: Một Ơtơmát đầu ra của công cụ GenModelTool. ........................... 45


v

DANH MỤC THUẬT TỐN

Giải thuật 3.1: L* học một mơ hình chính xác M của C. ............................... 22
Giải thuật 3.2: VC(S, E, C, n) ......................................................................... 23
Giải thuật 3.3: isTraceOfC( , T) .................................................................... 25
Giải thuật 3.4: makeTraceSet(C, maxLength) ................................................ 26
Giải thuật 3.5: makeDFA(L) ........................................................................... 31
Giải thuật 3.6: Loại bỏ cung rỗng ε ................................................................ 35
Giải thuật 3.7: Đơn định hóa ơtơmát .............................................................. 36
Giải thuật 3.8: Xây dựng ôtômát tối tiểu ........................................................ 37


1

Chương 1: Giới thiệu
Công nghệ phần mềm hướng thành phần đang được xem như là một phương
pháp hiệu quả cho phát triển phần mềm. Với công nghệ này, chúng ta có thể
giảm thiểu thời gian và cơng sức trong khi vẫn đảm bảo được chất lượng
phần mềm. Công nghệ hướng thành phần giúp cho việc xây dựng cũng như

tiến hóa phần mềm rất nhanh chóng bằng việc tái sử dụng và tích hợp các
thành phần phần mềm. Các ứng dụng được xây dựng bằng cách tích hợp các
thành phần độc lập cùng tương tác với nhau. Các thành phần này có thể được
xây dựng nên bởi nhà phát triển phần mềm hoặc bởi bên thứ ba.
Một trong những vấn đề cấp thiết và khó khăn nhất của cơng nghệ
hướng thành phần là làm thế nào để đảm bảo rằng các thành phần phần mềm
có thể cộng tác được với nhau để đạt được mục tiêu của hệ thống. Giải pháp
phổ biến hiện nay để giải quyết vấn đề này là áp dụng các phương pháp kiểm
thử hoặc kiểm chứng mô hình [7]. Trong cơng nghiệp, các phương pháp kiểm
thử đang được áp dụng phổ biến nhất nhằm đảm bảo tính đúng đắn của phần
mềm. Tuy nhiên, các ca kiểm thử thường vẫn được sinh thủ công nên rất tốn
công sức và tính bao phủ của chúng khơng cao. Kiểm thử tự động đang được
xem là giải pháp tiềm năng để giải quyết vấn đề này. Bên cạnh đó, các
phương pháp kiểm chứng mơ hình [7] hứa hẹn sẽ là cách tiếp cận hiệu quả
nhằm chứng minh tính đúng đắn của phần mềm.
Để áp dụng các phương pháp kiểm chứng mô hình và các phương pháp
kiểm thử tự động, chúng ta phải xây dựng mơ hình mơ tả chính xác hành vi
của hệ thống. Các nghiên cứu hiện nay về kiểm chứng mơ hình và kiểm thử
tự động đều giả thiết rằng mơ hình của hệ thống là sẵn có và đúng đắn. Trên
thực tế, việc xây dựng mơ hình của hệ thống là cơng việc khó khăn và tiềm
ẩn nhiều lỗi. Hơn nữa, cho dù mơ hình của hệ thống đã sẵn có và đúng đắn
thì nó chưa chắc đã là mơ hình đúng đắn khi phần mềm được tiến hóa với
việc thêm bớt một số hành vi của hệ thống. Một khó khăn nữa của việc xây
dựng mơ hình của hệ thống là trong trường hợp các thành phần phần mềm
được phát triển bởi bên thứ ba vì khi đó chúng ta khơng có mã nguồn và tài
liệu đầy đủ và nếu có thì cũng rất khó hiểu.
Như vậy, bài tốn xây dựng mơ hình mơ tả chính xác hành vi của hệ
thống khơng những có ý nghĩa rất to lớn trong việc kiểm chứng mơ hình và



2

kiểm thử tự động mà cịn có giá trị thực tiễn cao và được nhiều người quan
tâm. Do đó, tơi quyết định chọn đề tài “Nghiên cứu phương pháp xây dựng
mơ hình tự động” cho nghiên cứu của mình.
Đề tài này nhằm mục đích nghiên cứu phương pháp xây dựng mơ hình
tự động mơ tả chính xác hành vi của hệ thống, làm cơ sở cho việc áp dụng
các kỹ thuật kiểm chứng mơ hình và kiểm thử tự động nhằm góp phần nâng
cao chất lượng phần mềm.
Nội dung của luận văn được trình bày trong bốn chương và phần kết
luận.
Chương 1 giới thiệu về đề tài. Chương này trình bày các ngữ cảnh,
những lý do chọn đề tài, mục tiêu của đề tài và cấu trúc của luận văn.
Chương 2 trình bày các khái niệm cơ bản phục vụ cho đề tài. Chương
này mơ tả các phương pháp hình thức cho đặc tả phần mềm, các khái niệm về
thành phần phần mềm và đặc tả thành phần phần mềm, máy hữu hạn trạng
thái, hệ chuyển trạng thái được gán nhãn, ôtômát hữu hạn trạng thái và các
khái niệm liên quan.
Chương 3 nghiên cứu phương pháp xây dựng tự động mơ hình mơ tả
chính xác hành vi của một thành phần phần mềm. Trong chương này, chúng
tôi đề xuất hai giải pháp cho việc xây dựng mơ hình thành phần phần mềm.
Giải pháp thứ nhất là xây dựng mơ hình sử dụng thuật toán học L*. Đây là
phương pháp học lặp đi lặp lại để xây dựng mơ hình ứng viên tương ứng với
thành phần phần mềm C. Ở mỗi bước lặp, chúng ta sẽ kiểm tra tính tương
thích giữa mơ hình ứng viên với thành phần C và cập nhật lại mơ hình ứng
viên nếu khơng tương thích. Giải pháp thứ hai là xây dựng mơ hình sử dụng
thuật tốn Thompson [11]. Phương pháp này xây dựng ơtơmát hữu hạn như
một mơ hình mơ tả chính xác hành vi của thành phần phần mềm C tương
đương với biểu thức chính quy sinh tập dẫn xuất trên C.
Chương 4 giới thiệu về kết quả thực nghiệm. Chương này trình bày

những kết quả đạt được, cơng cụ sinh mơ hình của một thành phần phần mềm
và áp dụng cho một số ví dụ cụ thể.
Cuối cùng là phần kết luận, định hướng mở rộng và tài liệu tham khảo.


3

Chương 2: Các phương pháp hình thức cho đặc tả
phần mềm
2.1 Hệ thống chuyển trạng thái được gán nhãn
Mỗi thành phần phần mềm được đặc tả bởi một mơ hình tương ứng mơ tả
hành vi của thành phần đó. Mơ hình của thành phần phần mềm có thể được
biểu diễn bởi một hệ chuyển trạng thái được gán nhãn [10], đó là một đồ thị
có hướng với các nhãn trên các cạnh của nó. Mỗi nhãn trên cạnh biểu diễn
cho một hành động có thể thực hiện được bởi hệ thống, mỗi đỉnh của đồ thị là
một trạng thái của mơ hình, biểu diễn cho trạng thái của hệ thống.
Tập tất cả các nhãn được gọi là bảng chữ cái. Ta ký hiệu Act là tập tất
cả các hành động quan sát được, là hành động không quan sát được trong
môi trường của thành phần phần mềm, là trạng thái lỗi đặc biệt của hệ
thống, ta ký hiệu LTS  = <{π}, Act, , π>.
Định nghĩa 2.1: Hệ thống chuyển trạng thái được gán nhãn (Labeled
Transition System – LTS)
Một hệ chuyển trạng thái được gán nhãn [10] M là một bộ có thứ tự
gồm bốn thành phần (Q,
, , q0), trong đó:
 Q là tập khác rỗng các trạng thái của M,

Act là tập các hành động quan sát được, gọi là bảng chữ cái
của M,


Qx
x Q là hàm chuyển trạng thái, và
 q0 Q là trạng thái khởi tạo.
Ta ký hiệu qi

qj nếu có một hành động với nhãn là a chuyển hệ

thống từ trạng thái qi sang trạng thái qj, khi đó (qi, a, qj)
. Điều này có
nghĩa là khi hệ thống đang ở trạng thái qi nó có thể thực hiện một hành động
a và chuyển sang trạng thái qj. Tương tự, khi hệ thống đang ở trạng thái qj có
thể thực hiện một hành động a′ và chuyển sang trạng thái qk. Như vậy, ta có


4



một chuỗi các hành động qi

qj

qk. Khi đó, chúng ta có thể



ký hiệu: qi
qk.
Một cách tổng quát, nếu chúng ta có một chuỗi các hành động qi
qk biểu diễn hệ thống thì khi nó ở trạng thái qi nó có thể thực

hiện một chuỗi các hành động a1.a2….an và kết thúc ở trạng thái qk.
q′

Xét một hệ chuyển trạng thái được gán nhãn P = (Q,
Q, , i
ta có:
q′

1. q

(q, , q′ )
q′

2. q


,

, q0) với q,

.

q0, q1, …, qn : q = q0

q1

q2

qn = q′.


Ví dụ 2.1:
in

q0

q1

send

ack

q2

Hình 2.1: Một hệ thống chuyển trạng thái được gán nhãn.
Hình 2.1 là một ví dụ về hệ chuyển trạng thái được gán nhãn L = (Q,
, , q0), trong đó:
 Q = {q0, q1, q2} là tập các trạng thái của L,

= {in, send, ack} là tập các hành vi của L,

= { (q0, in, q1), (q1, send, q2), (q2, ack, q0)} là các quy tắc chuyển
trạng thái, và
 q0 là trạng thái khởi đầu.


5

Định nghĩa 2.2: Kích thước của hệ chuyển trạng thái được gán nhãn
Kích thước của hệ chuyển trạng thái được gán nhãn M = (Q,
là số trạng thái của M, ký hiệu là |M|, trong đó |M| = |Q|.


, , q0)

Định nghĩa 2.3: Hệ chuyển trạng thái được gán nhãn đơn định và không đơn
định
Một hệ chuyển trạng thái được gán nhãn M = (Q,
, , q0) là không
đơn định nếu
- chuyển dịch hoặc nếu (q, a, q ) và (q, a, q")
thì q
q". Trái lại, M là hệ chuyển trạng thái được gán nhãn đơn định.
Chú ý 2.1: Cho 2 hệ chuyển trạng thái được gán nhãn M = (Q,
, , q0) và
M' = (Q',
, , q0'). Ta nói M chuyển dịch thành M' với chuyển dịch a nếu
và chỉ nếu (q0, a, q0')
,
, Q = Q' và
. Ta ký hiệu: M
M'.
Ví dụ 2.2: Một hệ thống chuyển trạng thái được gán nhãn đơn định và khơng
đơn định
a

q0
a

q1

b


c
q2

Hình 2.2 – a: Hệ chuyển trạng thái được gán nhãn không đơn định.
Hình 2.2–a mơ tả một hệ chuyển trạng thái được gán nhãn L = (Q,
, , q0), trong đó: Q = {q0, q1, q2},
= {a, b, c}, q0 là trạng thái khởi
đầu, và = {(q0, a, q1), (q0, a, q2), (q1, b, q2), (q2, c, q0)}.
Khi hệ thống đang ở trạng thái q0, thực hiện một hành động a thì hệ
thống có thể chuyển đến trạng thái q1 hoặc trạng thái q2. Như vậy, trạng thái
kế tiếp của q0 khi thực hiện cùng một hành động a là không xác định duy nhất


6

hay khơng tất định. Ta gọi đó là hệ chuyển trạng thái được gán nhãn khơng
đơn định.
a

q0

q1

b

b

c
q2


Hình 2.2 – b: Hệ chuyển trạng thái được gán nhãn đơn định.
Hệ chuyển trạng thái được gán nhãn như trên hình 2.2–b là một hệ
chuyển trạng thái được gán nhãn đơn định. Từ trạng thái qi bất kỳ nếu thực
hiện một hành động aj nào đó thì hệ thống sẽ chuyển sang một trạng thái xác
định duy nhất qk.
Định nghĩa 2.4: Vết của một hệ chuyển trạng thái được gán nhãn M
Một vết của một hệ chuyển trạng thái được gán nhãn M = (Q,
q0) là một chuỗi hữu hạn các hành động a1a2 …an với a1 = q0, ai
1,…,n).

, ,
(i =

Như vậy vết của hệ chuyển trạng thái được gán nhãn M là một chuỗi
các hành động quan sát được mà M có thể thực hiện từ trạng thái khởi tạo q0.
Ví dụ 2.3: Cho một hệ chuyển trạng thái được gán nhãn M = (Q,
như trên hình 2.3
in
q0
q1

send

ack

q2
Hình 2.3: Hệ chuyển trạng thái được gán nhãn.

,


, q0)


7

Trong đó: Q = { q0, q1, q2},
= {in, send, ack}, q0 là trạng thái khởi
đầu, và = {(q0, in, q1), (q1, send, q2), (q2, ack, q0)}.
Với hệ chuyển trạng thái M được mơ tả trên hình 2.3, chuỗi các hành
động in send ack là một dẫn xuất trên M. Từ trạng thái q0, thực hiện hành
động in hệ thống chuyển sang trạng thái q1, tiếp tục thực hiện hành động send
hệ thống chuyển sang trạng thái q2, cuối cùng thực hiện hành động ack hệ
thống trở về trạng thái q0. Tương tự trên một chuỗi in send ack in send cũng
là một dẫn xuất trên M.
Xét một chuỗi hành động in send in send ack trên M. Ta thấy từ trạng
thái khởi tạo q0 thực hiện hành động in hệ thống chuyển sang trạng thái q1,
tiếp tục thực hiện hành động send hệ thống chuyển sang trạng thái q2, từ trạng
thái q2 hệ thống không thể thực hiện được hành động in. Do đó chuỗi hành
động trên khơng phải là một dẫn xuất trên M.
Chú ý 2.2: Với Σ Act ta ký hiệu ↑Σ là một dẫn xuất thu được bằng cách
loại bỏ khỏi tất cả các hành động a mà a  Σ. Tập tất cả các vết của M
được gọi là ngôn ngữ của M, ký hiệu L(M). Một vết = a1a2..an là một vết
hữu hạn trên hệ chuyển trạng thái được gán nhãn M. Ta ký hiệu hệ chuyển
trạng thái được gán nhãn Mσ = (Q,
, , q0) với Q = {q0, q1,.., qn} và = {
(qi-1, ai, qi)} với i=1,..,n. Ta nói rằng một hành động a
được chấp nhận
từ một trạng thái s Q nếu tồn tại s Q sao cho (s, a, s )
. Tương tự vậy

ta nói rằng một vết a1a2 …an được chấp nhận từ trạng thái s Q nếu tồn tại
một dãy các trạng thái s0, s1, …, sn với s0 = q0 sao cho i=
.

thì (si-1, ai, si)

2.2 Phép ghép nối song song
Một toán tử ghép nối song song [10], ký hiệu || là một phép toán ghép nối hai
thành phần phần mềm bằng cách đồng bộ các hành vi chung trên bảng chữ
cái và đan xem các hành động cịn lại.
Giả sử có hai hệ chuyển trạng thái được gán nhãn là M1= (Q1, αM1, 1,
q10) và M2= (Q2, αM2, 2, q20), phép ghép nối song song giữa M1 và M2, ký
hiệu M1 || M2 được định nghĩa như sau:


8

Nếu M1 =  hoặc M2 =  thì M1|| M2 = . Ngược lại, M1|| M2 = (Q,
αM, , q0), trong đó:
Q= Q1Q2, αM= αM1 αM2, q0 = (q10, q20) và hàm  được xác định
như sau:
 Với mọi (q1,a,q2) δ1 và (q1′, a, q2′) δ2 thì ( (q1, q1′), a, (q2, q2′) ) δ,
 Với (q1,a,q2) δ1, a ∉ αM2 thì q′ Q2 ta có ( (q1,q′), a, (q2,q′) ) δ,

 Với (q1′, a, q2′) δ2, a ∉ αM1 thì q Q1 ta có ( (q, q1′), a, (q, q2′) )
δ.
Ví dụ 2.4: Mơ hình ghép nối song song hai hệ chuyển trạng thái được gán
nhãn Input và Output như trên hình 2.4.
Hình 2.4 mơ tả phép ghép nối song song hai hệ chuyển trạng thái được
gán nhãn. Trong đó, hai hành động send và ack là đồng bộ, các hành động

còn lại đan xen nhau. Theo các quy tắc trên ta xác định được hệ chuyển trạng
thái song song được gán nhãn M′ = (Q′, αM′, ′, q0′), trong đó :





Q′ = Q1 x Q2 = {(0,a), (0,b), (0,c), (1,a), (1,b), (1,c), (2,a), (2,b), (2,c)},
αM′ = {in, send, out, ack},
q0′ = (0, a), và
δ′ = {((0,a), in, (1,a)), ((1,a), send, (2,b)), ((2,b), out, (2,c)), ((2,c),
ack, (0,a)), ((0,b), in, (1,b)), ((0,b), out, (0,c)), ((1,b), out, (1,c)),
((0,c), in, (1,c)) }.

Chúng ta tiến hành loại bỏ tất cả các trạng thái không đến được từ
trạng thái khởi tạo (0,a) và tất cả các hành động đưa hệ thống về trạng thái đó
ta sẽ thu được một hệ thống chuyển trạng thái ghép nối song song được gán
nhãn M = (Q, αM, , q0) trong đó:





Q = Q1 x Q2 = {(0,a), (1,a), (2,b), (2,c)},
αM = {in, send, out, ack},
q0 = (0, a), và
δ = {((0,a), in, (1,a)), ((1,a), send, (2,b)), ((2,b), out, (2,c)), ((2,c), ack,
(0,a))}.



9

Input

Output
in

0

send

send
2

1

out

a

c

b

ack

ack

Input || Output


Input || Output
out

0,a

0,b

0,c

in

in

in

in
ack

1,b

1,a

out

1,c

ack
send
2,a


0,a

2,b

out

1,a
send
out

2,c

2,b

2,c

Hình 2.4: Ghép nối song song hai hệ chuyển trạng thái được gán nhãn.

2.3 Hệ chuyển trạng thái được gán nhãn an tồn, thuộc
tính an tồn, tính thỏa mãn
Định nghĩa 2.5: Hệ chuyển trạng thái được gán nhãn an toàn
Hệ chuyển trạng thái được gán nhãn an toàn là một hệ chuyển trạng
thái được gán nhãn không chứa bất kỳ một trạng thái lỗi π nào.


10

Định nghĩa 2.6: Thuộc tính an tồn
Thuộc tính an tồn là thuộc tính đảm bảo khơng có lỗi xảy ra trong q
trình thực hiện của hệ thống. Một thuộc tính an toàn p được biểu diễn dưới

dạng một hệ chuyển trạng thái được gán nhãn an toàn p = (Qp, αp, p, qp0).
Ngơn ngữ của nó L(p) là tập tất cả các hành vi được đoán nhận trên αp.
Định nghĩa 2.7: Hệ chuyển trạng thái được gán nhãn lỗi
Hệ chuyển trạng thái được gán nhãn lỗi của một thuộc tính p = (Q, αp,
, q0) được ký hiệu là perr = (Q {π}, αperr, ′, q0), trong đó:
αperr = αp, ′ = 

{ (q, a, π) | a

αp và q′

Q sao cho (q, a, q′)

 }.

Ví dụ 2.5: Xây dựng hệ chuyển trạng thái được gán nhãn lỗi từ một hệ
chuyển trạng thái ứng với thuộc tính p.
in

in
i

i

ii
out

LTS của thuộc tính p

ii

out

out

in

π
Error LTS perr

Hình 2.5: LTS của thuộc tính p và LTS lỗi tương ứng của p.
Hình 2.5 mơ tả phương pháp xây dựng hệ chuyển trạng thái lỗi ứng với
thuộc tính p. Theo định nghĩa 2.7, hệ chuyển trạng thái lỗi của thuộc tính p
được xác định là perr = (Q {π}, αperr, ′, q0), trong đó:





Tập các hành vi là αperr = αp = {in, out},
Tập trạng thái của perr là Q {π} = {i, ii, π},
Trạng thái khởi tạo là q0, và
Tập các quy tắc chuyển trạng thái là ′ = {(i, in, ii), (ii, out, i), (ii, in,
π), (i, out, π)}.


11

Định nghĩa 2.8: Tính thỏa mãn
Một hệ chuyển trạng thái được gán nhãn M được gọi là thỏa mãn thuộc
tính p, ký hiệu M╞ p khi và chỉ khi   L(M) sao cho: (αp)  L(p).

Để kiểm chứng một thành phần M thoả mãn một thuộc tính p, chúng ta
biểu diễn cả M và perr dưới dạng LTS an tồn (safety LTS), sau đó thực hiện
phép ghép nối song song M||perr. Nếu LTS thu được sau phép ghép nối tồn tại
một dẫn xuất có thể tới trạng thái π, khi đó ta nói thành phần M vi phạm
thuộc tính p. Ngược lại, M thoả mãn thuộc tính p.
Ví dụ 2.6: Kiểm chứng hệ chuyển trạng thái ghép nối song song được gán
nhãn thu được như trên ví dụ 2.4 có thỏa mãn thuộc tính p được đề cập trong
ví dụ 2.5. Ta xây dựng một hệ chuyển trạng thái ghép nối song song được
gán nhãn Input || Output || perr như trên hình 2.6.
Perr

Input || Output

in

0,a
i

ack

in

ii
out

1,a

out

in

π

send
2,b

out

Input || Output || Perr
0,a,i

2,c
ack

1,a,i

send

2,b,i

2,c,i
out

in
ack
0,a,ii

1,a,ii

π


out
2,b,ii

send

2,c,ii

in
Hình 2.6: Xây dựng LTS ghép nối song song Input || Output || perr.


12

Từ sơ đồ ghép nối song song được mô tả trên hình 2.6, ta dễ dàng kiểm
tra được trạng thái lỗi π không thể tới được khi bắt đầu từ trạng thái khởi đầu
(0, a, i). Do đó, hệ chuyển trạng thái ghép nối song song được gán nhãn Input
|| Output thỏa mãn thuộc tính p.

2.4 Thành phần phần mềm
Trong bối cảnh phát triển công nghệ phần mềm hướng thành phần, mỗi thành
phần phần mềm được coi như một hộp đen. Một thành phần phần mềm [10]
có thể được biểu diễn bởi một máy hữu hạn trạng thái được định nghĩa như
sau:
Định nghĩa 2.9: Thành phần phần mềm
Gọi M = (QM, Σ, M , q0M) là mơ hình mơ tả hành vi của thành phần
phần mềm C. C là một máy hữu hạn trạng thái không xác định (Unknown
Finite State Machine – UFSM) (QC, Σ, C , q0C), trong đó:
 QC là tập khác rỗng các trạng thái,
 Σ Act là tập hữu hạn các hành động được gọi là bảng chữ cái của C,


QC x
x QC là hàm chuyển trạng thái, và
 q0C QC là trạng thái khởi tạo.
Chú ý 2.3: C là máy hữu hạn trạng thái không xác định có nghĩa là ta khơng
biết được tất cả các trạng thái và các hành vi của nó bởi vì thành phần phần
mềm C như một hộp đen, ta chỉ có thể tiến hành các thử nghiệm trên C.
Định nghĩa 2.10: Mơ hình chính xác (Accurate Model)
M là mơ hình mơ tả hành vi của một thành phần phần mềm C. Ta nói
*
M là mơ hình chính xác [10] của C nếu
, là một thực hiện được
chính xác trên C. Khi đó là một vết của M.

2.5 Ơtơmát hữu hạn trạng thái
Định nghĩa 2.11: Ơtơmát hữu hạn trạng thái (Deterministic Finite State
Automata - DFA)


13

Ơtơmát hữu hạn trạng thái [1], [4] là một bộ năm có thứ tự M = (Q,
q0, F), trong đó:

, ,

 Q là tập hữu hạn khác rỗng các trạng thái,

Act là một tập hữu hạn khác rỗng các hành động, còn gọi là
bảng chữ cái của M,
 q0 Q là trạng thái khởi tạo hay trạng thái đầu,

 F Q là tập các trạng thái kết thúc, và

là hàm chuyển có dạng:
o Nếu hàm chuyển là ánh xạ : Q x
Q thì M được gọi là
ơtơmát hữu hạn đơn định (deterministic finite automata - DFA).
o Nếu hàm chuyển là ánh xạ : Q x
2Q thì M được gọi là
ơtơmát hữu hạn không đơn định (nondeterministic finite automata NDFA).
Chú ý 2.4: Một ôtômát hữu hạn trạng thái M và một chuỗi , ta ký hiệu
(q, ) để chỉ trạng thái của M sau khi đọc chuỗi bắt đầu từ trạng thái q.
Một chuỗi được gọi là đốn nhận bởi ơtơmát hữu hạn M = (Q,
, , q0,
F) nếu (q0, ) F. Ngơn ngữ đốn nhận bởi ơtơmát M được định nghĩa
L(M) = { | (q0, ) F}.
Ta có thể mơ tả hoạt động của ôtômát M khi cho một xâu vào
a1a2…an như sau:

=

Khi bắt đầu làm việc, ôtômát M ở trạng thái q0 và đầu đọc đang nhìn
vào ký hiệu a1, tiếp theo ôtômát sẽ chuyển từ trạng thái q0 dưới tác động của
ký hiệu vào a1 sang trạng thái mới (q0, a1) = q1 Q và đầu đọc chuyển sang
ký hiệu a2. Tiếp theo ôtômát sẽ chuyển từ trạng thái q1 dưới tác động của hàm
chuyển sang trạng thái mới (q1, a2) = q2 Q. Quá trình này tiếp tục cho
đến khi xảy ra một trong các tình huống sau:
 Ơtơmát đọc hết xâu vào = a1a2…an và (qn-1, an) = qn F, khi đó ta
nói rằng ơtơmát M đốn nhận xâu ,
 Ơtơmát đọc hết xâu vào = a1a2…an và (qn-1, an) = qn ∉ F, khi đó ta
nói rằng ơtơmát M khơng đốn nhận xâu , hoặc

 Ôtômát M đọc đến aj (j n) và (qj-1, aj) khơng xác định, khi đó ta nói
rằng ơtơmát M khơng đoán nhận xâu .


14

Chú ý 2.5: Biểu diễn ôtômát hữu hạn trạng thái
Phương pháp thứ nhất là biểu diễn bằng hàm chuyển trạng thái, đây là
phương pháp biểu diễn ôtômát như đã mô tả trong định nghĩa 2.11.
Phương pháp thứ hai là biểu diễn bằng đồ thị. Hàm chuyển trạng thái
được biểu diễn dưới dạng một đồ thị có hướng, trong đó mỗi trạng thái là một
đỉnh. Nếu ký hiệu vào là a
và từ trạng thái q ôtômát chuyển sang trạng
thái p (p = (q, a)) thì sẽ có một cung từ đỉnh q đến đỉnh p với nhãn là a.
Đỉnh ứng với trạng thái bắt đầu (q0) có mũi tên đến, đỉnh ứng với trạng thái
kết thúc được biểu diễn bằng vòng tròn kép, các đỉnh còn lại biểu diễn bởi
vòng tròn đơn.
Ví dụ 2.7 minh họa cho hai cách biểu diễn của một ôtômát M, biểu
diễn bằng hàm chuyển trạng thái và biểu diễn bằng đồ thị có hướng như
hình 2.7.
, , q0, F), trong đó:

Ví dụ 2.7: Ơtơmát hữu hạn trạng thái M = (Q,

 Q = {q0, q1},
 q0 là trạng thái khởi tạo,

= { a, b},

= { (q0, a, q1), (q0, b, q1), (q1, a, q1), (q1, b, q0)}, và


= { q1}.
a, b
q0

q1

a

b
Hình 2.7: Minh họa ơtơmát M được mơ tả ở trên.
Hình 2.7 mơ tả biểu diễn của ôtômát hữu hạn M dưới dạng đồ thị
chuyển trạng thái. Với ôtômát trên, ta dễ dàng kiểm tra được rằng một chuỗi
aaaa L(M), nhưng chuỗi aaaab ∉ L(M).


15

Chú ý 2.6: Một ôtômát hữu hạn trạng thái M được gọi là tiền tố đóng nếu
ngơn ngữ được đốn nhận bởi nó L(M) là tiền tố đóng, tức là với mỗi chuỗi
L(M) thì mọi tiền tố của cũng thuộc L(M).
Chú ý 2.7: Ơtơmát M nhận được từ giải thuật học L* [6], [13] được trình bày
trong chương 3 là ôtômát tối tiểu, đầy đủ và tiền tố đóng. Do đó, nó sẽ chứa
một số trạng thái khơng kết. Để nhận được hệ thống chuyển trạng thái được
gán nhãn L từ ôtômát M, chúng ta loại bỏ tất cả các trạng thái không kết và
tất cả các quy tắc chuyển trạng thái đến trạng thái khơng kết đó. Định nghĩa
2.12 chỉ ra phương pháp biến đổi một ôtômát thành một hệ chuyển trạng thái
được gán nhãn.
Định nghĩa 2.12: Với một ôtômát M = ( Q {nas},
, , q0, Q) ta xác định

được hệ thống chuyển trạng thái được gán nhãn L tương ứng như sau:
L = ( Q,

,

(Qx

x Q ), q0)

Trong đó nas (non-acepting states) là các trạng thái khơng kết.
Ví dụ 2.8: Minh họa cách chuyển từ một ơtơmát hữu hạn M thành một hệ
chuyển trạng thái được gán nhãn L

a, b
q0

q1

a

q1

a

b
Hình 2.8: Phương pháp chuyển một ơtơmát M thành LTS L.
Hình 2.8 mơ tả phương pháp chuyển một ôtômát M thành một hệ
chuyển trạng thái được gán nhãn L. Dễ nhận thấy, ơtơmát M có q1 là trạng
thái kết duy nhất. Do đó, chúng ta loại bỏ trạng thái q0 và tất cả các quy tắc
chuyển trạng thái đến trạng thái q0 thu được một hệ chuyển trạng thái L như

trên hình 2.8.


16

Định nghĩa 2.13: Ơtơmát tối tiểu
Ơtơmát có số trạng thái ít nhất trong các ơtơmát hữu hạn cùng đốn
nhận ngơn ngữ L được gọi là ôtômát tối tiểu [2], [3] của ngôn ngữ L.
Định nghĩa 2.14: Trạng thái tương đương
Hai trạng thái q1 và q2 được gọi là tương đương [2], ký hiệu q1 q2
nếu cả hai trạng thái (q1, x) và (q2, x) đều là những trạng thái kết thúc hoặc
cả hai đều là không kết thúc với mọi x Σ*.
Định nghĩa 2.15: Trạng thái k – tương đương
Hai trạng thái q1 và q2 được gọi là k – tương đương [2], ký hiệu q1 k
q2 nếu cả hai trạng thái (q1, x) và (q2, x) đều là những trạng thái kết thúc
hoặc cả hai đều là không kết thúc với mọi x Σ* có độ dài nhỏ hơn k ( k 0)
Chú ý 2.8: Các quan hệ và k là các quan hệ tương đương (có tính chất
phản xạ, đối xứng, bắc cầu). Các lớp tương đương của hai quan hệ này sẽ tạo
ra các phân hoạch và k của Q. Các phần tử của k là các lớp k – tương
đương.
Định nghĩa 2.16: Trạng thái (k+1) – tương đương
Hai trạng thái q1 và q2 được gọi là (k+1) – tương đương nếu:
 chúng là k – tương đương, và
 (q1, a) và (q1, a) cũng là k – tương đương với mọi a

Σ.


17


Chương 3: Các phương pháp sinh tự động mơ hình
thành phần phần mềm
Chương 2 đã trình bày các kiến thức cơ bản về các phương pháp hình thức
cho đặc tả phần mềm, máy hữu hạn trạng thái và ôtômát hữu hạn. Trong
chương này, chúng tơi xin trình bày phương pháp xây dựng mơ hình của một
thành phần phần mềm.
Cơng nghệ phần mềm hướng thành phần hiện là một kỹ thuật quan
trọng bậc nhất trong công nghệ phần mềm. Tuy nhiên, vấn đề lớn nhất là làm
thế nào để đảm bảo rằng các thành phần phần mềm có thể cộng tác được với
nhau để đạt được mục tiêu của hệ thống. Giải pháp phổ biến hiện nay để giải
quyết vấn đề này là áp dụng các phương pháp kiểm thử hoặc kiểm chứng mơ
hình. Tuy nhiên, các kỹ thuật này hiện nay đều giả thiết rằng mơ hình của
thành phần phần mềm là sẵn có và chính xác. Giả thiết này khơng dễ có được
trong thực tế do thành phần phần mềm thường được phát triển bởi bên thứ ba
nên không có mã nguồn và tài liệu đầy đủ và nếu có cũng rất khó hiểu. Do
đó, mỗi thành phần phần mềm ln được nhìn nhận như một hộp đen. Bài
tốn đặt ra là cần xây dựng mơ hình mơ tả chính xác hành vi của thành phần
phần mềm đó. Dưới đây là hai đề xuất phương pháp xây dựng mô hình thành
phần phần mềm. Phương pháp thứ nhất là phương pháp xây dựng mơ hình sử
dụng thuật tốn học L* được phát triển bởi Angluin [6] và được cải tiến bởi
Rivest và Schapire [13] và phương pháp thứ hai là phương pháp xây dựng mơ
hình sử dụng thuật tốn Thompson [11].
Mỗi thành phần phần mềm C được coi như một hộp đen, chúng ta hồn
tồn khơng biết được tất cả các trạng thái và các hành động trên C. Giả thiết
rằng mỗi thành phần C có những thơng tin sau: Với mỗi chuỗi các hành động
ta có thể kiểm tra được nó có phải là một thực hiện trên C hay khơng.

a1a2…an

Black box

component C

true/false

Hình 3.1: Mơ hình giả thiết về thành phần phần mềm C.


18

Hình 3.1 mơ tả mơ hình giả thiết của bài tốn. Với mỗi chuỗi a1a2…an
ta ln kiểm tra được nó có phải là một thực hiện trên C hay khơng. Nếu
chuỗi a1a2…an là thực hiện được trên C thì trả về giá trị true, trái lại trả về giá
trị false. Tập tất cả các chuỗi thực hiện được trên C gọi là ngơn ngữ đốn
nhận bởi C, ký hiệu L(C).

3.1 Phương pháp học sử dụng giải thuật L*
Giải thuật học L* học một ngôn ngữ không biết quy tắc để đưa ra một ơtơmát
hữu hạn đốn nhận nó. Ý tưởng chính của giải thuật này dựa trên định lý
“Myhill – Nerode Theorem” [5] trong lý thuyết ngơn ngữ hình thức. Với mỗi
tập có quy tắc U Σ*, tồn tại duy nhất một ôtômát tối tiểu mà tập các trạng
thái của nó đẳng cấu với tập các lớp tương đương theo quan hệ sau: w ≈ w′
khi và chỉ khi u Σ*: wu U
w′u U. Do đó, ý tưởng chính của L* là
học các lớp tương đương.
U là một ngôn ngữ không biết quy tắc trên bảng chữ cái Σ. Giải thuật
học L sẽ học để thu được một ôtômát hữu hạn đơn định (DFA) M như một
ơtơmát tối tiểu đốn nhận U, tức là L(M) = U. Để học được M, L* cần tương
tác với một đối tượng giáo viên (Teacher), Teacher phải có khả năng trả lời
hai loại câu hỏi như sau:
*


thì
false.

Loại thứ nhất là câu hỏi truy vấn thành viên, với mỗi dẫn xuất
Σ*
U không? Teacher sẽ trả lời true nếu
U, trái lại Teacher sẽ trả lời

Loại thứ hai là câu hỏi kiểm tra ứng viên, với mỗi ứng viên DFA M thì
M có phải là ơtơmát đốn nhận U không (tức là L(M) = U?). Nếu L(M) = U
thì Teacher trả lời true, trái lại Teacher sẽ trả về một phản ví dụ phản ảnh sự
khác biệt giữa L(M) và U.
Để làm được điều đó L* duy trì một bảng T mà mỗi bản ghi của nó lưu
các chuỗi s Σ*, s có thuộc U hay khơng. Điều này được thực hiện bằng cách
tạo các câu hỏi truy vấn thành viên gửi tới Teacher để cập nhật bảng T. Ở
mỗi bước L* xây dựng một DFA M từ bảng T và yêu cầu Teacher trả lời câu
hỏi kiểm tra ứng viên M có phải là ơtơmát đốn nhận U hay khơng? Nếu
Teacher trả lời true thì giải thuật sẽ dừng, trái lại L* sẽ sử dụng phản ví dụ


19

được trả về bởi Teacher để cập nhật lại bảng T và tiếp tục lặp lại quá trình
trên.

3.1.1 Phương pháp xây dựng mơ hình sử dụng thuật tốn L*
Giải thuật học L* sẽ học để thu được một ôtômát tối tiểu hữu hạn M tương
đương với thành phần phần mềm C theo nghĩa M là một mơ hình chính xác
mơ tả hành vi của thành phần C, trong đó C như một hộp đen với những giả

thiết như đã trình bày ở trên.
No + CounterExample

Learning

Mi

Yes

Checking
Conformance via VC

Mi and C are in
conformance
Black-box
Component
C

Hình 3.2: Sơ đồ thuật tốn L*.
Hình 3.2 mơ tả tiến trình lặp của giải thuật L* để học được một mơ
hình chính xác của thành phần phần mềm C. Ở mỗi bước của tiến trình lặp,
L* tương tác với một giáo viên (Teacher). Teacher sử dụng giải thuật
Vasilevskii – Chow (VC) để trả lời câu hỏi kiểm tra mô hình ứng viên Mi có
thỏa mãn L(Mi) = L(C) hay khơng? Nếu L(Mi) ≠ L(C) thì Teacher sẽ trả về
một chuỗi d phản ảnh sự khác biệt giữa Mi với S, ví dụ L(Mi)\L(C) hoặc
L(C)\L(Mi). Trái lại Teacher sẽ trả về giá trị true. Điều này có nghĩa là Mi là
mơ hình chính xác của C.
L* duy trì một bảng T để ghi nhận mỗi chuỗi s Σ* thì s có thuộc L(C)
hay khơng bằng cách cho thực hiện chuỗi s trên C. Ở mỗi bước, L* tạo một
truy vấn kiểm tra ứng viên, nó sử dụng bảng T để xây dựng mơt mơ hình ứng

viên DFA Mi và u cầu Teacher trả lời câu hỏi kiểm tra ứng viên. Nếu
Teacher trả lời true thì giải thuật sẽ dừng. Trái lại L* sử dụng giá trị d biểu
diễn sự khác biệt giữa Mi và C được trả lại bởi Teacher để cập nhật lại bảng
T.
Một cách chi tiết, để học được mơ hình hệ thống L* xây dựng một bảng
quan sát (S, E, T), trong đó:


20

 S Σ* là tập các tiền tố, biểu diễn các trạng thái,
 E Σ* là tập các hậu tố, biểu diễn các giá trị thể hiện sự phân biệt giữa
mơ hình ứng viên Mi với thành phần C được trả về bởi Teacher, và
 T là một ánh xạ từ tập (S S. Σ).E → {true, false}, với mỗi chuỗi s
Σ* thì T(s) = true nếu s L(C), trái lại T(s) = false.
Định nghĩa 3.1: Bảng quan sát (S, E, T) được gọi là bảng đóng nếu nếu
S,
Σ thì ′ S,
E sao cho T(
) = T( ′e).
Trong trường hợp này ′ biểu diễn trạng thái kế tiếp của sau khi thực
hiện một hành động a, mọi hậu tố của ′ và
là hoàn toàn giống nhau. Trực
quan chúng ta dễ nhận thấy một bảng quan sát (S, E, T) là đóng nếu mọi dịng
S.Σ đều tồn tại một dịng ′ S tương ứng với nó.
Với mỗi bảng đóng (S, E, T) ta luôn xây dựng được một DFA tương
ứng D = (Q, D, , q0, F) như sau:
 Q = S,
 D = Σ,


được định nghĩa như sau ( , a) = ′ nếu e
 q0 = , và
 F={
S sao cho T( ) = true}.

E thì T(

e) = T( ′e),

Ví dụ 3.1: Chuyển từ một bảng quan sát đóng (S, E, T) sang một DFA tương
ứng

Hình 3.3: Xây dựng một DFA tương ứng với bảng quan sát đóng (S, E, T).


21

Hình 3.3 mơ tả phương pháp xây dựng một DFA tương ứng với bảng
quan sát đóng (S, E, T). Với bảng quan sát (S, E, T), ta dễ dàng kiểm tra được
nó có phải là bảng đóng hay khơng. Nó là đóng nếu mỗi dịng sa S.Σ đều
tồn tại một dòng ′ S tương ứng. Để tránh nhầm lẫn ta sử dụng q0 thay cho
λ, q1 thay cho a. Ta dễ dàng xây dựng được DFA D = (Q, D, , q0, F), trong
đó: Q = S = { q0, q1}, D = {a, b}, = {(q0, a, q1), (q0, b, q1), (q1, b, q0), (q1,
b, q1)}, và F = {q1}.
Thuật tốn học L*:
Giải thuật 3.1 trình bày tuần tự các bước của giải thuật học L*. Khởi
tạo, L* gán S và E = {ε} với ε biểu diễn một chuỗi rỗng (dịng 1). Sau đó thực
hiện cập nhật T bằng cách cho thực hiện các chuỗi hành động trên thành phần
phần mềm C, trong trường hợp này thiết lập T(a, ε) = true với mọi hành động
a Σ có thể thực hiện được trên C sau khi thiết lập C về trạng thái ban đầu

(dòng 3). Tiếp theo kiểm tra bảng quan sát (S, E, T) có thỏa mãn tính đóng
khơng. Nếu (S, E, T) khơng đóng thì thêm sa vào S, trong đó s S, a Σ, là
phần tử mà khơng có ′ S tương ứng với nó (dịng 5). Vì sa được thêm vào
S nên T cần được cập nhật lại bằng cách cho thực hiện chuỗi các thử nghiệm
trên C (dịng 6). Các cơng việc trên dòng 5 và 6 được lặp đi lặp lại cho đến
khi (S, E, T) trở thành bảng quan sát đóng. Khi (S, E, T) là bảng đóng thì L*
truy vấn đến Teacher để kiểm tra mơ hình ứng viên tương ứng với bảng (S, E,
T) có phải là mơ hình chính xác hay khơng bằng cách áp dụng giải thuật VC
(dịng 11) conform = VC(S, E, C, n) trong đó n là giới hạn cận trên kích thước
của ơtơmát mơ hình hóa cho thành phần C. Nếu mơ hình đó là tương thích
với C (tức conform = true) thì xây dựng một mơ hình ứng viên Mi = (Q,
Mi, , q0, F) từ bảng đóng (S, E, T). Khi đó L* sẽ trả về mơ hình ứng viên
Mi và kết thúc thuật toán. Trái lại, Teacher sẽ trả về một phản ví dụ (tức
conform = cex) biểu diễn sự khác biệt giữa hành vi của thành phần C với mơ
hình Mi của nó. Khi đó L* sẽ phân tích giá trị cex để tìm ra tất cả các hậu tố
của nó, đó chính là thể hiện sự khác biệt giữa L(Mi) với L(C). Với mỗi hậu tố
′ của cex, nếu ′ E thì ′ phải được thêm vào E. Khi mọi hậu tố của cex đã
được thêm vào E thì L* sẽ lặp lại tồn bộ q trình từ dịng 3.
Độ phức tạp của thuật toán L*: O(kn2 + nlog m) [6], trong đó, k là kích
thước của bảng chữ cái Σ, n là số trạng thái của ôtômát hữu hạn mơ hình hóa


×