1. Trang chủ
  2. » Luận Văn - Báo Cáo

phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng

65 487 1

Đ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 65
Dung lượng 2,94 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG NGUYỄN THANH BẰNG PHÂN TÍCH TĨNH CHƯƠNG TRÌNH BẰNG PHƯƠNG PHÁP GIẢI THÍCH TRỪU TƯỢNG LUẬN VĂN THẠC SĨ KHOA HỌC MÁY

Trang 1

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

NGUYỄN THANH BẰNG

PHÂN TÍCH TĨNH CHƯƠNG TRÌNH BẰNG PHƯƠNG PHÁP GIẢI THÍCH TRỪU TƯỢNG

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Thái Nguyên, năm 2013

Trang 2

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

NGUYỄN THANH BẰNG

PHÂN TÍCH TĨNH CHƯƠNG TRÌNH BẰNG PHƯƠNG PHÁP GIẢI THÍCH TRỪU TƯỢNG

Chuyên ngành : KHOA HỌC MÁY TÍNH

Trang 3

LỜI CAM ĐOAN

Tôi xin cam đoan tất cả những nội dung được trình bày trong nội dung luận văn đều do tôi nghiên cứu và viết ra dưới sự hướng dẫn của TS Nguyễn Trường Thắng – Viện Công nghệ thông tin – Viện Khoa học và công nghệ Việt Nam hướng dẫn Không hề có bất cứ sự sao chép nào ngoài việc tham khảo từ các tài liệu như đã trình bày trong phần tài liệu tham

khảo Nếu có một hình thức gian lận nào tôi xin hoàn toàn chịu trách nhiệm

Thái Nguyên, tháng 01 năm 2013

Học viên cao học khóa 9 Chuyên ngành: Khoa học máy tính Trường đại học Công nghệ thông tin và truyền thông

Đại học Thái Nguyên

Trang 4

3

MỤC LỤC

LỜI CAM ĐOAN 2

MỤC LỤC 3

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT 5

DANH MỤC CÁC THUẬT NGỮ 6

DANH MỤC CÁC HÌNH 7

MỞ ĐẦU 8

CHƯƠNG I TỔNG QUAN 10

1.1 Công nghệ phần mềm và các vấn đề liên quan 10

1.1.1 Khái niệm về công nghệ phần mềm 10

1.1.2 Quy trình phát triển phần mềm 11

1.2 Các kỹ thuật trong công nghệ phần mềm nhằm nâng cao chất lượng phần mềm 13

1.2.1 Kiểm chứng phần mềm 14

1.2.2 Phân tích mã nguồn tĩnh 15

1.2.3 Kiểm thử phần mềm 17

1.2.4 So sánh giữa kiểm chứng mô hình và kiểm thử phần mềm 18

1.3 Kết luận chương 1 18

CHƯƠNG II PHƯƠNG PHÁP GIẢI THÍCH TRỪU TƯỢNG 19

2.1 Khái niệm giải thích trừu tượng 19

2.2 Ứng dụng của giải thích trừu tượng 19

2.3 Một số khái niệm cơ bản 20

2.3.1 Ngữ nghĩa 20

2.3.2 Tính an toàn: 20

2.3.3 Giải thích trừu tượng: 21

2.3.4 Tiêu chuẩn trừu tượng hóa: 22

2.3.5 Miền trừu tượng: (Abstract domains): 22

2.3.6 Vết thực thi 23

2.3.7 Thu thập ngữ nghĩa: 25

2.4 Nền tảng toán học của giải thích trừu tượng 26

2.4.1 Liên kết nhị phân 26

Trang 5

4

2.4.2 Tập có thứ tự từng phần (Poset) 26

2.4.3 Cấu trúc dàn (Lattices) 27

2.4.4 Sơ đồ Hasse 28

2.4.5 Điểm cố định (Fixpoint) 28

2.4.6 Bước lặp 29

2.4.7 Kết nối Galois 29

2.5 Giải thích trừu tượng 29

2.5.1 Đối tượng trừu tượng (Abstract objects) 30

2.5.2 Thuộc tính trừu tượng 31

2.5.3 Giải thích trừu tượng trong phân tích tĩnh chương trình: 32

2.5.4 Kết luận chương 2 34

CHƯƠNG III CHƯƠNG TRÌNH THỰC NGHIỆM 35

3.1 Giới thiệu về TVLA 35

3.2 Nền tảng toán học của TVLA 36

3.2.1 Giá trị 3-logic 37

3.2.2 Phương pháp 39

3.3 Phân tĩnh tĩnh chương trình sử dụng TVLA 43

3.3.1 Bài toán 1 43

3.3.2 Bài toán 2 48

3.4 Kết luận chương 3 53

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 54

TÀI LIỆU THAM KHẢO 55

PHỤ LỤC 56

1 Thuật toán phân tích mối quan hệ vô hạn thông qua lặp tiến/lùi chi tiết 56

2 Các định nghĩa chức năng trừu tượng trong action.tvp 57

3 Các định nghĩa chức năng trừu tượng trong predicates.tvp 62

4 Dữ liệu đầu vào của TVLA phân tích chức năng tạo danh sách liên kết creat.tvp 64

Trang 6

5

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT

1 EASL Engineering Analysis and

Simulation Language

Kỹ thuật Phân tích và ngôn ngữ mô phỏng

2 CM Summary nodes Nút đại diện

