Nội dung nghiên cứu
Bài viết này nghiên cứu các phương pháp xác định chuỗi kiểm chứng trạng thái, bao gồm chuỗi vào-ra duy nhất (UIO), chuỗi phân biệt (DS), và chuỗi đặc trưng (W) Đồng thời, nó cũng tìm hiểu phương pháp kiểm thử hệ thống dựa trên mô hình máy hữu hạn trạng thái Mục tiêu là phát triển phương pháp sinh ca kiểm thử nhằm kiểm tra xem mô hình cài đặt có phản ánh chính xác bản đặc tả phần mềm theo mô hình máy hữu hạn trạng thái hay không.
Cấu trúc luận văn
Phần còn lại của luận văn có cấu trúc như sau:
Chương 2: Máy Hữu Hạn Trạng Thái (FSM) giới thiệu mô hình FSM cùng các phương pháp biểu diễn như liệt kê, đồ thị và bảng Chương này cũng đề cập đến một số tính chất quan trọng của máy hữu hạn trạng thái, giúp người đọc hiểu rõ hơn về cấu trúc và chức năng của FSM.
Chương 3: Một số phương pháp xác định chuỗi kiểm chứng trạng thái
Chương này giới thiệu các phương pháp xác định chuỗi kiểm chứng trạng thái của mô hình FSM, bao gồm chuỗi vào – ra duy nhất (UIO), chuỗi phân biệt (DS) và chuỗi đặc trưng (W) Các phương pháp này sẽ được cụ thể hóa thông qua ví dụ minh họa.
Chương 6: Kết luận tổng kết những kết quả đã đạt được của luận văn và hướng phát triển nghiên cứu tiếp theo.
MÁY HỮU HẠN TRẠNG THÁI (FSM)
Định nghĩa FSM
Máy hữu hạn trạng thái (FSM) là một mô hình hành vi sử dụng các trạng thái và chuyển trạng thái, được ứng dụng rộng rãi trong ngành công nghiệp phần mềm, đặc biệt trong thiết kế hệ thống viễn thông, giao thức truyền thông, hệ thống nhúng và hệ thống điều khiển Có hai loại máy hữu hạn trạng thái: máy Mealy, tạo ra output dựa trên chuyển trạng thái và input nhận được, và máy Moore, tạo ra output chỉ dựa trên chuyển trạng thái mà không phụ thuộc vào input FSM thường được mô hình hóa như máy Mealy.
Máy hữu hạn trạng thái (Mealy machine) [5, 7] là một bộ M = Trong đó:
S là một tập các trạng thái,
I là tập thông tin đầu vào,
O là tập thông tin đầu ra,
s0 là trạng thái ban đầu,
δ: S x I → S là hàm chuyển trạng thái,
λ: S x I → O là hàm thông tin đầu ra
Hay nói một cách khác, [4] FSM là mô hình bao gồm:
Các yếu tố tĩnh bao gồm trạng thái và sự chuyển tiếp trạng thái, trong đó số lượng trạng thái là hữu hạn Sự chuyển tiếp trực tiếp giữa các trạng thái chỉ có thể diễn ra qua một đường link duy nhất, và số lượng các đường link cũng bị giới hạn.
Những yếu tố động trong FSM bao gồm đầu vào (input) và đầu ra (output) được xử lý trong các thực hiện động Cả đầu vào và đầu ra đều có số lượng hữu hạn, đảm bảo tính khả thi trong quá trình hoạt động của FSM.
Nguồn gốc FSM [7] từ máy tự động hữu hạn (Finite Automata), gồm 5 thành phần (Q, ∑, δ, q 0 , F) Trong đó:
Q là một tập hữu hạn các trạng thái,
∑ là một tập các ký hiệu được gọi là tập chữ cái ngõ nhập (input alphabet),
Hàm chuyển trạng thái δ: Q x ∑ → Q nhận một ký hiệu đầu vào mỗi khi di chuyển Khi máy tự động hữu hạn gặp ký hiệu kết thúc chuỗi, chuỗi sẽ được chấp nhận nếu máy đang ở trạng thái kết thúc Ngược lại, nếu không, chuỗi sẽ bị từ chối.
So sánh mô hình của máy hữu hạn trạng thái và máy tự động hữu hạn ta thấy rằng: FSM có đầu ra (output) còn automata thì không có
Trong luận văn này, các thuật toán áp dụng cho FSM được mô hình theo máy Mealy.
Biểu diễn FSM
2.2.1 Biểu diễn kiểu liệt kê
Tập chuyển trạng thái {δ(ii,sj) = st} với ∀ ii I và sj, st S
Tập Outputs O = {λ(si ,ik ) = ot} với si S; ∀ i k I; ∀o t O
Tập Outputs tương ứng với sự chuyển trạng thái: {λ(A,0) = 0, λ(B,0) = 0, λ(B,1) = 1, λ( ,1) = 0, λ(D,0) = 1, λ(C,0) = 1, λ(D,1) = 0, λ(C,1) =1}
2.2.2 Biểu diễn bằng đồ thị
Các FSM và các yếu tố của chúng có thể được biểu diễn bằng đồ thị Các yếu tố chính trong đồ thị bao gồm:
Mỗi trạng thái được mô tả như là một nút (node) trong đồ thị
Mỗi sự chuyển tiếp giữa các trạng thái được mô tả như một đường link, kết nối trực tiếp từ trạng thái này sang trạng thái khác, được xem như là cạnh của đồ thị với nhãn là cặp input/output, trong đó ký hiệu ‘/’ được sử dụng để phân biệt giữa input và output.
Từ việc mô tả FSM M bằng phương pháp liệt kê như ví dụ ở mục 2.2.1, ta có thể biểu diễn FSM M bằng đồ thị như Hình 2.1 dưới đây:
Hình 2.1: Minh họa việc biểu diễn FSM bằng đồ thị
2.2.3 Biểu diễn bằng dạng bảng
Mặc dù đồ thị mô tả rất trực quan và dễ hiểu, nhưng khi số lượng trạng thái tăng lên, nó trở nên không thực tế và khó theo dõi Để giải quyết vấn đề này, việc sử dụng bảng biểu hoặc ma trận mô tả sẽ mang lại tính hệ thống hơn, thường là dạng ma trận vuông (N x N).
Trạng thái được liệt kê theo cả hàng và cột
Hàng mô tả những trạng thái đầu và cột mô tả trạng thái kết thúc cho sự chuyển tiếp xác định
Nếu sự chuyển tiếp từ trạng thái X (hàng X) sang trạng thái (cột ) được cho ph p thì phần tử tương ứng (ở vị trí hàng X, cột ) được đánh
MỘT SỐ PHƯƠNG PHÁP XÁC ĐỊNH CHUỖI KIỂM CHỨNG TRẠNG THÁI
Chuỗi vào – ra duy nhất (Unique Input - Output sequence) [5]
Ta sẽ sử dụng FSM G 1 để làm ví dụ cho toàn bộ mục 3.1
S = {A, B, C, D} là tập các trạng thái
I = {0, 1} là tập thông tin đầu vào (inputs)
O = {0, 1} là tập thông tin đầu ra (outputs)
A là trạng thái ban đầu
δ : S × I → S là hàm chuyển trạng thái
λ : S × I → O là hàm thông tin đầu ra
Tập các nhãn chuyển đổi L = {0/0, 0/1, 1/0} và được mô tả bởi đồ thị sau:
Hình 3.1: Đồ thị mô tả FSM G 1 3.1.1 Một số khái niệm
Chuỗi vào - ra duy nhất (Unique Input – Output sequence)
Một chuỗi y λ(si,y) được gọi là chuỗi UIO cho mỗi trạng thái si của FSM M nếu và ch nếu y λ(si,y) ≠ y λ(sj,y) với i ≠ j và ∀sj ∈ M
Chuỗi input 010 cho trạng thái A của FSM G1 cho kết quả λ(A,010) = λ(λ(λ(A,0),1),0) = 000 Đối với các trạng thái khác của FSM G1, ta có λ(B,010) = λ(λ(λ(B,0),1),0) = 001, λ(D,010) = λ(λ(λ(D,0),1),0) = 100, và λ(C,010) không chấp nhận chuỗi 010 Do đó, 010 là chuỗi UIO của trạng thái trong FSM G1.
Vec-tơ đường dẫn (Path Vector), ký hiệu là PV, đại diện cho một tập hợp các cặp trạng thái trong chuỗi chuyển trạng thái, bao gồm các phần tử như (s1/s1’, , si/si’, , sk/sk’), trong đó si là trạng thái đầu và sj là trạng thái cuối của một chuyển trạng thái.
Vec-tơ ban đầu (Inital Vectơ), ký hiệu là IV, là một tập các trạng thái đầu của
PV, có nghĩa là IV(PV) = (s1, , si, , sk)
Vec-tơ hiện thời (Current Vector), ký hiệu là CV, là một tập các trạng thái cuối của vec-tơ đường dẫn Có nghĩa là CV(PV) = (s1’, , si’, , sk’)
Một vec-tơ đường dẫn được gọi là vec-tơ đơn nhất (Singleton Vector) nếu nó chứa đúng một cặp trạng thái
Ví dụ: PV = (B/D), vì PV ch có một cặp trạng thái nên PV là một vec-tơ đơn nhất
Một vec-tơ đường dẫn được gọi là vec-tơ đồng nhất (Homogeneous Vector) nếu tất cả các phần tử của vec-tơ hiện thời là như nhau
Ví dụ: PV = (A/B, C/B) ⟹ CV(PV) = (B, B), vì tất cả các phần tử của CV(PV) là giống nhau nên PV là vec-tơ đồng nhất
Từ một vec-tơ đường dẫn PV, đầu vào và đầu ra được gán nhãn là a b của một chuyển trạng thái Vec-tơ đường dẫn mới được tính toán từ PV’ sẽ giúp cải thiện hiệu suất và độ chính xác trong quá trình xử lý dữ liệu.
PV và a b: PV’ = pert(PV,a b), được định nghĩa là:
PV’ = {si/si”| si” = δ(si’,a) ∧ λ(si’,a) = b ∧ si / si’∈ PV}
Hàm tính PV’ = pert (PV, a b) có thể được hình dung như một cạnh nối từ nút PV đến nút mới PV’ với nhãn a b Khi kết hợp PV với một tập hợp các nhãn chuyển đổi L, chúng ta có thể sắp xếp các nút mới L{pert (PV, a/b), ∀a/b ∈ L} trên cùng một cấp Điều này cho thấy tất cả các đường dẫn vec-tơ của FSM M có thể được tổ chức thành một cây với các cấp độ từ 1 đến ∞, được gọi là cây UIO Tuy nhiên, để đảm bảo tính chính xác, cần thực hiện việc cắt t a cây theo một số điều kiện cụ thể, được gọi là điều kiện cắt t a, sau mỗi lần tính toán PV’ pert (PV, a/b).
C1: CV(PV’) là một vec-tơ đồng nhất hoặc vec-tơ đơn nhất
C2: Trên một đường dẫn (path) từ vec-tơ đầu tới PV, tồn tại PV” sao cho PV’⊆ PV”
Trong khi xây dựng cây UIO, nếu một trong 2 điều kiện cắt t a trên thỏa mãn thì PV’ là một vec-tơ đường dẫn kết thúc
Mỗi trạng thái si của FSM có chuỗi UIO nếu và ch nếu cây UIO của FSM
M có một vec-tơ đường dẫn đơn nhất
3.1.2 Thuật toán sinh cây UIO
Phương pháp: Thực hiện các bước sau
Bước 1: Đặt ψ là một tập các vec-tơ đường dẫn trong cây UIO, ban đầu ψ chứa vec-tơ ban đầu và được gán là không kết thúc
Bước 2: Tìm một phần tử chưa kết thúc ψ ∈ ψ mà chưa được “tính toán”
Nếu không tồn tại phần tử nào như vậy thì thuật toán kết thúc
Cây UIO của FSM G 1 được xây dựng như sau: Ψ = ( , , C C, D D) và được “tính toán” bởi việc sử dụng tất cả các thành phần của L như sau:
Cây UIO được biểu diễn đồ họa với gốc là vec-tơ đường dẫn ban đầu Ψ = (A/A, B/B, C/C, D/D) Từ gốc, ba cạnh được vẽ tới các đường dẫn vec-tơ (A/B, B/A), (C/D, D/D), và (A/D, B/B, C/A, D/C), với nhãn tương ứng của các thành phần L là 0 0, 0 1 và 1 0, như thể hiện trong Hình 3.2.
Hình 3.2: Cây UIO của FSM G 1 ở Hình 3.1
Hình 3.3: Xác định chuỗi UIO trên cây UIO ở Hình 3.2
Kết quả trên được tổng hợp thành ảng 3.1 dưới đây:
Bảng 3.1: Chuỗi UIO của FSM G 1
Trạng thái Chuỗi vào Chuỗi ra
Ta kiểm chứng lại kết quả:
Kiểm chứng trạng thái bằng chuỗi 010 λ( ,010) = λ(λ(λ( ,0),1),0) = 000 λ( ,010) = λ(λ(λ( ,0),1), 0) = 001 λ(C,010) = λ(λ(λ(C,0),1),0) = 101 λ(D,010) = λ(λ(λ(D,0),1) 0) = 100
Kiểm chứng trạng thái bằng chuỗi 010 λ( ,010) = λ(λ(λ(B,0),1),0) = 001 λ( ,010) = λ(λ(λ(A,0),1),1) = 000 λ(C,010) = λ(λ(λ(C,0),1),1) = 101 λ(D,010) = λ(λ(λ(D,0),1),1) = 100
Kiểm chứng trạng thái C bằng chuỗi 1010 λ(C,1010) = λ(λ(λ(λ(C,1),0),1),0) = 0000 λ( ,1010) = λ(λ(λ(λ( ,1),0),1),0) = 0111 λ( ,1010) = λ(λ(λ(λ( ,1),0),1),0) = 0001 λ(D,1010) = λ(λ(λ(λ(D,1),0),1),0) = 0101
Kiểm chứng trạng thái D bằng chuỗi 11010 λ(D,11010) = λ(λ(λ(λ(λ(D,1),1),0)1),0) = 00000 λ( ,11010) = λ(λ(λ(λ(λ( ,1),1),0),1),0) = 00101 λ ( ,11010) = λ(λ(λ(λ(λ( ,1),1),0),1),0) = 00001 λ (C,11010) = λ(λ(λ(λ(λ(C,1),1),0),1),0) 101
Chuỗi phân biệt (Distinguishing sequence) [5]
là trạng thái ban đầu
δ : S × I →S là hàm chuyển trạng thái
λ : S × I → O là hàm thông tin đầu ra
Tập các nhãn chuyển đổi L = {0/0, 0/1, 1/0, 1/1} và được mô tả bởi đồ thị sau:
Hình 3.4: Đồ thị mô tả FSM G 2
Chuỗi phân biệt (Distinguishing Sequence): Một chuỗi thông tin đầu vào x được gọi là chuỗi phân biệt nếu và ch nếu λ(si,x) = λ(sj,x) với ∀si, sj ∈ S và si
Khối trạng thái (State block) ký hiệu là B được xác định như là tập các phần tử S, như vậy:
Tổng các phần tử của B bằng n
Một khối trạng thái có thể chứa n multisets với mỗi phần tử của multiset là 1
Một khối trạng thái có thể chứa 1 multiset, phần tử của nó là tất cả các trạng thái của FSM M
Bảng 3.2 bên dưới là một ví dụ về khối trạng thái:
Bảng 3.2: Ví dụ khối trạng thái
Với Với khối trạng thái B1 thì có một multiset là (A B C D) - là tất cả các trạng thái của FSM
Với khối trạng thái B2 thì có 2 multisets là (A B), (C D)
Với khối trạng thái B3 thì có 4 multisets là (A), (B), (C), (D), trong đó mỗi multiset là một phần từ trong tập trạng thái của FSM
Với khối trạng thái B = {W1, , Wi, , Wm} và đầu vào a ∈ I, chúng ta định nghĩa B’ = dpert(B, a) Điều này có nghĩa là mỗi phần tử multiset Wi = (wi1, wi2, …, wik) trong B sẽ chứa một hoặc nhiều phần tử của B’.
Nếu hai trạng thái của Wi tạo ra các output khác nhau tương ứng với input a thì trạng thái tiếp theo được đặt vào phần tử khác của B’
Nếu tất cả các trạng thái tiếp theo trong W i tạo ra các output khác nhau tương ứng với input a, thì chúng sẽ được nhóm lại trong cùng một phần tử của B’.
FSM đã được tối giản, với khối trạng thái ban đầu chứa một phần tử bao gồm tập hợp các trạng thái của FSM Chúng ta có thể xáo trộn khối trạng thái cho tất cả các đầu vào bằng cách sử dụng chức năng dpert(), với B’ = dpert(B,a) được coi là một cạnh từ nút B tới nút mới B’ và nhãn cạnh là a Từ một khối trạng thái và tập input I, ta có thể sắp xếp |I| nút mới {dpert(B,a), ∀a ∈ I} tại cùng một cấp Tất cả các khối trạng thái của FSM M có thể được sắp xếp thành một cây với các cấp liên tiếp 1, 2, , ∞, gọi là cây DS.
DS là một cây không giới hạn cấp, nhưng chúng ta cũng xem xét các cây có cấp giới hạn Những cây này đạt được cấp giới hạn thông qua một số điều kiện cắt t a, trong đó có sự tồn tại của một khối trạng thái B tại điểm B.
Trong khi xây dựng một cây DS, nếu một trong 3 điều kiện cắt t a trên thỏa mãn thì khối trạng thái B là khối trạng thái kết thúc
Một máy hữu hạn trạng thái (FSM) có thể xác định chuỗi phân biệt nếu và chỉ nếu tồn tại một chuỗi trạng thái duy nhất trong cây trạng thái (DS) Chuỗi đầu vào từ khối trạng thái ban đầu đến khối trạng thái duy nhất chính là chuỗi DS của FSM M.
3.2.2 Thuật toán sinh cây DS
Phương pháp: Thực hiện các bước sau:
Bước 1: Gọi ψ là một tập các khối trạng thái trong cây DS an đầu, ψ chứa khối trạng thái ban đầu và được gán là không kết thúc
Bước 2: Tìm một thành phần ψ ψ mà vẫn chưa được “tính toán” Nếu không có thành phần nào như thế tồn tại thì thuật toán kết thúc
Bước 3: Tính toán ψ’ = dpert(ψ,a) và thêm ψ’ vào ψ với a I Gán ψ đã được “tính toán” và cập nhật DS tree
Bước 4: Nếu dpert (ψ,a) được tính toán ở Bước 3 thỏa mãn điều kiện kết thúc D1, D2 hoặc D3 thì gán ψ’ là nút kết thúc
Bước 5: Quay lại Bước 2 Áp dụng thuật toán trên sinh cây DS cho FSM G 2 như Hình 3.3 dưới đây:
Hình 3.5: Cây DS của FSM G 2 ở Hình 3.4
Từ khối trạng thái ban đầu với đầu vào 0 sinh ra khối trạng thái ( )(DD) vì:
・ Hai trạng thái và sinh ra cùng output 0 từ input 0 và chuyển FSM tới trạng thái và
・ Hai trạng thái C và D sinh ra cùng output 1 từ input 0 và chuyển FSM tới cùng trạng thái D
( )(DD) là khối trạng thái đồng nhất nên nó là nút kết thúc
Từ khối trạng thái ban đầu với đầu vào 1 sinh ra khối trạng thái (DC)( ) vì:
・ Hai trạng và D sinh ra cùng output 0 với input 1 và chuyển FSM tới trạng thái D và C
・ Hai trạng thái và C sinh ra cùng output 1 từ input 1 và chuyển FSM tới trạng thái và
(DD)( ) là một khối trạng thái đồng nhất nên nó là nút kết thúc
( )( )(C)(D) là khối trạng thái đơn nhất được sinh ra từ khối trạng thái (DC)(BA) với input 1 nên nó cũng là nút kết thúc
Cuối cùng, chúng ta đã xây dựng cây DS như hình 3.3 Chuỗi input 11 đã dẫn dắt cây DS từ trạng thái ban đầu đến một trạng thái đơn nhất, tạo thành một cây DS của FSM.
Ta kiểm chứng lại lại kết quả: λ( ,11) = λ(λ ( ,1),1) = 00 λ( ,11) = λ(λ( ,1),1) = 11 λ(C,11) = λ(λ(C,1),1) = 10
Trạng thái Chuỗi vào Chuỗi ra
Chuỗi đặc trưng (Characterizing sequence) [2]
Với FSM không có chuỗi UIO và DS thì “phương pháp W” (W-method) là phương pháp để xác định chuỗi kiểm chứng trạng thái
W là tập hợp hữu hạn các chuỗi đầu vào, phân biệt hành vi của mọi cặp trạng thái trong FSM M Mỗi chuỗi trong W có độ dài hữu hạn và được ký hiệu là W {W 1, W 2, , W n} Các phần tử của W được gọi là chuỗi đặc trưng (characterizing sequences) của FSM M.
Sự phân vùng tương đương mức k (k-equivalence partition) của tập trạng thái
Q ký hiệu là Pk là một tập hợp hữu hạn n tập W1, W2, , Wn Nghĩa là: U n i = 1 Wi = Q
Nếu trạng thái si Wi và sj Wj với i ≠ j thì si và sj là 2 trạng thái có thể phân biệt ở mức k
Bước 1: Xây dựng 1 chuỗi của phân vùng tương đương mức k của tập trạng thái Q, giả sử là P 1 , P 2 ,…, P m
Bước 2: Từ phân vùng tương đương mức k, theo thứ tự ngược lại để tìm chuỗi phân biệt cho mỗi cặp trạng thái
Các bước tìm W được mô tả thông qua ví dụ sau:
Tìm W cho FSM G 3 theo các bước dưới đây:
1 Xây dựng vùng tương đương mức 1
Bắt đầu với bảng thể hiện FSM G 3 như sau:
Bảng 3.4: Bảng mô tả FSM G 3
Nhóm các trạng thái có cùng output ta được phân vùng tương đương mức
1 bao gồm: W1 = {q1, q2, q3} và W2 = {q4, q5} như ảng 3.5 dưới đây:
2 Xây dựng vùng tương đương mức k
Xây dựng phân vùng tương đương mức 2 bằng cách cập nhật bảng phân vùng mức 1, bao gồm việc loại bỏ cột output và thay thế trạng thái qi ở cột next state bằng qij, trong đó j là số nhóm chứa qi Phân vùng mức 2 của FSM G3 được trình bày trong Bảng 3.6 dưới đây.
Bảng 3.6: Bảng P 1 phân vùng tương đương mức 2 của FSM G 3 q3 0 1 q5 q1
Xây dựng phân vùng tương đương mức 3
Bảng 3.7: Bảng P 2 phân vùng tương đương mức 3 của FSM G 3
Xây dựng phân vùng tương đương mức 4
Bảng 3.8: Bảng P 3 phân vùng tương đương mức 4 của FSM G 3
Xây dựng phân vùng tương đương mức 5
Bảng 3.9: Bảng P4 phân vùng tương đương mức 5 của FSM G 3
4 q5 q21 q54 chính là b Ta cập nhật z = b
Trạng thái tiếp theo của q1 và q2 với input b là q4 và q5 Để phân biệt giữa q4 và q5, chúng ta chuyển tới bảng P2 và tìm ký hiệu input, chọn a làm ký hiệu phân biệt Kết quả cập nhật là z = ba.
Trạng thái tiếp theo của trạng thái q4 và q5 với input a là q3 và q2 Hai trạng thái này được phân biệt trong P1 bởi a và b, ta chọn a và cập nhật z baa
Trạng thái tiếp theo của q3 và q2 với đầu vào a lần lượt là q1 và q5 Theo bảng chuyển trạng thái ban đầu, đầu vào a phân biệt rõ ràng giữa q1 và q5 Chúng ta cập nhật giá trị z thành baaa.
Như vậy baaa là chuỗi phân biệt cặp trạng thái q1 và q2 Ta kiểm chứng lại: λ(q1,baaa) λ(q2,baaa)
Với cách làm tương tự như trên, ta tìm được chuỗi phân biệt cho các cặp trạng thái còn lại Ta tìm được tập W như sau: W = {a, aa, aaa, baaa} i/o i/o
KIỂM THỬ DỰA TRÊN MÔ HÌNH FSM
Một số lỗi thường gặp khi cài đặt FSM
Khi có bản đặc tả FSM M S = < S1, I, O, s01, δ1, λ1> và hệ thống cài đặt FSM
M I = < S2, I, O, s02, δ2, λ2> , một câu hỏi đặt ra là FSM M I có mô phỏng FSM
M S hay không? Để trả lời câu hỏi này, ta lần lượt trả lời các câu hỏi sau:
1 Trạng thái ban đầu của FSM M I có mô phỏng trạng thái ban đầu của FSM M S hay không?
2 Với mỗi input a và output b thì mỗi chuyển trạng thái s1 s1’ của M S có tồn tại chuyển trạng thái s2 s2’ của M I và trạng thái s2’ có mô phỏng trạng thái s 1 ’ hay không?
FSM M I là một hệ thống cài đặt dạng hộp đen, vì vậy trạng thái của nó không thể quan sát trực tiếp, chỉ có thể theo dõi thông qua đầu ra tại các điểm quan sát khi cung cấp đầu vào từ điểm điều khiển Để xác định xem trạng thái ban đầu của FSM M I có mô phỏng trạng thái ban đầu của FSM M S hay không, ta áp dụng một trong các phương pháp kiểm chứng trạng thái đã trình bày ở Chương 3 Giả sử chuỗi kiểm chứng trạng thái là x.
Nếu [λ1(s01,x) = λ2(s02,x)] và ∄[λ1(s01,x) ≠ λ2(s02,x)] thì s02 cùng hành vi với s 01 hay trạng thái s 02 mô phỏng trạng thái s 01
Nếu [λ1(s01,x) ≠ λ2(s02,x)], thì trạng thái s02 không có hành vi tương đồng với s01, hoặc s02 không thể mô phỏng s01 Đối với câu hỏi thứ hai, chúng ta xem xét hai trường hợp: Thứ nhất, liệu có tồn tại chuyển trạng thái s2 s2’ của M I tương ứng với mỗi chuyển trạng thái s1 s1’ của M S hay không? Thứ hai, trạng thái s2’ có khả năng mô phỏng trạng thái s1’ hay không?
Có tồn tại chuyển trạng thái s 2 → s 2 ’ hay không? Ta kiểm tra xem khi chuyển từ s2 sang s2’ thì M I có cùng output với M S hay không?
Nếu λ2(s2,a) ≠ λ1(s1,a) thì không tồn tại chuyển trạng thái s2 s2’ ⟹ s2 và s 1 không cùng hành vi hay s 2 không mô phỏng s 1 nên M I không mô phỏng
Nếu λ 2 (s 2 ,a) = λ 1 (s 1 ,a) thì tồn tại chuyển trạng thái s 2 s2’ Tuy nhiên ta phải kiểm tra xem s2’ có mô phỏng s1’ hay không? Để trả lời câu hỏi
“trạng thái s 2 ’ có mô phỏng trạng thái s 1 ’ hay không?” ta cũng sẽ dùng một trong các phương pháp kiểm chứng trạng thái đã trình bày ở Chương
Nếu [λ1(s1’,x) = λ2(s2’,x)] và ∄[λ1(s1’,x) ≠ λ2(s2’,x)] thì s2’ cùng hành vi với s1’ hay trạng thái s2’ mô phỏng trạng thái s1’
Nếu ∄[λ1(s 1 ’,x) ≠ λ 2 (s 2 ’,x)] thì trạng thái s 2 ’ không cùng hành vi với s 1 ’ hay trạng thái s2’ không mô phỏng trạng thái s1’
Kết hợp kiểm tra output và kiểm chứng trạng thái của mỗi một chuyển trạng thái ta sẽ trả lời được câu hỏi 2
Kết hợp các câu trả lời từ câu hỏi 1 và 2, chúng ta có thể xác định liệu FSM M I có mô phỏng FSM M S hay không Bảng 4.1 dưới đây tổng hợp các lỗi thường gặp khi cài đặt FSM M I.
Bảng 4.1: Bảng tổng hợp các lỗi khi cài đặt FSM M I λ 1 (s 01 ,x)
Như vậy, qua Bảng 4.1 ta có thể thấy một số lỗi thường gặp khi kiểm thử sự mô phỏng của hai FSMs như sau:
Trạng thái tiếp theo của một chuyển trạng thái của M I không mô phỏng trạng thái trạng thái tiếp theo ứng với chuyển trạng thái tương ứng của M S
Trên đây là những lỗi mà lập trình viên có thể mắc phải khi cài đặt FSM
Để kiểm thử viên phát hiện các lỗi trong phần mềm, cần có phương pháp và chiến lược kiểm thử hiệu quả Trong chương 5, chúng tôi sẽ trình bày về độ bao phủ của mô hình FSM và lựa chọn tiêu chí tốt nhất để tạo ra các ca kiểm thử nhằm phát hiện những lỗi đã được tổng hợp trong Bảng 4.1.
KỸ THUẬT SINH CA KIỂM THỬ
Độ bao phủ mô hình máy hữu hạn trạng thái
Trong kiểm thử dựa trên mô hình FSM, các đặc trưng quan trọng bao gồm trạng thái, input, output và chuyển trạng thái Theo [4], input thường được coi là một phần của trạng thái hoặc chuyển trạng thái Tất cả các input cần được xử lý chính xác qua các quá trình chuyển trạng thái của FSM, ngay cả khi đầu vào không hợp lệ, nhằm đảm bảo hệ thống không bị treo hoặc gặp phải các vấn đề khác.
Bỏ qua input không hợp lệ như là đứng yên ở cùng một trạng thái đối với những trường hợp input không hợp lệ đó
Xử lý trực tiếp input không hợp lệ bằng cách xuất ra thông báo lỗi thông qua việc điều khiển ngoại lệ và các sự chuyển trạng thái liên quan Đối với outputs, chúng ta không giải quyết trực tiếp vấn đề mà coi đó là một phần của kiểm thử chuyển trạng thái Chẳng hạn, nếu sự chuyển tiếp đưa ra thông tin không mong đợi như thừa, thiếu hoặc lỗi output, thì sẽ được xác định là sự chuyển tiếp lỗi.
Trong kiểm thử dựa trên FSM, trọng tâm là các vấn đề liên quan đến trạng thái và chuyển trạng thái Input chủ yếu được sử dụng để cập nhật, trong khi output được dùng để kiểm tra kết quả.
Để kiểm thử FSM M I, cần xác định số ca kiểm thử cần thiết và tiêu chí để đánh giá tính đầy đủ của chúng Hai chỉ số quan trọng để đo độ bao phủ là độ bao phủ trạng thái (state coverage) và độ bao phủ chuyển trạng thái (transition coverage).
5.1.1 Độ bao phủ trạng thái (state coverage) Để đạt được độ bao phủ trạng thái ta lựa chọn chuỗi các chuyển trạng thái sao cho mỗi trạng thái được thăm ít nhất một lần [5] Bài toán này sẽ tương đương với việc tìm đường đi qua tất cả các đ nh của một đồ thị có hướng sao cho mỗi đ nh được thăm ít nhất một lần Vì mỗi đ nh của đồ thị tương đương với một trạng thái mà các trạng thái là hữu hạn nên việc tìm đường đi này là hoàn toàn có thể thực hiện được
Hình 5.1: Mô hình máy hữu hạn trạng thái C 1
Đường đi qua các đỉnh q1 → q4 → q3 → q5 → q2 → q1 trong đồ thị (đường n t đậm trong Hình 5.2) cho thấy tất cả các đỉnh của đồ thị đều được thăm Điều này chứng tỏ rằng tất cả các trạng thái của FSM đã được kiểm tra, dẫn đến việc chuỗi chuyển trạng thái q1 → q4 → q3 → q5 → q2 → q1 của FSM C1 đạt độ bao phủ trạng thái 100%.
Hình 5.2: Một đường đi bao phủ tất cả các trạng thái của FSM C 1
Độ bao phủ trạng thái là điều kiện lựa chọn yếu nhất trong các điều kiện tạo ra ca kiểm thử Đường đi q1 → q4 → q3 → q5 → q2 → q1 chỉ bao phủ được 5/10 chuyển trạng thái, để lại 5 chuyển trạng thái chưa được kiểm tra, nơi có thể xuất hiện lỗi trong quá trình cài đặt Do đó, cần xem xét một dạng điều kiện bao phủ mạnh hơn, đó là bao phủ chuyển trạng thái, sẽ được trình bày trong mục 5.1.2.
5.1.2 Độ bao phủ chuyển trạng thái (transition coverage) Để đạt được độ bao phủ chuyển trạng thái ta lựa chọn chuỗi các chuyển trạng thái sao cho mỗi chuyển trạng thái được thăm ít nhất một lần [5] ài toán này sẽ tương đương với việc tìm đường đi qua tất cả các cạnh của một đồ thị có hướng sao cho mỗi cạnh được qua ít nhất một lần Vì mỗi cạnh của đồ thị tương đương với một sự chuyển trạng thái mà các trạng thái là hữu hạn nên việc tìm đường đi này là hoàn toàn có thể thực hiện được Để tìm độ bao phủ chuyển trạng thái trước tiên ta xây dựng cây kiểm thử từ mô hình FSM Cây kiểm thử của một FSM là một cây có gốc là trạng thái ban đầu Từ trạng thái ban đầu, nó chứa ít nhất một đường đi từ trạng thái ban đầu tới các trạng thái còn lại của FSM [2]
Theo [2], phương pháp xây dựng cây kiểm thử như sau:
Bước 1: Gốc của cây kiểm thử là trạng thái ban đầu
Bước 2: Giả sử rằng cây kiểm thử đã được xây dựng đến mức k, mức thứ k+1 sẽ được xây dựng như sau:
Chọn một nút n tại mức k,
Nếu n xuất hiện ở mức bất kỳ từ 1 đến k thì n là nút lá và không xây dựng thêm nhánh này
Nếu n không phải là nút lá, hãy tiếp tục xây dựng nhánh bằng cách thêm một nhánh từ n tới nút mới m khi d(n,x) = m Nhánh này sẽ được gán nhãn là x y, với y được xác định bởi λ(n,x).
Lặp lại bước này với tất cả các nút ở mức k
Ví dụ: Xây dựng cây kiểm thử từ mô hình FSM C 1 ở Hình 5.1
Theo các bước trên, ta xây dựng cây kiểm thử như sau:
1 Xây dựng gốc của cây:
Trạng thái ban đầu của FSM C 1 là q1, là gốc của cây, có mức là 1
2 Phát triển nhánh của cây:
Mức 2: Từ trạng thái ban đầu của q1 có thể tới trạng thái q1 hoặc q4
Từ gốc q1 của cây, chúng ta phát triển hai nhánh tới hai nút có nhãn q1 Hiện tại, ở các mức 1, 2, 3 chưa có nút nào mang nhãn q5, vì vậy cần tiếp tục phát triển thêm nhánh cho nút này.
Tại mức 5, nút q5 được xác định là nút lá do ở các mức trước đó đã có nút mang nhãn q5 Trong khi đó, ở các mức 1, 2, 3 và 4, chưa xuất hiện nút nào mang nhãn q2, vì vậy cần tiếp tục phát triển thêm nhánh cho nút này.
Mức 6: Tại mức 6, cả q1 và q5 đều là nút lá vì ở các mức trên đã tồn tại nút có nhãn là q1 và q5
Cuối cùng ta được cây kiểm thử như Hình 5.3 dưới đây:
Hình 5.3: Cây kiểm thử của FSM C 1
Sau khi hoàn thành việc xây dựng cây kiểm thử, bước tiếp theo là xác định tập bao phủ trạng thái P Tập bao phủ trạng thái P = {p1, p2, …pm} bao gồm tất cả các chuỗi con pi, mỗi chuỗi này thể hiện một đường dẫn con bắt đầu từ nút gốc của cây kiểm thử Bằng cách nối các nhãn theo các cạnh của đường dẫn con, ta thu được một chuỗi thuộc P.
Từ cây kiểm thử của FSM C 1 trong Hình 5.3, chúng ta xác định được tập bao phủ P với các nhãn đường đi như sau: p1 = a (đường đi q1 → q1), p2 = b (đường đi q1 → q4), p3 = bb (đường đi q1 → q4 → q4), p4 = ba (đường đi q1 → q4 → q3), và p5 = bab (đường đi q1 → q4 → q3 → q1) Tiếp tục tìm kiếm các đường dẫn con còn lại, chúng ta cuối cùng thu được tập P.
P = {a, b, bb, ba, bab, baa, baab, baaa, baaab, baaaa}
Kỹ thuật sinh ca kiểm thử
Ca kiểm thử hiệu quả cần bao phủ toàn bộ mô hình FSM Khi độ bao phủ chuyển trạng đạt 100%, độ bao phủ trạng thái cũng sẽ đạt 100%, giúp phát hiện tất cả các lỗi về output và trạng thái Vì vậy, độ bao phủ chuyển trạng thái được chọn làm cơ sở để sinh ca kiểm thử.
5.2.1 Khuôn dạng ca kiểm thử
Thông thường khuôn dạng của một ca kiểm thử bao gồm thông tin sau:
Mã ca kiểm thử (TestCase_ID): Dùng để định danh ca kiểm thử
Tiền điều kiện (Pre-Con): Điều kiện ban đầu để có thể thực hiện ca kiểm thử
Thông tin đầu vào (Input): Thông tin đầu vào cung cấp cho FSM để thực hiện ca kiểm thử
Thông tin đầu ra mong đợi (Expected Output): Thông tin đầu ra mong đợi nhận được từ FSM tương ứng với thông tin đầu vào (Input)
Hậu điều kiện (Post-Con): Điều kiện sau khi thực hiện ca kiểm thử
Ca kiểm thử có thể được trình bày dưới dạng Bảng 5.1 như sau:
Từ mô hình đặc tả FSM M S = ta sinh ca kiểm thử để kiểm thử FSM M I = theo các bước như sau:
1 Sinh cây kiểm thử và tìm tập bao phủ chuyển trạng thái Để dễ dàng cho việc sinh ca kiểm thử, tác giả đề xuất thêm một số thông tin sau vào mỗi dãy các chuyển trạng thái của tập P:
Thêm thông tin output ứng với mỗi thông tin input
Để xác định chuỗi kiểm chứng trạng thái phù hợp và kết quả tương ứng, cần thêm thông tin về trạng thái cuối cùng của dãy chuyển trạng thái.
Thông tin input và output được ngăn cách bởi ký tự ‘ ’, với mỗi cặp input/output, trạng thái được ngăn cách bởi ký tự ‘.’
Sau khi thêm các thông tin thì mỗi phần tử trong tập P sẽ có định dạng như sau: i1/o1.i2/o2…ii/oi…in/on.qj
・ ii/oi là thông tin đầu vào (input) và đầu ra (output) tương ứng với một chuyển trạng thái
・ qj là trạng thái cuối của dãy chuyển trạng thái
Ví dụ: a/0.b/1.q1 thì chuỗi thông tin đầu vào là ab, chuỗi thông tin đầu ra là 01 và q 1 là trạng thái cuối của dãy chuyển trạng thái
2 Xác định chuỗi kiểm chứng trạng thái Áp dụng một trong các phương pháp đã trình bày tại Chương 3 để xác định chuỗi kiểm chứng trạng thái Giả sử chuỗi kiểm chứng tìm được là X = {x1, x 2 ,…, x n } thì:
Nếu M S tồn tại chuỗi UIO thì |X| = |S1|, khi đó n = |S1|
Nếu M S tồn tại chuỗi DS thì |X| = 1, khi đó n = 1
Nếu M S không tồn tại UIO và DS (tồn tại W) thì: |X| = |W|, khi đó n = |W|
Mỗi phần tử trong tập chuyển trạng thái hoặc mỗi đường dẫn con trên cây kiểm thử sẽ tạo ra một ca kiểm thử, được xếp vào "Bộ ca kiểm thử các chuyển trạng thái của FSM" Bên cạnh đó, cần thiết kế một bộ ca kiểm thử bổ sung để xác minh xem trạng thái đầu của M I có mô phỏng đúng trạng thái đầu của M S hay không, và các ca kiểm thử này sẽ được xếp vào "Bộ ca kiểm thử trạng thái ban đầu của FSM".
Để ước tính số ca kiểm thử cho tập chuyển trạng thái P = {p1, p2,…, pm} và chuỗi kiểm chứng trạng thái X = {x1, x2,…, xn}, công thức tính là |P| * |X| + |X| Bộ ca kiểm thử trạng thái ban đầu của FSM được xác định thông qua việc kiểm tra xem mô phỏng M S có tồn tại hay không bằng cách sử dụng chuỗi kiểm chứng Mỗi phần tử trong chuỗi kiểm chứng X tương ứng với một ca kiểm thử, do đó bộ ca kiểm thử để xác minh trạng thái ban đầu của FSM MI sẽ được xây dựng từ các phần tử này.
Đầu vào của ca kiểm thử là một phần tử trong chuỗi kiểm chứng X, với kết quả mong đợi là output tương ứng từ FSM M S Khi áp dụng chuỗi Reset RI, FSM M I sẽ trở về trạng thái ban đầu s01, cho phép kiểm tra trạng thái ban đầu của FSM.
M I được thể hiện như ảng 5.2 sau:
Bảng 5.2: Ca kiểm thử trạng thái ban đầu của FSM M S
TestCase_ID Pre-Con Input Expected Output Post-Con
Nếu FSM có chuỗi UIO thì số ca kiểm thử trạng thái ban đầu bằng số trạng thái của FSM M S , tức là |X| = |S 1 |
Nếu FSM có chuỗi DS thì số ca kiểm thử trạng thái ban đầu là |X| = 1
Nếu FSM không có chuỗi UIO hoặc DS thì số ca kiểm thử trạng thái ban đầu của FSM là |X| = n i sang nút ở mức thứ i +1
Đường đi từ nút gốc tới nút có mức cao hơn sẽ bao phủ đường đi từ nút gốc tới nút trong có mức thấp hơn
Ví dụ: Từ cây kiểm thử của FSM C 1 ở Hình 5.2, q3 ở mức 3 và q4 ở mức 2 là các nút trong, đường đi từ q1 tới q3 (q3 ở mức 3 trên cây kiểm thử) là q1→ q4
→ q3, đường đi từ q1 tới q4 (q4 ở mức 2 trong cây kiểm thử) là q1 → q4 Như vậy đường đi từ q1 → q4 → q3 đã bao phủ đường đi từ q1 → q4
Để kiểm thử chuyển trạng thái từ trạng thái ban đầu đến trạng thái s_i, không cần kiểm chứng tất cả các trạng thái sau mỗi chuyển đổi Chỉ cần kiểm chứng trạng thái s_i, vì các trạng thái trước đã được kiểm chứng ở các mức trước đó trong cây kiểm thử.
Với trường hợp chuyển trạng thái q1→ q4 → q3 ở trên ta ch cần kiểm chứng trạng thái q3 vì trạng thái q4 ứng với chuyển trạng thái q1→ q4 đã được kiểm chứng tại mức 2
Theo đề xuất về định dạng phần tử của tập P, cấu trúc được xác định là i1/o1.i2/o2… ii/oi… in/on.qj Giả sử y1 là chuỗi kiểm chứng trạng thái của trạng thái qj, từ đó chúng ta có thể dễ dàng xác định thông tin liên quan đến ca kiểm thử.
Thông tin đầu vào (Input) là: i1.i2…ii…in.y1
Thông tin đầu ra mong đợi (Expected Output) được biểu diễn dưới dạng o1.o2…oi…on.λ(qj, y1), trong đó chuỗi input i1.i2…ii…in dẫn đến trạng thái qj, cho thấy rằng để đạt được trạng thái qj, cần phải đi qua các mức 1, 2,…, i,…, n trên cây kiểm thử Mỗi chuỗi input i1.i2…ii…in sẽ tương ứng với một chuỗi output o1.o2…oi…on Chuỗi y1 được sử dụng để kiểm chứng trạng thái qj; nếu đúng, kết quả sẽ là λ(qj,y1) Mỗi phần tử trong tập P đại diện cho một ca kiểm thử, và mỗi lần chuyển dịch từ mức 1 đến các mức tiếp theo sẽ tạo ra một nhóm các ca kiểm thử.
Nhóm ca kiểm thử TC1-:
Các ca kiểm thử TC1- được thiết kế để kiểm tra các chuyển trạng thái từ trạng thái ban đầu đến trạng thái tiếp theo, tương ứng với việc di chuyển từ nút gốc (mức 1) đến nút con liền kề (mức 2) trên cây kiểm thử Để thực hiện các ca kiểm thử này, tất cả các ca kiểm thử nhóm TC0- phải được thực hiện thành công (Passed), điều này đóng vai trò là tiền điều kiện (Pre-Con) cho nhóm ca kiểm thử TC1-.
Trong bài viết này, chúng tôi quy ước rằng \( o_t \) là số nút tại mức 2 trên cây kiểm thử Các ký hiệu \( o_{i11}/o_{11} \) và \( o_{i12}/o_{12} \) đại diện cho input và output của quá trình chuyển trạng thái từ trạng thái ban đầu tới trạng thái \( s_{11}' \) và \( s_{12}' \), tương ứng với việc chuyển từ nút gốc (mức 1) tới nút đầu tiên và thứ hai của mức 2 trên cây kiểm thử Tổng quát, ký hiệu \( i_{1j}/o_{1j} \) thể hiện input và output của quá trình chuyển trạng thái từ trạng thái ban đầu tới trạng thái \( s_{1j}' \), tương ứng với việc chuyển từ nút gốc tới nút thứ \( j \) của mức 2 trên cây kiểm thử (với \( j \) là chỉ số tương ứng).
Nhóm ca kiểm thử này sẽ được mô tả trong Bảng 5.3 bên dưới
Nhóm ca kiểm thử TC2- bao gồm các ca kiểm thử nhằm kiểm tra các chuyển trạng thái từ nút gốc (mức 1) đến nút con ở mức 3 trong cây kiểm thử Để thực hiện các ca kiểm thử trong nhóm TC2-, yêu cầu tiên quyết là tất cả các ca kiểm thử trong nhóm TC1- phải được hoàn thành mà không gặp lỗi Điều này có nghĩa là điều kiện tiên quyết cho nhóm ca kiểm thử TC2- là phải đạt yêu cầu của TC1-.
Trong bài viết này, chúng ta quy ước rằng o v là số nút tại mức 3 trên cây kiểm thử Các ký hiệu o i1j/o1j và i21/o21 biểu thị cho input và output của quá trình chuyển trạng thái từ trạng thái ban đầu đến trạng thái s 1j’ và s 21’ Điều này tương ứng với việc di chuyển từ nút gốc (mức 1) qua nút thứ j của mức 2, rồi tới nút đầu tiên của mức 3 trên cây kiểm thử, với j thuộc tập hợp {1, 2, , t} Hơn nữa, quá trình này cũng thể hiện sự chuyển từ nút gốc qua nút thứ j của mức 2 đến nút thứ e của mức 3 trên cây kiểm thử, trong đó j thuộc {1, 2, , t} và e là một giá trị xác định.
Nhóm ca kiểm thử này được mô tả trong Bảng 5.4 bên dưới
Tiếp tục phát triển các nhóm ca kiểm thử cho đến TCk-, nhằm kiểm tra các chuyển trạng thái tương ứng khi di chuyển từ nút gốc (mức 1) đến nút lá ở mức k trên cây kiểm thử.
Ví dụ
Cho FSM M S được biểu diễn bởi đồ thị sau:
Hình 5.4: Đồ thị biểu diễn FSM M S [5]
Và FSM M I1 là bản cài đặt 1của FSM M S , giả sử được cài đặt như sau:
Hình 5.5: Mô hình máy hữu hạn trạng thái M I1
FSM M I2 là bản cài đặt 2 của FSM M S , giả sử được cài đặt như sau:
Hình 5.6: Mô hình máy hữu hạn trạng thái M I2
FSM M I3 là bản cài đặt 3 của FSM M S , giả sử được cài đặt như sau:
Hình 5.7: Mô hình máy hữu hạn trạng thái M I3
Hãy xác định xem: a) M I1 có mô phỏng M S không? b) M I2 có mô phỏng M S không? c) M I3 có mô phỏng M S không?
Hình 5.8: Cây kiểm thử từ mô hình FSM M S
Tìm tập bao phủ chuyển trạng thái từ cây kiểm thử:
Sau khi xây dựng cây kiểm thử, bước tiếp theo ta tiến hành tìm tập bao phủ chuyển trạng thái từ cây kiểm thử
2 Xác định chuỗi kiểm chứng trạng thái Áp dụng một trong các phương pháp đã trình bày ở Chương 4 để tìm chuỗi kiểm chứng trạng thái
Mô hình máy hữu hạn trạng thái M S có chuỗi kiểm chứng trạng thái là 11 (áp dụng phương pháp DS)
Ca kiểm thử của FSM M S được thể hiện trong Bảng 5.6 dưới đây
Bảng 5.6: Ca kiểm thử của FSM M S
4 Kiểm thử a) Đối với mô hình cài đặt FSM M I1 , ta có kết quả kiểm thử như ảng 5.7 dưới đây:
TestCase_ID Pre-Con Input Expected
Nhận x t: Theo kết quả kiểm thử trên thì mọi Actual Output đều giống như
Kết quả kiểm thử mong đợi tại ca kiểm thử tương ứng với FSM M I1 cho thấy sự mô phỏng chính xác của FSM M S Đối với mô hình cài đặt FSM M I2, kết quả kiểm thử được trình bày trong bảng 5.8 dưới đây.
Bảng 5.8: Kết quả kiểm thử của FSM M I2
TestCase_ID Pre-Con Input Expected
TC1-11có Actual Output là N tức là FSM M I2 không chấp nhận chuỗi input
Chuỗi chuyển trạng thái với input 011 không tồn tại cho output 011, dẫn đến việc mô hình M I2 không thể mô phỏng mô hình M S Đối với mô hình cài đặt FSM M I3, kết quả kiểm thử được trình bày trong bảng 5.9.
Bảng 5.9: Kết quả kiểm thử của FSM M I3
TC2-31có Actual Output là 0101 và 1101 tức là FSM M I3 có tồn tại một chuỗi chuyển trạng thái với input là 1011 và output là 1101 nhưng M S không có nên
TestCase_ID Pre-Con Input Expected
Trong luận văn này, tác giả tổng quan về mô hình máy hữu hạn trạng thái và nghiên cứu phương pháp xác định chuỗi kiểm chứng trạng thái, bao gồm Unique Input – Output sequence, Distingguishing sequence và Characterizing sequence Bên cạnh đó, luận văn cũng trình bày phương pháp kiểm thử dựa trên mô hình máy hữu hạn trạng thái, sử dụng khái niệm mô phỏng như một tiêu chí để đánh giá tính chính xác của hệ thống so với đặc tả.
Bài viết này nghiên cứu sâu về độ bao phủ của mô hình máy hữu hạn trạng thái, từ đó phát triển phương pháp sinh ca kiểm thử nhằm xác định xem hệ thống cài đặt có thực hiện đúng theo bản đặc tả phần mềm dựa trên mô hình máy hữu hạn trạng thái hay không.
Hướng phát triển tiếp theo của luận văn là cải tiến phương pháp sinh ca kiểm thử nhằm giảm thiểu số lượng ca kiểm thử nhưng vẫn đảm bảo độ bao phủ tối đa Đồng thời, tác giả sẽ thiết kế một chương trình sinh ca kiểm thử tự động dựa trên phương pháp đã được cải tiến.