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

Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm

66 3 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

Tiêu đề Nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Tác giả Trần Mạnh Đông
Người hướng dẫn TS. Nguyễn Trường Thắng
Trường học Đại học quốc gia Hà Nội
Chuyên ngành Công nghệ thông tin
Thể loại luận văn thạc sĩ
Năm xuất bản 2013
Thành phố Hà Nội
Định dạng
Số trang 66
Dung lượng 0,97 MB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TRẦN MẠNH ĐƠNG NGHIÊN CỨU KỸ THUẬT PHÂN TÍCH CHƯƠNG TRÌNH TĨNH TRONG VIỆC NÂNG CAO CHẤT LƯỢNG PHẦN MỀM LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội – 2013 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TRẦN MẠNH ĐÔNG NGHIÊN CỨU KỸ THUẬT PHÂN TÍCH CHƯƠNG TRÌNH TĨNH TRONG VIỆC NÂNG CAO CHẤT LƯỢNG PHẦN MỀM 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Ĩ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Nguyễn Trường Thắng Hà Nội – 2013 Ph LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mục lục LỜI CÁM ƠN LỜI CAM ĐOAN MỤC LỤC DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT DANH MỤC CÁC HÌNH VẼ MỞ ĐẦU Giới thiệu 1.1 Giới thiệu phân tích chương trình 1.2 Điểm mạnh điểm yếu 10 1.3 Các cơng nghệ phân tích chương trình tĩnh 10 1.4 Nền tảng 12 1.4.1 Đồ thị luồng điều khiển 12 1.4.2 Lý thuyết Dàn 15 1.4.3 Thuật toán điểm cố định 21 Phân tích chương trình tĩnh 24 2.1 Phân tích luồng liệu nội thủ tục 24 2.1.1 Phân tích quay lại (backward) 25 2.1.2 Phân tích chuyển tiếp (forward) 31 2.2 Phân tích luồng liệu liên thủ tục 40 2.2.1 Xây dựng đồ thị luồng liệu 41 2.2.2 Tính cảm ngữ cảnh (context sensitivity) 43 2.2.3 Ứng dụng phân tích luồng liệu liên thủ tục 45 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thực nghiệm 47 3.1 Tổng quan SOOT 47 3.1.1 Giới thiệu 47 3.2 Phân tích chương trình với SOOT Eclipse 48 KẾT LUẬN 52 TÀI LIỆU THAM KHẢO 53 PHỤ LỤC A 55 PHỤ LỤC B 57 PHỤ LỤC C 60 PHỤ LỤC D 62 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT CFG Control Flow Graph CNPM Công nghệ phần mềm CNTT Công nghệ thông tin DFA Data Flow Analysis LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Danh sách hình vẽ 1.1 CFG cho lệnh 13 1.2 CFG cho lệnh 13 1.3 CFG cho lệnh if, if-else 13 1.4 CFG cho lệnh while, for 14 1.5 CFG chương trình tính giai thừa 15 1.6 Biểu đồ Hasse biểu diễn Dàn 16 1.7 Các biểu đồ Hasse Dàn 17 1.8 Các biểu đồ Hasse Dàn 17 1.9 Phép toán cộng dàn 19 1.10 Phép toán nâng (lift) dàn 19 1.11 Phép toán lift tập tạo thành dàn 20 2.1 Dàn cho chương trình phân tích tính sống biến 26 2.2 Dàn cho chương trình phân tích biểu thức bận rộn 29 2.3 CFG chương trình phân tích biểu thức bận rộn 30 2.4 Dàn cho chương trình phân tích biểu thức có sẵn 34 2.5 CFG chương trình phân tích biểu thức có sẵn 34 2.6 CFG chương trình phân tích định nghĩa tới 38 2.7 Đồ thị def-use định nghĩa tới biến chương trình 40 2.8 Ví dụ CFG tổng quát cho chương trình có chứa lời gọi hàm 42 2.9 CFG chương trình phân tích liên thủ tục 43 2.10 CFG đơn biến 44 2.11 CFG đa biến 45 3.1 Tổng quan luồng làm việc SOOT [10] 48 3.2 Phương thức copy() merge() SOOT 49 3.3 Kết phân tích với SOOT 51 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỞ ĐẦU Sự tiến hóa nhanh chóng thiết bị phần cứng 30 năm qua đưa đến hệ phát triển theo cấp số nhân kích cỡ chương trình phần mềm chạy Quy mơ ứng dụng cực lớn (khoảng từ tới 40 triệu dòng mã lệnh) tiếp tục gia tăng thời gian tới Những phần mềm cần phải thiết kế với chi phí vừa phải phải bảo trì, nâng cấp tồn vịng đời chúng, tầm 20 năm Một thực tế quy mô hiệu nhóm lập trình bảo trì chúng khơng thể tăng theo tỉ lệ Với hồn cảnh đó, tỉ lệ giả định lỗi 1000 dòng lệnh phần mềm lạc quan đạt hệ thống địi hỏi độ an tồn cực cao Do đó, vấn đề độ tin cậy phần mềm (software reliability) chắn mối quan tâm thách thức xã hội đại ngày phụ thuộc vào dịch vụ máy tính đem lại Nhiều kỹ thuật kiểm chứng phần mềm (software verification) công cụ hỗ trợ kèm phát triển để thực thi giả lập chương trình nhiều mơi trường khác Tuy nhiên, gỡ rối mã dịch giả lập mơ hình mã nguồn chương trình khơng thể mở rộng quy mơ thường xét mức độ bao phủ hạn chế hành vi động chương trình Các phương pháp hình thức kiểm chứng chương trình (formal methods) cố gắng chứng minh cách tự động chương trình thực thi đắn mơi trường đặc tả Mảng nghiên cứu bao gồm phương pháp suy dẫn (deductive methods), kiểm chứng mơ hình (model checking), định kiểu chương trình (program typing) phân tích chương trình tĩnh (static program analysis) Ba nhóm đầu tập trung vào việc kiểm chứng phần mềm mức mơ hình, nhóm cuối xử lý phần mềm mức mã nguồn Phân tích chương trình tĩnh thu hút quan tâm tảng lý thuyết hình thức mục đích ứng dụng thực tế Kỹ thuật phát tính chất/hành vi chương trình mà khơng u cầu chạy chương trình Ngồi ra, số lỗi chương trình việc khởi tạo/sử dụng biến chương trình, biến trỏ NULL, phát kỹ thuật Mục tiêu luận văn cập nhật xu giới lĩnh vực phân tích chương trình cải tiến kỹ thuật Cụ thể, luận văn tập trung vào nghiên cứu kỹ thuật phân tích chương trình dựa đồ thị luồng liệu để nâng cao chất lượng phần mềm Tiến hành thực nghiệm công cụ LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com SOOT, công cụ mã nguồn mở phân tích chương trình viết Java mơi trường tích hợp phát triển Eclipse Cấu trúc luận văn bao gồm: Chương giới thiệu tổng quan phân tích chương trình tĩnh Trong chương này, trình bày định nghĩa kỹ thuật phân tích chương trình tĩnh, ứng dụng kỹ thuật phân tích, điểm mạnh hạn chế kỹ thuật phân tích tĩnh Và phần Chương phần kiến thức tảng sử dụng kỹ thuật phân tích chương trình tĩnh Tiếp theo Chương trình bày phân tích luồng liệu Cụ thể, trình bày phương pháp phân tích luồng liệu hàm khơng có chứa lời gọi hàm (nội thủ tục) phân tích luồng liệu đồ thị luồng liệu cho chương trình với lời gọi hàm (liên thủ tục) Chương trình bày phần thực nghiệm với SOOT - cơng cụ nguồn mở để phân tích chương trình viết Java mơi trường tích hợp phát triển Eclipse Cuối phần kết luận tài liệu tham khảo LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Chương Giới thiệu 1.1 Giới thiệu phân tích chương trình Phân tích chương trình tĩnh kỹ thuật xác định tính chất/hành vi chương trình mà khơng cần phải chạy chương trình Phân tích tĩnh xây dựng dựa lý thuyết diễn giải trừu tượng (abstract interpretation) [5, 6] để chứng minh tính xác phân tích liên quan đến ngữ nghĩa ngơn ngữ lập trình Có nhiều câu hỏi thú vị mà hỏi chương trình điểm (point) riêng lẻ chương trình như: • Chương trình có dừng hay khơng? • Độ lớn vùng nhớ (heap) chạy? • Đầu (output) gì? • Biến x có ln ln giá trị khơng? • Giá trị x đọc tương lai? • Con trỏ p null? • Biến x khởi tạo trước đọc khơng? • v.v Theo lý thuyết Rice [14], tất câu hỏi hành vi chương trình khơng thể định/chứng minh (undecidable) Thay mức mơ nhiều phương pháp hình thức, luận văn hướng tới việc phân tích chương trình tĩnh Cụ thể, luận văn trình bày kỹ thuật để cải LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 10 tiến mã chương trình phát lỗi tiềm việc phân tích chương trình tĩnh dựa phân tích luồng liệu 1.2 Điểm mạnh điểm yếu Phân tích chương trình tĩnh có ưu điểm sau: • Chỉ lỗi vị trí xác chương trình • Dễ dàng thực chuyên gia kiểm định chất lượng phần mềm hiểu rõ mã nguồn • Khoảng thời gian ngắn từ lúc phát tới sửa lỗi • Có thể tự động hóa nhanh (thơng qua cơng cụ hỗ trợ ví dụ: SOOT, Astree, TVLA, ) • Lỗi phát sớm qui trình phát triển phần mềm phí sửa lỗi thấp Tuy nhiên, điểm yếu kỹ thuật xuất câu lệnh xuất tham chiếu, ràng buộc nằm phạm vi suy luận biểu trưng chương trình Hạn chế chất việc phân tích tĩnh - khơng chạy với liệu cụ thể Một số điểm yếu không khắc phục được: • Mất thời gian phải thực tay • Việc tự động hóa hướng vào ngơn ngữ lập trình (ví dụ: SOOT kiểm tra mã nguồn chương trình viết ngơn ngữ Java) • Thiếu nhân lực hiểu phân tích chương trình • Có thể sinh nhiều lời cảnh báo lỗi khơng xác • Khơng phát lỗi xuất chạy chương trình (run-time error) 1.3 Các cơng nghệ phân tích chương trình tĩnh Những kỹ thuật phân tích chương trình tĩnh thu hút nhiều nghiên cứu giới, có nhiều kỹ thuật tựu chung phân theo nhóm sau: LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 52 KẾT LUẬN Phân tích chương trình tĩnh kỹ thuật thu hút quan tâm giới ứng dụng mang lại Trong q trình thực luận văn này, tơi tìm hiểu kiến thức tảng phân tích chương trình - khâu vơ quan trọng giúp phát lỗi tối ưu hóa chương trình để nhằm nâng cao chất lượng phần mềm Cụ thể, luận văn đạt trình bày tổng quan phân tích chương trình tĩnh Trong đó, nêu khái niệm liên quan đến phân tích chương trình tĩnh, điểm mạnh mặt yếu, kỹ thuật phân tích chương trình tĩnh giới học thuật nghiên cứu Tiếp theo lý thuyết tảng liên quan đến phân tích chương trình tĩnh cách xây dựng đồ thị luồng liệu, lý thuyết toán học lý thuyết Dàn, thuật tốn tìm điểm cố định Từ kiến thức tảng đó, luận văn tiếp cận nghiên cứu kỹ thuật phân tích chương trình tĩnh mức mã nguồn, phân tích dựa phân tích luồng liệu Từ kết thu từ kỹ thuật phân tích giúp cho việc phân tích thuộc tính/hành vi xảy chương trình Cuối cùng, luận văn tiến hành thực nghiệm kỹ thuật phân tích tĩnh cơng cụ mã nguồn mở SOOT, sử dụng phân tích cho ngơn ngữ lập trình Java Tuy nhiên, việc phân tích tĩnh khó việc phân tích tĩnh dựa phân tích luồng liệu kỹ thuật đề cập khuôn khổ luận văn tốt nghiệp Trong tương lai, số vấn đề cần tiếp tục nghiên cứu phân tích khoảng, phân tích luồng điều khiển (phân tích trỏ) phát triển cơng cụ phân tích chương trình tĩnh cho ngơn ngữ khác C, C++, Java, nhằm tối ưu hóa chương trình dịch, giảm chi phí nâng cao chất lượng phần mềm LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 53 Tài liệu tham khảo [1] Anand S., Godefroid P., and Tillmann N (2008), Demand-Driven Compositional Symbolic Execution, In Proceedings of TACAS, (367-381) [2] Ayewah N., Hovemeyer D., Morgenthaler J.D., Penix J., Pugh W (2008), Using static analysis to find bugs, IEEE Software 25, (22-29) [3] Chess B., West J (2007), Secure Programming with Static Analysis, Addison- Wesley [4] Clarke E.M., Grumberg O., Peled D.A (1999), Model Checking The MIT Press [5] Cousot P (2001), Abstract interpretation based formal methods and future challenges, Lecture Notes in Computer Science 2000, (138–170) [6] Cousot P., Cousot R (1997), Abstract interpretation: a unied lattice model for static analysis of programs by construction or approximation of xpoints, In Conference Record of the Sixth Annual ACM SIGPLANSIGACT Symposium on Principles of Programming Languages, (238–252), Los Angeles, California, 1977 ACM Press, New York [7] Duffy D.A (1991), Principles of Automated Theorem Proving, JohnWiley Sons [8] Gallier J.H (1986), Logic for Computer Science: Foundations of Automatic Theorem Proving, Harper Row Publishers [9] Huth M., Ryan M (2004), Logic in Computer Science: Modeling and Reasoning About Systems, Cambridge University Press [10] Lam P., Bodden E., Lhoták O., Hendren L (2011), The Soot framework for Java program analysis: a retrospective, Cetus Users and Compiler Infrastructure Workshop LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 54 [11] Nielson F., Nielson H.R., Hankin C (2004), Principles of Program Analysis, Springer [12] Palsberg J., Schwartzbach M.I (1992), Polyvariant Analysis of the Untyped Lambda Calculus, BRICS, Dept of Computer Science - University of Aarhus [13] Pierce B.C (2002), Types and Programming Languages, MIT Press [14] Rice H.G (1953), Classes of recursively enumerable sets and their decision problems, Transactions of American Math Society 74, (358-366) [15] Schwartzbach M.I (2008), Lecture notes on static analysis Technical report, BRICS, Dept of Computer Science - University of Aarhus [16] Tarski A (1955), A lattice-theoretical fixpoint theorem and its applications, Pacific Journal of Math 5:2, (285-309) [17] Thang N.T., Long N.D., Yoshida K., Nakamura T., Katayama T (2007), An open architecture for static code-analyzing tools In: Proceedings of JapanVietnam Workshop on Software Engineering [18] Wogerer W.(2005), A Survey of Static Program Analysis Techniques, Technische Universitat Wien [19] http://www.sable.mcgill.ca/soot/ LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 55 PHỤ LỤC A: TÌM ĐIỂM CỐ ĐỊNH NHỎ NHẤT CHO CHƯƠNG TRÌNH VÍ DỤ VỀ TÍNH SỐNG CỦA BIẾN Phương trình: x1 → entry = int f x2 → int f = int uu_f \ {f} x3 → int uu_f = f = \ {uu_f} x4 → f = = uu_f = \ {f} x5 → uu_f = = n > \ {uu_f} x6 → n > = ( return f ∪ f = f*n ) ∪ {n} x7 → return f = exit ∪ {f} x8 → f = f*n = ( n = n-1 \ {f}) ∪ {n,f} x9 → n = n-1 = ( n > \ {n}) ∪ {n} x10 → exit = ∅ Chuyển hàm: x1 = F1 (x2 ) = x2 x2 = F2 (x3 ) = x3 \ {f} x3 = F3 (x4 ) = x4 \ {uu_f} x4 = F4 (x5 ) = x5 \ {f} x5 = F5 (x6 ) = x6 \ {uu_f} x6 = F6 (x7 , x8 ) = (x7 ∪ x8 ) ∪ {n} x7 = F7 (x10 ) = x10 ∪ {f} x8 = F8 (x9 ) = (x9 \ {f}) ∪ {n,f} x9 = F9 (x6 ) = (x6 \ {n}) ∪ {n} x10 = F10 () = ∅ Thuật tốn lặp chaotic tìm điểm cố định nhỏ nhất: x1 = x2 = x3 = x4 = x5 = x6 = x7 = x8 = x9 = x10 = ⊥ = ∅ Lặp 1: x1 = ∅ x2 = ∅ x3 = ∅ LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 56 x4 = ∅ x5 = ∅ x6 = {n,f} x7 = {f} x8 = {n,f} x9 = {n,f} x10 = ∅ Lặp 2: x1 = ∅ x2 = ∅ x3 = ∅ x4 = {n} x5 = {n,f} x6 = {n,f} x7 = {f} x8 = {n,f} x9 = {n,f} x10 = ∅ Lặp 3: x1 = ∅ x2 = ∅ x3 = ∅ x4 = {n} x5 = {n,f} x6 = {n,f} x7 = {f} x8 = {n,f} x9 = {n,f} x10 = ∅ Vòng lặp dừng lại lần lặp thứ 2, nghiệm nhỏ hệ phương trình cho LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 57 PHỤ LỤC B: TÌM ĐIỂM CỐ ĐỊNH NHỎ NHẤT CHO CHƯƠNG TRÌNH VÍ DỤ VỀ BIỂU THỨC BẬN RỘN Phương trình: x1 → entry = int a,b x2 → int a,b = a = x-1 x3 → a = x-1 = ( b = x-2 ) ↓ a ∪ {x-1} x4 → b = x-2 = ( x > ) ↓ b ∪ {x-2} x5 → x > = ( return a*b-x ∩ return a*b ) ∪ {x>0} x6 → return a*b-x = x = x-1 ∪ {a*b-x} x7 → x = x-1 = ( x>0 ) ↓ x ∪ {x-1} x8 → return a*b = exit ∪ {a*b} x9 → exit = ∅ Chuyển hàm: x1 = F1 (x2 ) = x2 x2 = F2 (x3 ) = x3 x3 = F3 (x4 ) = x4 \ {a*b,a*b-x} ∪ {x-1} x4 = F4 (x5 ) = x5 \ {a*b,a*b-x} ∪ {x-2} x5 = F5 (x6 , x8 ) = (x6 ∩ x8 ) ∪ {x>0} x6 = F6 (x7 ) = x7 ∪ {a*b-x} x7 = F7 (x5 ) = x5 \ {x-1,x-2,x>0,a*b-x} ∪ {x-1} x8 = F8 (x9 ) = x9 ∪ {a*b} x9 = F9 (x6 ) = ∅ Thuật tốn lặp chaotic tìm điểm cố định nhỏ nhất: x1 = x2 = x3 = x4 = x5 = x6 = x7 = x8 = x9 = ⊥ = ∅ Lặp 1: x1 = ∅ x2 = ∅ x3 = {x-1} x4 = {x-2} x5 = {x>0} LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 58 x6 = {a*b-x} x7 = {x-1} x8 = {a*b} x9 = ∅ Lặp 2: x1 = ∅ x2 = {x-1} x3 = {x-2,x-1} x4 = {x>0,x-2} x5 = {a*b,x>0} x6 = {a*b,a*b-x} x7 = {a*b,x-1} x8 = {a*b} x9 = ∅ Lặp 3: x1 = {x-1} x2 = {x-2,x-1} x3 = {x>0,x-2,x-1} x4 = {x>0,x-2} x5 = {x-1,a*b,a*b-x,x>0} x6 = {x-1,a*b,a*b-x} x7 = {a*b,x-1} x8 = {a*b} x9 = ∅ Lặp 4: x1 = {x-2,x-1} x2 = {x-2,x-1,x>0} x3 = {x>0,x-2,x-1} x4 = {x>0,x-2} x5 = {a*b,x>0} x6 = {x-1,a*b,a*b-x} x7 = {a*b,x-1} LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 59 x8 = {a*b} x9 = ∅ Lặp 5: x1 = {x-2,x-1,x>0} x2 = {x-2,x-1,x>0} x3 = {x>0,x-2,x-1} x4 = {x>0,x-2} x5 = {a*b,x>0} x6 = {x-1,a*b,a*b-x} x7 = {a*b,x-1} x8 = {a*b} x9 = ∅ Lặp 6: x1 = {x-2,x-1,x>0} x2 = {x-2,x-1,x>0} x3 = {x>0,x-2,x-1} x4 = {x>0,x-2} x5 = {a*b,x>0} x6 = {x-1,a*b,a*b-x} x7 = {a*b,x-1} x8 = {a*b} x9 = ∅ Vòng lặp dừng lại lần lặp thứ 5, nghiệm nhỏ hệ phương trình cho LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 60 PHỤ LỤC C: TÌM ĐIỂM CỐ ĐỊNH NHỎ NHẤT CHO CHƯƠNG TRÌNH VÍ DỤ VỀ BIỂU THỨC CĨ SẴN Phương trình: x1 → entry = ∅ x2 → int x,y,a,b = entry x3 → y=a-b = ( int x,y,a,b ∪ exps(a-b)) ↓ y x4 → y

