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
33 trang |
Chia sẻ: phuongt97 | Lượt xem: 467 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Đặc tả hình thức - Chương 8: Mô hình minh họa: Hotel Room Locking - Nguyễn Thị Minh Tuyền, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LOGO
Đặc tả hình thức
Nguyễn Thị Minh Tuyền
Mô hình minh họa:
Hotel Room Locking
Nguyễn Thị Minh Tuyền 1
Đặc tả hình thức
Hotel Room Locking
2 Nguyễn Thị Minh Tuyền
Đặ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.
3 Nguyễn Thị Minh Tuyền
Đặ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.
4 Nguyễn Thị Minh Tuyền
Đặc tả hình thức
v Không yê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.
5 Nguyễn Thị Minh Tuyền
Đặ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.
6 Nguyễn Thị Minh Tuyền
Đặ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
}
7 Nguyễn Thị Minh Tuyền
Đặ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
}
8 Nguyễn Thị Minh Tuyền
Đặc tả hình thức
Biểu đồ mô hình cho hệ thống
9 Nguyễn Thị Minh Tuyền
Room Key
Guest
currentKey.!
? keys
.lastKey.?
.occupant.
keys.
Đặ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
10 Nguyễn Thị Minh Tuyền
Đặ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
}
11 Nguyễn Thị Minh Tuyền
Đặ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]
}
12 Nguyễn Thị Minh Tuyền
Đặ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
}
13 Nguyễn Thị Minh Tuyền
Đặ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 thuê
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
}
14 Nguyễn Thị Minh Tuyền
Đặ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à điều kiện sau:
§ Mã số khóa trên thẻ
• hoặc khớp 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.
15 Nguyễn Thị Minh Tuyền
Đặ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'
}
16 Nguyễn Thị Minh Tuyền
Đặ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’]
}
17 Nguyễn Thị Minh Tuyền
Đặ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
18 Nguyễn Thị Minh Tuyền
Đặ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’]
}
19 Nguyễn Thị Minh Tuyền
Đặ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
20 Nguyễn Thị Minh Tuyền
Đặ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ố khoá của phòng
k = nextKey [r.lk.t, r.keys]
}
noRoomChangeExcept [none, t, t’]
noGuestChangeExcept [g, t, t’]
}
21 Nguyễn Thị Minh Tuyền
Đặ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
22 Nguyễn Thị Minh Tuyền
Đặ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’]
}
23 Nguyễn Thị Minh Tuyền
Đặ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
}
24 Nguyễn Thị Minh Tuyền
Đặ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)
25 Nguyễn Thị Minh Tuyền
Đặc tả hình thức
T0: Trạng thái đầu
26 Nguyễn Thị Minh Tuyền
v Ban đầu, mã số khóa hiện tại của Room là Key0, mã
số này cũng được lưu ở FontDesk
Đặc tả hình thức
T1: Thao tác check-in
27 Nguyễn Thị Minh Tuyền
v Guest1 thực hiện check in phòng Room và nhận mã
số khóa Key1
v Thông tin về người ở phòng đó được cập nhật ở
FrontDesk
v Key1 được lưu lại là mã khóa gần nhất được gán cho
Room
Đặc tả hình thức
T2: Thao tác check-out
28 Nguyễn Thị Minh Tuyền
v Guest1 thực hiện check out, và người ở phòng đó bị
xóa đi
Đặc tả hình thức
T3: Thao tác check-in
29 Nguyễn Thị Minh Tuyền
v Guest0 thực hiện check in vào Room, và nhận chìa
khóa Key2; người ở phòng Room được cập nhật
v Key2 được lưu như là mã số khóa gần nhất gán cho
Room
Đặc tả hình thức
T4: Thao tác enter
30 Nguyễn Thị Minh Tuyền
v Guest1 đưa khóa Key1 vào mở phòng Room và được
chấp nhận.
Đặc tả hình thức
Ràng buộc cần thiết
v Không có ràng buộc nào giữa một
người khách check in và việc vào
phòng.
fact noIntervening {
all t: Time - TO/last |
let t’ = TO/next [t], t’’ = TO/next [t’] |
all g: Guest, r: Room, k: Key |
checkin [g, r, k, t, t’] implies
(
entry [g, r, k, t’, t’’] or
no t"
)
}
31 Nguyễn Thị Minh Tuyền
Đặc tả hình thức
Phân tích
v Kiểm tra lại một lần nữa:
check noBadEntry for 3
but 2 Room, 2 Guest, 5 Time
v Không có phản ví dụ (file hotel2.als)
v Để chắc chắn hơn, ta tăng scope lên:
check noBadEntry for 5
but 3 Room, 3 Guest, 9 Time
v Không có phản ví dụ
32 Nguyễn Thị Minh Tuyền
LOGO
Các file đính kèm theo tài liệu này:
- bai_giang_dac_ta_hinh_thuc_chuong_8_mo_hinh_minh_hoa_hotel_r.pdf