Kết quả thực nghiệm so sánh phương pháp đề xuất với phương

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 98 - 125)

Loại lỗi Số lỗi gieo Phương pháp trong [30] Phương pháp đề xuất

Số lỗi bởi bao phủ điều kiện Số lỗi bởi bao phủ thông điệp Số lỗi bởi bao phủ điều kiện Số lỗi bởi bao phủ thông điệp MM 5 5 5 5 5 FOM 5 4 4 4 4 SCS 2 2 2 2 2 BCS 1 0 0 1 1 FM 5 5 5 5 5 FP 5 4 4 4 5 MBA 5 5 5 5 5 FC 4 3 1 4 3 FAM 4 2 2 4 3 WIT 2 2 2 2 2 WRP 1 0 0 1 1 FOP 3 3 2 3 3 Tổng 42 35 32 40 39

biểu đồ tuần tự và biểu đồ lớp được chỉ rõ các ràng buộc mà biến là các biến số và cấu trúc động.

ˆ Tính đúng đắn của các phương pháp đề xuất đã được kiểm chứng dựa trên cơ sở thực nghiệm với một số hệ thống điển hình. Với mỗi hệ thống áp dụng, luận án đã sử dụng phương pháp song mô phỏng để chạy từng bước của thuật toán và so sánh kết quả đạt được với kết quả mong muốn. Với các chức năng được áp dụng trong công cụ cài đặt hiện nay, các kết quả thu được từ q trình song mơ phỏng đều chính xác. Tác giả đang nghiên cứu các giải pháp để chứng minh tính đúng đắn của phương pháp đề xuất về mặt lý thuyết nhưng đây là vấn đề khó.

ˆ Khả năng áp dụng cho dự án thực tế: độ phức tạp trong các thuật toán chuyển đổi CFG lớn nhất là độ phức tạp đa thức (phụ thuộc vào số lượng thông điệp, số toán hạng, số toán tử và số lượng biến trong một thơng điệp); và độ phức tạp trong các thuật tốn sinh tự động dữ liệu kiểm thử là độ phức tạp hàm mũ (phụ thuộc vào số lượng biến trong ràng buộc, số điểm di chuyển từ điểm ban đầu đến điểm tối ưu của hàm vị từ). 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ử thực tế khơng thể lên tới hàng trăm. Hơn nữa, trong các ràng buộc của các biểu đồ tuần tự UML và biểu đồ lớp thực tế thì 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 thuật tốn đề xuất hồn tồn có thể khả thi cho các phần mềm trong thực tế.

3.5 Tổng kết

Chương 3 đã đề xuất một phương pháp tự động sinh dữ liệu kiểm thử từ biểu đồ tuần tự UML 2.0 và các ràng buộc OCL của biểu đồ lớp. Biểu đồ tuần tự UML 2.0 áp dụng cho tất cả mười hai tốn tử, có cấu trúc phức tạp, các khối lồng ghép được phân tích và chuyển đổi về CFG tương ứng. So với nghiên cứu trong [72], điểm mới của phương pháp đề xuất phát triển thêm cho các toán tử weak sequencing, strict, critical, ignore, consider, assert và negative và cải tiến đối với toán tử parallel. Các kết quả thực nghiệm chỉ ra rằng phương pháp đề xuất sinh các dữ liệu và kịch bản kiểm thử có độ bao phủ và có 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. Các dữ liệu và kịch bản kiểm thử được sinh ra có thể chuyển thủ cơng thành các đoạn mã kiểm thử và thực thi kiểm thử tự động dựa trên các công cụ kiểm thử trong các hệ thống thực. Hơn nữa, so với nghiên cứu trong [30, 97] phương pháp sinh tự động dữ liệu kiểm thử trong các kịch bản kiểm thử không chỉ được áp dụng cho biến với các ràng buộc số mà còn áp dụng cho kiểu dữ liệu cấu trúc động. Với giải pháp này, một số vấn đề khó áp dụng các phương pháp kiểm thử dựa trên mơ hình do thiếu các phương pháp thiết kế kiểm thử được giải quyết.

Các kết quả trên đã được tác giả công bố trong bài báo “Phương pháp sinh các ca kiểm thử tự động từ các mơ hình thiết kế UML và ngơn ngữ ràng buộc đối tượng OCL”, tại Chuyên san các cơng trình Nghiên cứu phát triển và ứng dụng công nghệ thông tin và truyền thông (2014); và “Automated Testing for Java Programs with Test Cases Generation from Sequence Diagrams and Object Constraint Language” trong Hội thảo APLAS (2016) “The 14th Asian Symposium on Programming Languages and Systems”.

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. Các hệ thống thực nghiệm còn đơn giản, chưa thể hiện được sự phức tạp trong các

