Kiến trúc của SeqString

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 153 - 175)

luận án cải tiến trong mô đun strTheory. Các ràng buộc bao gồm ràng buộc số, ràng buộc chuỗi và các biểu thức của biến tại các giá trị biên của ràng buộc. Nếu đầu ra của bộ giải Z3–str là SAT, một mơ hình thỏa mãn được đưa ra. Dữ liệu kiểm thử của từng kịch bản được lấy từ mơ hình thỏa mãn trên. Như vậy, dữ liệu kiểm thử sẽ thỏa mãn tiêu chuẩn bao phủ biên. Đầu ra của cơng cụ chính là các kịch bản và dữ liệu kiểm thử của hệ thống cần kiểm thử.

5.4.2 Kết quả và đánh giá

Các thực nghiệm sau được xây dựng để đánh giá việc giải các ràng buộc chuỗi và tính hiệu quả của cơng cụ đưa ra. Trong thực nghiệm đầu tiên, ba ứng dụng có các chức năng với các ràng buộc chuỗi và các toán tử liên quan. Thực nghiệm đưa ra để so sánh phần trăm tìm lỗi của các hệ thống khi sử dụng phương pháp cải tiến và sử dụng phương pháp sinh dữ liệu kiểm thử ngẫu nhiên. Trong thực nghiệm thứ hai so sánh việc sinh dữ liệu kiểm thử của các ràng buộc chuỗi từ các biểu đồ UML của phương pháp đề xuất với phương pháp đưa ra của nhóm tác giả Shoichiro và các đồng sự trong [39]. Tất cả các thực nghiệm được chạy trên Intel Core i3- 6100U CPU 2.30 GHz với RAM 4 GB.

So sánh khả năng tìm lỗi của các kịch bản kiểm thử sinh ra:Trong các chức năng của ba ứng dụng trên, giả sử lỗi được đưa vào các chức năng trên tại các điểm biên của dữ liệu kiểm thử. Trong chức năng kiểm tra thơng tin người dùng đăng kí (checking information of user registration) có ba biến chuỗi và hai tốn tử quan hệ; chức năng đặt đơn hàng (business ordering) có năm biến chuỗi và ba tốn tử quan hệ; chức năng đăng kí bảo hiểm (insurrance registration) có bốn biến chuỗi và khơng có tốn tử quan hệ. Từ biểu đồ tuần

Bảng 5.8: So sánh khả năng tìm lỗi của các chức năng trong các ứng dụng

Ứng dụng

Miêu tả Đầu vào Lỗi tìm được

phương pháp đưa ra (%) Lỗi tìm được của kiểm thử ngẫu nhiên (%) A Checking informa- tion of user regis- tration

3(strings) 100 42.5

B Business ordering 5(strings) 100 36.5 C Insurance regis-

tration

4(strings) 90 35.6

tự và biểu đồ lớp liên quan của các chức năng ứng dụng, công cụ được sử dụng để sinh các kịch bản kiểm thử. Thực nghiệm đưa ra để so sánh khả năng tìm lỗi của cùng một kịch bản kiểm thử nhưng dữ liệu kiểm thử trong kịch bản đó bởi phương pháp đề xuất và phương pháp sinh dữ liệu kiểm thử ngẫu nhiên. Với phương pháp cải tiến, cột thứ tư trong Bảng 5.8 được đưa ra là phần trăm tìm lỗi trong các kịch bản kiểm thử trên tổng số lỗi được đưa vào trong các chức năng đó. Trong cột thứ năm là phần trăm lỗi của cùng các kịch bản trên dữ liệu kiểm thử được sinh theo phương pháp kiểm thử ngẫu nhiên. Từ Bảng 5.8, với ứng dụng C thì phần trăm tìm lỗi chỉ đạt 90% vì khơng có tốn tử quan hệ nên khơng có biểu thức tại vùng biên của dữ liệu, do đó dữ liệu kiểm thử không đạt độ bao phủ biên.

Như vậy, khả năng tìm lỗi của các kịch bản kiểm thử theo phương pháp đề xuất tốt hơn theo phương pháp kiểm thử ngẫu nhiên trong hầu hết các trường hợp. Trong thực nghiệm, các chức năng có chọn các đặc trưng cải tiến trong phương pháp đề xuất nên dù chức năng lớn hay nhỏ có đặc trưng đó thì đều có kết quả như nhau. Vì vậy, các thực nghiệm khơng nhất thiết phải chọn các chức năng lớn.