3 PTTGTT Phân tích tĩnh chương trình

bằng giải thích trừu tượng

4 CFG Control Flow Graphc Sơ đồ luồng điều khiển

Trang 7

chương trình

2 Tập có thứ tự từng phần (Poset

- Partial Ordered Set)

Là một tập hợp các phần tử có thứ tự

3 Cấu trúc dàn (Lattice)

Là một tập hợp các phần tử có thứ tự từng phần có điểm chặn dưới lớn nhất và trặn trên nhỏ nhất

Trang 8

7

DANH MỤC CÁC HÌNH

1 Hình 1.1: Mô hình tổng quát quy trình sản xuất phần mềm trong xe hơi

2 Hình 1.2: Tổng quan phân tích mã nguồn tĩnh

3 Hình 1.3: MISRA-C là “Subset”-Tập con của ngôn ngữ C

4 Hình 1.4: Hai cuốn MISRA-C:1998 và MISRA-C:2004

5 Hình 2.1 Sơ đồ hành vi của chương trình

6 Hình 2.2 Quỹ đạo an toàn

7 Hình 2.3 Quỹ đạo không an toàn

8 Hình 2.4 Quỹ đạo hành vi trừu tượng của chương trình

9 Hình 2.4 Phát hiện lỗi với giải thích trừu tượng

10 Hình 2.5 Các bước chuyển trạng thái của chương trình

11 Hình 2.6 Vết thực thi của chương trình

12 Hình 2.7 Thu thập ngữ nghĩa của chương trình

13 Hình 2.8 Đồ thị liên kết nhị phân

14 Hình 2.9 Thuật toán giải thích trừu tượng tổng quát

15 Hình 3.1 Bảng giá trị phép giao 3-logic

16 Hình 3.2 Bảng giá trị phép hợp 3-logic

17 Hình 3.3 Bảng giá trị phép hợp 3-logic

18 Hình 3.4 Bảng trừu tượng hóa bằng logic vị từ

19 Hình 3.5 Mô phỏng trạng thái bộ nhớ cấu trúc con trỏ

20 Hình 3.6 Trạng thái chương trình sử dụng 2-logic

21 Hình 3.7 Trạng thái chương trình sử dụng nút đại diện (3-logic)

22 Hình 3.8 Tiến trình làm việc của một quá trình PTTGTTT

23 Hình 3.9 Thực hiện phân tích tĩnh chương trình bằng TVLA

24 Hình 3.10 Kết quả phân tích chức năng tạo danh sách liên kết

25 Hình 3.11 Trạng thái tổng thể chương trình thêm một nút vào cây nhị phân

Trang 9

Trong luận văn này tôi xin giới thiệu một phương pháp kiểm tra đánh giá chất lượng phần mềm mới đó là phân tích tĩnh chương trình Với mục tiêu: Đưa ra một cách nhìn nhận mới về việc lập xây dựng và kiểm tra sự đúng đắn của chương trình đó là sử dụng phương pháp phân tích tĩnh chương trình Áp dụng các công cụ để phân tích chương trình, kiểm tra sự đúng đắn của chương trình bằng giải thích trừu tượng (Abstract Interpretation) Vì đây là một kỹ thuật phân tích chương trình chưa được nghiên cứu rộng rãi ở Việt Nam, nên luận văn này mang tính giới thiệu ban đầu về khái niệm cơ bản và nền tảng lý thuyết dựa trên tài liệu gốc [2], là giáo trình được sử dụng trong đào tạo thạc sỹ của Học viện Công nghệ Massachussette (MIT) – Hoa Kỳ, trong chương 2 Phần thử nghiệm trong chương 3 tập trung vào việc cài đặt và thử nghiệm bộ công cụ TVLA (3-Valued Logic Analysis Engine) của trường đại học Khoa Học Máy Tính Tel Aviv (School of Computer Science Tel Aviv University), thành phố Tel Aviv, Isarel[6] Công cụ này phân tích chương trình sử dụng giải thích trừu tượng

Nội dung luận văn gồm 3 chương:

Trang 10

9

Trình bày nền tảng lý thuyết, thuật toán, ứng dụng, ưu nhược điểm của phương pháp giải thích trừu tượng.[2]

CHƯƠNG III CHƯƠNG TRÌNH THỰC NGHIỆM

Cài đặt phương pháp phân tích tĩnh bằng giải thích trừu tượng, đưa ra kết quả thực nghiệm và kết luận[6]

Trang 11

10

CHƯƠNG I TỔNG QUAN 1.1 Công nghệ phần mềm và các vấn đề liên quan

1.1.1 Khái niệm về công nghệ phần mềm

Công nghệ phần mềm là một quá trình tích hợp quy trình, các phương pháp và các công cụ nhằm tạo ra một phần mềm hiệu quả Công nghệ phần mềm là một ngành công nghệ tập trung vào tất cả các mặt trong sản xuất phần mềm, từ những bước khởi đầu trong định dạng hệ thống đến bước bảo trì hệ thống sau khi phần mềm đã được đưa vào sử dụng Các kỹ sư phần mềm không chỉ cần tập trung vào các mảng kỹ thuật trong phát triển phần mềm mà còn vào cả các hoạt động như quản lý dự án, phương pháp làm phần mềm, đảm bảo chất lượng phần mềm, định dạng cấu hình phần mềm,

