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Ĩ ĐẠI HỌC QUỐC GIA

54 67 0
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Ĩ ĐẠI HỌC QUỐC GIA

Đ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

Đề tại luận văn Thạc Sĩ: "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" thực hiện tại Đại Học Công Nghệ Đại Học Quốc Gia Hà Nội. Trong những năm gần đây, việc phát triển phần mềm ngày càng được chuyên nghiệp hóa. Các phần mềm được phát triển ngày càng có quy mô lớn. Yêu cầu đảm bảo chất lượng phần mềm là một trong những mục tiêu quan trong nhất, đặc biệt trong mộ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 một cách thủ công chỉ đảm bảo được phần nào chất lượng của phần mềm. Vì vậy rất nhiều các tổ chức, công ty đã nghiên cứu và phát triển các lý thuyết cũng như công cụ để kiểm chứng, kiểm thử phần mềm một cách tự động.Xuất phát từ nhu cầu thực tế trên, tác giả đã nghiên cứu một số lý thuyết, công cụtrong việc kiểm chứng và kiểm thử phần mềm. Một lý thuyết nền tảng rất quan trọng đó là lý thuyết về tính thỏa được, viết tắt là SMT (Satisfiability Modulo Theories). Lý thuyết về tính thỏa được đã được ứng dụng để giải quyết nhiều bài toán trong công nghệ phần mềm như:Kiểm chứng chương trìnhKhám phá chương trìnhMô hình hóa phần mềmSinh các ca kiểm thửHiện nay Microsoft Z3 là một công cụ tìm lời giải cho SMT đang được áp dụngtrong nhiều dự án của Microsoft như: Pex, Spec, SLAMSDV, Yogi. Z3 được đánh già là công cụ tìm lời giải mạnh nhất hiện nay. Tuy nhiên Z3 chỉ được áp dụng cho các ngôn ngữ của Microsoft. Vì vậy tác giả đặt ra vấn đề: Liệu có thể sử dụng Z3 để kiểm chứng cho các chương trình viết bằng ngôn ngữ khác như Java?Trong quá trình nghiên cứu về kiểm chứng chương trình tác giả cũng có tìm hiểuvề JavaPathFinder (JPF). JPF là một dự án mã nguồn mở được phát triển trên ngôn ngữ Java. Hiện nay có một mở rộng của JPF trong việc sinh tự động dữ liệu đầu vào để kiểm thử chương trình. Tuy nhiên còn rất nhiều hạn chế, vì vậy tác giả đã nghĩ đến việc làm sao để tích hợp được Z3 với JPF để có thể sinh tự động dữ liệu kiểm thử chương trình. Nếu việc tích hợp thành công thì sẽ dẫn tới việc giải quyết được lớp bài toán rộng hơn. Điều này là rất có ý nghĩa đối với thực tế.

  ĐẠ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Ố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   NGÀ NH: CÔNG NGHỆ THÔNG THÔNG TIN  CHUYÊN NGÀNH: CÔNG NGHỆ 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  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  - Viện Trƣờng công tin -tôiViện khoa học Việtnghiệm Nam Thầy tận tình Thắng bảo, giúp đỡ nghệ truyềnthơng đạt cho nhiều kiếncông thức nghệ kinh quý báu thời gian qua.  Tôi xin cảm ơn các  thầy giáo, cô giáo khoa Công Nghệ Thông Tin, thầy cô giành cho t ôi 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ũ tơi suốt q trình học tập nghiên cứu để hoàn thành tốt luận văn tốt nghiệp này.  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 hoàn toà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……  ngày……tháng……năm……  Tác giả Phan Văn Tiến    MỤC LỤC  MỞ ĐẦU  8  10  CHƢƠNG -   CƠ SỞ LÝ LUẬN   1.1  Tổng quan kiểm định phần mềm   10  1.2  Các nhóm kiểm định phần mềm  10  CHƢƠNG -   JAVA PATH FINDER VÀ THỰC THI TƢỢNG TRƢNG  12  2.1  Giới thiệu JPF 12  2.1.1  JPF kiểm tra chƣơng trình gì?   13  2.1.2  Kiến trúc mức cao JPF   14   2.1.3  Khả mở rộng JPF   15  2.1.4  Một số mở rộng JPF  16   2.2  Thực thi tƣợng trƣng để sinh liệu kiểm thử  17  2.2.1  Thực thi tƣợng trƣng gì? g ì?  17  2.2.2  Thực thi tƣợng trƣng với JPF  18  2.2.3  Hƣớng dẫn thực thi tƣợng trƣng với JPF  19  2.2.4  Hạn chế  29  CHƢƠNG -   MICROSOFT Z3 31  3.1  SMT 31  3.2  Z3 31  3.3  Tại lại Z3?  32  3.4  Kiến trúc Z3 32  3.5  Định dạng đầu vào  33  34  3.6  Định dạng SMT-LIB 3.6.1  Các chức SMT -LIB 34  3.7  Các quan hệ, phƣơng thức, số   35  3.7.1  Tất phƣơng thức tuyệt đối ( total)  35   3.7.2  Uninterpreted function số 36  3.7.3  Phƣơng thức đệ quy  36  3.8  Số học 37  3.8.1  Sô học tuyến tính thực  37   3.8.2  Số hoc tuyến tính nguyên  37      3.8.3 3.8.4  38 Trộn số nguyên số thực   Số học phi tuyến tính  38     3.9  Kiểu liệu   39  3.9.1  Kiểu ghi 39  3.9.2  Kiểu liệt kê ( enumeration)  39   3.9.3  Kiểu liệu đệ qui.  39  3.10  Ví dụ Z3  40   3.11  Một vài ứng dụng Z3  40  42   CHƢƠNG -   TÍCH HỢP Z3 VỚI JPF  4.1   Nghiên cứu đánh giá giải pháp   42  4.2  Kiến trúc hệ thống  42  4.3  Chuyển đổi liệu  43  4.4  Thiết kế cài đặt  47  4.5  Kết đánh giá 48  KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN CỦA ĐỀ TÀI  53  TÀI LIỆU THAM KHẢO  54    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  14  Hình 2.3: Kiến trúc mức cao  Hình 2.4: Mẫu Listener .  15  Hình 2.5: Ví dụ thực thi tƣợng 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 u cầu đảm bảo chất lƣợng phần mềm mục tiêu quan  trong 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 kiể m thử phần mềm Một lý thu thuyết yế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 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 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 quả.  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 -  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 phần  mềm là một khâu không thể  thiếu trong phần mềm, đặc  biệt biệt các  phần  mềm  lớn, nhiều module nhiều ngƣời  bƣớc phát triển  phần  phát triển, dễ sinh lỗi  tiềm  ẩn mà nhà phát triển không thể l ƣờng tr ƣớc ƣớ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 iểm thử liệu động (dynamic data testing) kỹ thuật hình thức  dựa mơ analysis), k iểm hình (model- based  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ơ  mơ hình 1.2  ác nhóm kiểm định phần mềm    C ác 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ử   dữ   liệu động  địi hỏi phải chạy chƣơng trình vớ i dữ liệu đầu vào thật, k ỹ thuật phân tích mã nguồn tĩnh chỉ 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 ở   trên ở   điểm đối tƣợng đƣợ c kiểm thử là mô hình đƣợ c tr ừu ừu tƣợ ng ng hóa từ hệ thống đƣợ c xem xét Q trình tr ừu ừu tƣợ ng ng hóa việc lƣợ c bỏ những chi tiết hệ thống chỉ 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 ừ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ử là 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ể 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 đó,   40  Ngoài kiểu liệu Z3 hỗ trợ nhiều kiểu liệu khác nhƣ kiểu bit vector, 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 MINUS: PLUS: return PLUS: case returnl l+-r;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 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 tn 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 SMT-LIB 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.format(format,value) + " " + (String)exp + ") ")"; "; } Object geq(Object exp, double value){ return "(>= " + (String)exp + " )" + String.format(format,value) 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â câuu 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 setVresult(Vector vresult) { this.vresult = vresult; }  public Boolean getResult() getResult() { } return result;   47  public void setResult(Boolean 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 n nasa jp jpf sy sy m mbbc nu numeric gov n nasa jp jpf s sy mb mbc zz33wrapper 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[] main(String[] args) { MyClass1 mc = new MyClass1(); int x = mc.myMethod(1, 2); Debug.printPC("\nMyClass1.myMethod Debug.printPC("\nMyClass1.myMeth od 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ụ trên ta thay z= x + y 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[] main(String[] args) {   51 MulClass mc = new MulClass(); int x = mc.myMethod(1, 2); Debug.printPC("\nMyClass1.myMethod Debug.printPC("\nMyClass1.myMeth od Path Condition: "); } } Kết sử dụng Choco: chƣơn g 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 khi 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 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: 04/08/2020, 16:16

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan