TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 2(37).2010 GIẢI PHÁP KIỂM THỬ ĐỘT BIÊN CÁC CÂU LỆNH TRUY VẤN CƠ SỞ DỮ LIỆU A SOLUTION TO THE MUTATION TESTING OF SQL DATABASE QUERRIES Nguyễn Thanh Bình Hồ Văn Phi Trường Đại học Bách khoa, Đại học Đà Nẵng Trường Cao đẳng CNTT Hữu nghị Việt-Hàn TÓM TẮT Kiểm thử đột biến (mutation testing) kỹ thuật kiểm thử cấu trúc sử dụng phổ biến, nhờ vào khả tự động hóa cao làm giảm chi phí tiến trình kiểm thử Kiểm thử đột biến áp dụng rộng rãi cho ngôn ngữ lập trình khác Trong báo này, trình bày giải pháp hỗ trợ kiểm thử đột biến áp dụng cho câu lệnh truy vấn sở liệu Một công cụ xây dựng hỗ trợ việc tự động hóa kiểm thử đột biến câu lệnh truy vấn Công cụ thử nghiệm số lớn ứng dụng sử dụng lệnh truy vấn sở liệu cho kết khả quan ABSTRACT Due to the automation and cost reduction of testing process, mutation testing is one of the structural testing methods that are popularly used Mutation testing is applied to many programming languages In this paper, we present a solution for mutation testing applied to SQL database queries A tool is constructed for automating the mutation testing process of SQL database queries The solution is applied to some SQL database queries and the results are very promising Đặt vấn đề Kiểm thử hoạt động quan trọng tiến trình phát triển phần mềm Nó góp phần lớn việc đánh giá chất lượng phần mềm qui trình bắt buộc dự án phát triển phần mềm giới nước Có nhiều kỹ thuật kiểm thử phần mềm phát triển, đó, kiểm thử đột biến kỹ thuật hỗ trợ việc đánh giá chất lượng liệu kiểm thử Hiện nay, nhu cầu sử dụng ngôn ngữ vấn tin có cấu trúc (SQL) đơn vị nghiên cứu phát triển phần mềm ngày cao Do đó, có hệ thống ứng dụng kiểm thử đột biến để đánh giá chất lượng liệu kiểm thử thực kiểm thử câu lệnh truy vấn SQL thực cần thiết Trong báo này, tập trung vào nghiên cứu đột biến toán tử câu lệnh truy vấn SQL xây dựng công cụ kiểm thử đột biến cho câu lệnh truy vấn SQL Nội dung báo sau: phần giới thiệu ngắn gọn kỹ thuật kiểm thử đột biến; phần trình bày kỹ thuật đột biến câu lệnh truy vấn SQL; phần trình bày 17 TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 2(37).2010 bước xây dựng công cụ kiểm thử đột biến cho câu lệnh truy vấn SQL; phần trình bày kết thử nghiệm số thảo luận; cuối kết luận Kỹ thuật kiểm thử đột biến Kỹ thuật kiểm thử đột biến Demillo đề xuất vào năm 1978 [1] Kiểm thử đột biến thiết kế để hỗ trợ kiểm thử viên tạo liệu kiểm thử có hiệu Kiểm thử đột biến có chức quan trọng làm lộ lỗi chương trình Kiểm thử đột biến xây dựng vào hai giả thuyết [3]: lập trình viên giỏi hiệu ứng liên kết Một trình viên giỏi giả thuyết gặp phải sai sót đơn giản, không gặp phải sai sót nghiêm trọng, ví dụ sai sót thuật toán Hiệu ứng liên kết giả thuyết liệu thử phát lỗi đơn giản phát lỗi phức tạp Kỹ thuật kiểm thử đột biến câu lệnh truy vấn SQL giúp cho kiểm thử viên tạo liệu kiểm thử đánh giá chúng đầy đủ cách chèn cách có hệ thống lỗi nhân tạo vào câu lệnh cho trước đánh giá tỷ lệ lỗi phát liệu kiểm thử Đột biến tạo cách thay đổi câu lệnh gốc sử dụng tập hợp luật (toán tử đột biến) định nghĩa sẵn để gây thay đổi cú pháp dựa lỗi mà lập trình viên thường mắc phải Mỗi đột biến thực thi với liệu chúng sản sinh kết đầu không (đầu khác với đầu câu lệnh gốc), đột biến gọi đột biến bị diệt Một trường hợp kiểm thử gọi hiệu chúng diệt đột biến mà chưa bị diệt trường hợp kiểm thử trước Một số đột biến cho kết đầu so với câu lệnh gốc, trường hợp kiểm thử diệt chúng Các đột biến gọi đột biến tương đương Sau thực thi trường hợp kiểm thử số lượng đột biến, tỷ lệ đột biến định nghĩa tỷ lệ phần trăm đột biến bị diệt chia cho số lượng đột biến không tương đương Kiểm thử đột biến dễ dàng tích hợp vào hệ thống mà đột biến sinh tự động thực thi Sản sinh trường hợp kiểm thử diệt đột biến thực thủ công tự động cách sử dụng tập ràng buộc sinh trường hợp kiểm thử Kỹ thuật đột biến câu lệnh truy vấn SQL Các toán tử đột biến tổ chức theo nhóm [4] định nghĩa hai ký tự đầu in hoa - Đột biến cho mệnh đề (SC - SQL Clause) - Đột biến cho toán tử biểu thức điều kiện (OR – Operator replacement) - Đột biến quan hệ để xử lý giá trị NULL (NL – NULL) 18 TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 2(37).2010 - Thay định danh: cột tham chiếu, tham số số (IR – Identifier replacement) Hầu hết toán tử áp dụng mệnh đề SQL khác nhau, nhóm chia thành nhóm nhỏ hơn, nhóm tham chiếu đến kiểu đột biến tiêu biểu áp dụng cho mệnh đề (select, join, where, group by, having order by) 3.1 Các toán tử đột biến mệnh đề (SC) Các toán tử SC góp phần phát số lỗi liên kết không đúng, sử dụng phép lượng hóa (distinct) không dẫn đến có mặt hàng trùng không mong muốn, tính toán hàm gộp nhóm không hay không thứ tự tập kết Mệnh đề lựa chọn (SEL – SELECT): Mỗi xuất từ khóa SELECT hay SELECT DISTINCT thay từ khóa khác số Mệnh đề liên kết (JOI –JOIN): Mỗi xuất từ khóa kiểu liên kết (INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, OUTER JOIN, CROSS JOIN) thay từ khóa kiểu liên kết khác Khi kiểu liên kết thay CROSS JOIN, điều kiện tìm kiếm sau từ khóa ON bị loại bỏ Khi CROSS JOIN thay kiểu liên kết khác, mệnh đề ON thêm vào điều kiện liên kết tương ứng tạo dựa khóa bảng liên kết Grouping (GRU): Mỗi biểu thức GROUP BY loại bỏ Nếu biểu thức loại bỏ mệnh đề GROUP BY có danh sách SELECT danh sách ORDER BY, biểu thức phải đặt hàm gộp nhóm để tránh lỗi cú pháp câu lệnh truy vấn Trong trường hợp này, hai đột biến sinh cho biểu thức, sử dụng hàm MIN sử dụng hàm MAX Nếu có biểu thức GROUP BY toàn mệnh đề loại bỏ Hàm gộp nhóm (AGR): Mỗi xuất hàm gộp nhóm (MIN, MAX, AVG, AVG(DISTINCT), SUM, SUM(DISTINCT), COUNT, COUNT(DISTINCT)) danh sách SELECT danh sách HAVING thay hàm khác Sự thay phải đảm bảo kiểu liệu tính toán hàm gộp nhóm Nếu kiểu liệu kiểu ký tự hàm AVG hàm SUM bị loại khỏi thay Nếu kiểu liệu ký tự hàm gộp nhóm sau mệnh đề HAVING hàm COUNT không thay đổi tham gia vào so sánh với biểu thức số học Truy vấn nối (UNI): Mỗi xuất từ khóa (UNION, UNION ALL) thay từ khóa khác Mỗi truy vấn truy vấn hợp loại bỏ Sắp xếp kết (ORD): Mỗi xuất biểu thức ORDER BY thay từ khóa khác (ASC, DESC) Nếu từ khóa (mặc định ASC) từ khóa DESC thêm vào Loại bỏ mệnh đề ORDER BY có biểu thức thay cặp gần 19 TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 2(37).2010 3.2 Toán tử thay (OR) Mục tiêu đột biến phát lỗi lô-gíc mệnh đề WHERE HAVING Thay toán tử quan hệ (ROR - Relational operator replacement): xuất toán tử quan hệ {=, , =} thay toán tử khác thay falseop (luôn trả giá trị sai) thay trueop (luôn trả giá trị đúng) Toán tử lô-gíc (LCR - Logical connector operator): Mỗi xuất toán tử logic (AND, OR) thay toán tử khác, falseop trueop leftop (trả toán hạng bên trái) rightop (trả toán hạng bên phải) Thay toán tử số học (AOR - Arithmatic Operator Replacement): Mỗi toán tử số học {+, -, *, /, %} thay toán tử số học khác toán tử leftop rightop áp dụng cho biểu thức toán học Vị từ Between (BTW - Between): Mỗi điều kiện dạng thức BETWEEN x AND y thay a>x AND a=x AND a 75 92% SELECT deptid, count(empid) FROM emp where deptid = '50' group by deptid having max(empid) > 75 92% SELECT deptid, count(empid) FROM emp where deptid = '50' OR deptid = '60' group by deptid 77 10 87% SELECT deptname, count(empid) FROM emp inner join dept on emp.deptid = dept.deptid group by deptname having count(empid) > 75 100% SELECT empid, firstname, deptname FROM emp inner join dept ON emp.deptid=dept.deptid WHERE empid > 20 25 100% SELECT empid, firstname, deptname FROM emp, dept WHERE emp.deptid=dept.deptid AND firstname like 'Jonh' 45 89% 23 TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 2(37).2010 SELECT empid, firstname, deptname FROM emp, dept WHERE emp.deptid=dept.deptid AND deptname = 'IT' 39 97% SELECT empid, firstname, deptname FROM emp, dept WHERE emp.deptid=dept.deptid AND empid > 30 36 89% SELECT empid, jobtitle FROM emp, job Jobtitle = 'IT' AND emp.jobid = job.jobid 36 89% 54 21 61% WHERE SELECT deptname, count(empid) FROM emp, dept where emp.deptid = dept.deptid group by deptname having count(empid) > Như vậy, trong trình kiểm thử thực thi, tỷ lệ đột biến áp dụng cho câu lệnh có khác nhau, cao 100% thấp 61% Tỷ lệ đột biến trung bình xấp xỉ 90% Qua số trường hợp kiểm thử chứng tỏ chất lượng liệu kiểm thử chưa cao, có nhiều trường hợp kiểm thử không diệt tất đột biến Như vậy, giải pháp đưa cảnh báo kịp thời để kiểm thử viên xem xét xây dựng lại trường hợp kiểm thử liệu kiểm thử tốt để đảm bảo chất lượng phần mềm Kết luận Trên sở phân tích đột biến câu lệnh truy vấn sở liệu SQL, xây dựng công cụ kiểm thử đột biến áp dụng cho nhiều ứng dụng sử dụng lệnh truy vấn sở liệu cho kết khả quan Công cụ kiểm thử đột biến cung cấp giải pháp sơ ứng dụng kiểm thử đột biến để làm sở tham khảo ứng dụng thực tế cho đơn vị phát triển phần mềm để nâng cao chất lượng kiểm thử TÀI LIỆU THAM KHẢO [1] A.T Acree, T.A Budd, R.A DeMillo, R.J Lipton, and F.G Sayward, ”Mutation Analysis”, Georgia Institute of Technology, Technical Report, GIT-ICS-79/08, 1979 [2] Nguyễn Thanh Bình and Chantal Robach, “Mutation Testing Applied to Hardware: the Mutants Generation”, Proceedings of the 11th IFIP International Conference on Very Large Scale Integration,118 123, Montpellier, France, December, 2001 [3] Jeff Offutt, Gregg Rothermel, Roland H Untch and Christian Zapf, An Experimental Evaluation of Selective Mutation, Baltimore, MD, 1993 [4] Javier Tuya, Mª José Suárez-Cabal and Claudio de la Riva, Mutating database queries, Information and Software Technology, ISSN:0950-5849, 2007 24 TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 2(37).2010 [5] Jeff Offutt and Stephen D Lee, “An Empirical Evaluation of Weak Mutation”, IEEE Transactions on Software Engineering, 20(5):337-344, 1994 [6] Jeff Offutt, “Practical Mutation Testing”, Twelfth International Conference on Testing Computer Software, pages 99 109, Washington, DC, 1995 [7] Stefan Brass, Christian Goldberg, Semantic errors in SQL queries: a quite complete list, Journal of Systems and Software, v.79 n.5, p.630-644, 2006 [8] Javier Tuya , Ma Jose Suarez-Cabal, Claudio de la Riva, SQLMutation: A tool to generate mutants of SQL database queries, Proceedings of the Second Workshop on Mutation Analysis, 2006 [9] Roland H Untch, A Jefferson Offutt, Mary Jean Harrold, Mutation analysis using mutant schemata, ACM SIGSOFT Software Engineering Notes, 1993 25 ... luận Trên sở phân tích đột biến câu lệnh truy vấn sở liệu SQL, xây dựng công cụ kiểm thử đột biến áp dụng cho nhiều ứng dụng sử dụng lệnh truy vấn sở liệu cho kết khả quan Công cụ kiểm thử đột biến... sở phân tích đột biến câu lệnh truy vấn sở liệu SQL phần trên, đề xuất thuật toán xây dựng công cụ kiểm thử đột biến cho câu lệnh SQL Bước Nhận câu lệnh SQL vào, kiểm tra, phân tích cú pháp câu. .. lưu tệp tin tài liệu XML 4.4 Bộ sinh đột biến Bộ sinh phân tích nhận đầu vào lược đồ sở liệu câu lệnh truy vấn SQL để phân tích câu lệnh truy vấn chuyển tài liệu XML câu lệnh truy vấn vào mô hình