Các phương pháp kiểm thử dựa trên mô hình thường bao gồm 6 vấn đề. Các vấn đề phần lớn không hoàn toàn độc lập với nhau: ví dụ, nếu kiểm thử liên quan với hệ thống liên tục chứ không phải là một hệ thống rời rạc thì sẽ hạn chế lựa chọn mô hình hóa mô hình, tiêu chí lựa chọn kiểm tra và công nghệ tạo trường hợp kiểm thử.
Hình 2.1: Phân loại quá trình kiểm thử dựa trên mô hình
(Nguồn: A Taxonomy of model- based tesing approaches- Mark Utting 2010)
Hình 2.3 giới thiệu tổng quan về các vấn đề của kiểm thử dựa trên mô hình. Các giải pháp thay thế “A/B” ở các lá cho thấy các lựa chọn thay thế lẫn nhau, trong khi các đường cong chỉ ra các lựa chọn thay thế không nhất thiết loại trừ lẫn nhau (ví dụ, một số công cụ có thể sử dụng nhiều hơn một công nghệ để tạo kiểm thử, việc này khá phổ biến và để hỗ trợ một số loại tiêu chí lựa chọn kiểm thử).
Bước 1 (xây dựng mô hình) được thể hiện qua ba tham số trong danh mục đặc tả mô hình: phạm vi, các đặc điểm và mô hình hóa mô hình.
Bước 2 và 3 (lựa chọn tiêu chí kiểm thử và xây dựng đặc tả các trường hợp kiểm thử) được phản ánh qua khối lựa chọn tiêu chí kiểm tra trong mục tạo kiểm thử.
Bước 4 (tạo kiểm thử) được thể hiện qua khối công nghệ trong mục tạo kiểm thử.
Bước 5 (thực hiện kiểm thử) được thể hiện bởi khối on/offline của mục thực thi kiểm thử.
Các quan điểm khác nhau dẫn đến việc phân loại kiểm thử dựa trên mô hình mà không bắt đầu từ phương pháp, tất nhiên nó vẫn được chứng minh là đúng đắn. Ví dụ, có thể phân loại dựa trên các đối tượng khác nhau được phát triển hoặc sử dụng trong quá trình như: các mô hình, các đặc tả kiểm thử, các trình điều khiển thử nghiệm, thuộc tính, kiểm thử,.. Nguyên nhân cho quyết định sử dụng phương pháp như cơ sở vì dễ dàng phù hợp với các hoạt động của phương pháp và do đó nó không phải là khái niệm phân loại đầy đủ. Tất nhiên, không có nghĩa là phân loại khác cũng không có giá trị.
Phạm vi mô hình
Phạm vi là mặt đầu tiên của mô hình, được phân loại thành một quyết định: mô hình có xác định các đầu vào cho hệ thống thử nghiệm hay không, hoặc nó có xác định hành vi vào/ra mong muốn của hệ thống thử nghiệm không? Các mô hình chỉ có đầu vào thường dễ xác định hơn, nhưng chúng có bất lợi là các kiểm thử được tạo ra sẽ không thể hoạt động như dự đoán. Các kiểm thử được tạo ra có thể thực hiện một dự đoán độ bền, chẳng hạn như kiểm tra hệ thống thử nghiệm không bị ngừng hoạt động đột ngột hoặc tạo ra các lỗi ngoại lệ, nhưng chúng không thể kiểm tra tính chính xác của các giá trị đầu ra hệ thống thử nghiệm thực tế, do mô hình không xác định giá trị đầu ra mong đợi. Vì vậy, các mô hình chỉ có đầu vào tạo ra các dự đoán yếu không có khả năng xác minh tính đúng đắn của hành vi chức năng hệ thống thử nghiệm.
Các mô hình vào/ra của hệ thống thử nghiệm không chỉ mô hình hóa các đầu vào được phép gửi tới hệ thống thử nghiệm, mà còn phải nắm bắt một số hành vi dự kiến của hệ thống thử nghiệm. Tức là, mô hình phải có khả năng dự đoán trước các đầu ra dự kiến của hệ thống thử nghiệm cho mỗi đầu vào, hoặc ít nhất có thể kiểm tra xem đầu ra được tạo ra bởi hệ thống thử nghiệm có được mô hình cho phép hay không.
Các mô hình đầu vào có thể được xem như các mô hình của thực tế. Ví dụ: các mô hình tấn công trong kiểm thử bảo mật; chuỗi Markov được sử dụng để kiểm tra thống kê. Hầu hết các mô hình trừu tượng của môi trường bất kỳ đều không xác định được tất cả các đầu vào có thể cho hệ thống thử nghiệm. Một mô hình tấn công sẽ mã hóa một số hành vi có thể có của môi trường, vì vậy ít trừu tượng hơn; các chức năng cụ thể cũng có thể được mã hóa theo cách này. Mô hình môi trường cụ thể nhất, hoặc ít trừu tượng nhất sẽ xác định chính xác các đầu vào có thể được gửi tới hệ thống thử nghiệm, nhưng các mô hình môi trường cụ thể như vậy rất hiếm khi xảy ra trong thực tế.
Tương tự, mô hình của hệ thống thử nghiệm có thể được cung cấp ở các mức trừu tượng khác nhau. Mô hình trừu tượng nhất được tìm thấy trong kiểm tra độ bền và không cần phải được chỉ định rõ ràng: mô hình phản ứng với bất kỳ đầu vào nào không tạo ra lỗi ngoại lệ. Các mô hình cụ thể hơn sẽ xác định một số hành vi cần kiểm thử, và các mô hình rõ ràng trong triển khai cũng có thể hiểu được, mặc dù khá hiếm vì chi phí phát triển và xác nhận chúng.
Trong thực tế, một mô hình kiểm thử dựa trên mô hình có phạm vi vào/ra, nó chỉ xác định một số khía cạnh của môi trường và có một số khía cạnh của hệ thống thử nghiệm, có thể ở các mức trừu tượng khác nhau.
Các đặc điểm mô hình
Các đặc điểm của mô hình liên quan đến việc kết hợp các vấn đề về thời gian, tính không xác định, và tính chất liên tục hoặc sự kiện rời rạc của mô hình. Các đặc tính của mô hình thường được chọn dựa trên loại hệ thống thử nghiệm đang được thử nghiệm.
Các vấn đề về thời gian đặc biệt có liên quan các hệ thống thời gian thực. Bởi vì mức độ bổ sung, các hệ thống này nổi tiếng là khó kiểm tra. Áp dụng các ý tưởng kiểm thử dựa trên mô hình vào các hệ thống thời gian thực là chủ đề của các hoạt động nghiên cứu hiện nay.
Tính không xác định có thể xảy ra trong mô hình và/hoặc hệ thống thử nghiệm. Nếu hệ thống thử nghiệm thể hiện jitter trong các miền thời gian hoặc miền
giá trị, điều này thường có thể được xử lý khi quyết định được xây dựng (có thể chỉ sau khi tất cả đầu vào được áp dụng). Nếu hệ thống thử nghiệm thể hiện tính không xác định, ví dụ như kết quả đồng thời xảy ra, thì có thể kiểm tra phản ứng được tạo bởi mô hình dựa vào các phản ứng trước của hệ thống thử nghiệm. Trong những trường hợp này, khái niệm không xác định phải được cung cấp bởi mô hình, cũng như bởi các trường hợp kiểm thử (chúng không phải là các trình tự nữa mà là các cây hoặc đồ thị). Cuối cùng, tính không xác định trong mô hình có thể được sử dụng để kiểm thử các hệ thống xác định. Một ví dụ là sử dụng thời gian chờ không xác định để tránh mô hình thời gian chi tiết.
Xét về động lực học, các mô hình có thể rời rạc, liên tục hoặc hỗn hợp của cả hai. Hầu hết công việc trong kiểm thử dựa trên mô hình đều tập trung vào các hệ thống sự kiện rời rạc, nhưng các mô hình liên tục hoặc hỗn hợp thường phổ biến trong nhiều hệ thống nhúng.
Sự khác biệt giữa các đặc điểm là quan trọng, bởi nó tác động đến việc lựa chọn mô hình hóa mô hình, công nghệ cho quá trình tạo trường hợp thử nghiệm, và xen kẽ quá trình tạo và thực hiện các kiểm thử (online so với offline).
Mô hình hóa mô hình
Mặt thứ 3 là mô hình hóa và ký hiệu được sử dụng để mô tả mô hình. Có nhiều ký hiệu mô hình hóa khác nhau được sử dụng để mô hình hóa hành vi của các hệ thống cho các mục đích kiểm thử.
Các ký hiệu dựa trên trạng thái (State-Based hoặc Pre/Post). Mô hình một hệ thống là một tập hợp các biến, biểu diễn trạng thái bên trong của hệ thống, cộng thêm một số hoạt động thay đổi các biến. Mỗi hoạt động thường được xác định bởi một điều kiện trước (precondition) và một điều kiện sau (postcondition), hoặc điều kiện sau có thể được viết dưới dạng mã cập nhật trạng thái. Trong trường hợp đặc biệt ký hiệu pre/post được sử dụng trong mô hình chỉ nhận đầu vào, rõ ràng là không có điều kiện sau, vì vậy ký hiệu pre/post được giảm xuống để mô tả các miền của biến đầu vào và mối quan hệ giữa các biến. Nó được gọi là ký hiệu Input- Domain, được sử dụng rộng rãi bởi các công cụ kiểm tra như AETG.
Các ký hiệu dựa trên chuyển tiếp (transition-based). Chúng tập trung vào việc mô tả sự chuyển tiếp giữa các trạng thái khác nhau của hệ thống. Thông thường, chúng là các ký hiệu nút và vòng cung, giống như các máy trạng thái hữu hạn (FSM), trong đó các nút của FSM đại diện cho các trạng thái chính của hệ thống và các cung tròn biểu diễn các hành động hoặc các hoạt động của hệ thống. Các ký hiệu dạng văn bản hoặc dạng bảng cũng được sử dụng để xác định các chuyển tiếp. Trong thực tế, các ký hiệu dựa trên chuyển tiếp thường được thể hiện rõ hơn bằng cách thêm dữ liệu các biến, hệ thống phân cấp của các máy và tính song song giữa các máy. Ví dụ về ký hiệu dựa trên chuyển đổi được sử dụng cho MBT bao gồm FSM, bảng chuyển đổi (ví dụ: UML State Machines, Statecharts Statemate và Simulink Stateflow charts), gán nhãn hệ thống chuyển đổi.
Các ký hiệu dựa trên lịch sử (History-based). Các ký hiệu này mô hình
hóa một hệ thống bằng cách mô tả các đường đi cho phép của các hành vi theo thời
gian. Các ký hiệu của thời gian có thể được sử dụng (rời rạc hoặc liên tục, tuyến tính hoặc phân nhánh, các điểm hoặc khoảng thời gian…), dẫn đến nhiều loại khác nhau của lôgic thời gian. Các biểu đồ chuỗi thông điệp và các hình thức liên quan cũng nằm trong nhóm này. Đây là các ký hiệu đồ họa và văn bản để xác định trình tự tương tác giữa các thành phần.
Các ký hiệu chức năng. Chúng mô tả một hệ thống như một tập hợp các hàm toán học. Các hàm có thứ tự đầu tiên, như trong trường hợp các thông số đại số, hoặc thứ tự cao hơn, như trong các ký hiệu như HOL.
Các ký hiệu hoạt động. Chúng mô tả một hệ thống là một tập hợp các quá trình có thể thực thi, thực thi song song. Chúng đặc biệt phù hợp để mô tả các hệ thống phân tán và các giao thức truyền thông. Ví dụ ngôn ngữ mô tả phần cứng như VHDL hoặc Verilog cũng được bao gồm trong nhóm này.
Các ký tự ngẫu nhiên (Stochastic). Mô tả một hệ thống bằng một mô hình xác suất của các sự kiện và các giá trị đầu vào và có xu hướng được sử dụng để mô hình hóa các môi trường hơn là các hệ thống thử nghiệm. Ví dụ, chuỗi Markov được sử dụng để lập mô hình các hồ sơ sử dụng dự kiến, để các bài kiểm thử được
tạo ra thực hiện sử dụng.
Các ký hiệu luồng dữ liệu. Các ký hiệu này tập trung vào dữ liệu thay vì luồng điều khiển. Ví dụ nổi bật là sơ đồ khối của Matlab Simulink, thường được sử dụng để mô hình hóa các hệ thống liên tục. Trong thực tế, một số mô hình hóa có thể được biểu diễn thông qua một ký hiệu duy nhất. Ví dụ: ký hiệu UML cung cấp cả mô hình dựa trên chuyển đổi, với các sơ đồ máy trạng thái, và một mô hình trước/sau (pre/post) với ngôn ngữ OCL. Hai mô hình có thể được sử dụng cùng một lúc trong một mô hình kiểm thử. Ví dụ, nó giúp thể hiện cả hành vi động và một số quy tắc nghiệp vụ về các kiểu dữ liệu rời rạc. Một ví dụ khác: Matlab mô hình các hệ thống nhúng thời gian thực bằng cách sử dụng kết hợp của các sơ đồ khối Simulink (một ký pháp luồng dữ liệu) và các quy tắc trạng thái luồng (một ký pháp dựa chuyển đổi).
Tiêu chí lựa chọn kiểm thử
Mặt thứ tư xác định các cơ sở được sử dụng để kiểm soát việc tạo ra các thử nghiệm. Các công cụ kiểm thử dựa trên mô hình được phân loại theo các tiêu chí lựa chọn kiểm thử mà chúng hỗ trợ. Các tiêu chí lựa chọn này gián tiếp xác định các thuộc tính của các bộ kiểm thử được tạo ra, bao gồm cả khả năng phát hiện lỗi, độ phức tạp, v.v. Trong khi hầu hết các tiêu chí này không chỉ áp dụng cho kiểm thử dựa trên mô hình mà còn áp dụng cho các hình thức kiểm thử truyền thống, chúng là đặc điểm phân biệt giữa các công cụ kiểm thử dựa trên mô hình hiện nay, vì vậy chúng đóng vai trò quan trọng trong phân loại. Các mục sau đây xem xét ngắn gọn các tiêu chí được sử dụng phổ biến nhất.
Việc xác định tiêu chí “tốt nhất” nói chung là không thể. Nó là nhiệm vụ của kỹ sư kiểm thử để cấu hình các cơ sở tạo kiểm thử và chọn các tiêu chí lựa chọn kiểm thử đầy đủ và các đặc tả của trường hợp kiểm thử để đáp ứng các đối tượng kiểm thử, ví dụ: chức năng, độ bền, bảo mật hoặc hiệu suất.
Tiêu chuẩn tổng quát cấu trúc mô hình. Các tiêu chí này khai thác cấu trúc của mô hình, chẳng hạn như các nút và vòng cung của một mô hình dựa trên chuyển đổi hoặc các câu lệnh điều kiện trong một mô hình sử dụng ký hiệu pre/post. Ký
hiệu mô hình thường gợi ý các loại tiêu chí cấu trúc tổng quát cụ thể. Ví dụ: khi mô hình sử dụng ký hiệu pre/post, một số tiêu chí thường được sử dụng như: yếu tố nguyên nhân-kết quả, các rời rạc trong điều kiện sau (post condition). Đối với các mô hình dựa trên chuyển đổi, sử dụng các biểu đồ chứa các nút và cung, có nhiều tiêu chí biểu đồ tổng quát có thể được sử dụng để kiểm soát việc tạo thử nghiệm. Một số tiêu chí tổng quát thường được sử dụng là tất cả các nút (nghĩa là tất cả các trạng thái), tất cả các chuyển đổi, tất cả các cặp chuyển đổi và tất cả các chu kỳ.
Tiêu chí bao phủ dữ liệu. Các tiêu chí này giải quyết bằng cách chọn một vài giá trị kiểm thử từ một không gian dữ liệu lớn. Ý tưởng cơ bản là phân chia không gian dữ liệu thành các lớp tương đương và chọn một đại diện từ mỗi lớp, với kỳ vọng rằng các thành phần của lớp này tương đương với khả năng phát hiện các lỗi của chúng. Tiêu chí bao phủ theo chiều dọc và N chiều là các dạng tiêu chí bao phủ dữ liệu phổ biến. Đối với các kiểu dữ liệu được sắp xếp, phân vùng của một dãy các giá trị vào các lớp tương đương thường được bổ sung bằng cách chọn các bài kiểm thử bổ sung từ biên của các khoảng. Phân tích biên và phân tích miền được chấp nhận rộng rãi trong dự đoán phát hiện lỗi và có thể được sử dụng như tiêu chí bao phủ cho tạo kiểm thử.
Tiêu chí bao phủ dựa trên các yêu cầu. Khi các thành phần của mô hình có thể được liên kết rõ ràng với các yêu cầu của hệ thống thử nghiệm, phạm vi bao phủ cũng có thể áp dụng cho các yêu cầu. Ví dụ, nếu số yêu cầu được gắn với các chuyển đổi của một máy trạng thái UML thì bộ tạo kiểm thử có thể đáp ứng tất cả các yêu cầu.
Các đặc tả trường hợp kiểm thử Ad-hoc. Các đặc tả của trường hợp kiểm thử có thể được sử dụng để kiểm soát việc tạo thử nghiệm. Ngoài mô hình, kỹ sư kiểm thử phải viết một đặc tả trường hợp kiểm thử theo một số ký hiệu chính thức, và chúng được sử dụng để quyết định các kiểm thử sẽ được tạo ra. Ví dụ, chúng có thể được sử dụng để hạn chế các đường đi thông qua mô hình sẽ được kiểm thử, để tập trung kiểm thử vào các trường hợp được sử dụng nhiều, hoặc để đảm bảo rằng các đường đi cụ thể sẽ được kiểm tra. Ký hiệu được sử dụng để diễn tả các đối