Ngày đăng: 05/12/2022, 16:20

HÌNH ẢNH LIÊN QUAN

Hình 1.2: CFG cho các lệnh tuần tự. •Các lệnh cấu trúc điều khiển - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 1.2 CFG cho các lệnh tuần tự. •Các lệnh cấu trúc điều khiển (Trang 13)
Hình 1.4: CFG cho các lệnh while, for. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 1.4 CFG cho các lệnh while, for (Trang 14)
Hình 1.5: CFG của chương trình tính giai thừa. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 1.5 CFG của chương trình tính giai thừa (Trang 15)
Ví dụ, biểu diễn Dàn (2{x,y,x} , ⊆) (Hình 1.6 (a)) hoặc Dàn đảo ngược (Dàn được sắp bởi thứ tự ngược của các tập con và quan hệ hai ngôi ⊑được định nghĩa là ⊇)(2{x,y,x},⊇)(Hình 1.6 (b)) bằng biểu đồHasse: - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
d ụ, biểu diễn Dàn (2{x,y,x} , ⊆) (Hình 1.6 (a)) hoặc Dàn đảo ngược (Dàn được sắp bởi thứ tự ngược của các tập con và quan hệ hai ngôi ⊑được định nghĩa là ⊇)(2{x,y,x},⊇)(Hình 1.6 (b)) bằng biểu đồHasse: (Trang 16)
Hình 1.8: Các biểu đồ Hasse không phải là Dàn. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 1.8 Các biểu đồ Hasse không phải là Dàn (Trang 17)
Hình 1.7: Các biểu đồ Hasse là Dàn. •Nhữngthứ tự bộ phận không là Dàn - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 1.7 Các biểu đồ Hasse là Dàn. •Nhữngthứ tự bộ phận không là Dàn (Trang 17)
Hình 1.9: Phép tốn cộng dàn. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 1.9 Phép tốn cộng dàn (Trang 19)
Hình 1.10: Phép toán nâng (lift) dàn. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 1.10 Phép toán nâng (lift) dàn (Trang 19)
Hình 1.11: Phép tốn lift của các tập tạo thành dàn. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 1.11 Phép tốn lift của các tập tạo thành dàn (Trang 20)
Hình 2.1: Dàn cho chương trình phân tích tính sống của biến. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.1 Dàn cho chương trình phân tích tính sống của biến (Trang 26)
Hình 2.2: Dàn cho chương trình phân tích biểu thức bận rộn. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.2 Dàn cho chương trình phân tích biểu thức bận rộn (Trang 29)
Hình 2.3: CFG của chương trình phân tích biểu thức bận rộn. Các ràng buộc: - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.3 CFG của chương trình phân tích biểu thức bận rộn. Các ràng buộc: (Trang 30)
Hình 2.4: Dàn cho chương trình phân tích biểu thức có sẵn. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.4 Dàn cho chương trình phân tích biểu thức có sẵn (Trang 34)
Hình 2.5: CFG của chương trình phân tích biểu thức có sẵn. Các ràng buộc sinh ra như sau: - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.5 CFG của chương trình phân tích biểu thức có sẵn. Các ràng buộc sinh ra như sau: (Trang 34)
Hình 2.6: CFG của chương trình phân tích định nghĩa tới được. Các ràng buộc cho chương trình được sinh ra như sau: - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.6 CFG của chương trình phân tích định nghĩa tới được. Các ràng buộc cho chương trình được sinh ra như sau: (Trang 38)
Hình 2.7: Đồ thị def-use định nghĩa tới được của các biến của chương trình. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.7 Đồ thị def-use định nghĩa tới được của các biến của chương trình (Trang 40)
Hình 2.8: Ví dụ CFG tổng quát cho chương trình có chứa lời gọi hàm. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.8 Ví dụ CFG tổng quát cho chương trình có chứa lời gọi hàm (Trang 42)
Hình 2.9: CFG của chương trình phân tích liên thủ tục. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.9 CFG của chương trình phân tích liên thủ tục (Trang 43)
Xây dựng CFG cho chương trình như đã giới thiệu trong Mục 2.2.1 như hình dưới đây: - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
y dựng CFG cho chương trình như đã giới thiệu trong Mục 2.2.1 như hình dưới đây: (Trang 44)
Hình 2.11: CFG đa biến. - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 2.11 CFG đa biến (Trang 45)
Hình 3.1: Tổng quan về luồng làm việc của SOOT [10] - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 3.1 Tổng quan về luồng làm việc của SOOT [10] (Trang 48)
Hình 3.2: Phương thức copy() và merge() trong SOOT - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
Hình 3.2 Phương thức copy() và merge() trong SOOT (Trang 49)
Hình ảnh chạy phân tích tính sống của biến với SOOT: - Luận văn thạc sĩ VNU UET nghiên cứu kỹ thuật phân tích chương trình tĩnh trong việc nâng cao chất lượng phần mềm
nh ảnh chạy phân tích tính sống của biến với SOOT: (Trang 51)

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

TÀI LIỆU LIÊN QUAN

w