Hình 2.11 miêu tả sơ đồ của các cơng cụ liên quan trong sinh dữ liệu kiểm thử tự động. Các cơng cụ được phân loại theo hai tiêu chí: sinh dữ liệu kiểm thử tự động từ mã nguồn và từ đặc tả, mơ hình. Trong Hình 2.11 cũng phân biệt các công cụ không sử dụng đặc tả, sử dụng đặc tả cũng như các tiêu chuẩn kiểm thử. Các công cụ phân loại theo các kỹ thuật kiểm thử hộp trắng (white box testing), kiểm thử hộp đen (black box testing) và kiểm thử hộp xám (gray box testing). Phần tiếp theo sẽ giới thiệu một số công cụ kiểm thử tự động dựa trên các mơ hình điển hình.
Spec Explorer [102]: là một cơng cụ kiểm thử dựa trên mơ hình được hỗ trợ cả trực tuyến và khơng trực tuyến, được tích hợp với kiến trúc Microsoft.NET và sử dụng phiên bản mở rộng của C#. Spec Explorer sử dụng lý thuyết về otomat (automata) để sinh ra các kịch bản kiểm thử tự động từ mơ hình Spec#. Các mơ hình Spec# được sử dụng hầu hết các tính năng của Spec# để biểu diễn các tiền điều kiện, các bất biến của các đối tượng, các ràng buộc, v.v. Cơng cụ
Spec Explorer Visual Studio có khả năng sinh dữ liệu kiểm thử đầu vào tự động cho các mơ hình phức tạp bằng phương pháp kết hợp các kỹ thuật sinh khác. Ví dụ, cơng cụ này tích hợp các kỹ thuật kiểm thử tổ hợp và bộ giải ràng buộc SMT (Satisfiability Modulo Theories) trong [48]. Mục đích kiểm thử có thể được sử dụng để cắt mơ hình ra thành các phần kiểm thử được quan tâm. Microsoft sử dụng công cụ này trong rất nhiều dự án phát triển của mình, và được đánh giá là một cơng cụ mạnh trong q trình kiểm thử dựa trên mơ hình.
Agedis [52]: là một cơng cụ kiểm thử dựa trên mơ hình. Cơng cụ này là sản phẩm của dự án Agedis được tài trợ bởi Ủy ban Châu âu. Agedis cho phép đặc tả mơ hình, tạo các ca kiểm thử, thực hiện các ca kiểm thử và các chức năng khác [51]. Ba loại thông tin đầu vào của công cụ này nhằm đặc tả hệ thống cần kiểm thử gồm: mô hình hành vi của hệ thống, các định hướng về việc thực hiện các ca kiểm thử nhằm mơ tả quy trình kiểm thử cho hệ thống và các định hướng cho việc sinh các ca kiểm thử nhằm mô tả các chiến lược cho mục tiêu này.
Hành vi của hệ thống cần kiểm thử và các định hướng về việc thực hiện các ca kiểm thử được đặc tả bằng các biểu đồ UML (biểu đồ lớp, biểu đồ trạng thái và biểu đồ đối tượng). Các định hướng cho việc sinh các ca kiểm thử được đặc tả bằng XML. Agedis đã được sử dụng cho nhiều dự án trong thực tế. Nó được đánh giá là một công cụ tốt cho kiểm thử dựa trên mơ hình.
UniTesK [14]: là một kiến trúc tổng quan cho việc sinh kiểm thử cho hai phiên bản riêng biệt: JavaTesK cho Java và CTesK cho các chương trình C và C++. Công cụ sinh kiểm thử UniTesK làm việc dựa trên các đặc tả. Nó yêu cầu các thể hiện để liên kết đặc tả với thực thi được đưa ra và giữ hai hệ thống độc lập đồng bộ trong quá trình thực thi kiểm thử. UniTesK duyệt qua tất cả các trạng thái của đặc tả giới hạn bởi một tiêu chuẩn bao phủ bất kỳ. Tiêu chuẩn bao phủ này có thể được miêu tả bởi một tập các vị từ, các giá trị được tính tốn dựa trên trạng thái của hệ thống, hoạt động hiện tại và tất cả các tham số của nó. Như với tất cả các phương pháp và công cụ khác UniTesK, sử dụng các đặc tả như các đầu vào kiểm thử. UniTesK và một số công cụ liên quan đến Java và C được phát triển để sử dụng kiểm thử phần mềm trong thực tiễn.
Conformiq Qtronic [55]: là một công cụ kiểm thử dựa trên mơ hình cho phép kiểm thử tự động các hệ thống nhúng và các hệ thống giao dịch điện tử. Các chức năng chính của kỹ thuật kiểm thử dựa trên mơ hình đều được hỗ trợ
bởi cơng cụ này. Mơ hình trong công cụ này được đặc tả bằng biểu đồ trạng thái UML và hỗ trợ các ngôn ngữ phổ biến như C, C++, C# và Java. Khi một biểu đồ trạng thái UML đặc tả hành vi của hệ thống cần kiểm thử được cung cấp, công cụ này tiến hành phân tích và sinh ra tập các ca kiểm thử. Điều đặc biệt ở cơng cụ này là có thể sinh các ca kiểm thử từ các hành vi không đơn định. Để thực hiện các ca kiểm thử, người kiểm thử cần định nghĩa các kịch bản cho phép chuyển đổi các ca kiểm thử thành các định dạng thực hiện trên hệ thống cần kiểm thử.
2.7 Tổng kết
Chương 2 của luận án đã trình bày các kiến thức nền tảng về các phương pháp sinh tự động dữ liệu kiểm thử, kiểm thử dựa trên mơ hình và các cơng cụ sinh dữ liệu kiểm thử, cũng như các độ bao phủ của chúng. Những nghiên cứu này chính là cơ sở cho các nghiên cứu về sinh tự động dữ liệu kiểm thử từ các biểu đồ UML. Theo quan điểm của tác giả, ngoài việc sinh tự động dữ liệu kiểm thử từ mã nguồn chương trình và thực thi kiểm thử tự động được phát triển rộng rãi thì các nghiên cứu phương pháp sinh tự động dữ liệu kiểm thử từ các biểu đồ UML là khá thực tế. Vì vậy, luận án đi vào các nghiên cứu về các đặc điểm của các biểu đồ UML và việc sinh tự động dữ liệu kiểm thử từ đó. Các hướng nghiên cứu được tóm tắt ngắn gọn như sau:
Nghiên cứu giải quyết với các toán tử, các đặc trưng của các biểu đồ UML để sinh dữ liệu kiểm thử tự động.
Khi sinh dữ liệu và kịch bản kiểm thử tự động với mục đích giảm số lượng, tăng độ bao phủ và tránh bùng nổ số lượng các kịch bản kiểm thử sinh ra, đặc biệt là trong các ứng dụng tương tranh, kiểm thử với vòng lặp, trường hợp khóa chết và đồng bộ.
Với hệ các ràng buộc từ các biểu đồ UML, xét phương pháp sinh và thực thi dữ liệu kiểm thử với biến có cấu trúc dữ liệu động, các ràng buộc chuỗi.
Nghiên cứu và áp dụng về các tiêu chuẩn bao phủ khác nhau phù hợp với từng loại biểu đồ UML và các tiêu chuẩn bao phủ dữ liệu, đo khả năng tìm lỗi của các kịch bản kiểm thử được sinh ra.
Chương 3
SINH DỮ LIỆU KIỂM THỬ CHO KIỂU DỮ LIỆU SỐ VÀ CẤU
TRÚC ĐỘNG
Chương này trình bày một phương pháp cải tiến việc sinh tự động dữ liệu kiểm thử từ các biểu đồ tuần tự UML 2.0 và các ràng buộc OCL trong biểu đồ lớp. Phương pháp cải tiến đưa ra quá trình sinh dữ liệu kiểm thử tự động với các ràng buộc kiểu dữ liệu số và cấu trúc động. Hơn nữa, phương pháp đề xuất áp dụng cho tất cả mười hai loại toán tử, các trường hợp lồng nhau trong biểu đồ tuần tự UML 2.0. Thực nghiệm chỉ ra các kịch bản kiểm thử được sinh ra có độ bao phủ tốt hơn so với các phương pháp kiểm thử hiện tại và có thể phát hiện các lỗi trong các hệ thống phần mềm.
3.1 Giới thiệu
Trong quá trình phát triển các dự án phần mềm, việc áp dụng kiểm thử dựa trên mơ hình nói chung và kiểm thử từ các biểu đồ UML nói riêng làm tăng khả năng tìm lỗi, giảm chi phí và thời gian phát triển so với tiến trình thủ công [32, 92, 103]. Trong giai đoạn kiểm thử việc thiết kế kịch bản và dữ liệu kiểm thử đóng vai trị quyết định chủ yếu khả năng tìm lỗi chứ khơng phải việc thực thi chúng tự động. Bài toán đặt ra là làm thế nào sinh tự động dữ liệu kiểm thử từ các biểu đồ tuần tự UML 2.0 và các ràng buộc OCL để các kịch bản kiểm thử có độ bao phủ tốt, chọn tiêu chuẩn bao phủ phù hợp để có thể kiểm sốt được số lượng kịch bản kiểm thử được sinh ra. Với mục đích giải quyết bài toán đối với việc xử lý các đặc điểm, các tốn tử của biểu đồ tuần tự UML 2.0 và tìm dữ liệu kiểm thử thỏa mãn các ràng buộc mà biến có các kiểu dữ liệu khác
nhau. Sau đó, các kịch bản và dữ liệu kiểm thử được sinh ra để có thể chuyển đổi thực thi trong các hệ thống thực.
Hiện nay, có rất nhiều phương pháp nghiên cứu về việc sinh các kịch bản và dữ liệu kiểm thử tự động từ các biểu đồ UML [72, 30, 65, 36] và [97, 84]. Hướng tiếp cận trong [36] chưa đưa ra việc xử lý lồng nhau của các toán tử trong biểu đồ tuần tự UML. Phương pháp trong cách tiếp cận [72] sinh dữ liệu kiểm thử từ biểu đồ tuần tự UML giải quyết với năm loại toán tử: alt, opt, break, parallel, loop và thuật toán sinh dữ liệu kiểm thử chủ yếu giải quyết với kiểu dữ liệu số. Hơn nữa, trong các cách tiếp cận của các nhóm tác giả [65, 97, 84] đều chuyển sang một đồ thị trung gian với thơng tin từ biểu đồ UML, sau đó duyệt đồ thị để chọn các vị từ (là các biểu thức logic lựa chọn các nhánh trong các toán tử – predicates). Các phương pháp đó đều áp dụng kỹ thuật hàm nhỏ nhất cho các vị từ trên các đường dẫn kiểm thử trong việc sinh dữ liệu kiểm thử. Phương pháp của nhóm tác giả Trung Dinh–Trong và các đồng sự trong [30] thực hiện việc chuyển đổi các biểu đồ UML sang đồ thị tham số biến với thông tin đầy đủ về các ràng buộc theo từng đường dẫn sinh ra. Nghiên cứu này chuyển đổi ràng buộc thành đặc tả Alloy và sử dụng cơng cụ phân tích Alloy để sinh ra dữ liệu kiểm thử. Phương pháp này có các hạn chế trong phân tích tốn tử của biểu đồ tuần tự UML, hạn chế đối với giải quyết các kiểu dữ liệu trong các ràng buộc của đặc tả Alloy và chưa xử lý hết ba giá trị logic (true, false, undefined) trong đặc trưng của OCL.
Như vậy, trong hướng nghiên cứu các phương pháp sinh dữ liệu kiểm thử tự động từ biểu đồ tuần tự UML, một số hướng không giải quyết triệt để tất cả các toán tử và các trường hợp lồng nhau trong các biểu đồ UML đó. Thơng tin của mơ hình trung gian được chuyển từ biểu đồ tuần tự không đầy đủ từ các biểu đồ gốc. Các phương pháp giải các ràng buộc trên các kịch bản đó cũng thường chỉ giải trong trường hợp chung, không chú ý giải trong các trường hợp đặc biệt với biến cấu trúc động (kiểu dữ liệu cấu trúc động bao gồm thành phần kiểu dữ liệu con trỏ và các thành phần kiểu cấu trúc, có thể là các kiểu dữ liệu cơ bản). Việc sinh dữ liệu kiểm thử đối với biến con trỏ từ các biểu đồ UML và thực thi các đoạn mã kiểm thử tự động là vấn đề mà theo hiểu biết của tác giả chưa thấy nghiên cứu nào đưa ra. Việc xem xét độ bao phủ, khả năng tìm lỗi của các kịch bản kiểm thử sinh ra cũng gặp nhiều thách thức.
Nghiên cứu này đề xuất phương pháp sinh các dữ liệu kiểm thử tự động từ các biểu đồ tuần tự UML 2.0 và các ràng buộc OCL với biến là kiểu dữ liệu số và cấu trúc động. Phương pháp này áp dụng cho tất cả mười hai toán tử, các trường hợp lồng nhau trong biểu đồ tuần tự UML 2.0. Ngoài việc đạt được độ bao phủ dịng thơng điệp và điều kiện mà còn sinh ra dữ liệu kiểm thử làm tăng độ bao phủ trong các kịch bản kiểm thử. Tác giả cải tiến phương pháp biến thay thế đối với các vị từ để sinh dữ liệu kiểm thử. Hơn nữa, luận án phát triển công cụ sử dụng phương pháp đề xuất, các thực nghiệm được áp dụng và so sánh với các phương pháp hiện tại.
3.2 Những nghiên cứu liên quan
Hiện nay, có nhiều phương pháp theo hướng tiếp cận của bài toán đưa ra của các tác giả khác nhau cùng nghiên cứu về việc sinh tự động các kịch bản và dữ liệu kiểm thử tự động từ các biểu đồ UML. Ta có thể liệt kê các phương pháp sinh kiểm thử tự động từ các biểu đồ UML của các nhóm tác giả được đề cập trong [97, 84]. Nghiên cứu đề xuất trong [97, 84], các tác giả đã xây dựng phương pháp chuyển đổi từ biểu đồ trạng thái [97] hay biểu đồ cộng tác [84] sang một đồ thị hoặc cây trung gian. Cả hai phương pháp này đều duyệt đồ thị và cây trung gian theo thứ tự trên xuống để chọn các vị từ điều kiện. Sau đó, phương pháp của các nhóm tác giả này áp dụng kỹ thuật hàm nhỏ nhất để sinh dữ liệu kiểm thử. Các cách tiếp cận đều sử dụng các biểu thức tại các vùng biên trong việc sinh dữ liệu kiểm thử để đạt được tiêu chuẩn bao phủ biên, vì vậy số lượng các ca kiểm thử sinh ra có thể giảm. Tuy nhiên, trong phương pháp sinh dữ liệu kiểm thử việc xét các vị từ chưa xét đến biến có kiểu dữ liệu khác nhau chẳng hạn như kiểu cấu trúc động. Hơn nữa, hai phương pháp sinh ra các kịch bản kiểm thử tự động trên đều từ hai biểu đồ khác nhau là: biểu đồ trạng thái và biểu đồ cộng tác. Vì biểu đồ tuần tự đặc tả chi tiết hơn và giàu hành vi hơn so với các biểu đồ khác nên tác giả nghiên cứu các phương pháp sinh kịch bản kiểm thử từ biểu đồ tuần tự UML và kết hợp với các ràng buộc từ biểu đồ lớp để sinh ra dữ liệu kiểm thử.
Một hướng tiếp cận khác là việc sử dụng kiểm chứng mơ hình (model checking) và các biểu đồ hoạt động được hỗ trợ của cách tiếp cận được đưa ra