Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 92 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
92
Dung lượng
1,19 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ PHẠM ĐÌNH PHONG NGHIÊN CỨU VỀ KIỂM CHỨNG BẤT BIẾN CỦA ĐỐI TƯỢNG SỬ DỤNG LẬP TRÌNH HƯỚNG KHÍA CẠNH Ngành: Công nghệ thông tin Chuyên ngành: Công nghệ phần mềm Mã số: 60 48 10 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS. TS. Nguyễn Việt Hà Hà Nội – 2010 ii Lời cảm ơn Với lòng biết ơn sâu sắc, em xin chân thành cảm ơn thầy giáo PGS. TS. Nguyễn Việt Hà, người đã trực tiếp định hướng đề tài và tận tình hướng dẫn em hoàn thành luận văn này. Em cũng chân thành cảm ơn thầy TS. Phạm Ngọc Hùng đã có những nhận xét, đánh giá trong quá trình hoàn thiện luận văn. Em xin được bày tỏ lòng biết ơn đối với các thầy giáo, cô giáo Khoa Công nghệ thông tin Trường Đại học Công nghệ đã tận tình chỉ bảo, giảng dạy em suốt thời gian học tại trường cũng như việc hoàn thành luận văn này. Cuối cùng, xin được bày tỏ tình cảm tới những người thân trong gia đình, các bạn bè trong tập thể lớp Cao học K15T2, K15T3 và K15CNPM đã động viên, hỗ trợ em về mọi mặt. Em xin chân thành cảm ơn! Hà Nội, tháng 09 năm 2010 Phạm Đình Phong iii Lời cam đoan Tôi xin cam đoan rằng, ngoại trừ các nội dung được trích từ tài liệu tham khảo hoặc các công trình khác như đã ghi rõ trong luận văn, các kết quả nêu trong luận văn này là do chính tôi thực hiện. Hà Nội, tháng 09 năm 2010 Phạm Đình Phong iv MỤC LỤC Lời cảm ơn ii Lời cam đoan iii MỤC LỤC iv Danh mục bảng biểu vi Danh mục hình vẽ vii Danh mục ký hiệu, từ viết tắt viii MỞ ĐẦU 1 Chương 1 – Lập trình hướng khía cạnh 4 1.1. Giới thiệu 4 1.2. Các vấn đề tồn tại trong lập trình hướng đối tượng 5 1.2.1. Các mối quan tâm của hệ thống 5 1.2.2. Giải quyết các mối quan tâm cắt ngang bằng OOP 7 1.2.3. Các vấn đề gặp phải khi thực thi các mối quan tâm cắt ngang bằng OOP8 1.3. Lập trình hướng khía cạnh 10 1.3.1. Lịch sử hình thành 10 1.3.2. Cú pháp của AOP và mô hình lập trình 11 1.3.3. Quản lý các mối quan tâm bằng lập trình hướng khía cạnh 12 1.3.4. Đan kết 13 1.3.5. Phương pháp lập trình hướng khía cạnh 14 1.3.6. Lợi ích của lập trình hướng khía cạnh 15 1.3.7. Nhược điểm của phương pháp lập trình hướng khía cạnh 17 1.3.8. Các công cụ AOP 18 1.4. AspectJ 19 1.4.1. Thực thi cắt ngang 19 1.4.2. Joint Point 20 1.4.3. Pointcut 22 1.4.4. Advice 26 1.4.5. Introduction 29 1.4.6. Aspect 30 1.5. Kết luận 33 Chương 2 - Công cụ kiểm chứng mô hình Java PathFinder 34 2.1. Giới thiệu 34 2.2. Công cụ kiểm chứng mô hình Java PathFinder 34 2.2.1. Lịch sử của Java PathFinder 35 2.2.2. Các thành phần của Java PathFinder 35 2.2.3. Những gì có thể được kiểm chứng bởi Java PathFinder 37 2.2.4. Kiểm chứng mô hình trong Java PathFinder 37 2.3. Các đề án mở rộng của Java PathFinder 40 2.4. Kết luận 41 Chương 3 – Kiểm chứng bất biến của chương trình Java sử dụng lập trình hướng khía cạnh 42 3.1. Đặt vấn đề 42 3.2. Ngôn ngữ mô hình hóa thống nhất UML 43 3.2.1. Thuộc tính 43 v 3.2.2. Liên kết 44 3.2.3. Thao tác 44 3.3. Ngôn ngữ ràng buộc đối tượng OCL 45 3.3.1. Biểu diễn biểu thức OCL 45 3.3.2. Bất biến (invariant) 46 3.4. Ví dụ minh họa 48 3.5. Kiểm chứng bất biến sử dụng AOP 50 3.6. Vấn đề kế thừa các bất biến ở lớp con 51 3.7. Kiểm chứng bất biến của lớp con có ràng buộc thay đổi so với lớp cha 55 3.8. Kiểm chứng bất biến liên quan đến các thuộc tính được thêm vào lớp con 60 3.9. Thực nghiệm 62 3.10. Kết luận 64 Chương 4 – Sinh tự động các ca kiểm thử bằng công cụ Java PathFinder 65 4.1. Tổng quan 65 4.2. Thực thi ký hiệu 65 4.3. Sinh tự động các ca kiểm thử bằng thực thi ký hiệu 67 4.4. Kiểm chứng bất biến bằng việc chèn khẳng định 71 4.4.1. Khẳng định trong Java và Java PathFinder 71 4.4.2. Xác định các bất biến 72 4.4.2.1. Đặt khẳng định trong đoạn mã 72 4.4.2.2. Kiểm tra bất biến trong phương thức main 72 4.4.2.3. Bất biến như là một tiến trình (Invariant as a Thread) 74 4.4.3. So sánh phương pháp AOP và phương pháp chèn khẳng định 75 4.5. Kết quả thực nghiệm 76 4.5.1. Kết quả thực nghiệm sinh các ca kiểm thử tự động 76 4.5.2. Kết quả thực nghiệm kiểm chứng bất biến bằng chèn khẳng định 79 4.6. Kết luận 80 KẾT LUẬN 81 TÀI LIỆU THAM KHẢO 83 vi Danh mục bảng biểu Bảng 1.1. So sánh giữa aspect và lớp Bảng 3.1. Một số kết quả thực nghiệm vii Danh mục hình vẽ Hình 1.1. Các mối quan tâm trong một hệ thống Hình 1.2. Thực thi các mối quan tâm cắt ngang bằng OOP Hình 1.3. Chồng chéo mã nguồn Hình 1.4. Dàn trải mã nguồn Hình 1.5. Sự khác nhau giữa biên dịch chương trình thông thường và có aspect Hình 1.6. Mối quan hệ giữa các thuật ngữ AOP Hình 1.7. Thực thi các mối quan tâm cắt ngang bằng AOP Hình 1.8. Các giai đoạn phát triển AOP Hình 1.9. Ví dụ về định nghĩa pointcut Hình 2.1. Sự bố trí các tầng của JPF Hình 2.2. Các thành phần của JPF Hình 2.3. Bùng nổ không gian trạng thái do sự đan xen giữa các luồng Hình 3.1. Biểu diễn các ràng buộc trên sơ đồ UML Hình 3.2. Ví dụ biểu đồ lớp của hệ thống card ATM Hình 3.3. Quy trình kiểm chứng bất biến Hình 4.1. Thực thi ký hiệu viii Danh mục ký hiệu, từ viết tắt Từ viết tắt Thuật ngữ Ý nghĩa AOP Aspect-Oriented Programming Lập trình hướng khía cạnh API Application Programming Interface Giao diện lập trình ứng dụng ASCII American Standard Code for Information Interchange Bộ mã chuẩn cho trao đổi thông tin của Mỹ AWT Abstract Window Toolkit Bộ công cụ đồ họa độc lập nền tảng của Java CTW Compile-time Weaving Đan kết lúc biên dịch Eclipse Bộ công cụ phát triển phần mềm IBM International Business Machines Corp Một trong những nhà sản xuất máy tính lớn nhất thế giới JDK Java Development Kit Bộ phát triển ứng dụng Java JPF Java PathFinder Bộ công cụ kiểm chứng mô hình cho ngôn ngữ Java JVM Java Virtual Machine Máy ảo Java LTW Load-time Weaving Đan kết lúc nạp chương trình MJI Model Java Interface Giao diện Java mẫu OCL Object Constraint Language Ngôn ngữ ràng buộc đối tượng OOP Object-Oriented Programming Lập trình hướng đối tượng RTW Run-time Weaving Đan kết lúc thực thi SPIN Simple Promela INterpreter Công cụ thông dịch ngôn ngữ Promela (trong kiểm chứng mô hình) SUT System Under Test Hệ thống được kiểm thử Syntropy Một phương pháp phân tích và thiết kế hướng đối tượng thế hệ thứ hai UML Unified Modeling Language Ngôn ngữ mô hình hóa thống nhất VM Virtual Machine Máy ảo XML eXtensible Markup Language Ngôn ngữ đánh dấu mở rộng 1 MỞ ĐẦU Những năm gần nay, với sự phát triển của phương pháp lập trình hướng đối tượng (OOP) [1, 2, 12] đã mang lại nhiều bước tiến mới cho lập trình nói chung và đưa ngành Công nghệ phần mềm lên một bước phát triển mới. Ưu điểm lớn nhất của lập trình hướng đối tượng là một hệ thống phần mềm được xây dựng bởi tập các lớp rời rạc. Mỗi lớp có nhiệm vụ hoàn toàn xác định, các nhiệm vụ của nó được vạch ra một cách rõ ràng. Trong một ứng dụng hướng đối tượng, các lớp cộng tác với nhau để đạt được mục tiêu chung của ứng dụng. Tuy nhiên, có các phần của một hệ thống không chỉ gánh nhiệm vụ giới hạn trong một lớp, chúng cắt ngang toàn bộ hệ thống và ảnh hưởng đến nhiều lớp. Đó chính là sự đan nhau phức tạp giữa các thành phần bên trong ứng dụng. Bên cạnh đó, tính tĩnh trong cách tiếp cận hướng đối tượng không cho phép phần mềm thích ứng với những thay đổi mới đáp ứng yêu cầu người dùng. Một hướng tiếp cận mới trong việc phát triển phần mềm là lập trình hướng khía cạnh (AOP: Aspect-Oriented Programming) [10, 22, 3]. Hướng tiếp cận này còn khá mới mẻ nhưng hứa hẹn những lợi điểm giải quyết được những yêu cầu có tính đan xen phức tạp, đồng thời mang lại cho phần mềm khả năng thay đổi và bổ sung yêu cầu mới sau khi đã hoàn chỉnh hay thậm chí đã đưa vào sử dụng. Ngôn ngữ mô hình hóa thống nhất (Unified Modelling Language - UML [4]) được chấp nhận rộng rãi như là một chuẩn cho phân tích và thiết kế hướng đối tượng. Việc biểu diễn và mô hình hóa cấu trúc tĩnh của hệ thống hướng đối tượng được dùng phổ biến trong các sơ đồ lớp UML. Tuy nhiên, không phải các cấu trúc chi tiết nào cũng có thể được biểu diễn một cách dễ dàng trong một sơ đồ lớp. Ngôn ngữ ràng buộc đối tượng (Object Constraint Language - OCL [29]), một phần của UML, là ngôn ngữ dùng cho việc mô tả các ràng buộc thêm vào trên các mô hình hướng đối tượng. Các ràng buộc OCL được sử dụng để mô tả các bất biến trên các lớp và các kiểu, các tiền điều kiện và hậu điều kiện của các thao tác. Các ràng buộc OCL luôn luôn được kết nối tới một mô hình hướng đối tượng UML. Một bất biến (invariant) là một ràng buộc liên quan đến một lớp, kiểu hay giao diện trong một mô hình UML. Bất biến được biểu diễn như một biểu thức lôgic giới hạn giá trị của một thuộc tính hay liên kết hay nó có thể biểu diễn mối quan hệ giữa các giá trị của các thuộc tính, các liên kết. Kết quả của biểu thức phải là đúng đối với tất cả các thể hiện của lớp được tham chiếu. Giai đoạn đảm bảo chất lượng phần mềm ngày càng trở nên quan trọng. Trong giai đoạn này, các đặc tả UML và các ràng buộc OCL đã được tạo ra bởi các nhà thiết kế phần mềm, chương trình chính đã được cài đặt bởi các nhà phát triển phần mềm dựa trên các đặc tả UML. Như vậy làm thế nào để kiểm chứng được bất biến của các đối tượng được thể hiện bằng các ràng buộc OCL có bị vi phạm tại thời điểm thực thi hay không. Sau khi nghiên cứu phương pháp AOP, chúng tôi thấy có thể sử dụng 2 phương pháp này để cài đặt các mã kiểm chứng để kiểm chứng các bất biến của các phần mềm được thiết kế theo phương pháp hướng đối tượng dựa trên các ràng buộc OCL đã được thiết kế. Đã có những nghiên cứu trước đó liên quan đến phương pháp này [3, 23]. Theo đó, công việc kiểm chứng được tách biệt hoàn toàn khỏi chương trình chính bằng cách tạo ra các aspect chứa mã kiểm chứng. Các aspect này sẽ được đan tự động vào chương trình chính và khi chương trình được thực thi, công việc kiểm chứng sẽ được thực hiện tự động. Tuy nhiên các nghiên cứu chưa xem xét việc kiểm chứng bất biến cho các lớp con được kế thừa bên dưới. Chúng tôi quan tâm tới việc xem xét các bất biến của các đối tượng theo quan hệ kế thừa, cụ thể là nghiên cứu kiểm chứng bất biến liên quan đến các thuộc tính được thêm mới vào lớp con và bất biến của lớp con có ràng buộc thay đổi so với lớp cha. Việc kiểm thử tính đúng đắn của các phương thức cần có bộ dữ liệu làm đầu vào cho các phương thức cần kiểm thử. Một bộ dữ liệu vào như vậy được gọi là một ca kiểm thử (test case). Việc chọn các bộ dữ liệu như thế nào để có thể phủ toàn bộ các đường thực thi có thể (possible execution path) là rất khó. Nếu có công cụ sinh tự động các ca kiểm thử phủ toàn bộ các đường thực thi có thể thì ta có thể chứng minh tính đúng đắn của phương thức thông qua các ca kiểm thử được sinh ra. Java PathFinder (JPF) [19, 25, 30, 31] với phần mở rộng của nó là thực thi ký hiệu dùng để sinh tự động các ca kiểm thử phủ được toàn bộ các đường thực thi có thể cho các phương thức của các đối tượng trong chương trình được cài đặt bằng ngôn ngữ Java. Chúng tôi sử dụng công cụ thực thi ký hiệu để sinh tự động các ca kiểm thử nhằm kiểm tra lại phương pháp kiểm chứng bất biến bằng AOP. Nội dung nghiên cứu: Tìm hiểu và nghiên cứu về kiểm chứng phần mềm, lập trình hướng khía cạnh (Aspect Oriented Programming - AOP) và sử dụng AOP để kiểm chứng bất biến của đối tượng bao gồm: Nghiên cứu về lý thuyết kiểm chứng phần mềm, các phương pháp, công cụ kiểm chứng phần mềm. Nghiên cứu phương pháp lập trình hướng khía cạnh và AspectJ - một đặc tả ngôn ngữ cho việc cài đặt các aspect bằng ngôn ngữ lập trình Java. Mở rộng phương pháp sử dụng AOP để kiểm chứng các bất biến của đối tượng trong chương trình Java tại thời điểm thực thi được đề xuất trong [23] bao gồm kiểm chứng bất biến liên quan đến các thuộc tính được thêm mới vào ở lớp con và bất biến của lớp con có ràng buộc thay đổi so với lớp cha. Để kiểm tra tính đúng đắn của các phương thức cần có các ca kiểm thử làm dữ liệu đầu vào. Do đó chúng tôi nghiên cứu công cụ kiểm chứng mô hình Java PathFinder và phần mở rộng thực thi ký hiệu (Symbolic Execution) [15] của nó để sinh tự động các ca kiểm thử cho các phương thức của các đối tượng trong chương trình hướng đối tượng Java. [...]... trình hướng khía cạnh, ưu điểm và nhược điểm của nó đồng thời trình bày về AspectJ – một cài đặt phổ biến của AOP trên ngôn ngữ lập trình hướng đối tượng Java Chương 2 trình bày tổng quan về công cụ kiểm chứng mô hình Java PathFinder (JPF) và các mở rộng của nó Chương 3 trình bày và mở rộng kỹ thuật kiểm chứng bất biến của đối tượng trong chương trình hướng đối tượng Java tại thời điểm thực thi sử dụng. .. mở rộng của JPF để sinh các ca kiểm thử tự động cho các phương thức của đối tượng trong chương trình hướng đối tượng Java nhằm mục đích kiểm tra lại phương pháp kiểm chứng sử dụng AOP Chương này cũng trình bày phương pháp kiểm chứng bất biến được khai báo dưới dạng các khẳng định trong chương trình Java sử dụng JPF và so sánh với phương pháp kiểm chứng bất biến sử dụng AOP Một vài thực nghiệm của thực... tôi trình bày kỹ thuật sử dụng AOP để kiểm chứng bất biến của đối tượng Java Phương pháp này đã có các nghiên cứu được công bố [23, 3] và chúng tôi mở rộng xem xét các bất biến theo quan hệ kế thừa Cụ thể là chúng tôi đề xuất kỹ thuật kiểm chứng bất biến liên quan đến các thuộc tính được thêm vào lớp con và bất biến của lớp con có ràng buộc thay đổi so với lớp cha Chương 4 trình bày phương pháp sử dụng. .. khác Đây là chướng ngại vật lớn trong việc phát triển phần mềm hướng khía cạnh 1.4 AspectJ Lập trình hướng khía cạnh là cách mô-đun hóa các mối quan tâm cắt ngang giống như lập trình hướng đối tượng là cách để mô-đun hóa các mối quan tâm thông thường AspectJ [11, 13, 26] là một thực thi lập trình hướng đối tượng cho ngôn ngữ lập trình Java AspectJ mở rộng một số khái niệm của ngôn ngữ Java Trình biên...3 Sử dụng công cụ Java PathFinder để kiểm chứng bất biến được khai báo dưới dạng các khẳng định (assertion) trong chương trình Java và so sánh với phương pháp kiểm chứng bất biến sử dụng AOP Cấu trúc luận văn: Luận văn gồm các phần: Mở đầu, 4 chương, kết luận và tài liệu tham khảo: Chương 1 giới thiệu phương pháp lập trình hướng khía cạnh Chúng tôi trình bày quá trình hình thành phương pháp lập trình. .. Nhược điểm của phương pháp lập trình hướng khía cạnh Phương pháp lập trình hướng khía cạnh có nhiều ưu điểm kể trên, tuy nhiên nó cũng có một số hạn chế sau: Liệu các aspect có phá vỡ tính đóng gói của các đối tượng? Bình thường các aspect tuân theo các luật điều khiển truy cập Bằng cách này hay cách khác, các aspect có thể phá vỡ tính đóng gói của các đối tượng Nhưng chúng làm theo cách có thể kiểm soát... lý, phát triển và tái sử dụng kém Lập trình hướng đối tượng (Object-Oriented Programming - OOP) [1, 2, 12] là phương pháp lập trình phổ biến nhất hiện nay được sử dụng để quản lý các mối quan tâm nghiệp vụ chính, tuy nhiên phương pháp này chưa đủ mạnh để xử lý hiệu quả rất nhiều các mối quan tâm cắt ngang hệ thống, đặc biệt là các ứng dụng phức tạp Phương pháp lập trình hướng khía cạnh (Aspect-Oriented... năm 1990 Nó kế thừa các kết quả của các phương pháp lập trình khác như lập trình tự sinh (generative programming), siêu lập trình (meta-programming), lập trình tự điều chỉnh (reflective programming), lập trình có khả năng thích ứng (adaptive programming), lập trình hướng chủ đề (subject-oriented programming), lập trình có mục đích (intentional programming), … Mục đích của AOP là để các nhà thiết kế... hóa nên việc sửa đổi sẽ làm ảnh hưởng tới rất nhiều mô-đun, có thể gây ra những sửa đổi không đồng bộ và không thống nhất với nhau Vì thế đòi hỏi thêm chí phí và thời gian để kiểm thử và đảm bảo việc thay đổi trên là không gây ra lỗi 1.3 Lập trình hướng khía cạnh 1.3.1 Lịch sử hình thành Lập trình hướng khía cạnh (AOP) là một tiếp cận thiết kế phần mềm được phát minh tại trung tâm nghiên cứu Xerox Palo... tái sử dụng Lập trình hướng khía cạnh là kỹ thuật lập trình mới cho phép đóng gói những hành vi liên quan đến nhiều đối tượng và rất có thể sẽ là bước phát triển kế tiếp trong phương pháp lập trình Tuy nhiên AOP không thay thế OOP mà nó là sự bổ sung cho OOP, cho phép chúng ta giải quyết các bài toán phức tạp tốt hơn và hiệu quả hơn Trong các phần tiếp theo, chúng ta sẽ khảo sát những vấn đề mà lập trình . kiểm chứng phần mềm, lập trình hướng khía cạnh (Aspect Oriented Programming - AOP) và sử dụng AOP để kiểm chứng bất biến của đối tượng bao gồm: Nghiên cứu về lý thuyết kiểm chứng phần mềm, các. Đan kết 13 1.3.5. Phương pháp lập trình hướng khía cạnh 14 1.3.6. Lợi ích của lập trình hướng khía cạnh 15 1.3.7. Nhược điểm của phương pháp lập trình hướng khía cạnh 17 1.3.8. Các công cụ AOP. TRƯỜNG ĐẠI HỌC CÔNG NGHỆ PHẠM ĐÌNH PHONG NGHIÊN CỨU VỀ KIỂM CHỨNG BẤT BIẾN CỦA ĐỐI TƯỢNG SỬ DỤNG LẬP TRÌNH HƯỚNG KHÍA CẠNH Ngành: Công nghệ thông tin Chuyên ngành: Công