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.pdf

51 3 0
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.pdf

Đ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

Output file ĐẠ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ô[.]

ĐẠ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 tận tình hướng dẫn em hoàn thành luận văn Em chân thành cảm ơn thầy TS Phạm Ngọc Hùng có nhận xét, đánh giá q trình hồn thiện luận văn Em xin bày tỏ lòng biết ơn 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 bảo, giảng dạy em suốt thời gian học trường việc hoàn thành luận văn Cuối cùng, xin bày tỏ tình cảm tới người thân gia đình, bạn bè tập thể lớp Cao học K15T2, K15T3 K15CNPM động viên, hỗ trợ em 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ừ nội dung trích từ tài liệu tham khảo cơng trình khác ghi rõ luận văn, kết nêu luận văn tơi thực 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 Chương – Lập trình hướng khía cạnh 1.1 Giới thiệu 1.2 Các vấn đề tồn lập trình hướng đối tượng 1.2.1 Các mối quan tâm hệ thống 1.2.2 Giải mối quan tâm cắt ngang OOP 1.2.3 Các vấn đề gặp phải thực thi mối quan tâm cắt ngang 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 AOP mơ hình lập trình 11 1.3.3 Quản lý mối quan tâm 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 lập trình hướng khía cạnh 15 1.3.7 Nhược điểm 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 - 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ử Java PathFinder 35 2.2.2 Các thành phần Java PathFinder 35 2.2.3 Những kiểm chứng Java PathFinder 37 2.2.4 Kiểm chứng mơ hình Java PathFinder 37 2.3 Các đề án mở rộng Java PathFinder 40 2.4 Kết luận 41 Chương – Kiểm chứng bất biến 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 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 bất biến lớp 51 3.7 Kiểm chứng bất biến lớp 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 thuộc tính thêm vào lớp 60 3.9 Thực nghiệm 62 3.10 Kết luận 64 Chương – Sinh tự động ca kiểm thử 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 ca kiểm thử thực thi ký hiệu 67 4.4 Kiểm chứng bất biến việc chèn khẳng định 71 4.4.1 Khẳng định Java Java PathFinder 71 4.4.2 Xác định bất biến 72 4.4.2.1 Đặt khẳng định đoạn mã 72 4.4.2.2 Kiểm tra bất biến phương thức main 72 4.4.2.3 Bất biến tiến trình (Invariant as a Thread) 74 4.4.3 So sánh phương pháp AOP phương pháp chèn khẳng định 75 4.5 Kết thực nghiệm 76 4.5.1 Kết thực nghiệm sinh ca kiểm thử tự động 76 4.5.2 Kết thực nghiệm kiểm chứng bất biến 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 aspect lớp Bảng 3.1 Một số kết thực nghiệm vii Danh mục hình vẽ Hình 1.1 Các mối quan tâm hệ thống Hình 1.2 Thực thi mối quan tâm cắt ngang 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 biên dịch chương trình thơng thường có aspect Hình 1.6 Mối quan hệ thuật ngữ AOP Hình 1.7 Thực thi mối quan tâm cắt ngang AOP Hình 1.8 Các giai đoạn phát triển AOP Hình 1.9 Ví dụ định nghĩa pointcut Hình 2.1 Sự bố trí tầng JPF Hình 2.2 Các thành phần JPF Hình 2.3 Bùng nổ không gian trạng thái đan xen luồng Hình 3.1 Biểu diễn ràng buộc sơ đồ UML Hình 3.2 Ví dụ biểu đồ lớp 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 AOP API ASCII Thuật ngữ Aspect-Oriented Programming Application Programming Interface American Standard Code for Information Interchange AWT Abstract Window Toolkit CTW JDK Compile-time Weaving Eclipse International Business Machines Corp Java Development Kit JPF Java PathFinder JVM LTW MJI OCL OOP RTW Java Virtual Machine Load-time Weaving Model Java Interface Object Constraint Language Object-Oriented Programming Run-time Weaving SPIN Simple Promela INterpreter SUT System Under Test IBM Syntropy UML VM XML Unified Modeling Language Virtual Machine eXtensible Markup Language Ý nghĩa Lập trình hướng khía cạnh Giao diện lập trình ứng dụng Bộ mã chuẩn cho trao đổi thông tin Mỹ Bộ công cụ đồ họa độc lập tảng Java Đan kết lúc biên dịch Bộ công cụ phát triển phần mềm Một nhà sản xuất máy tính lớn giới Bộ phát triển ứng dụng Java Bộ cơng cụ kiểm chứng mơ hình cho ngôn ngữ Java Máy ảo Java Đan kết lúc nạp chương trình Giao diện Java mẫu Ngơn ngữ ràng buộc đối tượng Lập trình hướng đối tượng Đan kết lúc thực thi Công cụ thông dịch ngôn ngữ Promela (trong kiểm chứng mơ hình) Hệ thống kiểm thử Một phương pháp phân tích thiết kế hướng đối tượng hệ thứ hai Ngơn ngữ mơ hình hóa thống Máy ảo Ngôn ngữ đánh dấu mở rộng MỞ ĐẦU Những năm gần nay, với phát triển 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 cho lập trình nói chung đưa ngành Cơng nghệ phần mềm lên bước phát triển Ưu điểm lớn lập trình hướng đối tượng hệ thống phần mềm xây dựng tập lớp rời rạc Mỗi lớp có nhiệm vụ hồn tồn xác định, nhiệm vụ vạch cách rõ ràng Trong ứng dụng hướng đối tượng, lớp cộng tác với để đạt mục tiêu chung ứng dụng Tuy nhiên, có phần hệ thống không gánh nhiệm vụ giới hạn lớp, chúng cắt ngang toàn hệ thống ảnh hưởng đến nhiều lớp Đó đan phức tạp thành phần bên ứng dụng Bên cạnh đó, tính tĩnh 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 thay đổi đáp ứng yêu cầu người dùng Một hướng tiếp cận việc phát triển phần mềm lập trình hướng khía cạnh (AOP: Aspect-Oriented Programming) [10, 22, 3] Hướng tiếp cận mẻ hứa hẹn lợi điểm giải u cầu có tính đan xen phức tạp, đồng thời mang lại cho phần mềm khả thay đổi bổ sung yêu cầu sau hồn chỉnh hay chí đưa vào sử dụng Ngơn ngữ mơ hình hóa thống (Unified Modelling Language - UML [4]) chấp nhận rộng rãi chuẩn cho phân tích thiết kế hướng đối tượng Việc biểu diễn mơ hình hóa cấu trúc tĩnh hệ thống hướng đối tượng dùng phổ biến sơ đồ lớp UML Tuy nhiên, cấu trúc chi tiết biểu diễn cách dễ dàng sơ đồ lớp Ngôn ngữ ràng buộc đối tượng (Object Constraint Language - OCL [29]), phần UML, ngôn ngữ dùng cho việc mô tả ràng buộc thêm vào mơ hình hướng đối tượng Các ràng buộc OCL sử dụng để mô tả bất biến lớp kiểu, tiền điều kiện hậu điều kiện thao tác Các ràng buộc OCL luôn kết nối tới mơ hình hướng đối tượng UML Một bất biến (invariant) ràng buộc liên quan đến lớp, kiểu hay giao diện mơ hình UML Bất biến biểu diễn biểu thức lơgic giới hạn giá trị thuộc tính hay liên kết hay biểu diễn mối quan hệ giá trị thuộc tính, liên kết Kết biểu thức phải tất thể lớp tham chiếu Giai đoạn đảm bảo chất lượng phần mềm ngày trở nên quan trọng Trong giai đoạn này, đặc tả UML ràng buộc OCL tạo nhà thiết kế phần mềm, chương trình cài đặt nhà phát triển phần mềm dựa đặc tả UML Như làm để kiểm chứng bất biến đối tượng thể ràng buộc OCL có bị vi phạm thời điểm thực thi hay không Sau nghiên cứu phương pháp AOP, chúng tơi thấy sử dụng phương pháp để cài đặt mã kiểm chứng để kiểm chứng bất biến phần mềm thiết kế theo phương pháp hướng đối tượng dựa ràng buộc OCL thiết kế Đã có nghiên cứu trước liên quan đến phương pháp [3, 23] Theo đó, cơng việc kiểm chứng tách biệt hồn tồn khỏi chương trình cách tạo aspect chứa mã kiểm chứng Các aspect đan tự động vào chương trình chương trình thực thi, cơng việc kiểm chứng thực tự động Tuy nhiên nghiên cứu chưa xem xét việc kiểm chứng bất biến cho lớp kế thừa bên Chúng quan tâm tới việc xem xét bất biến đối tượng theo quan hệ kế thừa, cụ thể nghiên cứu kiểm chứng bất biến liên quan đến thuộc tính thêm vào lớp bất biến lớp có ràng buộc thay đổi so với lớp cha Việc kiểm thử tính đắn phương thức cần có liệu làm đầu vào cho phương thức cần kiểm thử Một liệu vào gọi ca kiểm thử (test case) Việc chọn liệu để phủ tồn đường thực thi (possible execution path) khó Nếu có cơng cụ sinh tự động ca kiểm thử phủ toàn đường thực thi ta chứng minh tính đắn phương thức thông qua ca kiểm thử sinh Java PathFinder (JPF) [19, 25, 30, 31] với phần mở rộng thực thi ký hiệu dùng để sinh tự động ca kiểm thử phủ tồn đường thực thi cho phương thức đối tượng chương trình cài đặt ngơn ngữ Java Chúng sử dụng công cụ thực thi ký hiệu để sinh tự động ca kiểm thử nhằm kiểm tra lại phương pháp kiểm chứng bất biến AOP Nội dung nghiên cứu: Tìm hiểu nghiên cứu kiểm chứng phần mềm, lập trình hướng khía cạnh (Aspect Oriented Programming - AOP) sử dụng AOP để kiểm chứng bất biến đối tượng bao gồm: Nghiên cứu lý thuyết kiểm chứng phần mềm, 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 AspectJ - đặc tả ngôn ngữ cho việc cài đặt aspect ngôn ngữ lập trình Java Mở rộng phương pháp sử dụng AOP để kiểm chứng bất biến đối tượng chương trình Java thời điểm thực thi đề xuất [23] bao gồm kiểm chứng bất biến liên quan đến thuộc tính thêm vào lớp bất biến lớp có ràng buộc thay đổi so với lớp cha Để kiểm tra tính đắn phương thức cần có ca kiểm thử làm 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 phần mở rộng thực thi ký hiệu (Symbolic Execution) [15] để sinh tự động ca kiểm thử cho phương thức đối tượng chương trình hướng đối tượng Java 29 2) Nếu khơng có advice after advice advice khai báo trước trọng tệp tin có thứ tự ưu tiên cao Ví dụ có ba advice theo thứ tự sau: Before1 Before2 After Dựa vào luật ta có Before1>Before2 Dựa vào luật ta có After>Before1 After>Before2 Kết hợp hai kết ta có thứ tự ưu tiên sau: After > Before1 > Before2 Hiệu ứng tính ưu tiên: joint point cụ thể, advice thực theo thứ tự ưu tiên Đoạn mã around advice điều khiển việc có cho phép advice có thứ tự ưu tiên thấp chạy hay khơng Để cho phép advice có độ ưu tiên thấp chạy việc gọi hàm proceed() Lời gọi đến hàm proceed() chạy advice có thứ tự ưu tiên tính tốn joint point khơng có adviec Đoạn mã before advice ngăn advice có thứ tự ưu tiên thấp chạy việc ném ngoại lệ Nếu chạy bình thường mà khơng ném ngoại lệ advice có thứ tự ưu tiên chạy tính tốn joint point khơng có advice Việc chạy after returning advice chạy advice có thứ tự ưu tiên tính tốn joint point khơng có advice Sau việc tính tốn trả bình thường, thân advice chạy Việc chạy after throwing advice chạy advice có độ ưu tiên tính tốn joint point khơng có advice Sau tính tốn ném ngoại lệ có kiểu thích hợp, thân advice chạy Việc chạy after advice chạy advice có thứ tự ưu tiên tính tốn joint point khơng có advice Sau thân advice chạy 1.4.5 Introduction Một introduction kỹ thuật AspectJ nhằm sửa đổi lớp thứ bậc chúng việc đưa vào hay chèn mã vào lớp đích ứng dụng, hay việc thay đổi tính thừa kế hay thực thi giao diện lớp hay tập lớp Thông thường advice dùng để thực thi cắt ngang động, introduction dùng để thực thi cắt ngang tĩnh đan kết hay thực thi thời điểm biên dịch Introduction sử dụng để: 1) Thêm biến liệu (hay thuộc tính mới) vào lớp: private int StockClient.numberOfStocks = 0; 30 Câu lệnh thêm thuộc tính có tên numberOfStocks, kiểu integer khởi tạo giá trị ban đầu vào lớp StockClient Tên thuộc tính thêm vào phải khơng trùng với tên thuộc tính có Điều có nghĩa việc đặt tên cho phải tuân theo quy ước đặt tên để tránh xung đột trình thực thi 2) Thêm phương thức vào lớp: public StockClient.new(String message); Câu lệnh đưa phương thức khởi tạo vào lớp StockClient Câu lệnh sau thêm phương thức có tên getClientStock() vào lớp StockClient: public StockClient.getClientStock(){ return numberOfStocks; } 3) Thay đổi thừa kế hay thứ bậc giao diện lớp: declare parents: StockClient implements newServiceInterface; declare parents: StockClient extends Frame; Hai câu lệnh làm cho lớp StockClient thực giao diện có tên newServiceInterface kế thừa (extend) lớp có tên Frame tương ứng 4) Thêm cảnh báo hay lỗi: AspectJ cung cấp khả dị tìm số pointcut thời điểm biên dịch sinh lỗi cảnh báo Một cảnh báo hướng trình biên dịch đưa thơng báo tiếp tục q trình biên dịch Ngược lại với lỗi, trình biên dịch đưa thơng báo dừng q trình biên dịch Cú pháp sau: declare warning : Pointcut : String; declare error : Pointcut : String; Trong String chuỗi thông báo lỗi, Pointcut mô tả Pointcut Những pointcut định vị joint point mã nguồn tương ứng với điểm chương trình thực thi Ví dụ aspect SCError dừng q trình biên dịch chương trình hàm khởi tạo lớp SCMain thực thi sinh thông báo lỗi: public aspect SCError { declare error: execution(SCMain.new( )): “Constructor executed!”; } 1.4.6 Aspect AspectJ sử dụng từ khóa aspect để biểu thị cấu trúc thiết kế để đóng gói tất đoạn mã cần thiết để thực thi mối quan tâm cắt ngang giống từ khóa class Java dùng để đóng gói lớp Cấu trúc đóng gói gọi 31 aspect Tất pointcut, advice introduction đóng gói việc sử dụng từ khóa aspect Khơng có aspect, đoạn mã phục vụ cho việc thực thi mối quan tâm cắt ngang đóng góp vào vấn đề lộn xộn mã nguồn mà cố gắng giải Như vậy, aspect đơn vị chủ yếu thực thi cắt ngang Chúng giống lớp nhiều khía cạnh, khác quan trọng aspect gây ảnh hưởng sửa đổi lớp Bảng sau tóm tắt điểm giống khác aspect lớp: Đặc điểm Lớp Aspect Có thể thể hóa trực tiếp Có Khơng Có thể kế thừa lớp Có Có Có thể thực thi giao diện Có Có Có thể có định danh truy cập Có Có Khơng Có1 Yes Yes2 Có thể thừa kế aspect Có thể khai báo lớp, giao diện Bảng 1.1 So sánh aspect lớp Chỉ aspect trừu tượng kế thừa Phải khai báo tĩnh (static) Cấu trúc aspect: Một aspect giống hoạt động gần giống lớp Java việc cung cấp chứa cho đóng gói mã pointcut, advice introduction Aspect chứa thuộc tính nó, phương thức, thành viên lớp lồng giống lớp bình thường Java để hỗ trợ thêm tính hướng đối tượng bên mối quan tâm mà aspect đại diện Dạng aspect sau: aspect ::= [privilege] [static] aspect ::= public | private [abstract] ::= letter { letter | digit } ::= [dominates] [extends] ::= [issingleton | perthis | pertarget | percflow | perflowbelow] 32 { //pointcuts //advice //methods/attributes } Sau ví dụ việc cài đặt aspect: public aspect ATMcardVerifier { pointcut checkwithdrawalAmount(ATMcard card, int amount): call(* ATMcard.withdrawMoney( )) && target(card) && args(amount); void around(ATMcard card, int amount): checkwithdrawalAmount(card, amount) { if(amount=50”); } else { proceed(card, amount); } } } Aspect cài đặt poitcut around advice dùng để kiểm tra số tiền rút qua tham số hình thức amount hàm withdrawMoney(int amount) Trước thực lệnh rút aspect kiểm tra số tiền rút nhỏ $50 đưa thông báo không cho thực lệnh rút Tính kế thừa aspect: Trong AspectJ, giống lớp, aspect thừa kế lớp, thực thi giao diện thừa kế aspect trừu tượng khác AspectJ thực luật thừa kế aspect lớp Các pointcut advice aspect cha aspect thừa kế Ngoài ra, pointcut khai báo trừu tượng bị ghi đè pointcut tương ứng lớp Chú ý: Đối với advice chia sẻ joint point advice aspect có thứ tự ưu tiên cao advice aspect cha 33 1.5 Kết luận Trong chương chúng tơi trình bày phương pháp lập trình hướng khía cạnh AOP, kỹ thuật lập trình để đóng gói mối quan tâm cắt ngang nhằm tách biệt mối quan tâm cắt ngang với mối quan tâm nghiệp vụ Phương pháp lập trình giúp cho việc thiết kế kiến trúc hệ thống, thực thi bảo trì hệ thống dễ dàng Chương trình bày chi tiết AspectJ, đặc tả ngôn ngữ AOP cài đặt phổ biến cho ngơn ngữ lập trình Java Ở phần sau sử dụng AspectJ để cài đặt aspect để kiểm chứng bất biến đối tượng chương trình hướng đối tượng Java 34 Chương - Cơng cụ kiểm chứng mơ hình Java PathFinder 2.1 Giới thiệu Công nghệ thông tin ngày phát triển, hệ thống phần mềm ngày phức tạp phát triển nhanh chóng Vì chúng dễ có nhiều lỗi Số lượng lỗi phát tăng theo cấp số nhân với số lượng tương tác thành phần hệ thống, đặc biệt hệ thống tương tranh Trong hệ thống phần mềm phức tạp, thời gian công sức dành cho kiểm chứng phần mềm ngày nhiều so với việc viết phần mềm Các kỹ thuật tìm kiếm để làm giảm đơn giản hóa cơng việc kiểm chứng Các phương pháp hình thức mở tiềm lớn để đạt tích hợp kiểm chứng quy trình thiết kế, cung cấp kỹ thuật kiểm chứng hiệu làm giảm thời gian kiểm chứng Các kỹ thuật kiểm chứng hệ thống áp dụng để thiết kế hệ thống phần mềm ngày trở nên đáng tin cậy Kiểm chứng mơ hình [5] kỹ thuật tự động để kiểm chứng hệ thống tương tranh hữu hạn trạng thái phát triển độc lập Clarke Emerson Mỹ Queille Sifakis Pháp vào năm 1980 Kiểm chứng mơ hình chia làm loại: Kiểm chứng mơ hình phần cứng kiểm chứng mơ hình phần mềm Trong luận văn này, đề cập đến kiểm chứng mô hình phần mềm Trong việc kiểm chứng mơ hình phần mềm lý thuyết nghe phương pháp kiểm chứng an toàn mạnh, thực tế khơng thực mạnh Để làm cho phương pháp thực tế hơn, công cụ kiểm chứng mơ hình phải tận dụng giải pháp kinh nghiệm trừu tượng hóa trạng thái linh hoạt Java PathFinder (JPF) [19, 25, 30, 31] công cụ độc vơ nhị khả cấu hình khả mở rộng tảng tốt để khám phá cách để cải thiện hiệu 2.2 Cơng cụ kiểm chứng mơ hình Java PathFinder Java PathFinder (JPF) [19, 25, 30, 31] hệ thống để kiểm chứng mã thực thi bytecode chương trình Java Ở dạng đơn giản, máy ảo Java sử dụng cơng cụ kiểm chứng mơ hình trạng thái phần mềm tường minh, khảo sát tất đường thực thi tiềm chương trình để tìm vi phạm thuộc tính khóa chết (deadlock) hay ngoại lệ không xử lý (unhanled exceptions) Không giống công cụ gỡ lỗi truyền thống, JPF thông báo đầy đủ đường thực thi dẫn đến một lỗi JPF đặc biệt phù hợp cho việc tìm kiếm lỗi khó kiểm thử chương trình đa luồng 35 2.2.1 Lịch sử Java PathFinder JPF hồn tồn chương trình Java chạy cơng cụ dòng lệnh độc lập nhúng vào hệ thống khác mơi trường phát triển Nó chặng đường dài từ năm 1999 Có năm mốc cần ý sau: 1) Năm 1999 : JPF1 Java-to-Promela JPF công cụ dùng để dịch mã nguồn Java sang ngôn ngữ Promela cho công cụ kiểm chứng mơ hình SPIN 2) Năm 2000: JPF2 cơng cụ kiểm chứng mơ hình tùy biến hiểu mã bytecode Java sử dụng mã bytecode cách trực tiếp 3) Năm 2003: Thiết kế thực thi cấu trúc mở rộng 4) Năm 2005: Mã nguồn JPF mở cho cộng đồng phát triển 5) Năm 2006: JPF4 với sinh hợp (unified ChoiceGenerators) máy thực thi Trong suốt thời gian này, có nhiều người tổ chức làm việc với JPF Đa số công việc làm nhóm Cơng nghệ Phần mềm Robust (RSE) Trung tâm Nghiên cứu Ames NASA 2.2.2 Các thành phần Java PathFinder Java, chức ngơn ngữ lập trình cịn tập tầng bắt đầu thực thi máy ảo cụ thể (“VM chủ”) nằm đỉnh thư viện thực thi (native libraries) viết cho hệ điều hành Đối với ngăn xếp này, thêm JPF – ứng dụng Java để chạy đỉnh máy ảo chủ, thân máy áo (VM) mà sau thực thi hệ thống kiểm thử (System Under Test – SUT) Hình 2.1 Sự bố trí tầng JPF 36 Với tất đệ quy này, thật rắc rối việc xác định đoạn mã Java xử lý mức Chúng ta xem xét thành phần liên quan áp JPF vào SUT Chúng ta phân loại thành phần theo hai khía cạnh: 1) Xử lý VM (VM chủ, JPF) 2) Thực thể phân phối liên kết (hệ thống Java chủ, lõi JPF, mở rộng JPF, SUT) Sau sơ đồ JPF chi tiết: Hình 2.2 Các thành phần JPF Chúng ta từ bên trái sang phải sơ đồ Chúng ta ứng dụng Java biên dịch mà muốn kiểm chứng Đây phần phân phối JPF thực thi JPF, tệp lớp tương ứng khơng cần phải thấy máy ảo chủ (chạy JPF) Tuy nhiên, mã ứng dụng sử dụng lớp giao diện có phân phối JPF (ví dụ: khung làm việc việc mơ hình hóa sơ đồ trạng thái UML?) Đồng thời, ứng dụng thư viện mơ hình hóa diễn giải tạo thành hệ thống kiểm thử (SuT) Phần lõi JPF Từ trước đến biết máy ảo viết Java, chạy hệ thống Java cài đặt Điều có nghĩa tất lớp cấu thành JPF cần thấy máy ảo Java chủ (host JVM) khơng phải JPF Ngồi việc phải thiết lập biến mơi trường CLASSPATH, máy ảo chủ phải có đủ nhớ để chạy (có thể cấu hình tham số - 37 Xmx… Eclipse) JPF hệ thống nguyên khối Nó bao gồm nhiều cấu phần khác cấu hình để làm nhiều thứ Phần cuối phần phức tạp Các ứng dụng hầu hết sử dụng thư viện chuẩn Java (ví dụ System.out.println()) lớp cấu thành nên JPF làm Một số lớp thư viện chuẩn phải thay phiên đặc thù JPF JPF thực thi hệ thống kiểm chứng (SuT) JPF có chế đặc biệt MJI để làm việc Nhưng nhiều lớp thư viện chuẩn Java túy lấy chúng thẳng từ máy ảo Java chủ Điều có nghĩa thư viện chuẩn nằm đường dẫn đến thư viện lớp JPF máy ảo Java chủ, thực thể lớp tương ứng khơng có chung – tồn hoàn toàn bên JPF, hoàn toàn máy chủ ảo 2.2.3 Những kiểm chứng Java PathFinder Những lỗi tìm thấy JPF? Java tìm lỗi khóa chết (deadlock) ngoại lệ không xử lý (unhandled exception) NullPointerExceptions AssertionErrors, nhiên người dùng cịn tự cung cấp lớp viết phần mở rộng để thực kiểm chứng thuộc tính khác Các kiểm tra điều kiện tranh chấp (race condition) giới hạn nhớ heap (heap bound) gói phân phối JPF Chương trình kiểm chứng JPF? Nói chung, JPF có khả kiểm chứng chương trình Java khơng phụ thuộc vào phương thức không hỗ trợ nội Máy ảo JPF thực thi với tảng đặc thù, mã riêng Điều áp đặt giới hạn thư viện chuẩn sử dụng bên ứng dụng cần kiểm thử Mặc dù viết phiên thư viện (đặc biệt cách sử dụng Model Java Interface – MJI), khơng hỗ trợ cho Java.awt, Java.net giới hạn hỗ trợ cho Java.io chế Java‟s runtime reflection Một hạn chế khác liên quan đến đòi hỏi lưu trữ trạng thái JPF, giới hạn kích thước ứng dụng kiểm chứng khoảng 10kloc (10 ngàn dòng lệnh), phụ thuộc vào cấu trúc bên chương trình, khơng có trừu tượng hóa cụ thể đặc tính ứng dụng sử dụng Vì hạn chế giới hạn kích cỡ, JPF sử dụng chủ yếu cho ứng dụng dạng mơ hình, địi hỏi ngơn ngữ lập trình hướng thủ tục đầy đủ JPF đặc biệt hữu ích để kiểm chứng chương trình Java tương tranh, có hệ thống nghiên cứu trình tự lập kế hoạch, lĩnh vực đặc biệt khó khăn việc kiểm thử truyền thống 2.2.4 Kiểm chứng mơ hình Java PathFinder Đối lập với kiểm thử thực đường với liệu đầu vào, JPF thực mô không tất định (non-determinism) Mô không tất định yêu cầu hệ thống sinh tất lựa chọn cho tất trạng thái hệ thống Hệ thống có hai khả năng: backtracking state matching Hai cách để tạo mô 38 không tất định JPF quay lui (backtracking) so khớp trạng thái (state matching) 1) Quay lui có nghĩa JPF khơi phục trạng thái thực thi trước để xem xét lựa chọn cịn lại chưa duyệt Ví dụ, JPF duyệt đến trạng thái kết thúc chương trình quay lui trở lại để tìm chuỗi lịch trình xảy khác chưa thực thi Trong điều mặt lý thuyết thực việc thực thi lại chương trình từ đầu, quay lui kỹ thuật hiệu nhiều việc lưu trữ trạng thái tối ưu hóa 2) So khớp trạng thái kỹ thuật khóa khác để tranh cơng việc dư thừa Trạng thái thực thi chương trình chủ yếu bao gồm ảnh (snapshot) nhớ heap ngăn xếp tiến trình (thread-stack) Trong JPF thực thi, kiểm tra trạng thái nhận thấy trạng thái tương tự, trường hợp không cần thiết phải tiếp tục theo đường thực thi quay lui tới lựa chọn không tất định chưa duyệt gần Về lý thuyết, kiểm chứng mơ hình trạng thái tường minh phương pháp xác – tất lựa chọn duyệt, có lỗi phát Khơng may kiểm chứng mơ hình phù hợp với chương trình nhỏ, thường nhỏ 10 nghìn dịng lệnh Số trạng thái tăng vượt qua giới hạn tính tốn cách nhanh chóng chương trình phức tạp Vấn đề biết đến bùng nổ không gian trạng thái dễ dàng minh họa chuỗi lịch trình xảy số tiến trình (process) cụ thể bao gồm phân đoạn nguyên tử (atomic section) Hình 2.3 Bùng nổ không gian trạng thái đan xen luồng JPF giải vấn đề hiệu ba cách: (1) chiến lược tìm kiếm cấu hình được, (2) giảm sổ lượng trạng thái, (3) giảm chi phí lưu trữ trạng thái 1) Các chiến lược tìm kiếm cấu hình thử giải tốn mà tồn khơng gian trạng thái khơng thể tìm kiếm việc định hướng tìm kiếm cốt để lỗi tìm nhanh hơn, ví dụ với nguồn tính tốn Điều nghĩa sử dụng công cụ kiểm chứng mơ hình khơng phải cơng cụ chứng minh mà công cụ gỡ lỗi mà hầu hết thực việc sử 39 dụng tìm kiếm kinh nghiệm (heuristic) để xếp lọc tập trạng thái tiềm theo số thuộc tính thích hợp liên quan Sự tính tốn giá trị theo kinh nghiệm giao phó cho lớp cấu hình người dùng, tức không viết mã cố định nhân JPF 2) Việc làm giảm số trạng thái phải lưu trữ cách ưu thích để cải thiện hiệu hỗ trợ số kỹ thuật sau đây: Bộ sinh lựa chọn theo kinh nghiệm (Heuristic Choice Generators): có nghĩa tập lựa chọn trạng thái khơng cần phải hồn thành Kiểu động khơng thể sinh tất giá trị xảy mặt kiểm tra hành vi hệ thống đủ để thử ba lựa chọn: nhỏ hơn, lớn ngưỡng Khả quan trọng để kinh nghiệm cấu hình cốt để chúng dễ dàng mở rộng hay thích nghi với nhu cầu ứng dụng cụ thể Giảm thứ tự phận (Partial Order Reduction): kỹ thuật quan trọng để giảm không gian trạng thái chương trình tương tranh Mục đích để xem xét chuyển ngữ cảnh hoạt động có ảnh hưởng ngang qua biên tiến trình lệnh PUTFIELD đối tượng truy cập từ luồng khác Sự làm giảm thứ tự phận JPF lợi dụng mã Java bytecode thơng tin có khả với tới đạt từ trình thu thập rác Sự thực thi máy ảo chủ (Host VM Execution): JPF máy ảo Java viết Java, tức chạy đỉnh máy ảo chủ (host VM) Đối với thành phần đặc tính hợp lệ, hiểu để giao phó thực thi từ JPF theo dõi theo trạng thái cho máy ảo chủ theo dõi không trạng thái Kỹ thuật MJI tương ứng đặc biệt phù hợp để xử lý mô vào chức thư viện chuẩn khác Sự trừu tượng hóa trạng thái (State Abstraction): JPF lưu trữ tất thay đổi nhớ heap, ngăn xếp tiến trình mà đơi có q tải lớn đến việc định lựa chọn thực thi hai trạng thái khác theo ngữ cảnh ứng dụng Ví dụ, việc so khớp trạng thái dựa phân tích hình thù cấu trúc liệu mang lại giảm trạng thái đáng kể sử dụng thành công ứng dụng JPF gần 3) Việc làm giảm chi phí lưu trữ trạng thái có liên quan yếu đến đặc trưng cài đặt lõi JPF Nó khơng phải thước đo để giải bùng nổ không gian trạng thái việc lưu trữ trạng thái hiệu có tính chất bắt buộc công cụ kiểm chứng mơ hình phần mềm Vì chuyển trạng thái thường dẫn đến số lượng nhỏ thay đổi, JPF sử dụng kỹ thuật gọi sụt trạng thái (state collapsing) để làm giảm yêu cầu nhớ trạng thái việc lưu trữ số bể chứa thành phần trạng thái riêng (hash table) thay việc lưu trữ giá trị thay đổi cách trực tiếp 40 2.3 Các đề án mở rộng Java PathFinder JPF tảng mở rộng Do nhiều dự án triển khai nhằm mở rộng tính cho JPF Đề án mở rộng bật thực thi ký hiệu (symbolic execution) để sinh ca kiểm thử Thực thi ký hiệu trình bày chi tiết ứng dụng để sinh ca kiểm thử chương Hiện tại, mở rộng JPF bao gồm: Kiểm chứng mơ hình giao diện người dùng (User Interface Model Checking): ví dụ kiểm chứng mơ hình lớp cụ thể ứng dụng Java – chương trình Swing AWT Mở rộng thực tập MJI (Model Java Interface) mơ hình hóa thư viện chuẩn thay mặt chức thư viện javax.swing.* and java.awt.* để ứng dụng giao diện người dùng Java chuẩn kiểm thử lựa chọn đầu vào khác người sử dụng Sinh liệu kiểm thử ký hiệu (Symbolic Test Data Generation): phần mở rộng thực thi ký hiệu sử dụng BytecodeFactory để nạp chồng mã bytecode lõi JPF để tạo ca kiểm thử cụ thể Công việc thực việc sử dụng hệ thống thuộc tính trường (field)/cấu trúc ngăn xếp (stackframe) JPF để thu thập điều kiện dẫn ký hiệu sau đưa chúng vào giải giàng buộc nhằm thu liệu kiểm thử cụ thể Sinh kiểm thử luồng an toàn ký hiệu (Symbolic Threadsafety Test Generation): chế độ thực thi ký hiệu đơn giản cố gắng nhận dạng vấn đề an tồn luồng tiềm tàng sau sinh mã để kiểm thử điều với chế độ thực thi JPF giá trị cụ thể Thông tin ký hiệu đơn giản nhiều so với phần mở rộng thực thi ký hiệu giữ lại vết thực thi Danh mục kiểm thử thực phát truy cập không đồng trường từ bên phương thức công cộng, để nhận dạng ứng viên cho nghe PreciseRaceDetector Khung làm việc kiểm chứng cấu thành (Compositional Verification Framework): phần mở rộng thực giải thuật học máy sử dụng cho việc suy luận đảm bảo giả định, để phân hoạch hệ thống thành thành phần kiểm chứng riêng biệt Mục đích thực thi để cải thiện đáng kể hiệu JPF Nó sử dụng để sinh mơi trường giả định cho kiểm chứng mơ hình UML, để xác định chuỗi kiện đắn Kiểm chứng đặc tính số (Numeric Property Verification): mở rộng thay mã bytecode khởi đầu tập lớp thị số để phát tràn số bao gồm truyền giá trị khơng xác (NaN, Inf), so sánh 41 xác số dấu phảy động hủy bỏ thê thảm tiềm tàng (thiếu xác phép trừ/cộng) Kiểm chứng mơ hình biểu đồ trạng thái UML (UML State Chart Model Checking): khung làm việc biểu đồ trạng thái biến thể kiểm chứng mô hình giao diện người dùng, cho mục đích kiểm chứng biểu đồ trạng thái UML Nó kết hợp thư viện MJI dựa giản đồ chuyển đổi biểu đồ trạng thái UML, với ứng dụng tổng quát (các trình điều khiển kiểm thử) để thực thi biểu đồ trạng thái Khung làm việc hỗ trợ kiểm chứng mơ hình kiểm thử sử dụng ngôn ngữ kịch cho đặc tả môi trường 2.4 Kết luận Tải FULL (92 trang): https://bit.ly/3E1COMF Dự phòng: fb.com/TaiHo123doc.net Java Path Finder (JPF) hệ thống để kiểm chứng chương trình bytecode Java thực thi Nó máy ảo Java sử dụng công cụ kiểm chứng mô hình phần mềm trạng thái tường minh JPF duyệt cách có hệ thống tất đường dẫn thực thi tiềm tàng chương trình để tìm vi phạm đặc tính khóa chết (deadlock) hay ngoại lệ không xử lý (unhandled exception) Ngồi ra, phát vi phạm thơng báo tồn đường thực thi dẫn đến lỗi JPF đặc biệt phù hợp với việc tìm lỗi liên đới chương trình đa luồng hay hệ thống tương tranh mà lỗi khó phát phương pháp kiểm thử thơng thường JPF hệ thống mở cấu thành thành phần Do hồn tồn bổ sung thêm tính cho JPF dạng thành phần mở rộng 42 Chương – Kiểm chứng bất biến chương trình Java sử dụng lập trình hướng khía cạnh 3.1 Đặt vấn đề Khi ngành công nghiệp phần mềm phát triển, hệ thống ngày phức tạp Khả nắm bắt kiểm sốt phức tạp kèm với khả biểu diễn hệ thống cách tồn diện Từ u cầu địi hỏi phải đời cơng cụ mơ hình hóa hệ thống mang tính trực quan Mơ hình mơ tả ngơn ngữ trực quan có nghĩa đa phần thông tin thể ký hiệu đồ họa kết nối chúng, cần thiết số thông tin biểu diễn dạng văn Ngơn ngữ mơ hình hóa thống (Unified Modeling Language – UML) [4] ngôn ngữ mơ hình hố thống có phần bao gồm ký hiệu hình học, phương pháp hướng đối tượng sử dụng để thể miêu tả thiết kế hệ thống Nó ngơn ngữ để đặc tả, trực quan hố, xây dựng làm sưu liệu cho nhiều khía cạnh khác hệ thống phần mềm theo phương pháp hướng đối tượng UML sử dụng làm cơng cụ giao tiếp người dùng, nhà phân tích, nhà thiết kế nhà phát triển phần mềm Tuy nhiên, nhiều trường hợp, ví dụ mơ hình đồ họa biểu đồ lớp không đủ cho đặc tả xác nhập nhằng Các ràng buộc liên quan đến đối tượng sơ đồ cần mô tả Các ràng buộc mô tả ngôn ngữ tự nhiên thường dẫn đến nhập nhằng OCL (Object Constraint Language) [28] đời, sử dụng để đặc tả ràng buộc mơ hình xác ngắn ngơn ngữ hình thức truyền thống OCL sử dụng với biểu Tải FULL (92 trang): https://bit.ly/3E1COMF đồ UML Dự phòng: fb.com/TaiHo123doc.net Trong giai đoạn phát triển phần mềm, giai đoạn đảm bảo chất lượng phần mềm ngày trở nên quan trọng Hiện nay, có số phương pháp cơng cụ cho phép kiểm tra ràng buộc OCL cho hệ thống hướng đối tượng công cụ runtime constraint checker [20], công cụ Aspect-Oriented Runtime Verification Environment (ARVE) [21], nguyên lý thiết kế theo hợp đồng (Design by Contract) [16-18], … Hầu hết phương pháp thực việc kiểm tra điều kiện trước (pre-condition) điều kiện sau (post-condition) phương thức Việc kiểm tra bất biến lớp thêm vào điều kiện trước điều kiện sau phương thức lớp đảm bảo bất biến không bị vi phạm trước sau thực phương thức Như mã kiểm tra ràng buộc phải gắn với phương thức không kiểm tra bất biến có bị vi phạm q trình thực phương thức hay không Nếu phương thức lớp phải kiểm tra bất biến ta gặp lại tượng dàn trải mã nguồn lớp Bên cạnh đó, có 43 số công cụ nhận mã nguồn Java làm đầu vào phân tích mã nguốn để kiểm chứng ESC/Java [9] hay JavaPathFinder [19, 25, 30, 31] Tuy nhiên, cơng cụ dựa vào việc phân tích tĩnh mã nguồn mã byte-code Java không kiểm chứng trình thực thi Sự cần thiết việc kiểm chứng bất biến trình thực thi bất biến bị vi phạm trình thực thi phương thức sau thực thi phương thức khơng vi phạm bất biến q trình thực thi làm sai kết tích hợp mơ-đun mơi trường khác nhau, đặc biệt hệ thống tương tranh Để kiểm chứng bất biến trình thực thi khắc phục tình trạng dàn trải mã kiểm chứng phương pháp trên, phương pháp lập trình hướng khía cạnh (Aspect-Oriented Programming - AOP) đề xuất [23, 3] Với phương pháp AOP, chương trình cài đặt từ đặc tả UML, aspect kiểm chứng cài đặt từ ràng buộc OCL Các aspect kiểm chứng tạo với mục đích chèn thêm mã vào vị trí cần thiết nhằm kiểm tra xem giá trị thuộc tính đối tượng Java thay đổi có vi phạm bất biến đặc tả OCL thời điểm thực thi hay không Trong [23, 3] thực việc kiểm chứng bất biến đối tượng Java sử dụng AOP chưa xét đến thừa kế bất biến, thay đổi ràng buộc lớp bất biến thuộc tính thêm vào lớp Trong chương đề xuất phương pháp kiểm chứng bất biến đối tượng Java thời điểm thực thi sử dụng AOP tính đến kế thừa bất biến, thay đổi ràng buộc bất biến lớp bất biến liên quan đến thuộc tính thêm vào lớp 3.2 Ngơn ngữ mơ hình hóa thống UML Ngơn ngữ mơ hình hóa thống (Unified Modeling Language – UML) [3] ngơn ngữ mơ hình hóa chuẩn cho việc soạn thảo thiết kế chi tiết hệ thống phần mềm, bao gồm cấu trúc hành vi Thành phần bao gồm biểu đồ ký hiệu hình học để diễn tả khía cạnh thiết kế khác hệ thống phần mềm Có nhiều loại biểu đồ khác UML, phần giới thiệu sơ đồ lớp bất biến liên quan đến thuộc tính hay trường liệu sơ đồ lớp Một sơ đồ lớp mô tả cấu trúc tĩnh hệ thống thành phần mối quan hệ thành phần Biểu đồ lớp mơ tả thuộc tính (attribute), liên kết (association hay link) thao tác (operation) lớp ràng buộc áp dụng cách liên kết đối tượng 3.2.1 Thuộc tính Một thuộc tính đặc tính lớp mơ tả khoảng giá trị mà đặc tính chiếm giữ đối tượng lớp Một lớp có nhiều thuộc tính khơng có thuộc tính Mỗi đối tượng lớp có giá trị cụ thể thuộc tính Một thuộc tính ứng với trường liệu lớp Trong biểu đồ UML, thuộc tính 6813520 ... pháp kiểm chứng bất biến AOP Nội dung nghiên cứu: Tìm hiểu nghiên cứu kiểm chứng phần mềm, lập trình hướng khía cạnh (Aspect Oriented Programming - AOP) sử dụng AOP để kiểm chứng bất biến đối tượng. .. thức đối tượng 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 trình bày phương pháp kiểm chứng bất biến khai báo dạng khẳng định chương trình. .. Java sử dụng JPF 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 thực thi ký hiệu kiểm chứng bất biến việc chèn khẳng định trình bày 4 Chương – Lập trình hướng khía

Ngày đăng: 03/02/2023, 18:04

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

Tài liệu liên quan