và phát triển các công cụ hỗ trợ cho sản xuất phần mềm

Các chương trình khoa học máy tính hầu hết đều tập trung vào lý thuyết và phương pháp của máy tính và các cơ sở về lập trình Chương trình công nghệ phần mềm thay vào đó tập trung cho các mặt thực tiễn trong sản xuất phần mềm có chất lượng và mối quan hệ của nó với công việc kinh doanh Vì lẽ đó, các kỹ sư phần mềm phải có kiến thức về khoa học máy tính và hơn thế nữa vì họ sẽ phải đối mặt với các vấn đề về sản xuất và ứng dụng phần mềm mà khoa học máy tính thường chỉ thuần túy tiếp cận bằng các lý thuyết và thuật toán Các lý thuyết của khoa học máy tính thường trừu tượng như toán học phức tạp và luôn không thể áp dụng cho các bài toán phức tạp trong thực tế, vốn đòi hỏi một giải pháp công nghệ phần mềm Khoa học máy tính thường tập trung vào việc chuyển đổi các công thức toán học thành các thuật toán lập trình, vì thế toán học thường là nền tảng cơ bản Công nghệ phần mềm cần tập trung cho các hoạt động liên quan đến việc sản xuất sản phẩm phần mềm vì yếu tố quy trình là nền tảng quan trọng nhất

Trang 12

11

1.1.2 Quy trình phát triển phần mềm

Quá trình phát triển phần mềm là tập hợp các thao tác và các kết quả tương quan để sản xuất ra một sản phẩm phần mềm Hầu hết các thao tác này được tiến hành bởi các kỹ sư phần mềm Các công cụ hỗ trợ máy tính

về kỹ thuật phần mềm có thể được dùng để giúp trong một số thao tác Có 4 thao tác là nền tảng của hầu hết các quá trình phần mềm là:

- Đặc tả phần mềm: Các chức năng của phần mềm và điều kiện để nó

hoạt động phải được định nghĩa

- Sự phát triển phần mềm: Để phần mềm đạt được đặc tả thì phải có

quá trình phát triển này

- Đánh giá phần mềm: Phần mềm phải được đánh giá để chắc chắn

rằng nó làm những gì mà khách hàng muốn

- Sự tiến hóa của phần mềm: Phần mềm phải tiến hóa để thỏa mãn sự

thay đổi các yêu cầu của khách hàng

1.1.3 Phân loại phần mềm

Đối tượng chính của công nghệ phần mềm là sản xuất ra các sản phẩm phần mềm Sản phẩm phần mềm được phân loại theo 3 cách đó là theo mức

độ hoàn thiện, theo chức năng, và theo lĩnh vực ứng dụng, cụ thể như sau:

Theo mức độ hoàn thiện :

- Phần mềm hệ thống : Điều hành các hoạt động của hệ thống

- Phần mềm nghiệp vụ : Hỗ trợ tốt các hoạt động nghiệp vụ khác nhau

với sự đa dạng và số lượng lớn

Theo chức năng :

Phần mềm công cụ (Tools, CASE) : Trợ giúp cho quá trình phát triển

phần mềm, như công cụ kiếm soát mã nguồn tĩnh - “TVLA” được giới thiệu

ở Chương 3

Theo lĩnh vực ứng dụng :

Trang 13

12

- Phần mềm hệ thống: Đây là phần mềm tương tác trực tiếp với phần

cứng, sử dụng cho các chương trình khác nhau, và nhiều đối tượng người dùng khác nhau

- Phần mềm thời gian thực : Thu thập, xử lý các dữ kiện thời gian

thực và đáp ứng yêu cầu chặt chẽ về thời gian

- Phần mềm nghiệp vụ : Xử lý thông tin nghiệp vụ, gắn với cơ sở dữ

liệu, như là : xử lý các giao tác ( mạng bán hàng,…), hệ điều khiển vũ trụ

- Phần mềm khoa học kỹ thuật : Sử dụng các thuật toán phức tạp (

vật lý, mô phỏng,…) Đây là phần mềm có năng lực tính toán cao

- Phần mềm nhúng: Là sự kết hợp giữa hệ thống và thời gian thực

Ngoài ra, còn có các phần mềm khác như : Phần mềm trí tuệ nhân tạo, phần mềm dựa trên nền Web, phần mềm máy tính cá nhân,.v.v

1.1.4 Chất lượng của phần mềm

Ngành công nghiệp phần mềm đang phát triển rất nhanh và trở thành ngành khổng lồ Nhưng bên cạnh sự phát triển đó cũng có rất nhiều khó khăn đặt ra như năng suất lập trình vẫn còn thấp, sự phát triển vẫn mang tính thủ công, giá thành đắt,…Vì vậy, vấn đề bảo đảm chất lượng phần mềm đang trở thành trọng tâm Chất lượng của phần mềm theo quan điểm lập trình đó chính là chất lượng của chương trình Vấn đề là làm thế nào để chương trình chạy giống như thiết kế, đây chính là chất lượng theo nghĩa cần thiết Chất lượng của phần mềm theo quan điểm người sử dụng phần mềm đó là chất lượng thiết kế Vấn đề là làm thế nào để thiết kế đáp ứng đúng nhu cầu của người sử dụng Người ta cũng nói đó là chất lượng theo nghĩa hấp dẫn Một phần mềm tốt không những đáp ứng nhu cầu của người phát triển mà phải thoả mãn người sử dụng: có độ tin cậy cao về chất lượng

