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

Bài giảng Đặc tả hình thức: Chương 8 - Nguyễn Thị Minh Tuyền

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 (668.73 KB, 33 trang )

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



×