4. Ý nghĩa lý luận và thực tiễn của đề tài
4.1.4. Cách xây dựng biểu đồ chuyển trạng thái
Cách 1: Hãy nghĩ đến tất cả các trạng thái mà hệ thống có thể có và vẽ nó ra. Sau đó xác định tất cả các kết nối có thể giữa các cặp trạng thái đó, mà mỗi kết nối mô tả một cách chuyển từ một trạng thái đến trạng thái kia của cặp được xét.
Cách 2: Bắt đầu với trạng thái thứ nhất, xác định mọi trạng thái có thể chuyển đến từ trạng thái thứ nhất. Sau đó tiếp tục xác định mọi trạng thái có thể chuyển đến tứ trạng thái được xét và tiếp tục cho đến khi toàn bộ mạng lưới trạng thái được xác định.
Dù cho có sử dụng cách nào thì điều quan trọng là phải xem hệ thống phản ứng ra sao nếu một hành động không thích hợp phát sinh hay có lỗi xảy ra.
Theo Harel[Hare87] để vẽ được biểu đồ trạng thái cần tuân theo các nguyên tắc sau:
1. Xác định mọi trạng thái có thể hay trạng thái bắt đầu 2. Vẽ hình chữ nhật biểu diễn mỗi trạng thái
3. Nối các trạng thái bằng mũi tên chỉ sự chuyển trạng thái nếu có thể. 4. Mỗi trạng thái có thể chuyển đến một hay một số trạng thái
5. Gắn tên của mũi tên chuyển trạng thái với tên sự kiện
6. Liệt kê các hành động thích hợp ở dưới mỗi hình chữ nhật chỉ trạng thái 7. Xem xét phản ứng của hệ thống đối với những sự kiện không dự kiến 8. Nghiên cứu để xác định xem có thể phân rã tiếp biểu đồ
9. Thảo luận với các thành viên trong đội phát triển để phát triển biểu đồ đảm bảo sự chính xác và vững chắc của biểu đồ khi sử dụng các câu hỏi:
Phải chăng mọi trạng thái đã được xác định?
Ta có thể đi đến mọi trạng thái của tiến trình?
Ta có thể đi ra từ mọi trạng thái?
Xét một ví dụ về một hệ thống cầu thang máy trong một tòa nhà nhiều tầng. Hệ thống gồm n thang máy di chuyển giữa m tầng, chúng cần tuân thủ các điều kiện sau:
Ràng buộc 1: Mỗi thang máy có m nút, mỗi nút dành cho một tầng. Một nút sáng lên khi được nhấn và làm cho thang máy chuyển đến tầng tương ứng. Đèn tắt khi thang đến tầng tương ứng.
Ràng buộc 2: mỗi tầng, trừ tầng một và tầng trên cùng đều có hai nút, một hướng lên, một hướng xuống. Nút này sáng lên khi được nhấn và tắt mỗi khi một thang máy đến tầng này và sau đó nó di chuyển theo hướng đã xác định.
Ràng buộc 3: khi một thang máy không có yêu cầu, nó dừng ở tầng hiện thời và cửa thang máy đóng lại.
Hệ thống này được mô tả bằng cách sử dụng máy trạng thái hữu hạn mở rộng. Ở đây có hai tập:
− Trong mỗi thang máy có m nút, n thang máy sẽ có n x m nút và các nút này được ký hiệu bằng tập "các nút thang máy ".
− Mỗi tầng có hai nút yêu cầu, các nút này được ký hiệu bằng tập "các nút tầng".
. Ta kí hiệu EB(e,f) là nút của thang máy e được nhấn để đến tầng f. Nút EB(e,f) có hai trạng thái: đèn sáng: EBON (e,f) và đèn tắt: EBOFF(e,f). Sơ đồ chuyển trạng thái của một nút thang máy được chỉ ra trên hình 4.3
Khi nút này sáng và thang máy di chuyển đến tầng f thì đèn nút sẽ tắt. Ngược lại, nếu đèn nút đang tắt, và nó được nhấn thì sau đó đèn sáng. Ở đây cũng có hai sự kiện tương ứng:
EBP(e,f): nút f của thang máy e được nhấn
EBOFF(e, f)
EAF(e,f) EBP(e,f)
EBON(e, f)
Để xác định các quy tắc chuyển trạng thái liên kết với các sự kiện và trạng thái, ta sử dụng kí hiệu V(e,f) là tiền định
V (e,f): là thang máy e đang chuyển đến (hay dừng) ở tầng f
Quy tắc chuyển trạng thái có thể phát biểu như sau: nếu nút (e,f) của thang máy đang tắt (trạng thái hiện thời) và nó được nhấn (sự kiện xảy ra) và thang máy không di chuyển đến tầng f, thì sau đó đèn của nút sẽ sáng. Hình thức chuyển trạng thái có thể mô tả như sau:
EBOFF(e,f ) and EBP(e, f) and notV (e,f ) EBON (e,f )
Nếu thang máy đang di chuyển đến tầng f thì không có sự kiện nào xảy ra. Nếu thang máy đến tầng f và đèn nút này đang sáng thì nó tắt, sự chuyển trạng thái trong trường hợp này được mô tả như sau:
EBON(e,f) and EAF(e,f) EBOFF(e,f )
Bây giờ ta xem xét đến các nút của tầng. Kí hiệu FB(d,f) là nút của tầng f và yêu cầu di chuyển theo hướng d, khi đó các trang thái có thể ký hiệu như sau:
FBON(d,f ): nút nhấn (d,f ) ở tầng f đang sáng FBOFF(d,f): nút nhấn (d,f ) ở tầng f tắt
Nếu nút tầng f đang sáng và một thang máy đến tầng f di chuyển theo hướng d thì sau đó đèn nút này sẽ tắt. Ngược lại, nếu nút tầng tắt và nó được nhấn thì sau đó nó sẽ sáng. Một lần nữa ta lại kí hiệu hai sự kiện sau:
FBP(d,f): nút của tầng f theo hướng d được nhấn EAF(1,..n,f ): thang máy 1,2 hay..n đến tầng f.
trong đó 1,.., n kí hiệu cho các thang máy tương ứng. Khi đó ta có: P (a, 1,..n, b) = P (a, 1, b) or P (a, 2, b) or .. or P (a, n, b)
Để xác định các quy tắc chuyển trang thái khi liên kết với các sự kiện và trạng thái một tiền định lại được sử dụng, kí hiệu là:
S (d,e,f ): thang máy e đang đến tầng f và theo hướng dưới lên (nếu d = U) hay trên xuống (nếu d = D ) hoặc không có yêu cầu nào nếu nó đang chờ (d = N ). Quy tắc chuyển trạng thái lúc này có thể mô tả như sau (hình 4.4):
trong đó d = U hoặc D.
Nếu nút tầng theo hướng d đang tắt và nó được nhấn, và không môt thang máy nào đang chuyển đến tầng f theo hướng d thì nút tầng này được bật sáng. Ngược lại đèn nút tầng không sáng. Từ các kí hiệu trên ta có thể mô tả tình huống vừa nêu như sau:
V(e,f) = S(U,e,f) or S( D,e,f) or S(N,e,f).
Các trạng thái nút tầng và nút thang máy đã được xác định trực tiếp. Trạng thái của một thang máy về cơ bản gồm một số các trạng thái thành phần, [Kamp87] đã xác định thêm một số tình huống chẳng hạn như đi chậm, dừng lại, cửa đang mở, cửa mở khi đến tầng hoặc cửa đóng lại sau một thời gian. Ta giả thiết một cách hợp lí là: bộ phận kiểm tra thang máy (cơ chế điều khiển sự di chuyển của thang máy) bắt đầu từ một trạng thái S(d,e,f,) và sau đó bộ phận kiểm tra sẽ điểu khiển thang máy qua các trạng thái con.
Ba trạng thái có thể của thang máy cần được xác định, trong đó S(d,e,f) đã xác định ở trên, nhưng ở đây cần bổ sung thêm một số trạng thái khác cho đầy đủ.
M(d,e,f,): thang máy e đang di chuyển theo hướng d (đến tầng f) S(d,e,f): thang máy e dừng tại tầng f;
W(e,f): thang máy e chờ ở tầng f (cửa đóng)
Các trạng thái này chỉ ra trong hình 4.5. Để đơn giản sơ đồ và giảm tổng sổ nút trạng thái, ba trang thái dừng S(U,e,f ), S(N,e,f) và S(D,e,f ) đã được nhóm lại trong một trạng thái lớn hơn.
Ta kí hiệu các sự kiện kích hoạt việc chuyển trạng thái là: DC(e,f)- là đóng cửa thang máy e ở tầng f. ST(e,f) là sự kiện xảy ra khi bộ cảm biến trên thang máy được kích hoạt khi nó tới gần cửa tầng f và bộ phận điều khiển thang máy cần quyết định xem có dừng thang máy ở tầng này không, và RL xảy ra khi một
EBOFF(d, f)
EAF(1..n,f)) FBP(d,f)
FBON(d, f)
dụng các ký hiệu sau:
DC(e,f): cửa thang máy e đóng khi ở tầng f.
ST(e,f): cảm biến kích hoạt khi thang máy e đến gần cửa tầng f RL: yêu cầu được chọn (nút được nhấn)
Các quy tắc chuyển trạng thái của thang máy đã được trình bày ở hình 4.5. Những quy tắc trình bày ở đây chỉ là những quy tắc xảy ra khi cửa thang máy đóng. Ta cần bổ sung thêm một số trạng thái sau đây: .Thang máy chuyển động lên, xuống hay đang chờ phụ thuộc vào trạng thái hiện thời.
S (U,e,f) and DC(e,f) M(U,e,f + 1) S (D,e,f ) and DC(e,f) MD(e,f - 1) S (N,e,f) and DC(e,f) W(e,f).
Quy tắc ở dòng đầu tiên phát biểu rằng: nếu thang máy e ở trạng thái S(U,e,f,), nghĩa là đang dừng ở tầng f chuẩn bị đi lên, sau khi cửa đóng thì nó sẽ di chuyển lên tầng trên.
Quy tắc dòng hai và ba tương ứng với trường hợp thang máy sắp di chuyển xuống hoặc không có nhu cầu và đang đợi.
M(U,e,f+1)
W(e,f) S(N,e,f)
S(u,e,f) S(D,e,f)
Hình 4.5 Sơ đồ chuyển trạng thái của thang máy
M(U,e,f) M(D,e,f) M(D,e,f-1) RL RL RL RL RL DC(e,f) DC(e,f) ST(e,f) DC(e,f) ST(e,f)
hữu hạn để mô tả các hệ thống phức tạp. Thay cho việc phải có một danh sách các điều kiện ban đầu cần được lưu giữ để xác định hệ thống phải làm gì và sau đó cần có một danh sách các điều kiện cần lưu giữ để sau đó hệ thống phải thực hiện chúng. Sự mô tả ở đây chỉ sử dụng một công thức đơn giản như sau:
(trạng thái hện thời ) và (sự kiện ) và (tiền định) => trạng thái sau.
Đặc tả loại này rất dễ viết ra, dễ kiểm tra sự đúng đắn, dễ chuyển thành thiết kế và thành mã nguồn. Trong thực tế, nó là cơ sở để trực tiếp xây dựng một công cụ CASE đảm bảo việc dịch một đặc tả máy trạng thái hữu hạn trực tiếp thành mã nguồn. Tuy nhiên, cách hình thức hóa này đã xem việc chuyển trạng thái là xảy ra tức thời, trên thực tế điều đó là không thể. Vấn đề định thời gian cho các chuyển dịch đã được giải quyết bằng cách sử dụng phương pháp sơ đồ trạng thái (statec harts), là sự mở rộng của máy tráng thái hữu hạn [Hare&90]
4.2. Vấn đề bao phủ mô hình máy trạng thái
Khả năng bao phủ của mô hình là khả năng mà bộ kiểm thử do nó sinh có thể lường trước được tất cả các trường hợp trong thực tế hoạt động của hệ thống. Vẫn chưa có nghiên cứu nào về hiệu quả đầy đủ của các thuật toán bao phủ cho các mô hình (xác định đường đi qua tất cả các trạng thái hay tất cả các chuyển dịch), đặc biệt là mô hình máy trạng thái.
4.2.1. Những đặc trưng của máy trạng thái
Như đã mô tả ở trên, trong một mô hình máy trạng thái, các nhân tố cấu thành máy trạng thái bao gồm:
− Trạng thái (state): Là sự mô tả trừu tượng tình thế trong vòng đời của một thực thể hệ thống. Trong các trạng thái lại phân thành trạng thái khởi đầu, trạng thái kết thúc, trạng thái trung gian.
− Sự kiện (event): Là một đầu vào cụ thể tại một thời điểm (như một thông báo, một lời gọi, một yêu cầu,..)
− Hành động (action): Là một hoạt động, một đầu ra theo sau một sự kiện − Chuyển trạng thái (transition): Là cặp hai trạng thái thể hiện sự thay đổi
một sự kiện và trạng thái xuất phát.
Tùy thuộc vào bài toán cụ thể mà một máy trạng thái có thể có đầy đủ các yếu tố trên đây, hoặc thiếu một vài nhân tố nào đó. Có một vài loại máy trạng thái sau đây thường gặp:
− Finite automato (không có tiền định hay hành động) − Mealy machine (không có hành động gắn với trạng thái)
− Moore machine (không có hành động gắn với chuyển trạng thái) − Statechart (các trạng thái phân cấp, có trạng thái cha)
− State transition diagram: biểu diễn đồ thị của một máy trạng thái − State transition table: biểu diễn dạng bảng của máy trạng thái.
Với nhiều loại mô hình khác nhau như trên, rõ ràng cần có phương pháp kiểm thử phủ khác nhau mới đem lại hiệu quả
4.2.2. Kiểm thử bao phủ máy trạng thái
Để kiểm thử xem một hệ thống máy trạng thái hoạt động có đầy đủ và vững chắc không, kiểm thử cần bao phủ được các nhân tố cấu thành hệ thống trong mối quan hệ với các nhân tố khác, đó là: trạng thái, sự kiện, chuyển trạng thái, hành động, tiền định. Do một số nhân tố gắn kết với nhau trong mô hình, nên khi bao phủ được yếu tố này thì đồng thời cũng bao phủ được yếu tố kia. Nhưng không phải các yêu tố đều được gắn với nhau, trong trường hợp này cần phải kiểm thử độc lập. Chẳng hạn có thể đạt được tiêu chuẩn bao phủ tất cả các trạng thái nhưng lại không bao phủ tất cả các chuyển trạng thái (hình 4.6 - đường mờ). Tất nhiên, với các mô hình nhỏ sẽ cho phép bao phủ tất cả trạng thái và tất cả dịch chuyển bằng cách vét cạn. Như chúng ta đã thấy, biểu diễn đồ thị của máy trạng thái là một đồ thị có hướng, nên với các bài toán lớn hơn, ta phải biết lựa chọn từ rất nhiều thuật toán tìm bao phủ cạnh của đồ thị một phương pháp tốt để áp dụng cho bài toán này.
Hình 4.6: Một đường đi bao phủ tất cả các trạng thái
Một câu hỏi tự nhiên đặt ra là: với một hệ thống máy trạng thái đã cho, liệu có thể tìm được đường đi qua tất cả các trạng thái và đi qua tất cả các đường chuyển trạng thái của nó hay không? Câu trả lời cho trường hợp tổng quát là không, những với máy trạng thái hữu hạn lại là có thể.
Những nội dung sau đây được đặt ra cho việc thẩm định một máy trạng thái là đúng đắn và đầy đủ:
− Có ít nhất một trạng thái là khởi đầu với các chuyển dịch trạng thái đi ra − Có ít nhất một trạng thái là kết thúc với các chuyển dịch trạng thái đi vào − Mỗi trạng thái đều có thể đến được từ trạng thái khởi đầu.
− Có ít nhất một trạng thái là kết thúc đối từ một trạng thái bất kỳ khác − Mỗi sự kiện và hành động được xác định phải xuất hiện trong ít nhất một
chuyển dịch trạng thái (hay trạng thái)
− Mỗi trạng thái không phải là khởi đầu hay kết thúc có ít nhất một chuyển trạng thái đến và một chuyển trạng thái đi.
− Tên của trạng thái, hành đông và sự kiện phải rõ ràng, đủ nghĩa trong khung cảnh của ứng dụng.
− Và một số yêu cầu khác không nêu ra ở đây.
Bên cạnh đó, những lỗi sau đây cần được kiểm tra khi kiểm thử: − Thiếu chuyển trạng thái
− Thiếu hành động hay hành động sai
− Trạng thái thừa hay trạng thái dừng không phải là kết thúc
Những nội dung trên đây cho phép thiết kế các ca kiểm thử tốt và hiệu quả.
4.3. Chƣơng trình thử nghiệm
4.3.1. Giới thiệu bài toán
Hệ thống điều khiển thang máy là hệ thống thời gian thực. Hệ thống này gồm các thành phần vật lý tương tác thường xuyên với môi trường của nó. Thang máy trong thực tế có thể có nhiều tầng, tuy nhiên trong phạm vi đề tài chỉ nghiên cứu hệ thống thang máy có 4 tầng. Với hệ thống này vẫn đảm bảo có được các đặc trưng trạng thái tiêu biểu của một thang máy như: Khi thang máy chuyển động đi lên có thể nó sẽ lên tầng trên hoặc bỏ qua để lên tầng trên nữa. Tương tự như vậy, khi thang máy chuyển động xuống có thể nó sẽ đi xuống 1 tầng hoặc bỏ qua tầng giữa để đi xuống tầng tiếp theo. Việc cầu thang lên hay xuống phụ thuộc vào lựa chọn của người đi trong cầu thang. Nếu chọn chính tầng mà thang máy đang dừng thì sẽ không có sự chuyển trạng thái. Tại mỗi tầng sẽ có các sự kiện chọn hoặc không chọn, nếu chọn có thể đi lên hoặc đi xuống. Việc các tầng được chọn quyết định sự di chuyển tiếp tục hay dừng lại tại đó của cầu thang.
Nếu cầu thang đi lên mà nút tầng được chọn là nút lên thì nó sẽ dừng lại cho người vào, nhưng nếu nút chọn hướng xuống thì nó sẽ xóa bỏ lựa chọn và đi qua. Do đó trạng thái của cầu thang khi đến các tầng có thể sẽ bị dừng lại và chuyển trạng thái.
Khi thang máy di chuyển lên, nếu có một số các tầng được chọn thì nó sẽ dừng lại ở tầng được chọn gần nhất, hoặc khi di chuyển xuống nó sẽ dừng lại ở 1 tầng được chọn gần nhất sau đó chuyển đến một trạng thái tiếp theo.
Từ mô tả của bài toán ta có sơ đồ chuyển trạng thái của cầu thang là một đồ thị có hướng như hình 4.7
Hình 4.7 Sơ đồ chuyển trạng thái của cầu thang 4 tầng Qua sơ đồ chuyển trạng thái ta nhận thấy hệ thống gồm có:
- Tổng số trạng thái: 4
- Tổng số các chuyển trạng thái: 12 - Tổng số sự kiện: 4
Với sơ đồ trên, cần lập kế hoạch kiểm thử như thế nào để có thể bao phủ