và mức độ thoả mãn của người sử dụng đối với sản phẩm hay dịch vụ

Một phần mềm đáp ứng được yêu cầu thì cần có các tính chất sau:

Chạy đúng: đây là yếu tố cốt lõi, không thể thiếu của một chương

trình Nó phải thực hiện chính xác công việc mà nó đảm nhiệm

Trang 14

13

Tính bảo trì được: Nó có khả năng thực hành những tiến triển để thỏa

mãn yêu cầu của khách hàng

Tính an toàn: Khả năng tin cậy của phần mềm bao gồm một loạt các

đặc tính như là độ tin cậy, an toàn, và bảo mật Phần mềm tin cậy không thể tạo ra các thiệt hại vật chất hay kinh tế trong trường hợp hư hỏng

Tính hiệu quả: Phần mềm không thể phí phạm các nguồn tài nguyên

như là bộ nhớ và các chu kì vi xử lý

Tính tiện dụng: Phần mềm nên có một giao diện tương đối dễ cho

người dùng và có đầy đủ các hồ sơ về phần mềm

Trang 16

15

thỏa mãn các thuộc tính được cho hay không Nhờ khả năng duyệt qua tất cả các trạng thái trong mô hình mà tính đúng đắn của kết quả kiểm chứng mô hình luôn được đảm bảo

Kiểm chứng mô hình bao gồm 3 bước: Mô hình hóa, đặc tả và kiểm chứng Ở bước mô hình hóa, kết quả tạo ra là một mô hình mà các công cụ kiểm chứng có thể sử dụng được Đầu vào của bước này có thể là bản thiết

kế phần mềm hoặc là các dòng mã lập trình Trong bước tiếp theo, các thuộc tính mà bản thiết kế cần thỏa mãn được đặc tả Các thuộc tính này thường được diễn đạt bằng các biểu thức logic Kết quả của hai bước mô hình hóa

và đặc tả chính là đầu vào của kiểm chứng mô hình Trong bước cuối cùng, kiểm chứng, công cụ kiểm chứng sẽ tự động thực hiện và trả về kết quả là thỏa mãn nếu mô hình thỏa mãn các thuộc tính, hoặc đưa ra một phản ví dụ nếu mô hình không thỏa mãn Dựa vào phản ví dụ, người ta có thể tìm ra được lý do vì sao mô hình không thỏa mãn các thuộc tính đặt ra

Tóm lại, kiểm chứng mô hình là một kĩ thuật giúp kiểm tra một chương trình hoặc một bản thiết kế có thỏa mãn các tính chất đặt ra hay không một cách tự động Đầu vào của nó là một mô hình cần kiểm chứng và các thuộc tính mà nó cần thỏa mãn Đầu ra là kết luận một mô hình thỏa mãn các tính chất hoặc đưa ra một phản ví dụ nếu mô hình không thỏa mãn

1.2.2 Phân tích mã nguồn tĩnh

Phân tích mã nguồn tĩnh, hay còn gọi là kiểm thử mô hình là một phương pháp dùng để tìm lỗi hay đảm bảo sự phù hợp để mã hóa các nguyên tắc, không làm chỉnh sửa trực tiếp mã nguồn chương trình đó và nó thực hiện các thuật toán kiểm tra mã nguồn đưa vào dưới dạng cây cú pháp trừu tượng rồi đánh dấu phân tích ở những nơi mà các lỗi từ vựng, cú pháp

và thậm chí một số lỗi ngữ nghĩa có thể xảy ra Nói cách khác, các công cụ phân tích tĩnh phát hiện trong mã nguồn chương trình những nơi có chứa hoặc có khả năng chứa lỗi, bị lỗi hoặc sở hữu định dạng xấu Đoạn mã như vậy sẽ được xem xét cẩn thận của lập trình viên và có thể quyết định sửa đổi

Trang 17

16

phần này chương trình hay không Các lợi thế chính của việc sử dụng phân tích mã tĩnh nằm ở khả năng tiết kiệm chi phí đáng kể của các loại bỏ khuyết tật trong một chương trình

Suocre Code Static Analysis

Error Report

Quality Report

Software Metric Tools

Hình 1.2: Tổng quan phân tích mã nguồn tĩnh Công cụ phân tích mã nguồn tĩnh là một “phần mềm công cụ” được xây dựng để kiểm chứng mã nguồn cho phép phát hiện một số lượng lớn các lỗi ở giai đoạn xây dựng, và điều này làm giảm đáng kể chi phí của việc phát triển toàn bộ dự án

Phân tích tĩnh chương trình có các phương pháp như sau:

- Kiểm tra mô hình: Trong kiểm tra mô hình, một mô hình của hệ thống được tạo ra để hỗ trợ phân tích mọi sự thực thi có thể trong mô hình Kiểm tra mô hình có thể kiểm chứng được rằng mô hình của hệ thống hoạt động chính xác trong tất cả trường hợp có thể Kiểm tra mô hình phân tích hết mọi khía cạnh thực thi của chương trình và chỉ ra những sự vi phạm nhưng không chứng minh được chương trình sẽ được thực thi chính xác mà không

có lỗi Hạn chế của kiểm tra mô hình đó là không gian trạng thái của mô hình thường quá lớn do đó việc thám hiểm tất cả các trạng thái không phải lúc nào cũng thực hiện được

