LOGO
Đặc tả hình thức
Mơ hình minh họa:
Hotel Room Locking
Nguyễn Thị Minh Tuyền
Nguyễn Thị Minh Tuyền
1
Hotel Room Locking
Nguyễn Thị Minh Tuyền
2
Đặc tả hình thức
Vấn đề đặt ra
v Mơ hình hóa bằng Alloy hệ thống khóa
cửa sử dụng thẻ từ để đóng mở cửa
phịng khách sạn.
§ Khi đã tạo thẻ mới cho một phịng thì khách trước đó
khơng thể vào phịng bằng thẻ cũ được.
v Mơ hình hóa cả khía cạnh tĩnh và
động của hệ thống.
Nguyễn Thị Minh Tuyền
3
Đặc tả hình thức
Mô tả vấn đề
v Khách sạn sử dụng một mã số khóa mới cho
khách hàng tiếp theo
§ Thiết lập lại mã khóa mới để đảm bảo mã số khóa được lưu
trên thẻ trước đó khơng hoạt động nữa.
§ Bộ khóa là một đơn vị độc lập, đơn giản (sử dụng pin) với một
bộ nhớ lưu giữ mã số hiện tại.
v Thiết bị phần cứng phát sinh một chuỗi các
số ngẫu nhiên.
v Bộ khóa chỉ mở được hoặc bằng mã số khóa
hiện tại hoặc mã số khóa tiếp theo của nó.
§ Nếu một mã số khóa tiếp theo được thiết lập,
• mã số khóa tiếp theo đó trở thành mã số khóa hiện tại và
• mã số khóa trước đó sẽ khơng được chấp nhận nữa.
Nguyễn Thị Minh Tuyền
4
Đặc tả hình thức
v Khơng u cầu giao tiếp giữa lễ tân và
khóa cửa.
v Bằng cách
§ đồng bộ hóa giữa lễ tân và khóa cửa được khởi tạo
lần đầu, và
§ sử dụng cùng bộ phát sinh mã số ngẫu nhiên,
§ => lễ tân có thể lưu giữ thơng tin của mã khóa hiện
tại với cửa.
Nguyễn Thị Minh Tuyền
5
Đặc tả hình thức
Signatures và Fields
v Các signature: Time, Key, Room, Guest,
FrontDesk
v Key là mã số khóa được lưu trên thẻ từ
v FrontDesk lưu một ánh xạ giữa mỗi phịng
và mã số khóa gần nhất của nó (nếu có) và
khách hàng hiện tại của nó.
v Mỗi phịng (khóa) có một tập các mã số
khóa liên quan và có chính xác một mã số
khóa hiện tại tại một thời điểm.
v Mỗi mã số khóa thuộc về nhiều nhất một
phịng.
Nguyễn Thị Minh Tuyền
6
Đặc tả hình thức
Signatures và Fields
module hotel
open util/ordering [Time] as TO
open util/ordering [Key] as KO
sig Key {}
sig Time {}
-- Mỗi phịng có một tập các mã số khóa,
-- và một mã số khóa hiện tại
sig Room {
keys: set Key,
currentKey: keys one -> Time
}
Nguyễn Thị Minh Tuyền
7
Đặc tả hình thức
Signatures và Fields
...
-- Khách giữ một tập các mã số khóa tại một thời điểm
sig Guest {
keys: Key -> Time
}
-- FrontDesk gồm hai quan hệ:
-lastKey: ánh xạ một phòng tới mã số khóa gần nhất
-occupant: ánh xạ một phịng tới khách
-được gán vào phịng đó
one sig FrontDesk {
lastKey: (Room -> lone Key) -> Time,
occupant: Room -> Guest -> Time
}
Nguyễn Thị Minh Tuyền
8
Đặc tả hình thức
Biểu đồ mơ hình cho hệ thống
currentKey.<Time>!
? keys
Room
Key
<FrontDesk>.lastKey.<Time>?
keys.<Time>
<FrontDesk>.occupant.<Time>
Nguyễn Thị Minh Tuyền
9
Guest
Đặc tả hình thức
Ràng buộc và thao tác
v Ràng buộc về Room
v Phát sinh khóa mới
v Khách đến nhận phòng
v Khách trả phòng
v Trạng thái khởi tạo
v Phát sinh trace
Nguyễn Thị Minh Tuyền
10
Đặc tả hình thức
Ràng buộc về Room
v Mỗi mã số khóa thuộc về nhiều nhất 1
phòng
fact {
all k: Key | lone keys.k
}
Nguyễn Thị Minh Tuyền
11
Đặc tả hình thức
Phát sinh khóa mới
v Cho trước
§ một mã số khóa k và
§ một tập các mã số khóa ks,
§ hàm nextKey trả về khóa nhỏ nhất (trong thứ tự các
khóa) trong tập ks theo sau k.
fun nextKey [k: Key, ks: set Key]: set Key{
KO/min [KO/nexts[k] & ks]
}
Nguyễn Thị Minh Tuyền
12
Đặc tả hình thức
Trạng thái khởi tạo
module examples/hotel
open util/ordering [Time] as TO
open util/ordering [Key] as KO
sig Key {}
sig Time {}
sig Room {
keys: set Key,
currentKey: Key one -> Time
}
sig Guest {
keys: Key -> Time
}
one sig FrontDesk {
lastKey: (Room -> lone Key) -> Time,
occupant: (Room -> Guest) -> Time
}
Nguyễn Thị Minh Tuyền
13
Đặc tả hình thức
Trạng thái khởi tạo
pred init [t: Time] {
-- khơng có khách nào có mã số khóa
no Guest.keys.t
-- Danh sách tại lễ tân chỉ ra rằng khơng có
-- phịng nào được th
no FrontDesk.occupant.t
-- thơng tin về mã số khóa của mỗi phòng tại
-- lễ tân được đồng bộ với mã số khóa hiện tại
all r: Room |
r.(FrontDesk.lastKey.t) = r.currentKey.t
}
Nguyễn Thị Minh Tuyền
14
Đặc tả hình thức
Khách đến nhận phòng
pred entry [ g: Guest, r: Room, k: Key,
t, t': Time ]
v Điều kiện trước:
§ Mã số khóa được sử dụng để mở phòng là một trong các mã số khóa
mà khách hàng đang giữ
v Điều kiện trước và iu kin sau:
Đ Mó s khúa trờn th
ã hoc khp với mã số khóa hiện tại của khóa và mã số này khơng thay đổi
(khơng phải là khách mới)
• hoặc mã số khóa trên thẻ khớp với mã số khóa tiếp theo của khóa (khách
mới).
v Frame conditions:
§ Khơng thay đổi trạng thái của các phịng khác,
§ hoặc khơng thay đổi việc thiết lập lại các mã số khóa giữ bởi khách,
§ hoặc không thay đổi thông tin tại lễ tân.
Nguyễn Thị Minh Tuyền
15
Đặc tả hình thức
Frame condition
pred noFrontDeskChange [t,t': Time]{
FrontDesk.lastKey.t = FrontDesk.lastKey.t'
FrontDesk.occupant.t = FrontDesk.occupant.t'
}
pred noRoomChangeExcept [rs: set Room, t,t': Time]{
all r: Room - rs |
r.currentKey.t = r.currentKey.t'
}
pred noGuestChangeExcept [gs: set Guest, t,t': Time]{
all g: Guest - gs | g.keys.t = g.keys.t'
}
Nguyễn Thị Minh Tuyền
16
Đặc tả hình thức
pred entry [ g: Guest, r: Room, k: Key, t, t': Time ] {
-- mã số khóa được sử dụng để mở khóa là
-- một trong các mã số khóa mà khách hàng đang giữ
k in g.keys.t
-- điều kiện trước và điều kiện sau
let ck = r.currentKey |
-- không phải là khách hàng mới
(k = ck.t and ck.t' = ck.t)
-- khách hàng mới
or (k = nextKey [ck.t, r.keys] and ck.t' = k)
-- frame conditions
noRoomChangeExcept [r, t, t’]
noGuestChangeExcept [none, t, t’]
noFrontDeskChange [t, t’]
}
Nguyễn Thị Minh Tuyền
17
Đặc tả hình thức
Thao tác check-out
pred checkout [ g: Guest, t,t': Time ]
v Điều kiện trước:
§ Khách hàng ở một hoặc nhiều phịng.
v Điều kiện sau:
§ Phịng của khách hàng ở trạng thái trống
v Frame condition:
§ Khơng có gì thay đổi trừ mối quan hệ occupant
Nguyễn Thị Minh Tuyền
18
Đặc tả hình thức
Check-out
one sig FrontDesk {
lastKey: (Room -> lone Key) -> Time,
occupant: (Room -> Guest) -> Time
}
pred checkout [ g: Guest, t,t': Time ]{
let occ = FrontDesk.occupant | {
-- khách ở một hoặc nhiều phịng
some occ.t.g
-- phịng của khách ở tình trạng trống
occ.t' = occ.t – (Room -> g)
}
-- frame condition
FrontDesk.lastKey.t = FrontDesk.lastKey.t'
noRoomChangeExcept [none, t, t’]
noGuestChangeExcept [none, t, t’]
}
Nguyễn Thị Minh Tuyền
19
Đặc tả hình thức
Thao tác check-in
pred checkin [g: Guest, r: Room, k: Key,
t, t': Time]
v Điều kiện trước:
§ phịng đang ở tình trạng trống
§ Mã số khóa là mã số tiếp theo của mã số khóa trước đó trong
chuỗi tuần tự các mã số
v Điều kiện sau:
§ Khách hàng giữ mã số khóa và trở thành người ở phịng đó.
§ Mã số khóa trở thành mã số khóa hiện tại của phịng
v Frame condition:
§ Khơng có gì thay đổi trừ quan hệ occupant và quan hệ của
khách
Nguyễn Thị Minh Tuyền
20
Đặc tả hình thức
Check-in
pred checkin [ g: Guest, r: Room, k: Key, t,t': Time ] {
-- khách giữ mã số cửa
g.keys.t' = g.keys.t + k
let occ = FrontDesk.occupant | {
-- phòng đang ở tình trạng trống
no r.occ.t
-- khách trở thành người ở phịng đó
occ.t' = occ.t + r->g
}
let lk = FrontDesk.lastKey | {
-- mã số cửa trở thành mã số khóa hiện tại của phòng
lk.t' = lk.t ++ r->k
-- mã số cửa là mã số khóa tiếp theo của khóa gần nhất
-- trong chuỗi mã số khố của phịng
k = nextKey [r.lk.t, r.keys]
}
noRoomChangeExcept [none, t, t’]
noGuestChangeExcept [g, t, t’]
}
Nguyễn Thị Minh Tuyền
21
Đặc tả hình thức
Phát sinh trace
v Bước đầu tiên thỏa mãn điều kiện khởi tạo
v Bất cứ một cặp thời gian kế tiếp nhau nào
cũng có mối liên hệ với nhau bởi
§ thao tác entry
§ thao tác check-in
§ thao tác check-out
Nguyễn Thị Minh Tuyền
22
Đặc tả hình thức
Phát sinh trace
fact Traces {
init [TO/first]
all t: Time - TO/last |
let t' = TO/next [t] |
some g: Guest, r: Room, k: Key |
entry [g, r, k, t, t’] or
checkin [g, r, k, t, t’] or
checkout [g, t, t’]
}
Nguyễn Thị Minh Tuyền
23
Đặc tả hình thức
Phân tích
v Các trường hợp khơng có quyền vào
phịng:
§ Nếu một khách g vào phòng r tại thời điểm t và thông
tin lưu ở lễ tân chỉ ra rằng r đang ở tình trạng trống
tại thời điểm đó, thì sau đó g phải được lưu lại với
tình trạng là người ở phòng r.
assert noBadEntry {
all t: Time, r: Room, g: Guest, k: Key |
let t' = TO/next [t], o = r.FrontDesk.occupant.t |
(entry [g, r, k, t, t’] and some o)
implies g in o
}
Nguyễn Thị Minh Tuyền
24
Đặc tả hình thức
Phân tích
check noBadEntry for 3
but 2 Room, 2 Guest, 5 Time
v Đủ để kiểm tra vấn đề với 2 guest và 2
room
v Thời gian ít nhất là 5 vì có ít nhất 4 bước
thời gian cần thiết để chạy mỗi toán tử
một lần.
v Có một phản ví dụ (file hotel1.als)
Nguyễn Thị Minh Tuyền
25
Đặc tả hình thức