Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 126 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
126
Dung lượng
785,98 KB
Nội dung
ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA - PHÂN TÍCH TÍNH ĐẦY ĐỦ CHO MỘT PHẦN CHƯƠNG TRÌNH HƯỚNG ĐỐI TƯNG Chun ngành: Khoa học máy tính TP.HỒ CHÍ MINH, tháng 11 năm 2007 Trang i ABSTRACT Many compiler analyses and optimizations require precise information about the behaviour of pointers in order to be effective Points-to analysis is a technique approximating the set of objects to which pointers could point Most points-to analyses require that all source code of the analysed program (whole-program) is available to participate in analysis Therefore, the result of these analyses for partial programs is inadequate due to the unaccounted reciprocal modification effects between an incomplete program and some unknown code To improve analysis precision, some new techniques considered this reciprocal effect Completeness analysis is one of those techniques Up to this time, completeness analysis technique is just implemented on the output of points-to analysis which base on the CHA (Class Hierarchy Class) callgraph This thesis implemented, evaluated and compared completeness analysis on the output of points-to analysis which base on the other callgraph such us RTA (Rapid Type Analysis), VTA (Variable Type Analysis) and “on-the-fly” callgraph The results of experiments are carried out on a set of Java library packages Trang ii TĨM TẮT Một số trình biên dịch ứng dụng cần thơng tin xác thay đổi trỏ lúc thực thi chương trình để tối ưu cải tiến hiệu Phân tích trỏ kỹ thuật xấp xỉ tập đối tượng mà trỏ trỏ đến thời gian thực thi Tuy nhiên, hầu hết kỹ thuật phân tích trỏ u cầu chương trình tham gia phân tích phải có đầy đủ mà nguồn Do đó, áp phân tích trỏ cho chương trình đầy đủ vào chương trình khơng đầy đủ cho kết khơng xác khơng xem xét đến tác động qua lại mã nguồn chương trình không đầy đủ mã nguồn không xác định (nằm ngồi chương trình khơng đầy đủ) Để cải thiện độ xác cho phân tích trỏ, số kỹ thuật phân tích xem xét đến tác động qua lại Kỹ thuật phân tích tính đầy đủ số kỹ thuật Cho đến thời điểm tại, kỹ thuật phân tích tính đầy đủ thực kết phân tích trỏ dựa vào kỹ thuật xác định đồ thị gọi CHA (Class Hierarchy Class) Mục tiêu luận văn thực, đánh giá, so sánh kỹ thuật phân tích tính đầy đủ kết phân tích trỏ dựa đồ thị gọi khác RTA (Rapid Type Class), VTA (Variable Type Class) “on-the-fly” Kết trình thử nghiệm thực số package thư viện Java Trang iii MỤC LỤC ™&˜ CHƯƠNG I: GIỚI THIỆU I/ Động nghiên cứu mục tiêu đề tài: .1 II/ Đóng góp đề tài: III/ Cấu trúc luận văn: CHƯƠNG II: CÁC CƠNG TRÌNH LIÊN QUAN .5 I/ Kỹ thuật phân tích trỏ: II/ Từ khóa truy xuất bổ từ lớp, phương thức, trường: III/ Kỹ thuật phân tích tính đầy đủ: .8 CHƯƠNG III: CƠ SỞ LÝ THUYẾT I/ Các ký hiệu qui ước: .9 I.1/ Qui ước: I.2/ Các ký hiệu sử dụng thường xuyên luận văn: .10 II/ Mơ hình ngơn ngữ lập trình: 12 III/ Kỹ thuật phân tích trỏ: 12 III.1/ Định nghĩa: 12 III.2/ Ứng dụng phân tích trỏ: 13 III.3/ Phân loại kiểu phân tích trỏ: 13 III.3.1/ Phân tích trỏ có lưu ý (flow-sensitive) bỏ qua (flowinsensitive) dòng điều khiển: .13 III.3.2/ Phân tích trỏ có lưu ý (context-sensitive) bỏ qua (contextinsensitive) ngữ cảnh: .14 III.3.3/ Phân tích trỏ tương đương phân tích trỏ dựa vào tập con: 15 Trang iv III.3.4/ Phân tích trỏ có lưu ý bỏ qua đối tượng trường: .15 III.3.5/ Kết luận phân loại kỹ thuật phân tích trỏ: 16 IV/ Kỹ thuật xây dựng đồ thị gọi: 16 IV.1/ Thuật toán CHA (Class Hierarchy Analysis): .17 IV.2/ Thuật toán RTA (Rapid Type Analysis): 18 IV.3/ Thuật toán VTA (Variable Type Analysis): 18 IV.3.1/ Xây dựng đồ thị truyền kiểu: .19 IV.3.2/ Khởi tạo đồ thị truyền kiểu: 20 IV.3.3/ Truyền thông tin kiểu: 20 V/ Các kỹ thuật phân tích trỏ thực Soot: .21 V.1/ Tổng quan Framework Soot: 21 V.2/ Cách thức hoạt động Soot : 21 V.3/ Hiện thực phân tích trỏ Spark : .22 V.4/ Các kỹ thuật xây dựng đồ thị gọi thực Soot : 23 VI/ Chương trình đầy đủ: .23 VI.1/ Định nghĩa chương trình đầy đủ: .23 VI.2/ Các ký hiệu khác dùng chương trình đầy đủ: .23 VI.3/ Đặt tên đối tượng: .24 VI.4/ Các quy luật áp dụng phân tích trỏ cho chương trình đầy đủ: 24 VI.5/ Kỹ thuật xây dựng đồ thị gọi: .25 VII/ Chương trình khơng đầy đủ: 25 VII.1/ Định nghĩa chương trình khơng đầy đủ: 26 VII.2/ Khả triệu gọi từ bên phương thức: 26 VII.3/ Khả truy xuất lớp, phương thức trường: 27 Trang v VII.3.1/ Các quy tắc khả truy xuất trường lớp: 28 VII.3.2/ Các quy tắc khả truy xuất phương thức: 31 CHƯƠNG IV: KỸ THUẬT PHÂN TÍCH TÍNH ĐẦY ĐỦ .33 I/ Các hạn chế sử dụng kỹ thuật phân tích trỏ cho chương trình đầy đủ phân tích cho chương trình khơng đầy đủ: .34 II/ Tính đầy đủ: .35 II.1/ Định nghĩa đối tượng không đầy đủ đối tượng đầy đủ: 36 II.2/ Định nghĩa biến tham chiếu không đầy đủ biến tham chiếu đầy đủ: 36 II.3/ Định nghĩa lệnh gọi phương thức (call site) đầy đủ khơng đầy đủ: 37 III/ Phân tích tính đầy đủ: 37 III.1/ Định nghĩa phân tích tính đầy đủ: .37 III.2/ Kỹ thuật phân tích tính đầy đủ kết hợp: .37 III.3/ Kỹ thuật phân tích tính đầy đủ tuần tự: 39 III.3.1/ Bí danh (alias): 39 III.3.2/ Tập luật kỹ thuật phân tích tính đầy đủ tuần tự: .40 CHƯƠNG V: ĐỒ THỊ CUỘC GỌI TRONG SOOT .43 I/ Các đồ thị gọi thực SOOT: 43 I.1/ Kỹ thuật CHA: 43 I.2/ Kỹ thuật VTA: .44 I.3/ Kỹ thuật RTA: .44 I.4/ Kỹ thuật xây dựng đồ thị gọi đồng thời (“on-the-fly”): 44 I.5/ Ví dụ so sánh đồ thị gọi khác Soot: 45 II/ So sánh số lượng phương thức triệu gọi sử dụng kỹ thuật xây dựng đồ thị gọi khác nhau: 48 CHƯƠNG VI: HIỆN THỰC .50 Trang vi I/ Quá trình phân tích SOOT: .50 II/ Các thách thức gặp phải thực kỹ thuật phân tích tính đầy đủ dựa phương pháp xây dựng đồ thị gọi khác nhau: 52 II.1/ Thách thức đồ thị gọi phân tích trỏ: 52 II.2/ Thách thức kỹ thuật phân tích tính đầy đủ: .55 III/ Các giai đoạn thực: 56 IV/ Hiện thực kỹ thuật phân tích trỏ Spark’: .57 IV.1/ Kỹ thuật phân tích trỏ Spark Soot: 58 IV.2/ Hiện thực kỹ thuật phân tích trỏ Spark’: .61 V/ Hiện thực kỹ thuật phân tích tính đầy đủ: 63 V.1/ Các trạng thái đối tượng/biến tham chiếu thực: 65 V.2/ Giải thuật phân tích tính đầy đủ: 66 V.2.1/ Bước khởi tạo: .67 V.2.2/ Bước lan truyền tính đầy đủ: 69 CHƯƠNG VII: THỬ NGHIỆM 71 I/ Các chương trình dùng thử nghiệm: 71 II/ Thử nghiệm phân tích tính đầy đủ: .79 II.1/ Các biến tham chiếu không đầy đủ: 80 II.2/ Các đối tượng không đầy đủ: 82 II.3/ Các gọi hàm không đầy đủ: 85 II.4/ So sánh kết phân tích tính đầy đủ dựa đồ thị gọi xây dựng kỹ thuật CHA kỹ thuật “on-the-fly”: .88 II.4.1/ Ví dụ minh họa: .89 II.4.2/ Phân tích so sánh chương trình thử nghiệm: 91 II.5/ So sánh kết phân tích tính đầy đủ dựa đồ thị gọi xây Trang vii dựng kỹ thuật VTA kỹ thuật “on-the-fly”: .97 II.6/ So sánh kết phân tích tính đầy đủ dựa đồ thị gọi xây dựng kỹ thuật RTA kỹ thuật “on-the-fly”: .99 II.7/ Thời gian phân tích: 102 II.8/ Kết luận từ trình thử nghiệm: 103 CHƯƠNG VIII: KẾT LUẬN 104 I/ Kết luận: 104 II/ Đóng góp luận văn: 106 III/ Khả mở rộng luận văn: 107 Trang viii DANH SÁCH CÁC BẢNG ™&˜ Bảng III-1: lệnh ngơn ngữ lập trình hướng đối tượng đơn giản 12 Bảng III-2: Khả truy xuất lớp trường m package có chứa mã nguồn không xác định UF .29 Bảng III-3: Khả truy xuất lớp trường m package không chứa mã nguồn không xác định UF 30 Bảng III-4: khả truy xuất phương thức m package chứa mã nguồn không xác định UF .31 Bảng III-5: Khả truy xuất phương thức m package không chứa mã nguồn không xác định UF .32 Bảng V-1: Các đồ thị gọi khác lệnh x1.m() 47 Bảng V-2: đồ thị gọi khác lệnh a1.f.mth() .48 Bảng VI-1: Các trạng thái khác đối tượng thực 65 Bảng VI-2: Các trạng thái khác biến tham chiếu thực 66 Bảng VII-1: thông tin tổng quan chương trình thử nghiệm 72 Bảng VII-2: Các thơng tin khác chương trình thử nghiệm .73 Bảng VII-3: Khả truy xuất từ bên lớp, phương thức, trường 74 Bảng VII-4: Số lượng biến tham chiếu, đối tượng, gọi hàm xem xét thử nghiệm chương trình dựa đồ thị gọi khác .77 Bảng VII-5: Các biến tham chiếu không đầy đủ thử nghiệm chương trình dựa đồ thị gọi khác .82 Bảng VII-6: Các đối tượng không đầy đủ thử nghiệm chương trình dựa đồ thị gọi khác 84 Bảng VII-7: Các gọi hàm không đầy đủ thử nghiệm chương trình dựa đồ thị gọi khác .87 Bảng VII-8: Khả truy xuất phương thức trường 90 Bảng VII-9: So sánh biến tham chiếu cục sử dụng đồ thị gọi “onthe-fly” sử dụng CHA xét phạm vi phương thức triệu gọi Trang ix sử dụng đồ thị gọi “on-the-fly” 93 Bảng VII-10: So sánh đối tượng, gọi hàm sử dụng đồ thị gọi “on-the-fly” sử dụng CHA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” 95 Bảng VII-11: So sánh biến tham chiếu cục sử dụng đồ thị gọi “onthe-fly” sử dụng VTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” 98 Bảng VII-12: So sánh đối tượng, gọi hàm sử dụng đồ thị gọi “on-the-fly” sử dụng VTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” 99 Bảng VII-13: So sánh biến tham chiếu cục sử dụng đồ thị gọi “onthe-fly” sử dụng RTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” 100 Bảng VII-14: So sánh đối tượng, gọi hàm sử dụng đồ thị gọi “on-the-fly” sử dụng RTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” 102 Trang 100 awt 107826 53621 52691 51969 1652 722 font 94416 23219 23013 22724 495 289 beans 95856 26899 26352 26139 760 213 lang 39852 24397 23939 23882 515 57 jutil 42178 27699 27228 26950 749 278 naming 95389 21733 21157 20983 750 174 10 swing 118589 76649 74118 71690 4959 2428 11 rtf 94082 20679 19981 19858 821 123 12 corba 97017 23157 22799 22716 441 83 (1): Tổng số biến tham chiếu cục (khơng tính đến trường biến tham chiếu trường lớp) không đầy đủ sử dụng đồ thị gọi RTA (2): Số biến tham chiếu cục không đầy đủ sử dụng đồ thị gọi RTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” (3): Số biến tham chiếu cục không đầy đủ sử dụng đồ thị gọi “on-the-fly” (4): Số biến tham chiếu cục không đầy đủ sử dụng đồ thị gọi “on-the-fly” trùng với biến tham chiếu cục không đầy đủ sử dụng đồ thị gọi RTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” (5): Số biến tham chiếu cục không đầy đủ sử dụng đồ thị gọi RTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” không trùng với biến tham chiếu cục không đầy đủ sử dụng đồ thị gọi “on-the-fly” (6): Số biến tham chiếu cục không đầy đủ sử dụng đồ thị gọi “on-the-fly” không trùng với biến tham chiếu cục không đầy đủ sử dụng đồ thị gọi RTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “onthe-fly” Bảng VII-13: So sánh biến tham chiếu cục sử dụng đồ thị gọi “on-thefly” sử dụng RTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 101 STT Tên viết tắt CosNaming io cutil awt font beans lang jutil naming 10 swing 11 rtf 12 corba (*) (1) (2) RTA 5127 3124 “on-the-fly” 5610 3163 RTA 4228 3114 “on-the-fly” 5047 3155 RTA 3967 2955 “on-the-fly” 4421 2993 RTA 10974 5707 “on-the-fly” 12940 5841 RTA 4252 2952 “on-the-fly” 4646 2998 RTA 4269 3139 “on-the-fly” 4768 3278 RTA 3824 3031 “on-the-fly” 4281 3070 RTA 4905 3250 “on-the-fly” 5477 3407 RTA 3579 2602 “on-the-fly” 3799 2639 RTA 20343 6408 “on-the-fly” 21815 6503 RTA 3525 2676 “on-the-fly” 3565 2711 RTA 3674 2751 “on-the-fly” 4593 2784 (*): Loại đồ thị gọi (1): Số gọi hàm không đầy đủ (xác định không xác định) xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” (2): Số đối tượng không đầy đủ xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 102 Bảng VII-14: So sánh đối tượng, gọi hàm sử dụng đồ thị gọi “onthe-fly” sử dụng RTA xét phạm vi phương thức triệu gọi sử dụng đồ thị gọi “on-the-fly” II.7/ Thời gian phân tích: Để đo khoảng thời gian chênh lệch kỹ thuật phân tích tính đầy đủ so với kỹ thuật phân tích trỏ (Spark), dùng tỉ lệ sau: t SCA t PA đó: • tSCA tổng tồn thời gian phân tích tính đầy đủ (kể thời gian phân tích trỏ thời gian phân tích để lấy đồ thị gọi có) • tPA tổng thời gian phân tích trỏ thời gian phân tích để lấy đồ thị gọi (tPA kỹ thuật CHA, “on-the-fly” nhỏ tPA kỹ thuật RTA VTA cần thực thi phân tích Spark lần RTA VTA cần thực thi phân tích Spark lần) Từ đồ thị Hình VII-12 nhận xét: tỉ lệ thời gian kỹ thuật phân tích tính đầy đủ “on-the-fly” số lượng phương thức triệu gọi nhỏ Tỉ lệ thời gian phân tích h CHA VTA "on-the-fly" RTA 1.3 1.25 1.2 1.15 1.1 1.05 a rb co rtf t fo nt be an s la ng ju t n a il m in g sw in g aw til cu io Co sN am in g 0.95 Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 103 Hình VII-12: Tỉ lệ thời gian thực thi kỹ thuật phân tích tính đầy đủ so với thời gian thực thi kỹ thuật phân tích trỏ Spark II.8/ Kết luận từ trình thử nghiệm: Kết thử nghiệm cho thấy tập đầy đủ đồ thị gọi khác khơng bao phủ lẫn nhau, có nghĩa số phần tử (đối tượng/biến tham chiếu/lệnh gọi hàm) đầy đủ dùng đồ thị gọi không đầy đủ dùng đồ thị gọi khác Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 104 CHƯƠNG VIII: KẾT LUẬN ™&˜ I/ Kết luận: Khi phân tích phần chương trình, kỹ thuật phân tích tính đầy đủ phải dựa tập xấp xỉ phương thức đích triệu gọi lệnh gọi hàm Do đó, kết kỹ thuật phân tích tính đầy đủ phụ thuộc vào kết kỹ thuật xây dựng đồ thị gọi Mục đích luận văn phân tích, đánh giá ảnh hưởng kỹ thuật xây dựng đồ thị gọi đến kết phân tích tính đầy đủ Nhằm thực mục tiêu trên, số kỹ thuật xây dựng gọi khác (VTA, RTA, CHA, “on-the-fly”) kết hợp kỹ thuật phân tích tính đầy đủ thực Để phân tích tính đầy đủ cho chương trình cần phải có đồ thị gọi kết phân tích trỏ thích hợp Mục đích giai đoạn phân tích trỏ (có tên gọi Spark) Soot đưa kết tập đối tượng mà tham chiếu trỏ đến, dựa đồ thị gọi theo phương pháp CHA xây dựng từ trước Ngoài ra, kết phụ mà kỹ thuật đem lại đồ thị gọi xác dùng phương pháp xây dựng đồ thị gọi “on-the-fly” Một ứng dụng kết phân tích trỏ giúp xây dựng đồ thị gọi theo phương pháp VTA RTA cách gộp nút biểu diễn biến tham chiếu nút biểu diễn đối tượng có kiểu Tuy nhiên, cách thực làm thay đổi kết phân tích trỏ sau thu kết xây dựng đồ thị gọi theo phương pháp VTA RTA Và thách thức trình thực kỹ thuật phân tích tính đầy đủ đồ thị gọi theo phương pháp VTA RTA Thách thức giải cách thực giai đoạn phân tích trỏ lần thứ sau thu đồ thị gọi theo phương pháp VTA RTA Q trình thực giai đoạn phân tích trỏ lần thứ phải đảm bảo không thay đổi đồ thị gọi Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 105 Tồn q trình thực kỹ thuật phân tích tính đầy đủ cài đặt gói wjtp SOOT Gói wjtp phân tích sau gói phân tích trỏ Spark xây dựng đồ thị gọi cg Quá trình thực gặp phải thách thức trình phân tích trỏ xây dựng đồ thị gọi Khi sử dụng phương pháp xây dựng đồ thị gọi RTA VTA, kỹ thuật phân tích trỏ Spark xây dựng đồ thị gọi xác kết phân tích trỏ khơng giống mong đợi Do đó, phải thực thêm kỹ thuật phân tích trỏ Spark’, kỹ thuật dựa ý tưởng kỹ thuật phân tích trỏ Spark Kỹ thuật phân tích trỏ dựa đồ thị gọi có từ q trình phân tích trỏ Spark trước Ngồi ra, thách thức khơng nhỏ q trình thực kỹ thuật phân tích tính đầy đủ tốn tìm giao tập trỏ Bởi vì, luật phân tích tính đầy đủ SCA sử dụng nhiều đến phép toán giao tập trỏ Và thời gian thực thi tìm giao tập trỏ lớn phải duyệt qua tất đối tượng tập giao Thách thức giải cách thêm vào trạng thái trung gian hai trạng thái đầy đủ không đầy đủ đối tượng biến tham chiếu Thay phải duyệt qua tất đối tượng tập trỏ cần kiểm tra trạng thái trung gian Để đánh giá ảnh hưởng đồ thị gọi kết phân tích tính đầy đủ, số thử nghiệm thực số thư viện (các package cụ thể thư viện JDK 1.4) Quá trình thử nghiệm xuất phát từ việc đánh giá tỉ lệ phần trăm biến tham chiếu không đầy đủ, đối tượng không đầy đủ lệnh gọi hàm không đầy đủ tất phương thức triệu gọi đồ thị gọi khác Sau đó, q trình thử nghiệm thu hẹp phạm vi so sánh tập phương thức triệu gọi trùng đồ thị gọi khác Kết thử nghiệm cho thấy tập đầy đủ đồ thị gọi khác khơng bao phủ lẫn nhau, có nghĩa số phần tử (đối tượng/biến tham chiếu/lệnh gọi hàm) đầy đủ dùng đồ thị gọi không đầy đủ dùng đồ thị gọi khác Từ kết trình thử nghiệm phân tích, rút kết luận sau: Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 106 • Kết phân tích tính đầy đủ dựa đồ thị gọi khác không trùng không bao phủ lẫn Mặc dù, lệnh gọi m, Cmon-thefly, tập phương thức đích m xây dựng đồ thị gọi dùng phương pháp on-the-fly, tập CmCHA, tập phương thức đích m xây dựng đồ thị gọi dùng phương pháp CHA tập đầy đủ xác định dùng đồ thị gọi xây dựng phương pháp CHA không tập tập đầy đủ xác định dùng đồ thị gọi xây dựng phương pháp on-the-fly Điều minh chứng trường hợp dùng đồ thị gọi xây dựng phương pháp khác Do vậy, phương pháp xây dựng đồ thị gọi xác khơng giúp kỹ thuật phân tích tính đầy đủ xác • Kết mở hướng mới: tăng tính xác kỹ thuật phân tích tính đầy đủ thơng qua việc kết hợp kết phân tích tính đầy đủ dùng nhiều kỹ thuật xây dựng đồ thị gọi khác II/ Đóng góp luận văn: • Đã thực kỹ thuật phân tích tính đầy đủ nhiều kỹ thuật xây dựng đồ thị gọi khác (CHA, VTA, RTA, on-the-fly) Dựa kết thực này, rút kết luận quan trọng tập đầy đủ nhiều đồ thị gọi khác khơng bao phủ lẫn • Đã thử nghiệm kỹ thuật phân tính tính đầy đủ thư viện thực tế (các package thư viện JDK 1.4) • Phân tích, đánh giá so sánh kết phân tích tính đầy đủ kết phân tích trỏ dựa vào kỹ thuật xác định đồ thị gọi khác Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 107 III/ Khả mở rộng luận văn: • Kết thử nghiệm luận văn dẫn đến khả nâng cao tính xác cho kỹ thuật phân tích tính đầy đủ cách kết hợp kết phân tích tính đầy đủ dựa đồ thị gọi khác • Luận văn thực kỹ thuật phân tích tính đầy đủ kỹ thuật xây dựng đồ thị gọi khác Mặt khác, kỹ thuật phân tích tính đầy đủ kết hợp thực kỹ thuật xây dựng đồ thị gọi CHA Do đó, tiếp tực mở rộng khả thực kỹ thuật phân tích tính đầy đủ kết hợp với đồ thị gọi khác Dựa kết thực phân tích, đánh giá khía cạnh sau: o Kết phân tích tính đầy đủ thân kỹ thuật phân tích tính đầy đủ kết hợp so sánh kỹ thuật xây dựng đồ thị gọi khác (CHA, VTA, RTA on-the-fly) o So sánh kết phân tích tính đầy đủ kỹ thuật phân tích tính đầy đủ phân tích tính đầy đủ kết hợp kỹ thuật xây dựng đồ thị gọi cụ thể (1 kỹ thuật xây dựng đồ thị gọi) Nghiên cứu [26] đưa đến kết luận kỹ thuật phân tích tính đầy đủ kết hợp cho kết xác kỹ thuật phân tích tính đầy đủ kỹ thuật xây dựng đồ thị gọi CHA Hướng mở rộng đưa kết luận kỹ thuật xây dựng đồ thị gọi khác • Hiện thực, đánh giá kết mở rộng kỹ thuật phân tích tính đầy đủ dựa kết phân tích trỏ có quan tâm đến ngữ cảnh dòng điều khiển So với kỹ thuật phân tích trỏ khơng quan tâm đến ngữ cảnh dịng điều khiển, kỹ thuật phân tích trỏ có quan tâm đến ngữ cảnh dịng điều khiển cho kết phân tích trỏ xác bù lại thời gian phân tích dài yêu cầu phần cứng (PC) phải cao Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 108 CÁC KÝ HIỆU ™&˜ W Một chương trình đầy đủ LW Tập hợp lớp W MW Tập hợp phương thức W FW Tập hợp trường khai báo W SW Tập hợp lệnh MW VW Tập hợp biến tham chiếu xuất MW CW Đồ thị gọi W PTW(v) Tập đối tượng trỏ tới biến tham chiếu v phân tích W ∅W Tập hợp tất đối tượng tạo W η Tập hợp tất điểm đầu vào (phương thức tĩnh, phương thức main) W F Một phần chương trình LF Tập hợp lớp F MF Tập hợp phương thức F FF Tập hợp trường khai báo F SF Tập hợp lệnh MF VF Tập hợp biến tham chiếu xuất MF CF Đồ thị gọi F PTF(v) Tập đối tượng trỏ tới biến tham chiếu v phân tích F RMF Tập hợp phương thức triệu gọi F IMF Tập hợp phương thức phân tích F EMF Tập hợp phương thức khơng phân tích UF Tập hợp mã nguồn không xác định Si Tập hợp gọi hàm không đầy đủ Ri Tập hợp biến tham chiếu khơng đầy đủ Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 109 Θ Tập hợp đối tượng không đầy đủ ∅F Tập hợp tất đối tượng tạo F Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 110 CÁC TỪ VIẾT TẮT ™&˜ CHA Class Hierarchy Analysis Kỹ thuật xây dựng đồ thị gọi theo phân cấp lớp PA whole-program Points-to Analysis Kỹ thuật phân tích trỏ chương trình đầy đủ RTA Rapid Type Analysis Kỹ thuật xây dựng đồ thị gọi dựa vào kiểu tất đối tượng chương trình SCA Sequence Complete Analysis Kỹ thuật phân tích tính đầy đủ cho phần chương trình VTA Variable Type Analysis Kỹ thuật xây dựng đồ thị gọi dựa vào kiểu đối tượng truyền vào biến không phân biệt đối tượng trường Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 111 TÀI LIỆU THAM KHẢO ™&˜ [1] Aneesh Aggarwal and Keith H Randall Related field analysis In ACM SIGPLAN ’01 Conference on Programming Language Design and Implementation, June 2001 [2] David F Bacon and Peter F Sweeney Fast static analysis of C++ virtual function calls In ACM SIGPLAN ’96 Conference on Object-Oriented Programming, Systems, Languages and Applications, SIGPLAN Notices, pages 324–341 ACM Press, Oct 1996 [3] Bruno Blanchet Escape analysis: Correctness proof, implementation and experimental results In 25th Annual ACM Symposium on Principles of Programming Languages, pages 25–37, January 1998 [4] Craig Chambers, Jeffrey Dean, and David Grove Whole-program optimization of object-oriented languages Technical Report TR-96-06-02, University of Washington, Seattle, Washington 98195-2350 USA, 28, 1996 [5] Jong-Deok Choi, Manish Gupta, Mauricio J Serrano, Vugranam C Sreedhar, and Samuel P Midkiff Escape analysis for Java In 14th ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages and Applications, pages 1–19, November 1999 [6] Sanjay Ghemawat, Keith H Randall, and Daniel J Scales Field analysis: Getting useful and low-cost interprocedural information In ACM SIGPLAN ’00 Conference on Programming Language Design and Implementation, June 2000 [7] Christian Grothoff, Jens Palsberg, and Jan Vitek Encapsulating objects with confined types In 16th ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages and Applications, October 2001 [8] Mary Jean Harrold and Gregg Rothermel Separate computation of alias information for reuse IEEE Transaction on Software Engineering, 22(7):442– 460, 1996 [9] Martin Hirzel, Amer Diwan, and Michael Hind Pointer analysis in the Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 112 presence of dynamic class loading In 18th European Conference on ObjectOriented Programming, June 2004 [10] Bill Joy, Guy Steele, James Gosling, and Gilad Bracha Java(TM) Language Specification (2nd Edition) Addison-Wesley, 2000 [11] Ondˇrej Lhot´ak Spark: A flexible points-to analysis framework for Java Master’s thesis, School of Computer Science, McGill University, Montreal, February 2003 [12] Ondˇrej Lhot´ak and Laurie Hendren Scaling Java points-to analysis using Spark In 12th International Conference on Compiler Construction, volume 2622 of LNCS, pages 153–169, Warsaw, Poland, April 2003 Springer [13] Donglin Liang, Maikel Pennings, and Mary Jean Harrold Extending and evaluating flow-insensitive and context-insensitive points-to analyses for Java In ACM SIGPLAN/SIGSOFT ’01 Workshop on Program Analysis for Software Tools and Engineering, pages 73–79, 2001 [14] Igor Pechtchanski and Vivek Sarkar Dynamic optimistic interprocedural analysis: a framework and an application In 16th ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages and Applications, October 2001 [15] S Porat, M Biberstein, L Koved, and B Mendelson Automatic detection of immutable fields in Java In Proceedings of CASCON 2000, 2000 [16] Feng Qian and Laurie Hendren Towards dynamic interprocedural analysis in JVMs In 3rd ACM SIGPLAN Symposium on Virtual Machine Research and Technology, May 2004 [17] Atanas Rountev, Ana Milanova, and Barbara G Ryder Fragment class analysis for testing of polymorphism in java software In 25th International Conference on Software Engineering, May 2003 [18] Atanas Rountev and Barbare G Ryder Practical points-to analysis for programs built with libraries Technical Report 410, Rutgers University, February 2000 [19] Vugranam C Sreedhar, Michael Burke, and Jong-Deok Choi A framework Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 113 for interprocedural optimization in the presence of dynamic class loading In ACM SIGPLAN ’00 Conference on Programming Language Design and Implementation, pages 196–207, June 2000 [20] Vijay Sundaresan, Laurie Hendren, Chrislain Razafimahefa, Raja Vall´ee-Rai, Patrik Lam, Etienne Gagnon, and Charles Godin Practical virtual method call resolution for Java In ACM SIGPLAN ’00 Conference on ObjectOriented Programming, Systems, Languages and Applications, pages 264– 280, 2000 [21] Frank Tip and Jens Palsberg Scalable propagation-based call graph construction algorithms In ACM SIGPLAN ’00 Conference on ObjectOriented Programming, Systems, Languages and Applications, pages 281– 293, October 2000 [22] Fr´ed´eric Vivien and Martin C Rinard Incrementalized pointer and escape analysis In ACM SIGPLAN ’01 Conference on Programming Language Design and Implementation, pages 35–46, June 2001 [23] John Whaley and Martin Rinard Compositional pointer and escape analysis for Java programs In 14th ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages and Applications, pages 187–206, November 1999 [24] Jingling Xue and Phung Hua Nguyen Completeness analysis for incomplete object-oriented programs In 14th International Conference on Compiler Construction, pages 271–286, April 2005 [25] Ayal Zaks, Vitaly Feldman, and Nava Aizikowitz Sealed calls in Java packages In 15th ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages and Applications, October 2000 [26] Nguyễn Hứa Phùng Static Analysis for Incomplete Object-Oriented Programs Doctor’s thesis, School of Computer Science and Engineering, University of New South Waves, August 2005 [27] Atanas Rountev, Ana Milanova, and Barbara G.Ryder Points-to analysis for Java using annotated constraints In 16th ACM SIGPLAN Conference on Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn Trang 114 Object-Oriented Programming, Systems, Languages and Applications, October 2001 [28] Ramkrishna Chatterjee, Barbara G.Ryder and William A.Landi Relevant context inference In 26th Annual ACM Symposium on Principles of Programming Languages, 1999 [29] Erik Ruf Effective synchronization removal for Java In PLDI’00: Proceedings of the ACM SIGPLAN 2000 conference of Programming language design and implementation, pages 208-218, New York, NY, USA, 2000 ACM Press [30] Bjarne Steensgaard Points-to analysis in almost linear time In 23rd Annual ACM Symposium on Principles of Programming Languages, pages 32-41, 1996 [31] Raja Vallee-Rai Soot: A Java bytecode optimization framework Master’s thesis, School of Computer Science, McGill University, Montreal, October 2000 Kỹ thuật phân tích tính đầy đủ SVTH: Nguyễn Thanh Sơn ... thuật phân tích trỏ cho chương trình đầy đủ phân tích cho chương trình khơng đầy đủ: Nếu sử dụng kỹ thuật phân tích trỏ cho chương trình đầy đủ để phân tích cho chương trình khơng đầy đủ (một phần. .. không đầy đủ) kết phân tích trỏ cho chương trình đầy đủ kỹ thuật phân tích tính đầy đủ khơng làm điều Chúng ta xem chương trình khơng đầy đủ chương trình đầy đủ phân tích kỹ thuật phân tích trỏ cho. .. thuật phân tích tính đầy đủ kết hợp kỹ thuật phân tích tính đầy đủ Kỹ thuật phân tích tính đầy đủ kết hợp sửa đổi kết phân tích trỏ kỹ thuật phân tích trỏ cho chương trình đầy đủ Kỹ thuật phân tích