Trang 18

17

- Phân tích luồng dữ liệu: Là một kỹ thuật cổ điển trong phân tích tĩnh,

nó được sử dụng để tìm ra các thuộc tính quan trọng của các chương trình được phân tích, giúp các kỹ sư phần mềm tối ưu hóa chương trình của mình Trong lập trình hiện đại kỹ thuật phân tích tĩnh dựa trên luồng dữ liệu được các kỹ sư phần mềm dùng để hoàn thiện các chức năng chính của chương trình;

- Giải thích trừu tượng: Diễn giải về các ngữ nghĩa của một chương trình phần mềm máy tính, với những hàm đơn điệu trên các tập hợp đã được xếp thứ tự Đây là nội dung nghiên cứu chính của đề tài, sẽ được trình bày chi tiết trong chương 2 và chương 3 Phần lớn những kết quả lý thuyết của 2 chương này được trích dẫn từ tài liệu [2][6]

1.2.3 Kiểm thử phần mềm

Việc tạo ra một sản phẩm thì không phải chỉ do một tổ chức đứng ra làm từ đầu đến cuối, mà đòi hỏi sự liên kết, tích hợp của rất nhiều sản phẩm, thư viện lập trình,…của nhiều tổ chức khác nhau…Để chứng tỏ rằng các chức năng phần mềm có làm theo đúng đặc tả và các yêu cầu về hiệu năng hay không ta phải tiến hành một quá trình gọi là kiểm thử

Kiểm thử phần mềm là hoạt động khảo sát thực tiễn sản phẩm hay dịch

vụ phần mềm trong đúng môi trường chúng dự định sẽ được triển khai nhằm cung cấp cho người có lợi ích liên quan những thông tin về chất lượng của sản phẩm hay dịch vụ phần mềm ấy Kiểm thử là một quá trình thực thi chương trình với mục đích là tìm ra các lỗi hay khiếm khuyết của phần mềm nhằm đảm bảo hiệu quả hoạt động tối ưu của phần mềm trong nhiều ngành khác nhau Thông tin đầu vào được cung cấp cho quá trình kiểm thử bao gồm:

- Thông tin cấu hình của phần mềm

- Thông tin cầu hình về kiểm thử

Trang 19

18

1.2.4 So sánh giữa kiểm chứng mô hình và kiểm thử phần mềm

Cả kiểm chứng mô hình và kiểm thử phần mềm đều thực hiện vai trò đảm bảo chất lượng phần mềm bằng việc tìm ra các lỗi nếu có của phần mềm Tuy nhiên giữa kiểm chứng mô hình và kiểm thử phần mềm có một

số điểm khác nhau quan trọng sau:

Kiểm thử phần mềm đòi hỏi phải có chương trình để thực hiện, còn kiểm chứng mô hình thì ngoài kiểm thử trên mã nguồn còn có thể dùng để kiểm chứng bản thiết kế, nghĩa là khi chương trình vẫn còn trên giấy

Kiểm thử phần mềm chỉ có thể khẳng định được chương trình không gặp lỗi đối với các trường hợp kiểm thử đã kiểm tra tức không tìm thấy lỗi chứ không khẳng định được là chương trình hoàn toàn không còn lỗi Ngược lại, kiểm chứng phần mềm cho phép ta kết luận được chương trình hoàn toàn không còn lỗi

Như vây, ta cũng có thể kiểm thử phần mềm có ưu điểm rất lớn là dễ thực hiện Một người bình thường cũng có thể thực hiện được Trong khi

đó, kiểm chứng mô hình đòi hỏi phải mô hình hóa và đặc tả, kỹ thuật này rất khó và yêu cầu người thực hiện có trình độ kinh nghiệm và kiến thức nhất định

Do đó, về bản chất phân tích tĩnh chương trình và kiểm thử chương trình bằng các bộ dữ liệu cụ thể là hai mặt bổ sung cho nhau Phân tích tĩnh chương trình tập trung cho sự đúng đắn của thuật toán, cấu trúc chương trình trong khi kiểm thử phần mềm tập trung cho sự đúng đắn của ngôn ngữ lập trình

1.3 Kết luận chương 1

Trong chương này, tôi đã giới thiệu các khái niệm liên quan đến công nghệ phần mềm, quy trình phát triển phần mềm, kỹ thuật kiểm thử phần mềm, phân tích tĩnh chương trình Chương 2 sẽ tìm hiểu sâu hơn về giải thích trừu tượng và phân tích tĩnh chương trình bằng giải thích trừu tượng

Trang 20

19

CHƯƠNG II PHƯƠNG PHÁP GIẢI THÍCH TRỪU TƯỢNG

2.1 Khái niệm giải thích trừu tượng

Giải thích trừu tượng (Abstract interpretation): Là một kỹ thuật trong

phân tích tích chương trình máy tính, kỹ thuật này diễn giải về ngữ nghĩa của một chương trình phần mềm máy tính, với những hàm đơn điệu trên các tập hợp đã được xếp thứ tự

Giải thích trừu tượng được hiểu là việc thực thi một phần một chương trình máy tính để lấy thông tin về nó: luồng điều khiển, luồng dữ liệu

+ Hình thức: cái tất cả những gì đã được chuẩn tắc hóa, đã được chứng minh bằng toán học

+ Phi hình thức: dựa kinh nghiệm, thử nghiệm, mà không thể chứng minh được bằng toán học

