Đăng ký Đăng nhập
Trang chủ 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...

Tài liệu 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

.PDF
175
23
62

Mô tả:

CÁC KỸ THUẬT SINH TỰ ĐỘNG DỮ LIỆU KIỂM THỬ DỰA TRÊN CÁC BIỂU ĐỒ UML VŨ THỊ ĐÀO Tháng 04 năm 2018 LỜI CẢM ƠN Luận án được thực hiện tại Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội, dưới sự hướng dẫn của PGS.TS. Nguyễn Việt Hà. Tôi xin gửi lời cảm ơn chân thành và sâu sắc nhất tới PGS.TS. Nguyễn Việt Hà – Bộ môn Công nghệ phần mềm, Khoa Công nghệ thông tin, Trường Đại học Công nghệ. Người thầy tâm huyết đã tận tình hướng dẫn, động viên khích lệ, dành nhiều thời gian quí báu để định hướng cho tôi trong quá trình tham gia khóa học và hoàn thiện luận án. Tôi xin gửi lời cảm ơn chân thành tới lãnh đạo trường Đại học Công nghệ, lãnh đạo Khoa Công nghệ thông tin, cảm ơn các đồng nghiệp đã tạo điều kiện thuận lợi cho tôi trong quá trình làm luận án. Tôi xin gửi lời cảm ơn chân thành tới các thầy, cô trong Bộ môn Công nghệ phần mềm, Khoa Công nghệ thông tin, Trường Đại học Công nghệ, những người luôn hướng dẫn, định hướng, góp ý cho tôi trong quá trình viết luận án. Cuối cùng, tôi xin gửi lời cảm ơn sâu sắc tới gia đình và bạn bè, những người đã luôn ủng hộ và hỗ trợ tôi về mọi mặt để tôi yên tâm học tập, nghiên cứu, và hoàn thành luận án. i LỜI CAM ĐOAN Tôi xin cam đoan: Bản luận án tốt nghiệp này là công trình nghiên cứu thực sự của cá nhân. Các kết quả được viết chung với các tác giả khác đều được sự đồng ý của các đồng tác giả trước khi đưa vào luận án. Các kết quả nêu trong luận án là trung thực và chưa từng được công bố dưới bất cứ hình thức nào trước khi trình, bảo vệ và công nhận bởi “Hội Đồng đánh giá luận án tốt nghiệp Tiến sĩ Công nghệ Thông Tin”. Một lần nữa, tôi xin khẳng định về sự trung thực của lời cam kết trên. Tác giả: ii MỤC LỤC LỜI CẢM ƠN i LỜI CAM ĐOAN ii MỤC LỤC iii DANH MỤC CÁC THUẬT NGỮ VÀ KÝ HIỆU vii DANH MỤC CÁC BẢNG ix DANH MỤC CÁC HÌNH VẼ xi TÓM TẮT LUẬN ÁN Chương 1 xiii GIỚI THIỆU 1 1.1 Đặt vấn đề . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Phương pháp và nội dung nghiên cứu . . . . . . . . . . . . . . . . 4 1.3 Cấu trúc luận án . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Chương 2 KIẾN THỨC NỀN TẢNG 7 2.1 Các khái niệm cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Kiểm thử dựa trên mô hình . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Các biểu đồ UML và ràng buộc OCL . . . . . . . . . . . . . . . . . 12 2.3.1 Biểu đồ tuần tự UML và các toán tử . . . . . . . . . . . . . 12 2.3.2 Các ràng buộc OCL trong các biểu đồ UML . . . . . . . . 17 2.3.3 Đồ thị dòng điều khiển . . . . . . . . . . . . . . . . . . . . . 18 iii 2.4 2.5 Các độ bao phủ và độ phân tích đột biến trong kiểm thử . . . . . 20 2.4.1 Độ bao phủ tương tranh . . . . . . . . . . . . . . . . . . . . 20 2.4.2 Độ bao phủ trong kiểm thử vòng lặp . . . . . . . . . . . . . 21 2.4.3 Độ phân tích đột biến . . . . . . . . . . . . . . . . . . . . . 22 Tổng quan về sinh dữ liệu kiểm thử tự động . . . . . . . . . . . . . 23 2.5.1 Sinh dữ liệu kiểm thử trong kiểm thử cấu trúc . . . . . . . 24 2.5.2 Sinh dữ liệu kiểm thử trong kiểm thử chức năng . . . . . . 28 2.5.3 Sinh dữ liệu kiểm thử tự động từ các biểu đồ UML . . . . 30 2.6 Các công cụ sinh dữ liệu kiểm thử hiện tại . . . . . . . . . . . . . 31 2.7 Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Chương 3 SINH DỮ LIỆU KIỂM THỬ CHO KIỂU DỮ LIỆU SỐ VÀ CẤU TRÚC ĐỘNG 35 3.1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.2 Những nghiên cứu liên quan . . . . . . . . . . . . . . . . . . . . . . 37 3.3 Phương pháp sinh dữ liệu kiểm thử cho biến kiểu dữ liệu số và cấu trúc động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.4 3.5 3.3.1 Tổng quan về phương pháp đề xuất . . . . . . . . . . . . . 40 3.3.2 Chuyển đổi biểu đồ tuần tự UML thành CFG . . . . . . . 41 3.3.3 Sinh các kịch bản kiểm thử . . . . . . . . . . . . . . . . . . 57 3.3.4 Chọn các vị từ và chuyển thành các hàm vị từ . . . . . . . 60 3.3.5 Hàm vị từ với các ràng buộc OCL . . . . . . . . . . . . . . 60 3.3.6 Sinh dữ liệu kiểm thử từ các hàm vị từ . . . . . . . . . . . 65 Thực nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.4.1 Công cụ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.4.2 Kết quả và đánh giá . . . . . . . . . . . . . . . . . . . . . . 79 Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Chương 4 SINH DỮ LIỆU KIỂM THỬ CHO VÒNG LẶP VÀ iv CÁC ỨNG DỤNG TƯƠNG TRANH 87 4.1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.2 Những nghiên cứu liên quan . . . . . . . . . . . . . . . . . . . . . . 88 4.3 Phương pháp sinh dữ liệu kiểm thử theo các độ bao phủ tương tranh và lặp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.4 4.5 4.3.1 Tổng quan về phương pháp đề xuất . . . . . . . . . . . . . 92 4.3.2 Sinh các kịch bản kiểm thử . . . . . . . . . . . . . . . . . . 93 4.3.3 Sinh dữ liệu kiểm thử . . . . . . . . . . . . . . . . . . . . . 98 Thực nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.4.1 Công cụ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.4.2 Kết quả và đánh giá . . . . . . . . . . . . . . . . . . . . . . 110 Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Chương 5 SINH DỮ LIỆU KIỂM THỬ CHO KIỂU DỮ LIỆU CHUỖI 115 5.1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 5.2 Những nghiên cứu liên quan . . . . . . . . . . . . . . . . . . . . . . 117 5.3 Phương pháp sinh tự động dữ liệu kiểm thử cho các ràng buộc chuỗi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 5.4 5.5 5.3.1 Tổng quan về phương pháp đề xuất . . . . . . . . . . . . . 119 5.3.2 Sinh các kịch bản kiểm thử . . . . . . . . . . . . . . . . . . 120 5.3.3 Giải các ràng buộc chuỗi . . . . . . . . . . . . . . . . . . . . 122 Thực nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 5.4.1 Công cụ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 5.4.2 Kết quả và đánh giá . . . . . . . . . . . . . . . . . . . . . . 139 Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Chương 6 6.1 KẾT LUẬN 144 Các kết quả đạt được của luận án . . . . . . . . . . . . . . . . . . . 144 v 6.2 Hướng nghiên cứu tiếp theo . . . . . . . . . . . . . . . . . . . . . . 146 DANH MỤC CÁC CÔNG TRÌNH KHOA HỌC CỦA TÁC GIẢ LIÊN QUAN ĐẾN LUẬN ÁN 148 TÀI LIỆU THAM KHẢO 149 vi DANH MỤC CÁC THUẬT NGỮ VÀ KÝ HIỆU Tên thuật ngữ đầy đủ Chữ viết tắt Giải nghĩa Breadth-first search BFS Thuật toán tìm kiếm theo chiều rộng Black box testing Control Flow Graph Kiểm thử hộp đen CFG Đồ thị dòng điều khiển Constraint solver Bộ giải ràng buộc Coverage criteria Tiêu chuẩn bao phủ Dynamic Domain Reduction DDR Deadlock Depth-first search Phương pháp giảm miền động Khóa chết DFS Thuật toán tìm kiếm theo chiều sâu Extended Finite State Machine EFSM Máy hữu hạn trang thái mở rộng Finite State Machine Máy hữu hạn trạng thái FSM Gray box testing Kiểm thử hộp xám Invariant Bất biến Linear Temporal Logic LTL Logic thời gian tuyến tính Message Thông điệp Model Checking Kiểm chứng mô hình Mutation Score MS Độ đo đột biến Object Constraint Language OCL Ngôn ngữ ràng buộc đối tượng Parallel Fragment Par Toán tử song song Post–condition Hậu điều kiện Pre–condition Tiền điều kiện Predicate Vị từ Safety property Thuộc tính an toàn Satisfiable SAT Thỏa mãn Symbolic execution SE Thực thi tượng trưng Weak Sequencing Fragment Seq Toán tử tuần tự yếu vii Tên thuật ngữ đầy đủ Chữ viết tắt Giải nghĩa Satisfiability Modulo Theories SMT Các lý thuyết môđun về tính thỏa được System Under Testing SUT Hệ thống được kiểm thử Test Case Ca kiểm thử Test Data Dữ liệu kiểm thử Test Scenario Kịch bản kiểm thử Test Script Mã kiểm thử dạng đặc tả kịch bản dùng để tự động hóa Unified Modeling Language UML Ngôn ngữ mô hình hóa thống nhất Unsatisfiable UNSAT Không thỏa mãn Variable Assignment Graph VAG Đồ thị tham số biến White box testing eXtensible Markup Language Kiểm thử hộp trắng XML Z3-Str solver Ngôn ngữ đánh dấu mở rộng Bộ giải Z3-Str viii DANH MỤC CÁC BẢNG 2.1 Các biểu đồ UML và sử dụng để mô hình hóa cho kiểm thử [100] 30 3.1 Bảng giá trị chân lý cho các toán tử logic [3] . . . . . . . . . . . . 61 3.2 Hàm vị từ cho các toán tử logic trong OCL [3] . . . . . . . . . . . 62 3.3 Hàm vị từ cho các toán tử quan hệ OCL cho kiểu dữ liệu số [3] . 64 3.4 Các kịch bản kiểm thử được sinh ra của máy bán hàng tự động . 70 3.5 So sánh kết quả đề xuất và kết quả nghiên cứu trong [72] . . . . . 81 3.6 Thực nghiệm đưa ra độ bao phủ các đường dẫn của đồ thị của phương pháp đưa ra và phương pháp kiểm thử ngẫu nhiên . . . . 82 3.7 Kết quả thực nghiệm so sánh phương pháp đề xuất với phương pháp [30] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.1 Kết quả MS sử dụng cho từng kịch bản kiểm thử được sinh ra trong cách tiếp cận [95] và Phương pháp đề xuất . . . . . . . . . . 111 4.2 Kết quả MS của phương pháp đề xuất và phương pháp ngẫu nhiên112 5.1 Ví dụ giải các toán tử chuỗi . . . . . . . . . . . . . . . . . . . . . . 125 5.2 Cách Z3–str thực hiện xử lý các ràng buộc chuỗi trong Bảng 5.1 . 125 5.3 Ngữ pháp của các ràng buộc trong Z3–str, mở rộng cho search và replaceAll so với [114] . . . . . . . . . . . . . . . . . . . . . . . . . . 127 5.4 Định nghĩa cho Thuật toán 5.2 [114] . . . . . . . . . . . . . . . . . 129 5.5 Các quy tắc giảm [114] . . . . . . . . . . . . . . . . . . . . . . . . . 131 5.6 Quy tắc giảm sử dụng gọi đệ quy . . . . . . . . . . . . . . . . . . . 133 5.7 Các quy tắc tiền xử lý cho các toán tử chuỗi . . . . . . . . . . . . 135 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 . 140 ix 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] . . . . . . . . . . . . 141 x DANH MỤC CÁC HÌNH VẼ 1.1 Các nội dung luận án giải quyết trong bài toán kiểm thử dựa trên mô hình. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1 Quy trình kiểm thử dựa trên mô hình [100]. . . . . . . . . . . . . . 9 2.2 Ví dụ biểu đồ tuần tự UML có toán tử alt và opt. . . . . . . . . . 14 2.3 Ví dụ biểu đồ tuần tự UML có toán tử loop và break. . . . . . . . 14 2.4 Ví dụ biểu đồ tuần tự UML có toán tử par và seq. . . . . . . . . . 15 2.5 Ví dụ biểu đồ tuần tự UML có toán tử strict và critical. . . . . . . 16 2.6 Ví dụ biểu đồ tuần tự UML có toán tử ignore và consider. . . . . 16 2.7 Ví dụ biểu đồ tuần tự UML có toán tử negative và assert. . . . . 17 2.8 Ví dụ biểu đồ lớp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.9 Các loại nút của đồ thị dòng điều khiển . . . . . . . . . . . . . . . 19 2.10 Các hướng tiếp cận của sinh dữ liệu kiểm thử tự động [99]. . . . . 24 2.11 Phân loại các công cụ sinh kiểm thử tự động [40]. . . . . . . . . . 32 3.1 Sinh ca kiểm thử sử dụng kiểm chứng mô hình theo cách tiếp cận [17]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.2 Các bước cơ bản sinh các dữ liệu kiểm thử. . . . . . . . . . . . . . 41 3.3 Ví dụ biểu đồ tuần tự UML. . . . . . . . . . . . . . . . . . . . . . . 43 3.4 File xmi sau khi chuẩn hóa mô tả dữ liệu của biểu đồ tuần tự trong Hình 3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.5 Chuyển từ biểu đồ tuần tự sang CFG (của toán tử opt và alt). . . 48 3.6 Chuyển từ biểu đồ tuần tự sang CFG (của toán tử break và loop). 50 3.7 Chuyển từ biểu đồ tuần tự sang CFG (của toán tử par và seq). . 51 3.8 Chuyển từ biểu đồ tuần tự sang CFG (của toán tử strict và critical). 53 xi 3.9 Chuyển từ biểu đồ tuần tự sang CFG (của toán tử ignore và consider). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.10 Chuyển từ biểu đồ tuần tự sang CFG (của toán tử assert và negative). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.11 Biểu đồ tuần tự của máy bán hàng tự động. . . . . . . . . . . . . . 71 3.12 Biểu đồ lớp của chức năng máy bán hàng tự động. . . . . . . . . . 71 3.13 Đồ thị dòng điều khiển của máy bán hàng tự động. . . . . . . . . 72 3.14 Biểu đồ tuần tự với kiểu dữ liệu biến là cấu trúc động. . . . . . . 76 3.15 Đồ thị dòng điều khiển với kiểu dữ liệu biến là cấu trúc động. . . 76 3.16 Đường dẫn con P1 thực thi. . . . . . . . . . . . . . . . . . . . . . . 77 3.17 Đường dẫn con P2 thực thi. . . . . . . . . . . . . . . . . . . . . . . 78 3.18 Đường dẫn con P3 thực thi. . . . . . . . . . . . . . . . . . . . . . . 78 3.19 Kiến trúc thực thi của SequenceTesting. . . . . . . . . . . . . . . . 80 4.1 Toán tử lặp chuyển sang CFG. . . . . . . . . . . . . . . . . . . . . 91 4.2 Toán tử song song chuyển sang CFG. . . . . . . . . . . . . . . . . . 92 4.3 Quá trình sinh dữ liệu kiểm thử: phát triển từ [75] cho vòng lặp. . 100 4.4 Tính điểm chia split phụ thuộc các miền giá trị của biến trong [75].102 4.5 Biểu đồ tuần tự của chức năng chuyển tiền trong hệ thống ngân hàng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 4.6 Biểu đồ lớp và ràng buộc OCL cho chức năng chuyển tiền. . . . . 108 4.7 Đồ thị dòng điều khiển của chức năng chuyển tiền. . . . . . . . . . 108 4.8 Kiến trúc phát triển của công cụ SequenceConcur. . . . . . . . . . 110 5.1 Kiến trúc của Bộ giải Z3–str trong [114]. . . . . . . . . . . . . . . . 124 5.2 Biểu đồ tuần tự cho chức năng kiểm tra thông tin của một ứng dụng web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 5.3 CFG của chức năng kiểm tra thông tin ứng dụng web. . . . . . . . 138 5.4 Kiến trúc của SeqString. . . . . . . . . . . . . . . . . . . . . . . . . 139 xii TÓM TẮT LUẬN ÁN Luận án nghiên cứu một số giải pháp hỗ trợ sinh dữ liệu kiểm thử tự động từ các biểu đồ UML 2.0. Cụ thể, luận án tập trung giải quyết ở giai đoạn thiết kế kiểm thử: sinh các kịch bản kiểm thử và sinh dữ liệu kiểm thử từ biểu đồ tuần tự và các ràng buộc trong biểu đồ lớp. Mục tiêu của phương pháp nghiên cứu là sinh dữ liệu kiểm thử có độ bao phủ tốt hơn, có khả năng tìm được nhiều lỗi trong các hệ thống phần mềm. Vì vậy, luận án tập trung vào việc giải quyết các đặc trưng, các toán tử của biểu đồ tuần tự UML 2.0; tránh bùng nổ số lượng kịch bản kiểm thử sinh ra, các vòng lặp, các trường hợp khóa chết (deadlock) và đồng bộ trong các ứng dụng tương tranh; giải các ràng buộc với các kiểu dữ liệu khác nhau. 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. Biểu đồ tuần tự UML 2.0 áp dụng cho tất cả mười hai toán tử, có cấu trúc phức tạp, các khối lồng ghép. Phương pháp áp dụng cho các ràng buộc với biến là kiểu dữ liệu số và cấu trúc động. Thứ hai, luận án đề xuất một phương pháp 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 trong trường hợp của bao phủ vòng lặp và các ứng dụng tương tranh. Thứ ba, luận án đưa ra 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 việc giải quyết các ràng buộc chuỗi. Trong các phương pháp đề xuất, luận án đều xây dựng công cụ để cài đặt và thực nghiệm trên đó. Với mỗi thực nghiệm các dữ liệu kiểm thử và kịch bản kiểm thử sinh ra được so sánh về độ bao phủ, khả năng tìm lỗi so với các phương pháp hiện tại. Kết quả cho thấy tính hiệu quả và độ tin cậy của phương pháp về mặt thực nghiệm. Những đề xuất đó giải quyết một phần trong hướng tiếp cận lớn về kiểm thử dựa trên mô hình (cụ thể là các biểu đồ UML). xiii Chương 1 GIỚI THIỆU 1.1 Đặt vấn đề Trong quá trình phát triển phần mềm, kiểm thử là giai đoạn quan trọng và thực sự cần thiết để tạo ra một hệ thống phần mềm có chất lượng cao [9, 67]. Trong thực tế hơn 50% nỗ lực phát triển dành cho giai đoạn kiểm thử [6] và rất hiếm các sản phẩm phần mềm được sản xuất ra mà không có lỗi. Các công ty phần mềm cũng như các tổ chức phát triển phần mềm hướng tới giải pháp tự động hóa quá trình kiểm thử. Một minh chứng thực tế là ngày càng có nhiều các công cụ kiểm thử tự động đưa ra và được áp dụng trong thực tế. Tuy nhiên, đa số quá trình thực hiện đều tập trung vào việc thực thi kiểm thử tự động mà không quan tâm nhiều đến việc thiết kế chúng. Hơn nữa, việc phát hiện lỗi phần mềm chủ yếu là do chất lượng của các kịch bản và dữ liệu kiểm thử được thiết kế. Các dữ liệu kiểm thử có độ bao phủ càng lớn thì độ tin cậy của tập dữ liệu kiểm thử càng cao [24], có thể tìm được nhiều lỗi của hệ thống và giúp kiểm soát và quản lý quá trình kiểm thử tốt hơn. Như vậy, quá trình sinh các dữ liệu kiểm thử tự động trở nên thực sự cần thiết, nhất là đối với những phần mềm lớn và phức tạp. Quá trình này làm giảm giá thành phát triển phần mềm, 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 [41]. Trong các hướng tiếp cận sinh tự động dữ liệu kiểm thử hiện nay thường được thực hiện từ mã nguồn chương trình, các mô hình hoặc các đặc tả [12, 100]. Có nhiều hướng nghiên cứu phát triển được đưa ra thực hiện từ mã nguồn chương trình trong [8, 34, 54, 75, 91, 110]. Tuy nhiên, việc sinh tự động dữ liệu kiểm thử này được thực hiện ở giai đoạn sau khi có mã nguồn và số kịch bản kiểm thử được sinh ra rất lớn. Hơn nữa, có rất nhiều ngôn ngữ lập trình khác nhau nên phương pháp sinh dữ liệu kiểm thử thường phụ thuộc nhiều vào công nghệ 1 phân tích mã nguồn. Hướng thứ hai là sử dụng các mô hình [16, 72, 97, 24] hoặc các đặc tả [102, 64, 57] để thiết kế tự động các dữ liệu kiểm thử có thể xuất phát từ máy hữu hạn trạng thái (Finite State Machine – FSM), các biểu đồ UML (Unified Modeling Language) hoặc các đặc tả bằng các ngôn ngữ hình thức khác nhau (chẳng hạn Z, B, v.v.). Việc áp dụng các đặc tả hình thức trong thực tiễn là khó thực hiện và tốn thời gian. Hơn nữa, khi sử dụng phương pháp này đòi hỏi trình độ của các chuyên gia hiểu về đặc tả hình thức. Vì vậy, tác giả chọn hướng nghiên cứu từ các biểu đồ UML vì các biểu đồ UML được sử dụng phổ biến trong thực tiễn của các công ty phát triển phần mềm. Việc sử dụng các biểu đồ UML có thể kết hợp với ngôn ngữ ràng buộc đối tượng (Object Contraint Language – OCL) để biểu diễn các đặc tả ràng buộc mà nhiều khi biểu đồ không biểu diễn hết được. Hơn nữa, việc thiết kế các dữ liệu kiểm thử từ các biểu đồ này có thể thực hiện ở giai đoạn đầu của quá trình phát triển, không nhất thiết là phải đợi khi đã có mã nguồn chương trình. Kiểm thử từ các biểu đồ UML cũng như việc kiểm thử thông thường được thực hiện qua các bước: sinh các kịch bản kiểm thử, sinh dữ liệu kiểm thử và thực thi các đoạn mã kiểm thử. Vì việc thực thi các đoạn mã kiểm thử tự động có nhiều công cụ hỗ trợ và phụ thuộc vào công nghệ, môi trường ngôn ngữ sử dụng. Hơn nữa, vấn đề phát hiện lỗi trong các dự án phần mềm thì chủ yếu phụ thuộc vào các kịch bản và dữ liệu kiểm thử được thiết kế. Do đó, tác giả chọn hướng tập trung nghiên cứu vào các phương pháp sinh dữ liệu kiểm thử. Các hướng nghiên cứu việc sinh dữ liệu kiểm thử từ các biểu đồ UML phụ thuộc vào loại biểu đồ được sử dụng. Tùy vào mục đích kiểm thử, mức độ kiểm thử sẽ chọn biểu đồ phù hợp với yêu cầu đưa ra. Tác giả Bader và các đồng sự trong [5] đưa ra một phương pháp cho việc sinh các dữ liệu kiểm thử từ biểu đồ trạng thái. Tuy nhiên, nghiên cứu này cho rằng biểu đồ trạng thái có ý nghĩa với kiểm thử đơn vị, số lượng kịch bản kiểm thử sinh ra lớn và rất dễ bùng nổ các kịch bản kiểm thử. Trong khi đó các dữ liệu kiểm thử và kịch bản kiểm thử sinh từ các biểu đồ tuần tự có ý nghĩa cho kiểm thử tích hợp [33] và số lượng kịch bản kiểm thử sinh ra ít hơn khi so sánh với biểu đồ trạng thái [2]. Hơn nữa, biểu đồ tuần tự là biểu đồ chi tiết và giàu hành vi trong các biểu đồ UML. Vì vậy, các nhà nghiên cứu quan tâm đến việc sử dụng các biểu đồ tuần tự để sinh các dữ liệu kiểm thử và các kịch bản kiểm thử. Trong hướng nghiên cứu đó, với việc giải quyết các toán tử của biểu đồ tuần tự thì phương pháp trong [72] sinh dữ 2 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ố. Trong một vài hướng tiếp cận khác như [97, 84, 65], các phương pháp kỹ thuật hàm nhỏ nhất trong việc sinh dữ liệu kiểm thử tự động cũng chỉ áp dụng với kiểu dữ liệu số. Như vậy, việc sinh dữ liệu kiểm thử từ các biểu đồ UML đối với các ràng buộc mà biến có các kiểu dữ liệu khác nhau như: kiểu dữ liệu chuỗi, cấu trúc động và trong các trường hợp của vòng lặp chưa được đưa ra hoặc chưa có lời giải thỏa đáng. Trong việc giải quyết bài toán sinh dữ liệu kiểm thử tự động từ các biểu đồ UML thì việc bùng nổ số kịch bản kiểm thử, các trường hợp khóa chết, đồng bộ trong các luồng song song của hệ thống cũng là vấn đề gặp phải nhiều khó khăn và thách thức. Nhóm tác giả Sun và các đồng sự trong [93] đưa ra cách tiếp cận dựa trên việc chuyển đổi để sinh ra các dữ liệu kiểm thử hướng kịch bản từ biểu đồ hoạt động UML. Cách tiếp cận này dựa trên các quy tắc chuyển đổi để chuyển về cây nhị phân, sau đó dựa vào các thuật toán tìm kiếm trên cây nhị phân này để sinh các kịch bản kiểm thử. Công cụ cài đặt sử dụng phương pháp sinh dữ liệu kiểm thử ngẫu nhiên, chưa xét độ bao phủ của các dữ liệu kiểm thử sinh ra; các trường hợp khóa chết và vấn đề bùng nổ các kịch bản kiểm thử chưa được giải quyết. Hướng tiếp cận trong [58, 89] đưa ra phương pháp 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 dữ liệu kiểm thử sinh ra theo phương pháp này biểu diễn tính tương tranh và có thể bao phủ các lỗi đồng bộ, khóa chết. Tuy nhiên, phương pháp đó chưa đưa ra các tiêu chuẩn bao phủ tương tranh khác nhau trong các ứng dụng, việc cài đặt thực thi tính hiệu quả cũng chưa được triển khai. Như vậy, các vấn đề mà luận án sẽ tập trung giải quyết cụ thể như sau: ˆ Sinh 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 nhằm giải quyết cho tất cả mười hai toán tử, có cấu trúc lồng ghép nhau; Các ràng buộc với các biến là các biến kiểu dữ liệu số và cấu trúc động. ˆ 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 trong biểu đồ lớp trong các ứng dụng tương tranh và với các độ bao phủ khác nhau của vòng lặp. 3 ˆ 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 trong biểu đồ lớp với việc giải quyết các ràng buộc chuỗi. 1.2 Phương pháp và nội dung nghiên cứu Để thực hiện các nội dung nghiên cứu trong luận án, tác giả tiến hành theo phương pháp tiếp cận từ trên xuống, phân loại và hệ thống hóa lý thuyết các phương pháp về sinh dữ liệu kiểm thử tự động từ mô hình, từ đó phân tích, phân loại và tổng hợp các phương pháp đó. Theo cách phân loại đưa ra, tác giả đi sâu phân tích mỗi đặc điểm và ưu nhược điểm của từng loại. Từ phương pháp phân tích và tổng hợp trên của kiểm thử dựa trên mô hình, tác giả chọn đối tượng nghiên cứu trong luận án là từ các biểu đồ tuần tự UML 2.0 và biểu đồ lớp. Từ đó với mỗi đặc trưng của từng loại biểu đồ, tác giả nghiên cứu liên quan để đề xuất cải tiến hoặc đưa ra phương pháp mới về sinh dữ liệu kiểm thử. Trong phạm vi của luận án, tác giả tập trung nghiên cứu chủ yếu về các phương pháp tự động trong giai đoạn thiết kế kiểm thử theo quy trình phát triển phần mềm. Mục tiêu của luận án nhằm nghiên cứu, cải tiến, đề xuất và triển khai một số phương pháp sinh tự động các dữ liệu kiểm thử từ các biểu đồ UML trong giai đoạn thiết kế kiểm thử để giải quyết bài toán trên. Tuy nhiên, để đo tính hiệu quả, khả năng tìm lỗi của các dữ liệu kiểm thử sinh ra thì một vài tiêu chuẩn bao phủ và độ đo phù hợp với mục đích so sánh các dữ liệu kiểm thử được sinh ra với các phương pháp hiện tại. Theo đó, luận án thực hiện các nội dung cụ thể như sau: ˆ Tổng hợp, hệ thống hóa các nghiên cứu liên quan và bài toán tổng quan về các vấn đề sinh dữ liệu kiểm thử tự động, kiểm thử từ các biểu đồ UML. ˆ Nghiên cứu bài toán sinh dữ liệu kiểm thử tự động từ biểu đồ tuần tự UML và biểu đồ lớp với việc giải quyết các toán tử, các đặc trưng của biểu đồ UML đó. Nghiên cứu các phương pháp trong giai đoạn thiết kế kiểm thử để các kịch bản kiểm thử được sinh ra đạt được số lượng nhỏ nhất và độ bao phủ cao nhất, tránh bùng nổ số lượng kịch bản kiểm thử và xem xét các trường hợp có hoặc không có sự chia sẻ dữ liệu trong các luồng song song của biểu đồ tuần tự. 4 ˆ Nghiên cứu trong các 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ó kiểu dữ liệu số, cấu trúc dữ liệu động, các ràng buộc chuỗi và kiểm thử với vòng lặp. ˆ Thực nghiệm, triển khai trong các phương pháp cải tiến, đề xuất với các biểu đồ tuần tự và các biểu đồ lớp. Xem xét á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à đo khả năng tìm lỗi của các dữ liệu kiểm thử được sinh ra. Giҧi quyӃt các ÿһc trѭng, các toán tӱ cӫa biӇu ÿӗ UML ÿã chӑn Các yêu cҫu mô hình hóa Các dӳ liӋu kiӇm thӱ, ca kiӇm thӱ Các biӇu ÿӗ UML Bӝ sinh ÿҫu ra mong muӕn Ĉánh giá và QuyӃt ÿӏnh: - Tҥo thêm ca kiӇm thӱ - ChӍnh sӱa mô hình - Ĉánh giá ÿӝ tin cұy và các ÿӝ ÿo chҩt lѭӧng kiӇm thӱ Giҧi quyӃt vӟi các kiӇu dӳ liӋu sӕ, có cҩu trúc ÿӝng, các ràng buӝc chuӛi và kiӇm thӱ vòng lһp Phân tích kӃt quҧ Giҧm sӕ lѭӧng và tăng ÿӝ bao phӫ cӫa kӏch bҧn kiӇm thӱ, Tránh bùng nә sӕ lѭӧng trong các luӗng song song, khóa chӃt, ÿӗng bӝ Báo cáo kiӇm thӱ Lҩy kӃt quҧ kiӇm thӱ Sҧn phҭm cҫn kiӇm thӱ Hình 1.1: Các nội dung luận án giải quyết trong bài toán kiểm thử dựa trên mô hình. Các nội dung mà luận án đưa ra trên tập trung giải quyết một số phương pháp sinh tự động các kịch bản kiểm thử và sinh dữ liệu kiểm thử . Trong Hình 1.1 mô tả quy trình của bài toán kiểm thử dựa trên mô hình, các vấn đề luận án tập trung giải quyết là các hình chữ nhật góc tròn nét đứt. Các vấn đề trong các hướng nghiên cứu đưa ra phương pháp giải quyết các toán tử của biểu đồ UML 2.0 chuyển thành một biểu diễn trung gian là đầu vào cho việc sinh các kịch bản kiểm thử. Phương pháp sinh các kịch bản kiểm thử để tránh bùng nổ số lượng kịch bản và tăng độ bao phủ của chúng, có mối liên hệ với các phương pháp giải quyết ràng buộc để sinh dữ liệu kiểm thử trong từng kịch bản trên. 5 Các nghiên cứu đó góp phần giải quyết hoàn chỉnh bài toán trong giai đoạn thiết kế kiểm thử từ các biểu đồ UML. 1.3 Cấu trúc luận án Phần còn lại của luận án được cấu trúc thành năm chương chính. Trong đó, Chương 2 giới thiệu kiến thức nền tảng về các vấn đề nghiên cứu trong luận án. Đây là cơ sở lý thuyết cho việc xây dựng các phương pháp sinh tự động dữ liệu kiểm thử từ các biểu đồ UML trong các chương từ Chương 3 đến Chương 5. Theo cách tiếp cận của việc sinh tự động dữ liệu kiểm thử từ các biểu đồ tuần tự UML và biểu đồ lớp, tác giả tập trung đưa ra đánh giá phân tích các hướng nghiên cứu liên quan; nêu ra một số vấn đề còn tồn tại mà luận án sẽ tập trung giải quyết. Cụ thể, Chương 3 trình bày nội dung kết quả nghiên cứu về phương pháp sinh tự động dữ liệu kiểm thử giải quyết cho tất cả mười hai toán tử trong biểu đồ tuần tự UML 2.0 và kiểu dữ liệu số và cấu trúc động. Tiếp theo, phương pháp đề xuất cho việc sinh tự động dữ liệu kiểm thử với trường hợp kiểm thử vòng lặp và các ứng dụng tương tranh được đưa ra trong Chương 4 nhằm giải quyết vấn đề bùng nổ số kịch bản kiểm thử sinh ra, trường hợp khóa chết và đồng bộ. Chương 5 trình bày nội dung kết quả nghiên cứu về phương pháp sinh tự động dữ liệu kiểm thử với việc cải tiến khi giải với các ràng buộc chuỗi. Cuối cùng, tổng kết lại các kết quả đạt được và hướng phát triển tiếp theo của luận án, được trình bày trong Chương 6. 6
- Xem thêm -

Tài liệu liên quan