Mô hình máy trạng thái có thể bổ sung thêm thông tin xác suất, sao cho các chức năng thường sử dụng có thể được phân tích và kiểm thử kỹ lưỡng hơn các chức năng khác. Một giả thuyết cơ bản của kiểm thử dựa trên cách sử dụng (usage-based testing) là nếu các hàm thường xuyên sử dụng, thì khả năng lỗi bị kích hoạt bởi việc sử dụng các hàm đó cao hơn. Như thế, chúng ta cần phải chú trọng hơn đối với các thành phần được sử dụng nhiều ở trong máy trạng thái hữu hạn.
Máy trạng thái hữu hạn được bổ sung thêm thông tin xác suất về việc thực thi các thành phần dưới dạng chuỗi Markov. Thông tin bổ sung cho máy trạng thái là xác suất gắn liền với các chuyển tiếp thỏa mãn các tính chất sau:
− Từ trạng thái hiện hành xn = iở bước n, xác suất chuyển đến trạng thái xn+1 = j ở bước tiếp theo n+1 được ký hiệu là pij, xác suất này độc lập với lịch sử chuyển trạng thái trước đó, nghĩa là:
P{xn+1= j | xn = i, xn-1 = sn-1, …, x0 = s0} = P{xn+1 = j | xn = i} = pij
Lịch sử của hệ thống được đúc kết trong trạng thái hiện hành. Trạng thái tiếp theo chỉ phụ thuộc vào trạng thái hiện hành. Điều này được gọi là tính chất Markov.
− Các xác suất pij thỏa mãn ràng buộc sau: 0 ≤ pij ≤ 1 và ∑ =1
j ij
126
− Nếu điều kiện trên đúng với mọi trạng thái trong một máy trạng thái hữu hạn, thì máy trạng thái hữu hạn tạo thành chuỗi Markov. Trong chuỗi Markov, chuyển tiếp trạng thái phụ thuộc vào xác suất thay vì đơn định. Chuỗi Markov có thể được mô tả bởi ma trận xác suất chuyển trạng thái, P = [pij]. Trong ma trận này, nhãn của các trạng thái được biểu diễn như là chỉ số và các xác suất chuyển tiếp được biểu diễn như là giá trị phần tử. Ma trận này là ma trận vuông và tổng mỗi hàng bằng 1.
Chuỗi Markov đã được sử dụng để sinh ra dữ liệu kiểm thử, xác định điều kiện dừng kiểm thử và lý giải về kết quả kiểm thử trong kiểm thử thống kê (statistical testing) [59, 60, 61].
Trong [62], chuỗi Markov được sử dụng để sinh ra dữ liệu thử thỏa mãn các ngưỡng xác suất nhằm bao phủ các chức năng thường được sử dụng. Ba loại ngưỡng xác suất cho kiểm thử thống kê dựa trên cách sử dụng được đề xuất:
− Ngưỡng xác suất tổng thể (overall probability threshold) cho các chức năng của phần mềm nhằm đảm bảo rằng các chức năng thường được sử dụng bởi người dùng được bao phủ và được kiểm thử đầy đủ. Xác suất của một ca kiểm thử được tính như là tích của các xác suất của các chuyển tiếp được kích hoạt bởi ca kiểm thử đó. Nếu xác suất vượt quá ngưỡng xác suất tổng thể, ca kiểm thửđó sẽđược chọn.
− Ngưỡng xác suất ổn định (stationary probability threshold) nhằm đảm bảo rằng các trạng thái thường xuyên được kích hoạt được bao phủ và được kiểm thử đầy đủ. Kiểm thử các trạng thái trên một ngưỡng xác định nhằm chỉ chú trọng vào các chức năng riêng rẽ hay trạng thái của hệ thống thường được sử dụng.
127
− Ngưỡng xác suất chuyển tiếp (transition probability threshold) nhằm đảm bảo các cặp chức năng thường được sử dụng, và tương tác giữa chúng được bao phủ và kiểm thửđầy đủ.
5.5.2.Độ đo tính khả kiểm thử
Máy trạng thái hữu hạn được bổ sung thêm xác suất các chuyển tiếp để tạo nên chuỗi Markov. Trong nghiên cứu của chúng tôi, các máy trạng thái hữu hạn thường được đặc tả bởi người thiết kế. Để xây dựng chuỗi Markov, chúng tôi cần phải gán các giá trị xác suất của chuyển tiếp cho máy trạng thái hữu hạn bằng cách dựa trên mô hình sử dụng (usage model) [63]. Mô hình sử dụng mô tả tính chất sử dụng chức năng của phần mềm. Mô hình sử dụng thường được định nghĩa trong đặc tả chức năng, đặc tả cách sử dụng và đặc tả kiểm thử.
Trong [59], Whittaker và Poore mô tả ba phương pháp xây dựng mô hình sử dụng:
− Nếu không có thông tin liên quan đến việc sử dụng phần mềm, xác suất đều có thể được gán cho các cung đi ra từ mỗi trạng thái, được gọi là phương pháp không có thông tin.
− Xác suất của các chuyển tiếp có thể được gán dựa trên giả thiết việc sử dụng phần mềm, được gọi là phương pháp mong đợi. − Xác suất của các chuyển tiếp có thể được gán dựa trên đo lường
thực tế việc sử dụng phần mềm, được gọi là phương pháp có thông tin.
Ba phương pháp này có thể áp dụng trong nhiều tình huống khác nhau. Phương pháp có thông tin về sử dụng thực tế của phần mềm là tốt nhất. Tuy nhiên, phương pháp này chỉ có thể áp dụng khi phần mềm có sẵn và đang
128
được sử dụng. Phương pháp thứ hai là phương pháp mong đợi, trong đó khả năng sử dụng của người dùng có thểđược đánh giá bằng việc giả thiết thực thi phần mềm bởi những người sử dụng. Cuối cùng, chúng ta mới sử dụng phương pháp không có thông tin.
Trong phân tích các phần mềm phản ứng, như đã đề cập trong các mục trước, chúng tôi quan tâm đến một số các biến thể của máy trạng thái hữu hạn, như SSM trong môi trường SCADE hay STATEFLOW trong môi trường SIMULINK. Trong các hình thức đặc tả này, mỗi chuyển tiếp được kích hoạt bởi một điều kiện, nghĩa là một biểu thức lô-gíc. Biểu thức lô-gíc là một vị từ trên tập các biến và các đầu vào.
Trong nghiên cứu này, chúng tôi đề xuất đánh giá thống kê để tính mô hình sử dụng. Khi không có thông tin liên quan đến việc sử dụng phần mềm, đánh giá thống kê được sử dụng thay vì dùng xác suất đều. Đánh giá thống kê cho phép tính xác suất một điều kiện kích hoạt được thỏa mãn, nghĩa là biểu thức lô-gíc nhận giá trị đúng. Phương pháp này cho thông tin chính xác hơn về sự kích hoạt các chuyển tiếp.
Ngoài ra, nếu người thiết kế của phần mềm định nghĩa các ràng buộc trên tập các đầu vào và các biến, thường nhằm mô tả các tính chất môi trường của phần mềm. Trong trường hợp này, các ràng buộc đó cũng cần phải được thỏa mãn trong khi đánh giá thống kê.
Một khi chuỗi Markov được xây dựng từ máy trạng thái hữu hạn và xác suất các chuyển tiếp, chúng ta có thể tính được phân phối dừng của nó, nghĩa là chuỗi Markov trở nên cân bằng (equilibrium), không biến đổi theo thời gian. Trong trường hợp này, xác suất cân bằng hay xác suất dừng πi ở trong trạng thái i luôn không thay đổi trước và sau khi chuyển trạng thái.
129
Véc-tơ phân phối xác suất cho n trạng thái Π = [π1, π2,…, πn] được gọi là phân phối dừng của chuỗi Markov khi [61]:
Π = ΠP
Phương trình này tương đương với hệ phương trình sau:
π1 = π1p11 + π2 p21 + … + πn pn1
π2 = π1p12 + π2 p22 + … + πn pn2
…
πn = π1p1n + π2 p2n + … + πn pnn
1 = π1 + π2+ … + πn
Trong đó, pij là xác suất chuyển từ trạng thái i sang trạng thái j. Xác suất dừng πi chỉ ra khả năng xuất hiện trạng thái i sau khi chuỗi Markov đạt đến sự cân bằng. Bởi vì, mỗi trạng thái biểu diễn một phần tính toán của hệ thống phần mềm, thông tin này cho phép người kiểm thử xác định được phần nào của phần mềm cần phải được chú ý trong quá trình kiểm thử.
Chúng tôi gọi xác suất πi là khả năng thực thi của trạng thái. Khả năng thực thi của trạng thái có thể cho phép dự báo sự khó khăn khi tạo ra dữ liệu để kích hoạt một trạng thái cụ thểi của phần mềm, nhằm thỏa mãn tiêu chí bao phủ cơ bản nhất dựa trên máy trạng thái hữu hạn là phủ tất cả các trạng thái. Đối với các trạng thái với khả năng thực thi thấp, dữ liệu để bao phủ các trạng thái đó không dễ dàng sinh ra. Như thế, nếu khả năng thực thi của một trạng thái i rất thấp, phần tính toán gắn liền với trạng thái i được xem là khó kiểm thử, nghĩa là tính khả kiểm thử thấp. Ngược lại, phần tính toán gắn liền với trạng thái i có tính khả kiểm thử cao.
130
Hơn nữa, kiểm thử dựa trên máy trạng thái hữu hạn thường tạo ra các dữ liệu thử nhằm kích hoạt một tập hợp các chuỗi chuyển tiếp. Khó khăn tạo ra một dữ liệu thử phụ thuộc vào khó khăn kích hoạt mỗi chuyển tiếp trong chuỗi. Khó khăn kích hoạt chuyển tiếp đơn giản chỉ là xác suất chuyển trạng thái gắn liền với chuyển tiếp. Như thế, khó khăn tạo ra một dữ liệu thử có thể được đo lường bởi tích của các xác suất của tất cả các chuyển tiếp được kích hoạt bởi dữ liệu đó. Chúng tôi gọi tích của các xác suất này là khả năng thực thi của chuỗi chuyển tiếp. Khả năng thực thi của chuỗi chuyển tiếp được xem là độ đo tính khả kiểm thử của chuỗi chuyển tiếp.
Như thế, chúng tôi đề xuất sử dụng hai độđo tính khả kiểm thử dựa trên chuỗi Markov như sau:
− Khả năng thực thi của trạng thái: dự báo khó khăn khi thực thi một trạng thái trong trường hợp hệ thống hoạt động ổn định hay cân bằng.
− Khả năng thực thi của chuỗi chuyển tiếp: dự báo khó khăn khi kích hoạt một chuỗi các chuyển tiếp.
Một mặt, các độ đo này có thể giúp cho người kiểm thử tính đến sự khó khăn khi tạo ra dữ liệu thử nhằm bao phủ các trạng thái hay chuỗi chuyển tiếp cụ thể. Mặt khác, người thiết kế có thể cải tiến mô hình thiết kế máy trạng thái hữu hạn nhằm làm dễ dàng việc tạo ra dữ liệu thử.