Ứng dụng của kỹ thuật giải thích trừu tượng: Phân tích trừu tượng được ứng dụng trong chương trình dịch và trong gỡ rối chương trình

2.2 Ứng dụng của giải thích trừu tượng

Giải thích trừu tượng được ứng dụng rộng rãi và là một phần không thể thiếu trong ngành khoa học máy tính Giải thích trừu tượng được dùng để chứng minh tính đầy đủ và tính đúng đắn của hệ thống Một số ứng dụng của giải thích trừu tượng như:

- Phân tích cú pháp của dòng lệnh: phân tích thuộc tính và cú pháp của các dòng lệnh bằng việc giải thích trừu tượng các thuộc tính và cú pháp

- Phân tích tĩnh chương trình: đây là lĩnh vực được ứng dụng nhiều nhất của giải thích trừu tượng Phương pháp này phân tích mã nguồn của chương trình bằng cách trừu tượng hóa các bước thực hiện lệnh của chương trình đó Từ đó chứng minh tính đúng đắn của chương trình

- Ẩn thông tin: trong các ngôn ngữ dựa trên các phần mềm bảo mật, các thông tin được ẩn đi để tránh sự theo dõi, phát hiện bằng cách sử dụng việc trừu tượng hóa các thông tin của chương trình đó

Trang 21

Ngữ nghĩa cụ thể của một chương trình là một mô hình toán học mô

tả tất cả các hành vi của chương trình thực hiện trong tất cả các môi trường phù hợp

Hình 2.1 Sơ đồ hành vi của chương trình

2.3.2 Tính an toàn:

Tính an toàn của một chương trình máy tính việc không xuất hiện lỗi khi thực hiện các hành vi của chương trình trong bất kỳ một môi trường nào Các hành vi của chương trình không vượt quá phạm vi của môi trường cho phép Như trong hình 2.2

Hình 2.2 Quỹ đạo an toàn

Trang 22

21

Ngược lại, một chương trình sẽ xuất hiện lỗi nếu các hành vi của nó vượt quá giới hạn cho phép của chương trình, có nghĩa là giao của quỹ đạo các hành vi và vùng cấm sẽ khác rỗng

Hình 2.3 Quỹ đạo không an toàn

2.3.3 Giải thích trừu tượng:

Chính là chứng minh tính an toàn của chương trình dựa trên ngữ nghĩa trừu tượng của nó Phân tích tĩnh chương trình bằng giải thích trừu tượng tính toán ngữ nghĩa trừu tượng của chương trình dựa trên mã của chương trình đã được trừu tượng hóa Nếu ngữ nghĩa trừu tượng là an toàn, không trong vùng cấm

Hình 2.4 Quỹ đạo hành vi trừu tượng của chương trình

Trang 23

22

Hình 2.4 Phát hiện lỗi với giải thích trừu tượng

2.3.4 Tiêu chuẩn trừu tượng hóa:

- Là một cơ sở cho việc thiết kế các phân tích tĩnh:

+ Trừu tượng hóa dữ liệu

+ Trừu tượng hóa các toán tử cơ bản

+ Trừu tượng hóa các điều khiển chương trình như: cấu trúc điều khiển, lặp,

- Các thông số phải phù hợp với vùng tính toán của ứng dụng

2.3.5 Miền trừu tượng: (Abstract domains):

Miền trừu tượng là một đại số trừu tượng, được xây dựng như là một thư viện cung cấp các mô tả về tính chất trừu tượng của chương trình, các toán tử thực hiện chương trình và các lệnh của chương trình Có hai loại miền trừu tượng hữu hạn và vô hạn Miền trừu tượng hữu hạn được sử

Trang 24

23

dụng như là một thư viện đầy đủ cung cấp các mô tả về tính chất trừu tượng của một ngôn ngữ Miền trừu tượng vô hạn về cơ bản giống như miền trừu tượng hữu hạn, nó khác miền trừu tượng hữu hạn ở chỗ nó có thể cung cấp các mô tả về tính chất trừu tượng của các đối tượng vô hạn

Có các loại miền trừu tượng như sau:

+ 〚P〛 tập các trạng thái của chương trình

+ 〚P〛 ( 〚P〛x 〚P〛) mối quan hệ chuyển tiếp

giữa một trạng thái và trạng thái tiếp theo của nó

+ Entry〚P〛 ( 〚P〛) tập trạng thái ban đầu

+ Exit〚P〛 ( 〚P〛) tập trạng thái kết thúc

- Xem xét các dấu vết thực thi: là việc quan tâm đến hàng loạt các trạng thái của chương trình, tương ứng với các xử lý của chương trình thông qua quá trình chuyển đổi rời rạc

Trang 25

24

Hình 2.5 Các bước chuyển trạng thái của chương trình

- Tập các vết chuyển đổi trạng thái của chương trình như vậy

được gọi là vết thực thi

Hình 2.6 Vết thực thi của chương trình

- Truy cập vết tiến: Cho một hệ thống chuyển đổi , và trạng

thái ban đầu I ( ) các vết phía trước là một tập con của trạng thái ban đầu

post[ *] I = { n-1 | n > 0: n 0 I

i [0, n-2] : ( i, i+1 )}

Trong đó: post[ *]X ≜ {y | x X : (x,y)}

Trang 26

25