So sánh việc giải các ràng buộc chuỗi từ các biểu đồ UML với phương pháp trong [39]: luận án sử dụng dữ liệu thực nghiệm trong [39], bổ sung các ràng buộc bao gồm các toán tử chuỗi đã được tiền xử lý. Thực nghiệm với các biểu đồ UML 2.0 và các ràng buộc giống nhau, sau đó so sánh việc sinh dữ liệu kiểm thử và thời gian thực hiện trong hai phương pháp. Trong [39] sinh dữ liệu kiểm thử với các ràng buộc chuỗi trong các biểu đồ lớp. Thực nghiệm trong [39] thực thi với các ứng dụng web, các ràng buộc chuỗi trong biểu đồ lớp

Bảng 5.9: So sánh xử lý các toán tử chuỗi và hiệu năng của SeqString với phương pháp của nhóm Tác giả Shoichiro [39]

Tốn tử Đầu vào Giải tốn tử chính xác? Thời gian(s)

Shoichiro SeqString Shoichiro SeqString

concat 8 x X 0.117 0.035 indexOf 12 X X 0.292 0.055 charAt 12 X X 0.142 0.041 match 13 x X 0.108 0.036 replace 15 X X 0.152 0.045 substring- charAt 10 X X 0.196 0.045 split - startsWith 9 x X 0.245 0.061 lastIndexOf 12 X X 0.205 0.427 charAt- replace 10 x X 0.172 0.038 replaceAll 11 x X - 0.055

được tiền xử lý, chuyển là đầu vào phù hợp với bộ giải SMT. Giả sử tiến hành thực nghiệm cho các ràng buộc chuỗi như nhau trong các biểu đồ tuần tự và biểu đồ lớp. Sau đó, tiến hành thực thi30lần trên từng trường hợp và lấy trung bình thời gian thực thi của cơng cụ được phát triển và so sánh với [39]. Kết quả được biểu diễn trong Bảng 5.9, từ Bảng 5.9 thấy năm trường hợp mà phương pháp giải một phần khơng chính xác để có giá trị dữ liệu kiểm thử. Bởi vì trong [39] sử dụng bộ giải SMT và tất cả các ràng buộc chuỗi được chuyển sang ràng buộc ngun. Có một trường hợp tại dịng tám thì SeqString thực hiện chậm hơn là do kịch bản kiểm thử có một tập hợp lớn các ràng buộc đơn giản và nhiều toán tử độ dài chuỗi bị xung đột, vì vậy mơ đun lõi quay lui nhiều lần. Phân tích chỉ ra rằng thời gian giải các ràng buộc chuỗi khi sử dụng các quy tắc tiền xử lý cho các tốn tử (charAt, lastindexOf, trim, startsWith và endsWith) thì cơng cụ đưa ra SeqString có thời gian xử lý nhanh hơn trong cùng một kịch bản kiểm thử của một ứng dụng. Trường hợp replaceAll thì phương pháp của nhóm Tác giả Shoichiro khơng sinh dữ liệu kiểm thử vì khơng biết N (số chuỗi cần thay thế). Từ kết quả các thực nghiệm, tác giả có một số kết luận sau:

ˆ Phương pháp đề xuất cùng với kết quả của Chương 3 và Chương 4 giải quyết được khá đầy đủ các đặc trưng của biểu đồ tuần tự UML 2.0 và các kiểu dữ liệu khác nhau trong các ràng buộc của bài toán đưa ra.

ˆ Phương pháp cải tiến giải quyết khá tốt với nhiều toán tử chuỗi trong hầu hết các trường hợp so với phương pháp theo cùng hướng tiếp cận phương pháp của nhóm tác giả Shoichiro trong [39] và phần mở rộng của các toán tử làm tăng hiệu năng khi xử lý với các tốn tử đó.

ˆ Phương pháp sinh ra các kịch bản kiểm thử có độ bao phủ tốt hơn trong nhiều trường hợp so với một số phương pháp hiện tại cùng cách tiếp cận.

ˆ Khả năng áp dụng cho các dự án thực tế: trong thuật toán sinh kịch bản kiểm thử là độ phức tạp đa thức (phụ thuộc vào số đỉnh của đồ thị và số phần tử của hàng đợi là thơng điệp, tốn hạng, tốn tử của biểu đồ tuần tự), tuy nhiên trong các biểu đồ tuần tự UML miêu tả tương ứng với hành vi trong một ca sử dụng, do đó số lượng các thơng điệp, các toán tử trong một biểu đồ thực tế không thể lên tới hàng trăm. Hơn nữa, với việc sinh dữ liệu kiểm thử trong các ràng buộc chuỗi dựa trên Z3–str thì trong thực tế bộ giải Z3–str đã được chứng minh cho việc áp dụng với các dự án thực. Như vậy, với phương pháp đề xuất hồn tồn có thể khả thi cho các phần mềm trong thực tế.

5.5 Tổng kết

