1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Nghiên cứu phương pháp sinh dữ liệu kiểm thử phần mềm dựa trên kỹ thuật kiểm chứng mô hình

54 35 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 54
Dung lượng 702,93 KB

Nội dung

1 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ PHAN VĂN TIẾN NGHIÊN CỨU PHƢƠNG PHÁP SINH DỮ LIỆU KIỂM THỬ PHẦN MỀM DỰA TRÊN KỸ THUẬT KIỂM CHỨNG MƠ HÌNH LUẬN VĂN THẠC SĨ Hà Nội - 2011 ĐẠI HỌC QUỐC2 GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ PHAN VĂN TIẾN NGHIÊN CỨU PHƢƠNG PHÁP SINH DỮ LIỆU KIỂM THỬ PHẦN MỀM DỰA TRÊN KỸ THUẬT KIỂM CHỨNG MƠ HÌNH NGÀNH: CƠNG NGHỆ THƠNG TIN CHUYÊN NGÀNH: CÔNG NGHỆ PHẦN MỀM MÃ SỐ: 60 48 10 LUẬN VĂN THẠC SĨ NGƢỜI HƢỚNG DẪN KHOA HỌC: TS NGUYỄN TRƢỜNG THẮNG LỜI CẢM ƠN Hà Nội - 2011 LỜI CẢM ƠN Trƣớc tiên xin gửi lời cảm ơn chân thành sâu sắc tới TS Nguyễn Trƣờng Thắng - Viện công nghệ thông tin - Viện khoa học công nghệ Việt Nam Thầy tận tình bảo, giúp đỡ truyền đạt cho nhiều kiến thức kinh nghiệm quý báu thời gian qua Tôi xin cảm ơn thầy giáo, cô giáo khoa Công Nghệ Thông Tin, thầy cô giành cho kiến thức, tình cảm lời khuyên quý báu Cuối xin cảm ơn bạn bè, đồng nghiệp thành viên gia đình tạo điều kiện tốt nhất, động viên, cổ vũ suốt trình học tập nghiên cứu để hoàn thành tốt luận văn tốt nghiệp Tác giả LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu tơi có giúp đỡ thầy hƣớng dẫn Các nội dung nghiên cứu kết đề tài hồn tồn trung thực Trong luận văn, tơi có tham khảo đến số tài liệu số tác giả đƣợc liệt kê phần tài liệu tham khảo cuối luận văn Hà Nội, ngày……tháng……năm…… Tác giả Phan Văn Tiến MỤC LỤC MỞ ĐẦU CHƢƠNG 1- 1.1 Tổng quan kiểm định phần mềm 1.2 Các nhóm kiểm định phần mềm CHƢƠNG 2- 2.1 Giới thiệu JPF 2.1.1 JPF kiểm tra chƣơng trìn 2.1.2 Kiến trúc mức cao JPF 2.1.3 Khả mở rộng JPF 2.1.4 Một số mở rộng JPF 2.2 Thực thi tƣợng trƣng để sinh liệu kiểm thử 2.2.1 Thực thi tƣợng trƣng gì? 2.2.2 Thực thi tƣợng trƣng với JPF 2.2.3 Hƣớng dẫn thực thi tƣợng trƣng với JP 2.2.4 Hạn chế CHƢƠNG 3- 3.1 SMT 3.2 Z3 3.3 Tại lại Z3? 3.4 Kiến trúc Z3 3.5 Định dạng đầu vào 3.6 Định dạng SMT-LIB 3.6.1 Các chức SMT-LIB 3.7 Các quan hệ, phƣơng thức, số 3.7.1 Tất phƣơng thức tuyệt đối ( to 3.7.2 Uninterpreted function số 3.7.3 Phƣơng thức đệ quy 3.8 Số học 3.8.1 Sô học tuyến tính thực 3.8.2 Số hoc tuyến tính nguyên 3.8.3 Trộn số nguyên số thực 3.8.4 Số học phi tuyến tính 3.9 Kiểu liệu 3.9.1 Kiểu ghi 3.9.2 Kiểu liệt kê ( enumeration) 3.9.3Kiểu liệu đệ qui 3.10Ví dụ Z3 3.11Một vài ứng dụng Z3 CHƢƠNG 4-TÍCH HỢP Z3 VỚI JPF 4.1 Nghiên cứu đánh giá giải pháp 4.2 Kiến trúc hệ thống 4.3 Chuyển đổi liệu 4.4 Thiết kế cài đặt 4.5 Kết đánh giá KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN CỦA ĐỀ TÀI TÀI LIỆU THAM KHẢO DANH MỤC CÁC HÌNH Hình 2.1: Mơ hình hoạt động JPF 12 Hình 2.2: Sơ đồ trạng thái trình kiểm thử 13 Hình 2.3: Kiến trúc mức cao 14 Hình 2.4: Mẫu Listener 15 Hình 2.5: Ví dụ thực thi tƣợng trƣng 18 Hình 2.6: Đầu Eclipse cho MyClass1 21 Hình 2.7: Đầu MyClass2 Eclipse 22 Hình 2.8: Đầu MyClass2sau lọc kết Eclipse 24 Hình 2.9: Đầu MyDriver Eclipse 25 Hình 10: Đầu MyClassFP Eclipse 27 Hình 3.1: Kiến trúc Z3 33 Hình 4.1: Kiến trúc hệ thống 43 Hình 4.2: Sơ đồ mức gói 47 Hình 4.3: Sơ đồ lớp tổng quát 48 Hình 4.4: Kết với Choco - số học tuyến tính 49 Hình 5: Kết với z3 - số học tuyến tính 50 Hình 6: Kết với Choco – số học phi tuyến tính 51 Hình 7: Kết với Z3 – số học phi tuyến tính 52 MỞ ĐẦU Trong năm gần đây, việc phát triển phần mềm ngày đƣợc chuyên nghiệp hóa Các phần mềm đƣợc phát triển ngày có quy mô lớn Yêu cầu đảm bảo chất lƣợng phần mềm mục tiêu quan nhất, đặc biệt số lĩnh vực nhƣ y khoa, ngân hàng, hàng không… Việc kiểm thử, kiểm chứng phần mềm cách thủ công đảm bảo đƣợc phần chất lƣợng phần mềm Vì nhiều tổ chức, công ty nghiên cứu phát triển lý thuyết nhƣ công cụ để kiểm chứng, kiểm thử phần mềm cách tự động Xuất phát từ nhu cầu thực tế trên, tác giả nghiên cứu số lý thuyết, công cụ việc kiểm chứng kiểm thử phần mềm Một lý thuyết tảng quan trọng lý thuyết tính thỏa đƣợc, viết tắt SMT (Satisfiability Modulo Theories) Lý thuyết tính thỏa đƣợc đƣợc ứng dụng để giải nhiều tốn cơng nghệ phần mềm nhƣ:     Kiểm chứng chƣơng trình Khám phá chƣơng trình Mơ hình hóa phần mềm Sinh ca kiểm thử Hiện Microsoft Z3 cơng cụ tìm lời giải cho SMT đƣợc áp dụng nhiều dự án Microsoft nhƣ: Pex, Spec#, SLAM/SDV, Yogi Z3 đƣợc đánh già cơng cụ tìm lời giải mạnh Tuy nhiên Z3 đƣợc áp dụng cho ngơn ngữ Microsoft Vì tác giả đặt vấn đề: Liệu sử dụng Z3 để kiểm chứng cho chƣơng trình viết ngơn ngữ khác nhƣ Java? Trong q trình nghiên cứu kiểm chứng chƣơng trình tác giả có tìm hiểu JavaPathFinder (JPF) JPF dự án mã nguồn mở đƣợc phát triển ngôn ngữ Java Hiện có mở rộng JPF việc sinh tự động liệu đầu vào để kiểm thử chƣơng trình Tuy nhiên cịn nhiều hạn chế, tác giả nghĩ đến việc để tích hợp đƣợc Z3 với JPF để sinh tự động liệu kiểm thử chƣơng trình Nếu việc tích hợp thành cơng dẫn tới việc giải đƣợc lớp toán rộng Điều có ý nghĩa thực tế Mục tiêu đề tài: Mục tiêu đề tài nghiên cứu nắm bắt rõ Z3 JPF Sau bƣớc đầu tích hợp thành cơng Z3 JPF để sinh tự động liệu kiểm thử chƣơng trình Java cho tốn mà JPF khơng thể thực đƣợc (ví dụ: sinh tự động liệu cho số học phi tuyến tính) CẤU TRÚC CỦA LUẬN VĂN Luận văn bao gồm phần sau: Mở đầu: Giới thiệu đề tài, tính cấp thiết nhƣ mục tiêu đề tài Chƣơng 1: Cơ sở lý luận Chƣơng 2: JPF Thực thi tƣợng trƣng Nội dung: Giới thiêu JPF gì? Kiến trúc JPF, cách mở rộng, phát triển JPF Ngồi cịn phần quan trọng giới thiệu thực thi tƣợng trƣng để sinh liệu kiểm thử cho chƣơng trình JPF Mở rộng cho phép sinh tự động liệu kiểm thử chƣơng trình Java Chƣơng 3: Microsoft Z3 Nội dung: Giới thiệu lý thuyết tính thỏa đƣợc SMT, Z3, lý thuyết đƣợc hỗ trợ Z3, API Z3 để tích hợp với JPF, ứng dụng Z3 Chƣơng 4: Tích hợp JPF với Z3 Nội dung: Nghiên cứu, đánh giá giải pháp Sau có giải pháp tiến hành thiết kế kiến trúc hệ thống, sau chi tiết hóa sang mức gói, mức lớp cuối cài đặt đánh giá kết Kết luận hƣớng phát triển luận văn Trình bày kết sau nghiên cứu, triển khai hƣớng phát triển 10 CHƢƠNG 1- CƠ SỞ LÝ LUẬN 1.1 Tổng quan kiểm định phần mềm Nhƣ biết, việc kiểm thử phần mềm khâu thiếu bƣớc phát triển phần mềm, đặc biệt phần mềm lớn, nhiều module nhiều ngƣời phát triển, dễ sinh lỗi tiềm ẩn mà nhà phát triển lƣờng trƣớc Trong lĩnh vực kiểm định chất lƣợng phần mềm giới, có nhiều kỹ thuật nhƣng tựu chung phân theo ba nhóm chính: Phân tích mã nguồn tĩnh (static code analysis), kiểm thử liệu động (dynamic data testing) kỹ thuật hình thức dựa mơ hình (model-based verification) Hai nhóm đầu tập trung vào việc nâng cao chất lƣợng phần mềm mức mã nguồn, nhóm cuối xử lý phần mềm mức trừu tƣợng cao – mơ hình 1.2 Các nhóm kiểm định phần mềm Phân tích mã nguồn tĩnh kỹ thuật phát lỗi chƣơng trình mà khơng u cầu chạy chƣơng trình Khơng giống nhƣ kỹ thuật kiểm thử liệu động địi hỏi phải chạy chƣơng trình với liệu đầu vào thật, kỹ thuật phân tích mã nguồn tĩnh xem xét mã nguồn chƣơng trình Kỹ thuật kiểm thử phần mềm dựa mơ hình: khác với hai nhóm điểm đối tƣợng đƣợc kiểm thử mơ hình đƣợc trừu tƣợng hóa từ hệ thống đƣợc xem xét Q trình trừu tƣợng hóa việc lƣợc bỏ chi tiết hệ thống giữ lại thơng tin/khía cạnh quan trọng cần đƣợc lƣu tâm Kỹ thuật trừu tƣợng hóa đơn giản hóa hệ thống đƣợc xem xét giảm khơng gian tìm kiếm thời gian phân tích chƣơng trình nhiều lần so với lúc thực cơng việc phân tích mã nguồn Khi xây dựng xong phần mềm, phải sử dụng testcase (trƣờng hợp kiểm thử) cho việc kiểm thử Chất lƣợng việc kiểm thử phụ thuộc lớn vào tập hợp testcase mà sử dụng Hai tiêu chí việc đánh giá chất lƣợng kiểm thử hiệu cho chất lƣợng phần mềm đƣợc kiểm thử độ phủ dòng chảy (control flow coverage) độ phủ liệu (data coverage) Tiêu chí thứ tập trung vào việc kiểm thử tất điểm điều khiển chƣơng trình (ví dụ: nhánh rẽ khả đạt cấu trúc chƣơng trình – reachable control points) Trong tiêu chí thứ hai tập trung vào tập liệu kiểm thử ứng với điểm điều khiển cấu trúc chƣơng trình Bằng kỹ thuật phân tích chƣơng trình dựa mơ hình sau trừu tƣợng hóa mã nguồn chƣơng trình đƣợc kiểm thử, việc phân tích cấu trúc logic chƣơng trình tập liệu ứng với điểm điều khiển chƣơng trình dễ dàng Qua đó, q 40 Ngồi kiểu liệu Z3 hỗ trợ nhiều kiểu liệu khác nhƣ kiểu bitvector, kiểu mảng… Chi tiết kiểu tham khao tài liệu [5] 3.10 Ví dụ Z3 Z3 có khả đƣa mơ hình nhƣ phần đầu Các mơ hình gán giá trị cho số đầu vào sinh lƣợc đồ chức phần cho ký hiệu vị từ ký hiệu phƣơng thức Sau ví dụ z3, giả sử có file example1.smt la file chứa biểu thức dƣới dạng SMT-LIB format Khi sử dụng z3 để kiểm chứng biểu thức cách sử dụng dòng lệnh z3 /m example1.smt (benchmark example1 :status sat :logic QF_LIA :extrafuns((x1 Int)(x2 Int)(x3 Int)(x4 Int)(x5 Int)) :formula (and (>= (- x1 x2) 1) ( y +z Khi biểu thức bên trái x + 1, bên phải y + z phép so sánh phép lớn “ > “ Một biểu thức đƣợc định nghĩa bao gồm biểu thức bên trái, phép toán biểu thức bên phải Bên dƣới lớp định nghĩa biểu thức cho số thực: class BinaryRealExpression extends RealExpression { RealExpression left; Operator op; RealExpression right; BinaryRealExpression (RealExpression l, Operator o, RealExpression r) { left = l; op = o; right = r; } public double solution() { double l = left.solution(); double r = right.solution(); switch(op){ case PLUS: return l + r; case MINUS: return l - r; case MUL: return l * r; case DIV: assert(r!=0); return l/r; default: throw new RuntimeException("## Error: BinaryRealSolution solution: l " + l + " op " + op + " r " + r); } } public void getVarsVals(Map varsVals) { left.getVarsVals(varsVals); right.getVarsVals(varsVals); } } 45 JPF đƣa lớp chuẩn để chuyển từ định dạng JPF sang công cụ tìm lời giải Đó lớp trừu tƣợng ProblemGenenal, lớp chứa phƣơng thức để chuyển biểu thức nguyên tử ràng buộc nguyên tử sang định dạng cơng cụ tìm lời giải, lớp cụ thể đƣợc mở rộng từ lớp Trong mở rơng có cài đặt ProblemChoco, ProblemIAsolver, ProblemCVC3, tƣơng ứng với việc sử dụng: Choco, IAsolver, CVC3 Ví dụ để chuyển đổi sang định dạng ràng buộc phép lớn IAsolver nhƣ sau: Object gt(Object exp1, Object exp2){ return (String)exp1 + " > " + (String)exp2 + "; "; } Việc mở rộng với Z3 nên tuân thủ mô hình tích hợp với cơng cụ tìm lời giái khác JPF Bây ta phải tổ chức để cho chuyển ràng buộc từ JPF sang SMTLIB Một SMT-LIB có dạng nhƣ sau: (benchmark:// Ten :logic // kieu cua logic vi du so hoc tuyên tinh la: QF_LIA :extrafuns: // Khai bao bien :formula :// Dinh nghia bieu thuc o day ) Trong formula biểu thức cần phải chuyển ràng buộc JPF sang, ví dụ biểu thức đƣợc định nghĩa SMT LIB nhƣ sau (benchmark example :status sat :logic QF_LIA :extrafuns ((x1 Int) (x2 Int) (x3 Int) :formula (and (>= (- x1 x2) 1) (= nhƣ sau: Object geq(int value, Object exp){ return "(>= " + value + " " + (String)exp + ")"; } Object geq(Object exp, int value){ 46 return "(>= " + (String)exp + " " + value + ")"; } Object geq(Object exp1, Object exp2){ return "(>= " + (String)exp1 + " " + (String)exp2 + ")"; } Object geq(double value, Object exp){ return "(>= " + String.format(format,value) + " " + (String)exp + ")"; } Object geq(Object exp, double value){ return "(>= " + (String)exp + " )" + String.format(format,value) + ")"; } Sau ta thực việc lƣu định dạng file theo nhƣ cấu trúc ngôn ngữ SMT-LIB gọi z3 thơng qua dịng lệnh Kết trả đƣợc lƣu đối tƣợng Result Đối tƣợng gồm thuộc tính Boolean vector Biến Boolean = true câu trả lời thỏa mãn, false câu trả lời không thỏa mãn Biến vector lƣu trữ cặp ( biến, giá trị) nhận đƣợc câu trả lời true public class Result { public Boolean result; public Vector vresult; public Result() { super(); vresult= new Vector(); } public Vector getVresult() { return vresult; } public void setVresult(Vector vresult) { this.vresult = vresult; } public Boolean getResult() { return result; } 47 public void setResult(Boolean result) { this.result = result; } } 4.4 Thiết kế cài đặt Việc thiết kế cài đăt phải tuân theo quy tắc mở rộng JPF Vì vậy, ta tạo lớp ProblemZ3 đƣợc sử dụng để chuyển ràng buộc từ JPF sang cấu trúc liệu riêng Tiếp theo ta tạo gói (gói hoạt động tƣơng tự nhƣ thƣ viện Choco, Iasolver, CVC3) Gói có nhiệm vụ chuyển cấu trúc liệu từ Z3 file, sau chạy Z3 thơng qua dịng lệnh với đầu vào file vừa tạo ra, lấy kết từ z3 Chuyển kết từ Z3 sang định dạng chung để lớp ProblemZ3 sử dụng đƣợc Hình 4-2 biểu diễn sơ đồ mức gói: Z3 gov.nasa.jpf.symbc.numeric Hình 4.2: Sơ đồ mức gói Trong sơ đồ lớp hình 4-3, lớp quan trọng lớp ProblemZ3 lớp Z3Solver Trong ProblemZ3 có nhiệm vụ chuyển ràng buộc JPF (PC) sang biểu thức dƣới dạng SMT-LIB Sau gọi lớp Z3Solver để tìm lời giải cho biểu thức Đầu vào Z3Solver biểu thức dƣới dạng SMTL-LIB, Z3Solver có nhiệm vụ lƣu cấu trúc liệu file sau thực thi Z3 thơng qua dịng lệnh trả kết cho đối tƣợng ProblemZ3 48 Hình 4.3: Sơ đồ lớp tổng quát 4.5 Kết đánh giá Chƣơng trình đƣợc hoàn thành Để đánh giá đƣợc chƣơng trình thử ví dụ sau đây: Ví dụ 1: Áp dụng cho số học tuyến tính: Tạo lớp MyClass1 yêu cầu sử dụng JPF để sinh tự động liệu để kiểm thử chƣơng trình này: public class MyClass1 { / The method you need tests for public int myMethod(int x, int y) { int z = x + y; if (z > 0) { z = 1; } else { z = z - x; } z = x * z; 49 return z; } // The test driver public static void main(String[] args) { MyClass1 mc = new MyClass1(); int x = mc.myMethod(1, 2); Debug.printPC("\nMyClass1.myMethod Path Condition: "); } } Hình 4-4 kết sử dụng Choco Hình 4.4: Kết với Choco - số học tuyến tính Và kết sử dụng Z3: 50 Hình 5: Kết với z3 - số học tuyến tính So sánh kết ta thấy cơng cụ cho lời giải Ví dụ 2: Áp dụng cho số học phi tuyến Với ví dụ ta thay z= x + y x*y Lúc z hàm phi tuyến public class MulClass { / The method you need tests for public int myMethod(int x, int y) { int z = x * y; if (z > 10) { z = 1; } else { z = z - x; } z = x * z; return z; } // The test driver public static void main(String[] args) { 51 MulClass mc = new MulClass(); int x = mc.myMethod(1, 2); Debug.printPC("\nMyClass1.myMethod Path Condition: "); } } Kết sử dụng Choco: chƣơng trình thơng báo ngoại lệ ( hình 4-6) Hình 6: Kết với Choco – số học phi tuyến tính Kết sử dụng Z3 đƣợc hình 4-7: 52 Hình 7: Kết với Z3 – số học phi tuyến tính Nhìn vào hình ta thấy Z3 cho mơ hình tƣơng ứng với trƣờng hợp z> 10 z

Ngày đăng: 11/11/2020, 22:00

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w