- Truy cập vết lùi: Cho một hệ thống chuyển đổi , , trạng thái ban đầu I ( ) và trạng thái kết thúc F ( ) các vết phía sau là một tập cha của trạng thái kết thúc

- Ngữ nghĩa của chương trình là các thuộc tính tĩnh của chương trình đó Được định nghĩa trong một lớp của phân tích tĩnh Thông tin thu thập được khi chương trình làm việc phải được chọn lọc, không có dạng ngữ nghĩa chung chung

- Ví dụ: Tất cả các trạng thái có thể xuất hiện trên các vết thực thi của chương trình tại một thời điểm

Hình 2.7 Thu thập ngữ nghĩa của chương trình

Trang 27

r ( X1 X2 Xn) hay r ⊆ X1 X2 Xn

+ Nếu n =2 thì r là một liên kết nhị phân

+ Một liên kết nhị phân r trên tập hợp X: ( X X) hay còn

- Tập có thứ tự từng phần ≤ trên tập X là một quan hệ nhị phân ≤ trên X nếu nó thỏa mãn các tính chất

+ Phản xạ: x X : (x ≤ x) + Phản xứng: x,y X : (x ≤ y) (y ≤ x) (x=y) + Bắc cầu: x,y,z X (x ≤ y) (y ≤ z) (x ≤ z)

- Nếu ⊑ là một tập có thứ tự từng phần trên X thì ⊏ là Tập có thứ tự từng phần chính xác thứ tự trên X: x ⊏ y = x ⊑ y x ≠ y

= x ⋤y

Trang 28

27

- Một tập có thứ tự từng phần chính xác < là một quan hệ nhị phân trên tập X nếu nó thỏa mãn hai tĩnh chất:

+ Không phản xạ: x X : ¬(x < x) + x,y,z X (y < z) (x < z)

- Mối quan hệ giữa tập có thứ tự từng phần và tập có thứ tự từng phần chính xác:

+ (x ≤ y)  (x < y) ∨ (y = x) + (x < y)  (x ≤ y) (y ≠ x)

- Cực đại và cực tiểu của một poset: X là tập con của poset P, ≤ cực tiểu của X được xác định như sau:

+ Giá trị đầu (⊤) nếu: ⊤ P x P: x ≤⊤