Chương 5 của luận án đã trình bày một phương pháp cải tiến việc sinh dữ liệu kiểm thử tự động từ các biểu đồ tuần tự UML 2.0 và biểu đồ lớp với giải các ràng buộc chuỗi. So với nghiên cứu trong [89], thuật toán đề xuất sinh các kịch bản kiểm thử để tránh bùng nổ các đường dẫn kiểm thử trong trường hợp khơng có điểm chia sẻ dữ liệu giữa các luồng song song trong các ứng dụng. Với các kịch bản kiểm thử sinh ra và một tập các ràng buộc chuỗi cùng các biểu thức tại vùng biên của các biến được chuyển đổi thành định dạng đầu vào của bộ giải Z3–str. So sánh với tiếp cận của Z3–str [114], luận án đề xuất quy tắc giảm và phương pháp đệ quy cho toán tử search, replaceAll và mở rộng các quy tắc tiền xử lý cho các toán tử charAt, lastindexOf, trim, startsWith và endsWith. Các kết quả thực nghiệm chỉ ra rằng phương pháp cải tiến có thể giải quyết nhiều tốn tử chuỗi chính xác hơn so với một số phương pháp hiện tại. Hơn nữa, các dữ liệu kiểm thử được sinh ra thỏa mãn độ bao phủ biên nên đa số các lỗi tại các điểm biên dữ liệu đều có thể tìm thấy trong các ứng dụng.

Các kết quả trên đã được tác giả công bố trong bài báo “A Method for Automated Test Cases Generation from UML Models with String Constraints” tại Hội thảo ACIIDS (2017) “The9th Asian Conference on Intelligent Information and Database System” (Kanazawa, Japan).

Tuy nhiên, phương pháp này vẫn còn một số hạn chế cần khắc phục. Thuật tốn sinh kịch bản kiểm thử sẽ khó kiểm sốt theo các tiêu chuẩn bao phủ tương tranh khác nhau. Hơn nữa, việc chuyển đổi tập các ràng buộc chuỗi của các đường dẫn kiểm thử vào bộ giải Z3–Str được thực hiện thủ công. Tác giả đang nghiên cứu để áp dụng chuyển đổi các ràng buộc chuỗi đó có thể thực hiện tự động. Đồng thời, tiếp tục phát triển và mở rộng việc xử lý với các toán tử chuỗi khác nhau mà các ràng buộc chuỗi được đưa ra từ các loại biểu đồ UML khác hoặc kết hợp các loại biểu đồ khác để dữ liệu kiểm thử có độ bao phủ tốt hơn. Tác giả tiếp tục nghiên cứu khả năng tự động hóa các kịch bản và dữ liệu kiểm thử được sinh ra trong các hệ thống thực.

Chương 6 KẾT LUẬN

6.1 Các kết quả đạt được của luận án

Trong quá trình phát triển phần mềm, việc áp dụng kiểm thử dựa trên mơ hình có ý nghĩa quan trọng, giúp giảm giá thành phát triển, tiết kiệm thời gian, công sức, nâng cao chất lượng và tăng độ tin cậy của phần mềm. Vì vậy, luận án đã nghiên cứu và đề xuất một số giải pháp sinh tự động dữ liệu kiểm thử từ các biểu đồ UML 2.0. Cụ thể, luận án tập trung vào các biểu đồ tuần tự UML 2.0 và các ràng buộc trong biểu đồ lớp để giải quyết một số vấn đề trong giai đoạn thiết kế kiểm thử. Luận án đã đạt được các kết quả chính như sau:

Thứ nhất, luận án đề xuất một quy trình sinh các dữ liệu kiểm thử từ 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 đề xuất áp dụng với biểu đồ tuần tự UML 2.0 cho tất cả mười hai tốn tử, có cấu trúc phức tạp và các khối lồng ghép nhau. Quá trình sinh tự động dữ liệu kiểm thử cho các ràng buộc có biến là kiểu dữ liệu số và cấu trúc động. Các kịch bản kiểm thử sinh ra chuyển thủ công thành các đoạn mã kiểm thử và thực hiện tự động dựa trên các công cụ kiểm thử hỗ trợ. Các kết quả thực nghiệm chỉ ra rằng phương pháp đề xuất sinh ra các kịch bản và dữ liệu kiểm thử có độ bao phủ và khả năng tìm lỗi tốt hơn so với một số phương pháp hiện tại.

Thứ hai, luận án đề xuất một phương pháp sinh tự động dữ liệu kiểm thử từ các biểu đồ tuần tự UML 2.0 và biểu đồ lớp trong trường hợp vòng lặp và các ứng dụng tương tranh. Phương pháp sinh ra các kịch bản kiểm thử tránh được sự bùng nổ về số lượng và các lỗi tương tranh của hệ thống có thể được tìm thấy. Hơn nữa, điểm mới của phương pháp này là sinh dữ liệu kiểm thử trong các trường hợp của bao phủ lặp. Phương pháp cũng đề xuất thuật toán sinh các kịch bản kiểm thử theo các tiêu chuẩn bao phủ tương tranh khác nhau

