Chƣơng 1 TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM
2.7. Kiểm thử với trạng thái kiểm chứng
2.7.2. Chuỗi phân biệt (Distinguishing sequence)
Cho FSM= <S, I, O, s0, δ, λ> với |S| = n. 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= sj. 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.
Với khối trạng thái B = {W1,...,Wi ,...,Wm} và một đầu vào a ∈ I, chúng ta định nghĩa B’= dpert(B,a) có nghĩa là mỗi một phần tử multiset Wi = (wi1, wi2, …,wik) của B chứa một hoặc nhiều phần tử của B‟ như sau:
- 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 các trạng thái tiếp theo của tất cả các trạng thái trong Wi cùng tạo ra các output khác nhau tương ứng với input a thì được đặt trong cùng một phần tử của B’.
- Cho FSM đã được tối giản (reduced), khối trạng thái ban đầu đã cho bao gồm một phần tử chứa một tập các trạng thái của FSM. Tiếp theo, chúng ta có thể xáo trộn tất cả 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 (), chúng ta có thể xem B‟ = dpert(B,a) như là một cạnh từ nút B tới một nút mới B‟ với nhãn của cạnh là a. Từ một khối trạng thái và một tập input I, chúng 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 có thể sắp xếp dưới dạng một cây với các cấp liên tiếp 1, 2,..., ∞. Một cây như vậy được gọi là cây DS. Một cây DS là một cây không giới hạn cấp, tuy nhiên chúng ta chỉ xét các cây có các cấp giới hạn, những cây có cấp giới hạn như vậy đạt được bằng cách sử dụng một vài điều kiện cắt tỉa:
D1: Một khối trạng thái B là khối trạng thái đồng nhất (homogeneous state block) nếu ít nhất một multiset Wi của B có các trạng thái được lặp lại.
D2: Một khối trạng thái B là khối trạng thái đơn nhất (singleton state block) nếu tất cả các phần tử của B có đúng một trạng thái.
D3: Trên đường dẫn từ khối trạng thái ban đầu tới khối trạng thái hiện tại B có tồn tại một khối trạng thái 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 tồn tại chuỗi phân biệt nếu và chỉ nếu tồn tại một chuỗi trạng thái đơn nhất trong cây DS. Chuỗi đầu vào từ khối trạng thái ban đầu tới khối trạng thái đơn nhất là một chuỗi DS của FSM.
Thuật toán sinh cây DS
Input : M = <S, I, O, s0, δ, λ>.
Output: Cây DS.
Bƣớc 1: Gọi ψ là một tập các khối trạng thái trong cây DS. Ban đầ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
2.7.3. Chuỗi đặc trƣng (Characterizing sequence)
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à một tập hữu hạn các chuỗi input mà phân biệt hành vi của bất kỳ một cặp trạng thái nào trong FSM. Mỗi input trong W có độ dài hữu hạn. W ={W1, W2,..., Wn}, trong đó phần tử của W được gọi là characterizing sequences (chuỗi đặc trưng) của FSM.
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à: Un
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.
Phương pháp tìm W:
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à P1, P2,…, Pm.
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.
Kiểm thử quá trình chuyển đổi (si, sj, a/b) sử dụng phương pháp W. Lặp lại các bước sau đây cho mỗi chuỗi đầu vào của tập W:
Bƣớc 1: Giả sử rằng hệ thống được thử nghiệm ở trạng thái ban đầu của nó, mang lại hệ thống được thử nghiệm từ trạng thái ban đầu s0 để trạng thái si bằng cách áp dụng một chuỗi chuyển T (si) như trong hình 2.7.
Bƣớc 2: Áp dụng đầu vào a và xác minh rằng hệ thống được thử nghiệm tạo đầu ra b.
Bƣớc 3: Áp dụng một chuỗi xác minh từ tập W để hệ thống được thử nghiệm và xác minh rằng chuỗi đầu ra tương ứng như mong đợi. Giả sử rằng hệ thống được thử nghiệm là trong trạng thái sk ở cuối bước này.
Bƣớc 4: Di chuyển hệ thống theo thử nghiệm trở lại trạng thái ban đầu s0 bằng cách áp dụng một chuỗi reset RI trong trạng thái sk.
Chính vì vậy, sử dụng mô hình hóa và kiểm thử với trạng thái kiểm chứng đúng là một nền tảng cơ bản cho việc sinh ca kiểm thử và được đánh giá dựa trên sự phù hợp hay sự khác biệt giữa các đặc tả của mô hình với những gì hệ thống thực hiện. Sự bùng nổ của mô hình hóa máy trạng thái hữu hạn được phổ biến trong hầu hết các tác vụ khác của kiểm thử dựa trên mô hình như bảo trì mô hình, kiểm tra và đánh giá lại, sinh các ca kiểm thử dựa trên các tiêu chuẩn bao phủ.
2.8. Độ bao phủ mô hình máy hữu hạn 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 ra 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. Tuy nhiên vẫn chưa có nghiên cứu cụ thể 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.
2.8.1. Một số đặc trƣng của máy hữu hạn trạng thái.
Trong một mô hình máy hữu hạn trạng thái, các nhân tố cấu thành máy hữu hạn trạng thái bao gồm: trạng thái (state), input, output, chuyển trạng thái (transtion).
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, và 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 hay 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 (transittion): Là cặp hai trạng thái thể hiện sự thay đổi trạng thái từ trạng thái này sang trạng thái kia so sự kiện gây ra.
Tiền định: Điều kiện ràng buộc lên việc chuyển trạng thái, thường gắn vớ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ể được đưa ra mà một máy hữu hạn trạng thái có thể đầy đủ các yếu tố ở trên, hoặc thiếu một vài nhân tố nào đó.
Trong bài toán kiểm thử dựa trên mô hình FSM chúng ta thường coi vấn đề input như một phần của vấn đề trạng thái và chuyển trạng thái. Giả sử rằng tất cả các input cần phải được xử lý một cách chính xác thông qua một số quá trình chuyển trạng thái của FSM, thậm chí cả khi đầu vào không hợp lệ được mong đợi là sẽ được xử lý chính xác mà không gây lỗi hệ thống hoặc các vấn đề khác thông qua các cách thức dưới đây:
- Bỏ qua những input không hợp lệ như đứ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ệ như xuất ra thông báo lỗi thông qua việc điều khiển những ngoại lệ và những sự chuyển trạng thái liên quan. Đối với các giá trị output, chúng ta cũng không giải quyết trực tiếp những vấn đề về output mà coi nó là một phần của vấn đề kiểm thử chuyển trạng thái như: sự chuyển tiếp đưa ra những thông tin không mong đợi về sự thiếu, thừa, lỗi đầu ra thì sẽ xác định sự chuyển tiếp là sự chuyển tiếp lỗi.
Để kiểm thử xem hệ thống máy hữu hạn 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. 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. 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. Bởi vậy, việc 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ị đó là một phương pháp tốt để áp dụng cho bài toán mô hình hóa ATM ở trên.
Tuy nhiên với một hệ thống máy hữu hạn trạng thái đã cho, liệu chúng ta 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? Nhưng câu trả lời cho những 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ể. Sau đây là một số nội dung kiểm tra một máy hữu hạn trạng thái là đúng đắn và đầy đủ:
Có ít nhất một trạng thái khởi đầu với các chuyển tiếp trạng thái đi ra.
Có ít nhất một trạng thái kết thúc với các chuyển tiếp 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.
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 tiếp 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.
Bên cạnh đó, những lỗi dưới đây cần được kiểm tra trước khi kiểm thử như: thiếu chuyển trạng thái, chuyển trạng thái sai, thiếu sự kiện hay sự kiện sai, 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. Vì vậy, trong kiểm thử dựa trên FSM tập trung vào những vấn đề về trạng thái và chuyển trạng thái. Input được sử dụng chính cho sự cập nhật và output được sử dụng chính cho sự kiểm tra kết quả. Do vậy, để kiểm thử mô hình hóa FSM của ATM thì cần thiết bao nhiêu ca kiểm thử? Căn cứ vào đâu để biết được số ca kiểm thử đã đủ hay chưa? Do đó, ở trong nghiên cứu này sẽ được sử dụng hai chỉ số để đo độ bao phủ là: Độ bao phủ trạng thái (state coverage) và độ bao phủ chuyển trạng thái (transition coverage).
a. Độ bao phủ trạng thái (State coverage).
Trong kiểm thử, để đạt được độ bao phủ trạng thái ta lựa chọn chuỗi các chuyển đổi trạng thái sao cho mỗi trạng thái được thăm ít nhất một lần. Bài toán mô hình hóa máy rút tiền ATM, 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 tươ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 2.8. FSM quá trình chuyển đổi trạng thái cho ATM6.
6
Specification Representation and Automatic Test Case Generation using System Model - Ashish Kumari, Noor Mohammad, Chetna -July 2012.
Trong hình 2.8 với đường đi qua các đỉnh S0S1S2S1S0 (đường nét đậm trong hình 2.9) sẽ qua tất cả các đỉnh của đồ thị, điều đó có nghĩa là tất cả các trạng thái của FSM đều được thăm. Do đó, với chuỗi chuyển trạng thái S0S1S2S1S0 của FSM ATM sẽ đạt độ bao phủ trạng thái là 100%.
Hình 2.9. Một đƣờng đi bao phủ tất cả các trạng thái của FSM ATM7.
Phương pháp này là thước đo, được sử dụng để tính toán và đo lường số lượng các đường đi trong mô hình FSM được thực thi. Bởi vì, nó sẽ không kiểm tra với tất cả các điều kiện trong một khối duy nhất mà chỉ là một thử nghiệm cơ bản sau khi hoàn tất mã hóa và phân tích chức năng của hệ thống. Để kiểm thử với tất cả các điều kiện thì ta cần bao phủ nhánh và bao phủ đường đi. Nhưng kiểm thử trạng thái là một kỹ thuật kiểm thử hộp đen, trong đó kết quả đầu ra được kích hoạt bằng cách thay đổi các điều kiện đầu vào hoặc thay đổi “trạng thái” của hệ thống. Nói cách khác, kiểm thử được thiết kế để thực hiện quá trình chuyển đổi trạng thái hợp lệ và không hợp lệ. Khi chúng ta sử dụng:
Chúng ta có chuỗi các sự kiện xảy ra và các điều kiện liên quan áp dụng cho những sự kiện.
Xử lý đúng đắn một sự kiện cụ thể phụ thuộc vào các sự kiện và điều kiện đã xảy ra trong quá khứ.
Cho các hệ thống thời gian thực với các trạng thái khác nhau và các quá trình chuyển tiếp có liên quan.
7
Specification Representation and Automatic Test Case Generation using System Model - Ashish Kumari, Noor Mohammad, Chetna -July 2012.
Các bƣớc phát sinh trong kiểm thử:
Bƣớc 1: Hiểu được trạng thái khác nhau và các quá trình chuyển tiếp và đánh dấu giá trị hợp lệ và không hợp lệ.
Bƣớc 2: Xác định một chuỗi các sự kiện dẫn đến một kết thúc kiểm thử trạng thái cho phép.
Bƣớc 3: Một trong những trạng thái được chọn và chuyển tiếp qua sẽ được đánh dấu.
Bƣớc 4: Bước 2 và 3 phải được lặp đi lặp lại cho đến khi tất cả các giá trị đã được truy cập và tất cả các quá trình chuyển tiếp được đi qua.
Bƣớc 5: Đối với các trường hợp kiểm thử để có một mức độ bao phủ tốt, giá trị đầu vào thực tế và giá trị đầu ra thực tế đã được tạo ra.
Bên cạnh đó vẫn còn một số ưu điểm như: kiểm thử để làm quen với các phần mềm thiết kế và cho phép các kiểm thử viên thiết kế các ca kiểm thử có hiệu quả, cho phép các kiểm thử viên kiểm thử các giá trị hợp lệ và không hợp lệ. Các thử nghiệm này được bắt nguồn từ máy trạng thái hữu hạn và quá trình chuyển tiếp dựa theo mô hình trạng thái của hệ thống.
b. Độ 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. Bài toán kiểm thử dựa trên mô hình 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