+ Giá trị dưới (⊥) nếu: ⊥ P x P: x ≥ + Chặn trên: M P v{ S ⊆ P, M l{ chặn trên của S nếu và chỉ nếu x S: x ≤ M

+ Chặn dưới: m P v{ S ⊆ P, M l{ chặn trên của S nếu và chỉ nếu x S: m ≤ x

2.4.3 Cấu trúc dàn (Lattices)

- Nửa trên cấu trúc dàn (join semi lattice) P, ≤, ⊔ là một poset

P, ≤ mà ở đó với mỗi cặp x,y P bất kỳ ta có thể xác định

được điểm chặn trên nhỏ nhất ( least upper bound - lub) x⊔y

Trang 29

28

- Nửa dưới cấu trúc dàn (meet semi lattice) P, ≤, ⊓ là một poset

P, ≤ mà ở đó với mỗi cặp x,y P bất kỳ ta có thể xác định

được điểm chặn trên nhỏ nhất (greatest lower bound – glb) x⊓y

- Cấu trúc dàn (Lattices) P, ≤, ⊔, ⊓ là một bộ gồm hai thành phần P, ≤, ⊔ và P, ≤, ⊓

- Cấu trúc dàn hoàn chỉnh là một poset P, ≤ mà ở đó mỗi tập con X⊆P ta có lub⊔ X nằm trong P

- Một toán tử f có thể có 1 hoặc nhiều fixpoint trên L

- Một toán tử f: L L, trên poset L, ⊑

y ∊ L: f(y) = y y ⊑ x + x là một fixpoint nhỏ nhất nếu

y ∊ L: f(y) = y x ⊑ y

Trang 30

fn+1(a) = f(fn(a)) với n ∊ N

- Nếu L là một tập hữu hạn, |L| (số các phần tử của L)

k >|L| : n <= |L| : fk(a) = fn(a) Như vậy: a có thể là một điểm fixpoint Hoặc các bước lặp tạo thành một vòng tròn

2.4.7 Kết nối Galois

- Cho Q, ⊑ và P, ≤ là các poset, cặp ( , ) của các ánh xạ ∊

P Q và ∊ Q P là một kết nối Galois nếu và chỉ nếu:

Giải thích trừu tượng chính là việc hình thức hóa các ý tưởng, các chứng minh hình thức sẽ được thực hiện ở một mức độ trừu tượng, bỏ qua các chi tiết về ngữ nghĩa và đặc tả không cần thiết Do đó ngữ nghĩa trừu tượng thỏa mãn đặc tả trừu tượng Từ đó đưa ra sự phù hợp và thiếu sót của chương trình được phân tích

Trên thực tế, phân tích tĩnh chương trình bằng giải thích trừu tượng chính là sự giải thích ngữ nghĩa của chương trình Đây là một vấn đề rất

Trang 31

30

rộng lớn, hiện tại có nhiều thuật toán ứng dụng giải thích trừu tượng trong phân tích tĩnh chương trình Các thuật toán này chủ yếu tập trung vào các hướng giải quyết vấn đề như sau:

- Phân tích mối phi-quan hệ vô hạn thông qua lặp tiến

- Phân tích mối quan hệ vô hạn thông qua lặp tiến

- Phân tích mối quan hệ vô hạn thông qua lặp tiến/lùi

Tuy nhiên thuật toán tổng quát của phân tích tĩnh chương trình bằng giải thích trừu tượng được mô tả như hình sau:

Hình 2.9 Thuật toán giải thích trừu tượng tổng quát

2.5.1 Đối tượng trừu tượng (Abstract objects)

- Một đối tượng trừu tượng ō là một đại lượng tính toán biểu diễn

một đối tượng cụ thể o

- Hàm trừu tượng hóa ⍺ là một hàm ánh xạ một đối tượng cụ thể

o sang một đối tượng trừu tượng ký hiệu là ⍺(o)

- Miền trừu tượng (Abstract domain) là một tập các đối tượng

trừu tượng và các hoạt động của nó

Trang 32

+ Các giá trị: booleans, integers, + Các biến của chương trình

+ Môi trường làm việc

+ Stack: gán giá trị cho các biến của cấu trúc khối

+ Heaps: quá trình cấp phát vùng nhớ động + Điểm điều khiển chương trình: thủ tục, nhãn

+ Trạng thái: con trỏ và bộ nhớ

+ Vết thực hiện của chương trình

- Tập các thuộc tính trong ( ) của các thuộc tính trong là một cấu trúc dàn logic hoàn chỉnh

( ), ⊆, ø, , ⋂,⋃,≦

Trong đó:

+ Một thuộc tính P ∊ ( ) là một tập hợp các đối tượng có thuộc tính P

+ ⊆ là một phép suy logic P ⊆ Q, tất cả đối tượng có thuộc tính P thì có thuộc tính P (o∊ P o∊ Q)

+ ø là sai + là đúng + ⋂ phép giao + ⋃ phép hợp

Ngày đăng: 22/11/2014, 21:23

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] David Schmidt (2005), Foundations of abstract interpretation, Kansas State University Sách, tạp chí
Tiêu đề: Foundations of abstract interpretation", Kansas State
Tác giả: David Schmidt
Năm: 2005
[6] Tel Aviv University, Tvla: a system for generating abstract interpretershttp://www.cs.tau.ac.il/~tvla/ifip2004.pdf Website tham khảo Sách, tạp chí
Tiêu đề: Tvla: a system for generating abstract interpreters
Tác giả: Tel Aviv University
[7] Abstract Interpretation http://web.mit.edu/afs/athena.mit.edu/course/16/16.399/www/ Sách, tạp chí
Tiêu đề: Abstract Interpretation
Tác giả: Patrick Cousot, Jerome Clarke
Nhà XB: MIT Course 16.399
Năm: 2005
[8] Abstract interpretation and static analysis http://santos.cis.ksu.edu/schmidt/Escuela03/home.html [9] Computer Science Departmen Sách, tạp chí
Tiêu đề: Abstract interpretation and static analysis
[5] P. Cousot (Aug 5, 2008) Abstract Interpretation Khác

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Mô hình tổng quát quy trình sản xuất phần mềm trong xe hơi - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 1.1 Mô hình tổng quát quy trình sản xuất phần mềm trong xe hơi (Trang 15)
Hình 2.2 Quỹ đạo an toàn. - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.2 Quỹ đạo an toàn (Trang 21)
Hình 2.1 Sơ đồ hành vi của chương trình. - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.1 Sơ đồ hành vi của chương trình (Trang 21)
Hình 2.4 Quỹ đạo hành vi trừu tượng của chương trình. - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.4 Quỹ đạo hành vi trừu tượng của chương trình (Trang 22)
Hình 2.3 Quỹ đạo không an toàn. - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.3 Quỹ đạo không an toàn (Trang 22)
Hình 2.4 Phát hiện lỗi với giải thích trừu tƣợng. - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.4 Phát hiện lỗi với giải thích trừu tƣợng (Trang 23)
Hình 2.5 Các bước chuyển trạng thái của chương trình. - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.5 Các bước chuyển trạng thái của chương trình (Trang 25)
Hình 2.6 Vết thực thi của chương trình - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.6 Vết thực thi của chương trình (Trang 25)
Hình 2.7 Thu thập ngữ nghĩa của chương trình - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.7 Thu thập ngữ nghĩa của chương trình (Trang 26)
Hình 2.8 Đồ thị liên kết nhị phân - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.8 Đồ thị liên kết nhị phân (Trang 27)
Hình 2.9 Thuật toán giải thích trừu tƣợng tổng quát - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 2.9 Thuật toán giải thích trừu tƣợng tổng quát (Trang 31)
Hình 3.1 Bảng giá trị phép giao 3-logic - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 3.1 Bảng giá trị phép giao 3-logic (Trang 38)
Hình 3.8. Tiến trình làm việc của một quá trình PTTGTTT - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 3.8. Tiến trình làm việc của một quá trình PTTGTTT (Trang 44)
Hình 3.9. Thực hiện phân tích tĩnh chương trình bằng TVLA. - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 3.9. Thực hiện phân tích tĩnh chương trình bằng TVLA (Trang 48)
Hình 3.10. Kết quả phân tích chức năng tạo danh sách liên kết. - phân tích tĩnh chương trình bằng phương pháp giải thích trừu tượng
Hình 3.10. Kết quả phân tích chức năng tạo danh sách liên kết (Trang 49)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w