thiết kế thực tế. Khi thực hiện thiết kế kiểm thử tự động ở giai đoạn đầu trong quá trình phát triển phần mềm thì các kiểm thử viên cũng phải có kiến thức về thiết kế phần mềm, biết sử dụng công cụ để thiết kế các biểu đồ UML. Hơn nữa, thuật toán sinh dữ liệu kiểm thử là hàm tìm kiếm cục bộ, chưa phải tìm kiếm tồn cục. Tính đúng đắn của phương pháp sinh CFG chưa được chứng minh về mặt lý thuyết mà chỉ dựa trên cơ sở thực nghiệm với một số hệ thống điển hình. Tác giả đang nghiên cứu để áp dụng phương pháp này với một số hệ thống thực tế và lớn hơn để chứng minh tính hiệu quả của nó. Trong các nghiên cứu tiếp theo, tác giả sẽ tiến hành chứng minh về mặt lý thuyết tính đúng đắn của phương pháp này. Đồng thời, tiếp tục phát triển sinh các ca kiểm thử từ các loại biểu đồ UML khác hoặc kết hợp các loại biểu đồ khác để các ca kiểm thử có độ bao phủ tốt hơn. Việc sinh ra các kịch bản kiểm thử trong các ứng dụng tương tranh để tránh bùng nổ các ca kiểm thử, hoặc sinh dữ liệu kiểm thử đối với kiểm thử vòng lặp, sinh dữ liệu kiểm thử đối với các ràng buộc chuỗi là các vấn đề sẽ giải quyết trong các chương tiếp theo.

Chương 4

SINH DỮ LIỆU KIỂM THỬ CHO VÒNG LẶP VÀ CÁC ỨNG DỤNG TƯƠNG TRANH

Chương này trình bày phương pháp cải tiến việc sinh dữ liệu kiểm thử từ biểu đồ tuần tự UML 2.0 và biểu đồ lớp với các trường hợp của kiểm thử vịng lặp. Hơn nữa, thuật tốn đề xuất sinh các kịch bản kiểm thử để tránh trường hợp bùng nổ số lượng các kịch bản đối với toán tử song song và tuần tự yếu. Phương pháp cải tiến việc sinh các kịch bản kiểm thử theo các độ bao phủ tương tranh khác nhau, sinh dữ liệu kiểm thử theo độ bao phủ lặp. Một số thực nghiệm chỉ ra khả năng tìm lỗi của các kịch bản và dữ liệu kiểm thử sinh ra tốt hơn so với một số phương pháp hiện tại.

4.1 Giới thiệu

Trong quá trình sinh dữ liệu kiểm thử tự động từ biểu đồ tuần tự UML 2.0 và các ràng buộc trong biểu đồ lớp, gồm nhiều bước khác nhau để giải quyết các toán tử trong biểu đồ, các đặc trưng kiểu dữ liệu của các biến. Chương 3 đã giới thiệu thuật toán chuyển từ biểu đồ tuần tự UML 2.0 và biểu đồ lớp thành CFG. Từ CFG, xây dựng một tập các kịch bản kiểm thử để biểu diễn một tuần tự các hành vi trong hệ thống phần mềm. Trên thực tế, có rất nhiều hệ thống phức tạp, số lượng các kịch bản kiểm thử sinh ra có thể rất lớn. Do đó, một thách thức là làm thế nào để sinh ra các bộ kịch bản kiểm thử có ý nghĩa, có khả năng tìm lỗi tốt. Rõ ràng, phương pháp sinh các kịch bản kiểm thử tự động là thực sự cần thiết, nhưng cách tiếp cận để sinh các kịch bản kiểm thử và dữ liệu kiểm thử tự động đối mặt với một số vấn đề sau:

ˆ Tính tương tranh trong các biểu đồ tuần tự được miêu tả bằng toán tử song song và tuần tự yếu. Các chương trình tương tranh có thể khơng đơn định khi thực hiện cho các đầu ra khác nhau trong khi với cùng một đầu vào trong các lần thực thi khác nhau. Do đó, q trình sinh các kịch bản kiểm thử trong các chương trình tương tranh có những thách thức nhất định mà các chương trình tuần tự khơng có.

ˆ Theo các độ bao phủ tương tranh và các đặc trưng nhánh trong biểu đồ tuần tự thì có thể dẫn đến việc sinh ra một số lượng lớn các kịch bản kiểm thử, nhưng trong số đó có cả các kịch bản khơng khả thi (tương ứng các đường dẫn không khả thi được sinh ra).

ˆ Chưa giải quyết hết các trường hợp trong kiểm thử vòng lặp, ở các cách tiếp cận hiện tại khi sinh dữ liệu kiểm thử khơng chú ý giải quyết với vịng lặp và các độ bao phủ lặp khác nhau.