và có thể kiểm thử các lỗi liên quan đến khóa chết và đồng bộ. Thực nghiệm đã đưa ra rằng khả năng tìm lỗi của các kịch bản kiểm thử đó tốt hơn so với một số phương pháp kiểm thử khác trong nhiều trường hợp, chứng tỏ tính hiệu quả và độ tin cậy của phương pháp đề xuất về mặt thực nghiệm.

Thứ ba, luận án đã đưa ra 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à biểu đồ lớp với các ràng buộc chuỗi. Với đầu vào là đồ thị dòng điều khiển (được chuyển đổi từ các biểu đồ tuần tự UML 2.0), thuật toán đề xuất sinh các kịch bản kiểm thử để tránh bùng nổ các đường dẫn kiểm thử trong trường hợp khơng có điểm chia sẻ dữ liệu giữa luồng song song trong các ứng dụng. Với các kịch bản kiểm thử sinh ra và một tập các ràng buộc chuỗi cùng các biểu thức tại vùng biên được chuyển đổi thành định dạng đầu vào của bộ giải Z3–str. So sánh với các tiếp cận của Z3–str, luận án đề xuất quy tắc giảm, phương pháp đệ quy cho toán tử search, replaceAll và mở rộng các quy tắc tiền xử lý cho các toán tử charAt, lastindexOf, trim, startsWith và endsWith. Các kết quả thực nghiệm chỉ ra rằng phương pháp cải tiến có thể giải quyết nhiều tốn tử chuỗi chính xác và hiệu năng tốt hơn trong nhiều trường hợp khi so với một số phương pháp hiện tại. Hơn nữa, các dữ liệu kiểm thử được sinh ra thỏa mãn độ bao phủ biên nên đa số các lỗi tại các điểm biên dữ liệu đều có thể tìm thấy trong các ứng dụng.

Trong các phương pháp đề xuất, độ phức tạp trong thuật toán chuyển đổi đồ thị dòng điều khiển là độ phức tạp đa thức (phụ thuộc vào số lượng thơng điệp, số tốn hạng, số toán tử và số lượng biến trong một thơng điệp). Cịn với thuật toán sinh dữ liệu kiểm thử là độ phức tạp mũ (phụ thuộc số nút quyết định, số đường dẫn của đồ thị dòng điều khiển và số điểm chia trong một ràng buộc). Tuy nhiên, trong phát triển phần mềm hướng đối tượng các biểu đồ tuần tự UML miêu tả tương ứng với hành vi trong một ca sử dụng, do đó số lượng các thơng điệp, các tốn tử trong một biểu đồ thực tế không thể lên tới hàng trăm. Trong các trường hợp thực tế không phải lúc nào tại các ràng buộc cũng đều cần số tối đa các điểm chia và số lượng biến trong một ràng buộc hiếm khi lên đến hàng chục. Do đó, với độ phức tạp của các thuật tốn đề xuất thì hồn tồn có thể khả thi cho các phần mềm trong thực tế. Hơn nữa, với việc sinh dữ liệu kiểm thử trong các ràng buộc chuỗi dựa trên Z3–str thì trong thực tế bộ giải Z3–str đã được chứng minh cho việc áp dụng với các dự án thực. Bằng

việc cải tiến quy tắc giảm, phương pháp đệ quy cho một số tốn tử chuỗi để nâng cao hiệu năng và độ chính xác với xử lý các ràng buộc chuỗi. Như vậy, các phương pháp mà luận án đề xuất hồn tồn có thể khả thi cho các phần mềm trong thực tế.

Như vậy, các đóng góp mà luận án đưa ra đã giải quyết một số vấn đề trong giai đoạn thiết kế kiểm thử từ các biểu đồ UML 2.0, góp một phần giải quyết bài toán lớn về kiểm thử dựa trên mơ hình. Kết quả của luận án có khả năng phát triển và ứng dụng thực tiễn, nhằm giải quyết một số vấn đề về chất lượng và kiểm soát chất lượng phần mềm đang được quan tâm trong các công ty cũng như các tổ chức phát triển phần mềm.

6.2 Hướng nghiên cứu tiếp theo

Trong quá trình nghiên cứu và thực nghiệm, tác giả nhận thấy một số hạn chế và hướng nghiên cứu tiếp theo của luận án. Về thực nghiệm đưa ra trong các chương nói chung cịn đơn giản, chưa thể hiện được sự phức tạp của các thiết

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 153 - 175)