I. Tổng Quan Phương Pháp Kiểm Thử Tự Động Dựa Trên UML 2
Kiểm thử là giai đoạn quan trọng trong phát triển phần mềm. Quá trình kiểm thử gồm sinh kiểm thử và thực thi kiểm thử. Sinh các ca kiểm thử quyết định chất lượng kiểm thử. Đây là bước khó khăn, đặc biệt với hệ thống lớn, phức tạp. Quá trình này tốn thời gian, công sức và chi phí, chiếm 40-60% tổng chi phí phát triển phần mềm. Vì vậy, sinh ca kiểm thử tự động là cần thiết, nhất là với phần mềm lớn. Kiểm thử tự động được xem là giải pháp đảm bảo chất lượng, giảm chi phí và thời gian. Trong đó, kiểm thử dựa trên mô hình là kỹ thuật được sử dụng rộng rãi. Tuy nhiên, để áp dụng phương pháp này, cần mô hình toán học đặc tả chính xác hành vi hệ thống. Các mô hình này thường được biểu diễn bằng máy hữu hạn trạng thái đơn định. Xây dựng mô hình cho phần mềm là công việc khó khăn và tiềm ẩn nhiều lỗi. Thay vào đó, phân tích và xây dựng biểu đồ tuần tự UML là công việc dễ dàng và phổ biến hơn. Do đó, kiểm thử tính đúng đắn cho thiết kế dựa trên mô hình là vấn đề mở và chưa có lời giải thỏa đáng.
1.1. Khái Niệm Cơ Bản về Kiểm Thử Dựa Trên Mô Hình
Trong kiểm thử tự động phần mềm, kiểm thử viên tạo ra các kịch bản kiểm thử bằng cách ghi lại tính năng của phần mềm. Sau đó, kiểm thử viên tiến hành kiểm thử theo kịch bản đã tạo với các tham số khác nhau. Tuy nhiên, việc tạo kịch bản kiểm thử lại được tiến hành thủ công. Hầu hết các công cụ kiểm thử ngày nay đều kiểm thử tự động dựa trên các kịch bản có sẵn, do đó việc tạo kịch bản tốn nhiều công sức của kiểm thử viên và mất rất nhiều thời gian. Để tránh việc sai sót trong quá trình kiểm thử, việc tạo kịch bản phải được xây dựng chu đáo. Thêm vào đó, mỗi khi yêu cầu từ phía người dùng thay đổi thì kịch bản cũng phải thay đổi theo. Vì vậy, việc tạo tự động các kịch bản kiểm thử là thật sự cần thiết.
1.2. Ưu Điểm của Kiểm Thử Tự Động Dựa Trên Mô Hình UML
Hướng tiếp cận ở đây là kiểm thử dựa trên mô hình nhằm khắc phục được các vấn đề về chi phí, thời gian. Kiểm thử dựa trên mô hình là phương pháp kiểm thử nơi mà các ca kiểm thử được sinh ra từ mô hình đặc tả hành vi của hệ thống đang được kiểm thử. Mô hình này được biểu diễn bằng máy hữu hạn trạng thái, ô tô mát, đặc tả đại số, biểu đồ trạng thái bằng UML, v.v.
II. Thách Thức và Giải Pháp trong Kiểm Thử UML 2
Quá trình kiểm thử tự động dựa trên mô hình bắt đầu bằng việc xác định yêu cầu của hệ thống, từ đó xây dựng mô hình dựa vào các yêu cầu và chức năng của hệ thống. Việc xây dựng mô hình còn phải dựa trên các yếu tố dữ liệu đầu vào và đầu ra. Mô hình này được sử dụng để sinh đầu vào cho các ca kiểm thử. Tiếp đến, chúng ta sẽ sinh giá trị đầu ra mong muốn ứng với mỗi bộ đầu vào. Các ca kiểm thử đó được tiến hành chạy và kết quả thu được sẽ được so sánh với kết quả mong đợi. Từ đó quyết định hành động tiếp theo như sửa đổi mô hình hoặc dừng kiểm thử, v.v.
2.1. Các Phương Pháp Sinh Mô Hình Kiểm Thử Phần Mềm
Hiện nay, có nhiều hướng nghiên cứu liên quan đến việc sinh mô hình cho phần mềm đã được đề xuất bởi nhiều tác giả. Một hướng là tập trung vào nghiên cứu các phương pháp sinh mô hình cho phần mềm. Với cách tiếp cận này, ta có thể kể đến các phương pháp sinh mô hình được đề cập trong [19], [20], [21], và [22]. Trong [19], các tác giả đã đặt ngữ cảnh là xây dựng mô hình cho phần mềm được cho dưới dạng một hộp đen và ta có thể thử nghiệm thực thi các hành động trên nó để có thể xây dựng được một tập các chuỗi hành động của phần mềm. Sau đó, tập các chuỗi hành động của phần mềm thu được có thể được coi là một biểu thức chính quy đặc tả hành vi của phần mềm, các tác giả sau đó đã sử dụng thuật toán Thompson để sinh mô hình cho phần mềm được cho bởi biểu thức chính quy đó. Phương pháp này bị giới hạn bởi độ dài tối đa của chuỗi các hành động có thể thử nghiệm trên phần mềm.
2.2. Hạn Chế của Các Phương Pháp Kiểm Thử Truyền Thống
Nghiên cứu trong [20] trình bày một thuật toán gọi là GK-tail mà tự động sinh mô hình cho phần mềm dưới dạng các EFSM (Extended Finite State Machine) từ các chuỗi tương tác của nó. EFSM mô hình hóa sự tương tác giữa các giá trị dữ liệu và phần mềm bằng cách ghi chú lên các cạnh của ô tô mát hữu hạn đó với các điều kiện trên các giá trị dữ liệu. Trong nghiên cứu này, các tác giả đã đề cập một khía cạnh rất quan trọng của phần mềm. Đó là mô hình hóa các lời gọi hàm trong quan hệ với các tham số của. Phương pháp này dựa vào một phần mềm gọi là phần mềm giám sát để có thể sinh ra được các chuỗi tương tác mà được dùng như là đầu vào của nó.
III. Phương Pháp Sinh Đồ Thị Dòng Điều Khiển Từ UML 2
Luận văn này tập trung vào việc chỉ sinh mô hình cho thành phần phần mềm. Bằng cách này, chúng ta tập trung vào việc có được mô hình bằng một cách thực tế hơn như từ biểu đồ tuần tự [23]. Những mô hình này sau đó có thể được dùng như là đầu vào cho các phương pháp khác như kiểm chứng mô hình, kiểm thử dựa trên mô hình. Để giải quyết vấn đề trên, trong luận văn này, tôi nghiên cứu về phương pháp nhằm xây dựng một công cụ hỗ trợ phân tích biểu đồ dòng điều khiển dựa trên biểu đồ tuần tự UML 2.0 và ứng dụng để sinh bộ kiểm thử.
3.1. Chuyển Đổi Biểu Đồ Tuần Tự Sang Đường Kiểm Thử
Phương pháp nghiên cứu gồm hai quá trình chính là chuyển đổi biểu đồ tuần tự về đồ thị dòng điều khiển và từ đồ thị dòng điều khiển sinh bộ kiểm thử. Biểu đồ tuần tự được cung cấp dưới dạng tệp xml sẽ được phân tích để cho ra một đường kiểm thử tương ứng đặc tả hoạt động. Qua quá trình phân tích, dữ liệu từ tệp xml được chuyển đổi thành cấu trúc dữ liệu biểu đồ tuần tự tương ứng. Ứng với mỗi khối trong biểu đồ tuần tự, tiến hành bóc, tách từng khối và dựa vào quan hệ giữa các khối để lồng các khối nhằm sinh ra đồ thị dòng điều khiển.
3.2. Định Dạng Chuẩn Khi Viết Tệp XML Từ Biểu Đồ UML
Kế tiếp, một đường kiểm thử tương ứng được trả về đặc tả chính xác hoạt động của đồ thị dòng điều khiển. Kỹ thuật được sử dụng để xây dựng hệ ràng buộc tương ứng cho tập đường kiểm thử ở đây là thực thi tượng trưng (symbolic execution - SE). Cuối cùng, bằng cách kết hợp kỹ thuật sinh ngẫu nhiên và tận dụng thế mạnh các công cụ giải các hệ ràng buộc (SMT-Solver), hệ ràng buộc được giải để sinh ca kiểm thử. Bộ kiểm thử này sẽ được sử dụng để kiểm tra xem việc lập trình có đúng với thiết kế hay không.
IV. Sinh Bộ Kiểm Thử Tự Động Từ Đồ Thị Dòng Điều Khiển
Phương pháp sinh đồ thị dòng điều khiển từ biểu đồ tuần tự bao gồm tổng quan về đồ thị dòng điều khiển, cách đặc tả biểu đồ tuần tự, phương pháp sinh đồ thị dòng điều khiển được trình bày trong chương 3. Chương 4 trình bày về phương pháp sinh ca kiểm thử từ đồ thị dòng điều khiển bao gồm bước xây dựng hệ ràng buộc và bước tìm nghiệm thỏa mãn hệ ràng buộc dựa trên SMT - Solver.
4.1. Tìm Nghiệm Thỏa Mãn Hệ Ràng Buộc trong Kiểm Thử
Kỹ thuật được sử dụng để xây dựng hệ ràng buộc tương ứng cho tập đường kiểm thử ở đây là thực thi tượng trưng (symbolic execution - SE). Cuối cùng, bằng cách kết hợp kỹ thuật sinh ngẫu nhiên và tận dụng thế mạnh các công cụ giải các hệ ràng buộc (SMT-Solver), hệ ràng buộc được giải để sinh ca kiểm thử. Bộ kiểm thử này sẽ được sử dụng để kiểm tra xem việc lập trình có đúng với thiết kế hay không.
4.2. Giải Hệ Sử Dụng Kỹ Thuật Sinh Ngẫu Nhiên
Một hướng tiếp cận khác là sinh mô hình trong khi thực hiện kiểm chứng mô hình hay trong khi thực hiện kiểm thử dựa trên mô hình [23], [24], và [25]. Trong [23], các tác giả đã sử dụng thuật toán học L* để học đặc tả của một thành phần phần mềm thông qua một biểu thức chính quy để sinh ra mô hình cho thành phần đó. Biểu thức chính quy đó là kết quả của khâu thiết, có thể được sinh ra từ từ biểu đồ tuần tự theo phương pháp được đề cập trong [23]. Tuy phương pháp này sinh được mô hình cho phần mềm, nhưng sử dụng nhiều thời gian và bộ nhớ. Đặc biệt là phương pháp này bị giới hạn bởi độ dài tối đa của một chuỗi hành vi của phần mềm.
4.3. Giải Hệ Sử Dụng SMT Solver trong Kiểm Thử UML
Nghiên cứu [24] đặt vấn đề cho việc kiểm thử hộp đen. Trong nghiên cứu này, nhiều chiến lược được trình bày để kiểm chứng phần mềm từ khi chúng ta chưa có mô hình. Mô hình được sinh ra trong các lần lặp kiểm chứng phần mềm. Nghiên cứu [25] trình bày một phương pháp sinh mô hình thành phần phần mềm trong quá trình thành phần đó tiến hóa. Những mô hình được sinh ra sử dụng các mô hình chưa đúng hiện có dựa vào các kỹ thuật kiểm thử hộp đen và học máy. Tuy nhiên, phương pháp này sinh mô hình cho toàn bộ phần mềm. Với những phần mềm lớn thì phương pháp này có thể dẫn đến sự bùng nổ trạng thái của mô hình.
V. Ứng Dụng Thực Tiễn và Kết Quả Nghiên Cứu Kiểm Thử UML
Với cách tiếp cận này, những mô hình được sinh ra như là một phần của quá trình khác như kiểm thử hộp đen, kiểm chứng mô hình. Luận văn này tập trung vào việc chỉ sinh mô hình cho thành phần phần mềm. Bằng cách này, chúng ta tập trung vào việc có được mô hình bằng một cách thực tế hơn như từ biểu đồ tuần tự [23]. Những mô hình này sau đó có thể được dùng như là đầu vào cho các phương pháp khác như kiểm chứng mô hình, kiểm thử dựa trên mô hình.
5.1. Công Cụ Hỗ Trợ Kiểm Thử Tự Động UML 2.0
Để giải quyết vấn đề trên, trong luận văn này, tôi nghiên cứu về phương pháp nhằm xây dựng một công cụ hỗ trợ phân tích biểu đồ dòng điều khiển dựa trên biểu đồ tuần tự UML 2.0 và ứng dụng để sinh bộ kiểm thử. Phương pháp nghiên cứu gồm hai quá trình chính là chuyển đổi biểu đồ tuần tự về đồ thị dòng điều khiển và từ đồ thị dòng điều khiển sinh bộ kiểm thử.
5.2. Đánh Giá Hiệu Quả của Phương Pháp Kiểm Thử Mới
Biểu đồ tuần tự được cung cấp dưới dạng tệp xml sẽ được phân tích để cho ra một đường kiểm thử tương ứng đặc tả hoạt động. Qua quá trình phân tích, dữ liệu từ tệp xml được chuyển đổi thành cấu trúc dữ liệu biểu đồ tuần tự tương ứng. Ứng với mỗi khối trong biểu đồ tuần tự, tiến hành bóc, tách từng khối và dựa vào quan hệ giữa các khối để lồng các khối nhằm sinh ra đồ thị dòng điều khiển.
VI. Kết Luận và Hướng Phát Triển Kiểm Thử Tự Động UML
Kế tiếp, một đường kiểm thử tương ứng được trả về đặc tả chính xác hoạt động của đồ thị dòng điều khiển. Kỹ thuật được sử dụng để xây dựng hệ ràng buộc tương ứng cho tập đường kiểm thử ở đây là thực thi tượng trưng (symbolic execution - SE). Cuối cùng, bằng cách kết hợp kỹ thuật sinh ngẫu nhiên và tận dụng thế mạnh các công cụ giải các hệ ràng buộc (SMT-Solver), hệ ràng buộc được giải để sinh ca kiểm thử. Bộ kiểm thử này sẽ được sử dụng để kiểm tra xem việc lập trình có đúng với thiết kế hay không.
6.1. Tóm Tắt Các Kết Quả Nghiên Cứu Chính
Phương pháp sinh đồ thị dòng điều khiển từ biểu đồ tuần tự bao gồm tổng quan về đồ thị dòng điều khiển, cách đặc tả biểu đồ tuần tự, phương pháp sinh đồ thị dòng điều khiển được trình bày trong chương 3. Chương 4 trình bày về phương pháp sinh ca kiểm thử từ đồ thị dòng điều khiển bao gồm bước xây dựng hệ ràng buộc và bước tìm nghiệm thỏa mãn hệ ràng buộc dựa trên SMT - Solver.
6.2. Các Hạn Chế và Hướng Nghiên Cứu Tương Lai
Luận văn này tập trung vào việc chỉ sinh mô hình cho thành phần phần mềm. Bằng cách này, chúng ta tập trung vào việc có được mô hình bằng một cách thực tế hơn như từ biểu đồ tuần tự [23]. Những mô hình này sau đó có thể được dùng như là đầu vào cho các phương pháp khác như kiểm chứng mô hình, kiểm thử dựa trên mô hình.