Chương này của luận án đề xuất để giải quyết các vấn đề trên. Phương pháp cải tiến sinh các kịch bản kiểm thử từ biểu đồ tuần tự UML 2.0 và các ràng buộc theo các tiêu chuẩn bao phủ tương tranh. Ưu điểm của phương pháp này là sử dụng thuật toán chọn lọc các kịch bản kiểm thử khả thi được sinh ra, tránh được việc bùng nổ số lượng kịch bản kiểm thử của toán tử song song và tuần tự yếu. Dữ liệu kiểm thử cũng được đưa ra từ việc giải quyết các ràng buộc bởi việc sử dụng các vị từ và giảm miền của các biến từng bước một. Vì vậy, phương pháp sinh ra dữ liệu kiểm thử trong các trường hợp của kiểm thử vịng lặp. Do đó, phương pháp giúp việc tìm lỗi trong kiểm thử các vịng lặp và các lỗi tương tranh trong hệ thống. Luận án phát triển công cụ để cài đặt phương pháp đề xuất và sử dụng độ đo đột biến để chứng minh khả năng tìm lỗi của các kịch bản kiểm thử được sinh ra từ phương pháp này. Một vài thực nghiệm đưa ra để so sánh hiệu quả của phương pháp đề xuất với một số phương pháp hiện tại.

4.2 Những nghiên cứu liên quan

Phần này đề cập đến nghiên cứu của các tác giả khác, được luận án áp dụng để đưa ra phương pháp sinh dữ liệu kiểm thử tự động từ các biểu đồ UML với kiểm thử vòng lặp và trong các ứng dụng tương tranh.

Có rất nhiều nghiên cứu được đưa ra để giải quyết vấn đề trên. Tuy nhiên, luận án xét các hướng tiếp cận trong việc giải quyết sinh kịch bản kiểm thử tự động trong các ứng dụng tương tranh, giải quyết trong các trường hợp khóa chết, đồng bộ và bùng nổ các kịch bản kiểm thử sinh ra trong các ứng dụng đó. Các hướng nghiên cứu về sinh dữ liệu kiểm thử tự động trong trường hợp kiểm thử vịng lặp (tốn tử loop của biểu đồ tuần tự) cũng là vấn đề gặp phải nhiều khó khăn và thách thức.

Sinh các kịch bản kiểm thử trong các ứng dụng tương tranh: Nghiên cứu được đề xuất trong [58] đã đưa ra một phương pháp để sinh các kịch bản kiểm thử từ biểu đồ tuần tự UML 2.0. Phương pháp đó có thể biểu diễn các kịch bản phức tạp, sử dụng các toán tử lồng nhau. Bằng việc áp dụng các quy tắc ghép, đầu tiên chuyển từ biểu đồ tuần tự sang một biểu diễn trung gian (gọi là đồ thị phức hợp tương tranh – Concurrent Composite Graph) để biểu diễn các kịch bản khác nhau và dịng điều khiển của chúng. Sau đó, duyệt đồ thị phức hợp tương tranh bằng cách sử dụng thuật tốn tìm kiếm theo chiều sâu và thuật tốn tìm kiếm theo chiều rộng theo các tiêu chuẩn đường tuần tự thông điệp để sinh các kịch bản kiểm thử. Các kịch bản kiểm thử giúp trong việc phát hiện các loại lỗi như lỗi tương tác giữa các đối tượng (interaction fault), lỗi sai tuần tự kịch bản (scenario fault) và lỗi thao tác (operational fault). Tuy nhiên, cách tiếp cận này chưa cài đặt thực thi phương pháp đó và chưa đưa ra các thực nghiệm chứng minh sự hiệu quả của phương pháp này. Trong các kịch bản kiểm thử chưa đưa ra phương pháp sinh các dữ liệu kiểm thử tương ứng.

Nhóm tác giả Sun và các đồng sự trong [93, 95] đưa ra cách tiếp cận dựa trên chuyển đổi để sinh ra các kịch bản kiểm thử hướng kịch bản từ biểu đồ hoạt động UML. Cách tiếp cận này bao gồm ba bước cơ bản: đầu tiên từ biểu đồ hoạt động UML được chuyển vào một biểu diễn trung gian, gọi là cây nhị phân AND và OR mở rộng (Binary Extended AND OR Tree– BET) thông qua quy tắc chuyển đổi. Các quy tắc chuyển đổi được áp dụng cho các loại nút khác nhau (Fork, Join, Branch, Merge). Sau đó, duyệt cây nhị phân bằng cách sử dụng thuật tốn tìm kiếm theo chiều sâu để sinh ra một tập các kịch bản kiểm thử. Phương pháp đưa ra đã được cài đặt thực thi, các kịch bản kiểm thử sinh ra được chứng minh độ đo đột biến của các kịch bản đó cao hơn so với cách tiếp cận ngẫu nhiên. Tuy nhiên, công cụ cài đặt sử dụng việc sinh dữ liệu kiểm thử

ngẫu nhiên, vì vậy khơng đưa ra độ bao phủ của dữ liệu được sinh ra. Chưa xét trường hợp khóa chết và vấn đề bùng nổ các kịch bản kiểm thử được sinh ra.

Nghiên cứu được đề xuất trong [59] đã đưa ra phương pháp sinh kịch bản kiểm thử từ tổ hợp gồm biểu đồ tuần tự và biểu đồ hoạt động UML. Trong cách tiếp cận, biểu đồ hoạt động được chuyển đổi thành biểu đồ trung gian gọi là đồ thị hoạt động. Sau khi tuần tự kiểm thử được sinh ra từ đồ thị hoạt động bởi việc áp dụng tiêu chuẩn bao phủ đường. Biểu đồ tuần tự cũng được chuyển đổi thành đồ thị tuần tự và tuần tự kiểm thử được sinh ra bởi việc áp dụng tiêu chuẩn bao phủ tất cả các thơng điệp. Nhóm tác giả xây dựng đồ thị tuần tự hoạt động (Sequence Activity Graph – SAG), là sự kết hợp của đồ thị hoạt động và đồ thị tuần tự. Cuối cùng, từ đồ thị này để sinh ra các kịch bản kiểm thử. Các kịch bản kiểm thử được sinh ra cho độ bao phủ tốt hơn và khả năng tìm lỗi cao hơn khi so sánh với các kịch bản kiểm thử sinh ra từ các biểu đồ đơn. Tuy nhiên, cách tiếp cận chưa cài đặt thực thi phương pháp này cũng như chưa sinh dữ liệu kiểm thử trong từng kịch bản kiểm thử, chưa xét kiểm thử đối với vòng lặp và việc thực thi tự động các kịch bản kiểm thử trên hệ thống thực.

Phương pháp được đưa ra trong [89] sử dụng thuật tốn tìm kiếm hàng đợi đồng thời (Concurrent Queue Search – CQS) cho việc sinh các kịch bản kiểm thử từ biểu đồ tuần tự và biểu đồ hoạt động trong các trường hợp tương tranh. Các quy tắc chuyển từ biểu đồ tuần tự thành biểu đồ hoạt động được thực thi trực tiếp. Những quy tắc này đưa ra luồng tuần tự cũng như các luồng điều khiển tương tranh trong biểu đồ tuần tự. Các kịch bản kiểm thử sinh ra biểu diễn tính tương tranh của hệ thống và có thể bao phủ các lỗi đồng bộ và khóa chết. Tuy nhiên, nghiên cứu này cũng chưa đưa ra đầy đủ các trường hợp trong kiểm thử vòng lặp và các độ bao phủ tương tranh khác nhau và cũng không đề cập đến việc sinh ra dữ liệu kiểm thử trong các kịch bản kiểm thử đó.

Sinh dữ liệu kiểm thử trong kiểm thử vịng lặp:

Một trong những vấn đề khó khăn và tốn kém nhất của kiểm thử phần mềm là sinh dữ liệu kiểm thử, công việc thường được thực hiện thủ công trong các công ty phần mềm. Sinh dữ liệu kiểm thử là quá trình tạo ra các giá trị đầu vào thỏa mãn các tiêu chuẩn kiểm thử.

Các nghiên cứu về việc sinh dữ liệu kiểm thử dựa trên đặc tả trong các ràng buộc của các miền đầu vào từ các biểu đồ UML được tập trung nghiên cứu.

a:A b:B loop(0,n) [c] m1() B1 D1 [c] [!c]

Hình 4.1: Tốn tử lặp chuyển sang CFG.

Phương pháp được đề xuất trong [72] sử dụng phương pháp giảm miền động nhưng chưa giải quyết việc sinh dữ liệu kiểm thử đối với các trường hợp lặp khác nhau trong tốn tử loop. Từ Hình 4.1, biểu đồ tuần tự UML (có tốn tử loop) chuyển sang đồ thị tuần tự, việc sinh dữ liệu kiểm thử chỉ giải các ràng buộc trong trường hợp vòng lặp thực thi một lần và bỏ qua các trường hợp khác. Đối với toán tử song song, trong phương pháp chuyển đổi sang CFG thì mỗi tốn hạng trong tốn tử đó tương ứng với một nút (trong Hình 4.2, thơng điệp m1

của toán hạng thứ nhất chuyển đổi tương ứng nút B1 và tốn hạng thứ hai có

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 98 - 125)