Mô hình hóa và kiểm chứng các chương trình phần mềm hướng khía cạnh Mô hình hóa và kiểm chứng các chương trình phần mềm hướng khía cạnh Mô hình hóa và kiểm chứng các chương trình phần mềm hướng khía cạnh Mô hình hóa và kiểm chứng các chương trình phần mềm hướng khía cạnh
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CƠNG NGHỆ PHẠM NHƯ UYỂN MƠ HÌNH HĨA VÀ KIỂM CHỨNG CÁC CHƯƠNG TRÌNH PHẦN MỀM HƯỚNG KHÍA CẠNH LUẬN VĂN THẠC SỸ CÔNG NGHỆ THÔNG TIN HÀ NỘI - 2016 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CƠNG NGHỆ PHẠM NHƯ UYỂN MƠ HÌNH HĨA VÀ KIỂM CHỨNG CÁC CHƯƠNG TRÌNH PHẦN MỀM HƯỚNG KHÍA CẠNH Ngành: Công nghệ Thông tin Chuyên ngành: Kỹ thuật Phần mềm Mã số: 60480103 NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS Trương Ninh Thuận HÀ NỘI - 2016 LỜI CAM ĐOAN Tơi xin cam đoan tồn nội dung luận văn tơi tìm hiểu, nghiên cứu, tham khảo tổng hợp từ nguồn tài liệu khác làm theo hướng dẫn người hướng dẫn khoa học Các nguồn tài liệu tham khảo, tổng hợp có nguồn gốc rõ ràng trích dẫn theo quy định Tơi xin chịu hồn tồn trách nhiệm lời cam đoan Nếu có điều sai trái, tơi xin chịu hình thức kỷ luật theo quy định Hà Nội, tháng 05 năm 2016 Người cam đoan Phạm Như Uyển LỜI CẢM ƠN Đầu tiên xin gửi lời cảm ơn sâu sắc tới thầy PGS.TS Trương Ninh Thuận, Bộ môn Công nghệ Phần mềm, Khoa Công nghệ Thông tin, trường Đại học Công Nghệ, Đại học Quốc Gia Hà Nội – người định hướng đề tài tận tình hướng dẫn bảo tơi suốt trình thực luận văn tốt nghiệp Tôi xin trân trọng cảm ơn quý thầy cô Khoa Công nghệ Thông tin trường Đại học Công Nghệ, Đại học Quốc Gia Hà Nội tận tình giảng dạy, truyền đạt kiến thức quý báu suốt q trình học làm tảng cho tơi thực luận văn Cám ơn anh, chị nghiên cứu sinh bạn học viên Khoa Công nghệ Thông tin Các anh chị bạn giúp đỡ, ủng hộ tơi nhiều đóng góp nhiều ý kiến q báu, qua đó, giúp tơi hoàn thiện luận văn tốt Mặc dù nỗ lực, cố gắng hẳn luận văn tơi cịn nhiều thiếu sót Tơi mong nhận nhiều ý kiến đánh giá quý, phê bình quý thầy cô, anh chị bạn Một lần xin chân thành cảm ơn! Hà Nội, tháng năm 2016 Phạm Như Uyển MUC LỤC MUC LỤC DANH SÁCH CÁC HÌNH VẼ DANH SÁCH CÁC THUẬT NGỮ VÀ KHÁI NIỆM CHƯƠNG 1: ĐẶT VẤN ĐỀ 1.1 Sự cần thiết đề tài 1.2 Nội dung đề tài 1.3 Đóng góp luận văn 10 1.4 Cấu trúc luận văn 10 CHƯƠNG EAOP VÀ EVENT-B 12 2.1 Các đặc điểm lập trình hướng khía cạnh 12 2.1.1 Quản lý concerns hệ thống 15 2.1.2 Phương pháp luận AOP 18 2.1.3 Ưu điểm AOP 19 2.1.4 Nhược điểm AOP 19 2.2 Lập trình hướng khía cạnh dựa kiện 20 2.3 2.2.1 Công cụ EAOP: Kiến trúc thực 21 Event-B 27 2.3.1 Máy ngữ cảnh 27 2.3.2 Sự kiện 30 2.3.3 Phân rã kết hợp 31 2.3.4 Công cụ 31 CHƯƠNG 3: MƠ HÌNH HĨA VÀ KIỂM CHỨNG CÁC PHẦN MỀM LẬP TRÌNH HƯỚNG KHÍA CẠNH 33 3.1 Trình bày EAOP Event-B 33 3.2 Mơ hình hóa hệ thống EAOP sử dụng Event-B 34 3.3 Kiểm chứng thuộc tính hệ thống 34 CHƯƠNG 4: PHƯƠNG PHÁP THỰC NGHIỆM 36 KẾT LUẬN 45 TÀI LIỆU THAM KHẢO 47 PHỤ LỤC 49 DANH SÁCH CÁC HÌNH VẼ Hình 1: Mơ hình ánh xạ từ concern hệ thống sang phương pháp lập trình truyền thống 16 Hình 2: Các mơ đun yêu cầu logging phải nhúng đoạn mã để gọi logging API 17 Hình 3: Giải concern hệ thống bằng phương pháp AOP 18 Hình 4: Các giai đoạn phát triển sử dụng phương pháp AOP 19 Hình 5: Kiến trúc EAOP 20 Hình 6: Ví dụ đơn giản hóa việc thực chương trình 22 Hình 7: Cây khía cạnh kiện truyền 25 Hình 8: Cấu trúc máy ngữ cảnh 28 Hình 9: Mối quan hệ thành phần máy ngữ cảnh 28 Hình 10: Cấu trúc máy chi tiết 29 Hình 11: Cấu trúc ngữ cảnh chi tiết 30 Hình 12: Rodin GUI 31 Hình 13: Mơ hình kiến trúc Rodin 32 Hình 14: Phương pháp mơ hình hóa kiểm chứng chương trình hướng khía cạnh 37 Hình 15: Lớp Transaction 38 Hình 16: Lớp Exchange 38 Hình 17: Khía cạnh updatetr 39 Hình 18: Sự kiện chuyển tiền gửi máy ATM 39 Hình 19: Kết minh chứng 40 Hình 20: Lớp Exchange sửa đổi 40 Hình 21: Event-B đặc tả chương trình 42 Hình 22: Đặc tả Event-B khía cạnh 43 Hình 23: Kết thực 43 Hình 24: Kết bảng Statistics 44 DANH SÁCH CÁC THUẬT NGỮ VÀ KHÁI NIỆM THUẬT NGỮ AOP KHÁI NIỆM Aspect Oriented Programming – Lập trình hướng khía cạnh Event-based Khía cạnh Oriented EAOP Programming – Lập trình hướng khía cạnh dựa kiện ATM UML Automatic Teller Machine – Máy rút tiền tự động Unified Modeling Language – Ngơn ngữ mơ hình hóa thống Rigorous Open Development RODIN Enviroment for Complex System Công cụ mã nguồn mở dựa tảng Eclipse OOP FSP LTSA Object-orented programming – Lập trình hướng đối tượng Finite State Processes – Quá trình hữu hạn trạng thái Labelled Transition System Anlyzer - Cơng cụ phân tích chuyển hệ thống CHƯƠNG 1: ĐẶT VẤN ĐỀ 1.1 Sự cần thiết đề tài Ngày nay, phát triển mạnh mẽ phần mềm ngày đóng vai trò quan trọng, ứng dụng vào tất lĩnh vực đời sống xã hội đại Làm cho tỷ trọng giá trị phần mềm hệ thống ngày lớn Tuy nhiên, nhiều hệ thống, lỗi phần mềm gây hậu đặc biệt nghiêm trọng, không thiệt hại nặng nề mặt kinh tế [14] Có nhiều cơng trình nghiên cứu tập trung vào kiểm chứng mơ hình hướng khía cạnh sử dụng kỹ thuật khác UML [10], kiểm chứng mơ hình (model checking) [9], Petri-net [4], B [7] không phù hợp để mơ hình hóa kiểm chứng hệ thống dựa kiện Một số cơng trình nghiên cứu khai thác kí hiệu UML mở rộng kí hiệu UML để cụ thể hóa vấn đề thực thi cắt ngang (crosscutting) Tuy nhiên, nghiên cứu không giải kiểm chứng khía cạnh chất khơng hình thức bán hình thức UML Các tác giả Ubayashi Tamai [8] đề xuất phương pháp để kiểm chứng chương trình AOP sử dụng mơ hình kiểm tra Phương pháp nhằm vào giai đoạn lập trình ứng dụng mơ hình kiểm tra để có kết đan code lớp khía cạnh Phương pháp đảm bảo xác kiểm chứng, nhiên lại bỏ qua vấn đề kiểm chứng mơ đun Điều có nghĩa khó sử dụng phương pháp để xác minh phần mềm lớn Tác giả Dianxiang Xu [9] đề xuất sử dụng máy trạng thái kiểm chứng chương trình hướng khía cạnh Các tác giả chuyển hóa đan mơ hình lớp mơ hình khơng bị ảnh hưởng bởi khía cạnh thành quy trình FSP, mà kiểm chứng bởi mơ hình LTSA kiểm tra thuộc tính hệ thống muốn có Tuy nhiên, phương pháp cần phải chuyển hóa chương trình khía cạnh sang mơ hình trạng thái trước khởi động mơ hình FSP Tác giả dùng B [7] để kiểm chứng đan khía cạnh Tác giả báo trình bày lớp số khía 38 Hình 15: Lớp Transaction Lớp exchange mô tả chức chuyển tiền máy ATM minh họa hình 16: Hình 16: Lớp Exchange Khía cạnh updatetr mơ tả crosscut chương trình máy ATM mơ tả hình 17: 39 Hình 17: Khía cạnh updatetr Trong chương trình java mơ tả máy ATM lớp Exchange lý người lập trình qn khơng kiểm tra điều kiện rút tiền amount < balance mã thực rút tiền làm cho số dư tài khoản nhỏ không trường hợp rút tiền nhiều số dư tài khoản amount>balance dẫn đến đặc tả thiếu mà áp dụng EAOP vào toán Tuân theo luật, tiến hành mơ hình hệ thống hướng kiện Event-B Rồi kiểm chứng cơng cụ Rodin kết khơng chứng minh điều kiện kích hoạt kiện transfer thiếu mệnh đề grd3: amt sau: E = {withdraw, deposit, transfer}, V = { bal, amount}, balance (balance: số tiền cân bằng tài khoản) amount (số lượng) mà người dùng 41 muốn rút tiền gửi tiền, C ={ balance > 0, amount > 0} trạng thái yêu cầu bắt buộc, A = { withdraw_act, deposit_act} Tuân theo luật 1, đạt mơ hình hệ thống hướng kiện Event-B minh họa hình 21 (inv2 inv3 khơng xác định biến mà còn chắn ràng buộc chương trình ln ln thỏa mãn) Có kiện máy tương ứng với kiện chương trình withdraw, deposit và transfer MACHINE M VARIABLES balance amount targetAccount sourceAccount INVARIANTS inv1 :balance ∈ ℕ inv2 :amount ∈ ℕ inv3 :balance ≥ inv4 :amount ≥ inv5 :sourceAccount ∈ ℕ inv6 :targetAccount ∈ ℕ EVENTS INITIALISATION ≙ STATUS ordinary BEGIN act1 :balance ≔ act2 :amount≔0 act3 :targetAccount≔0 act4 :sourceAccount≔0 END withdraw ≙ STATUS ordinary WHEN grd1 :amount < balance THEN act1 :balance≔ balance−amount END deposit ≙ 42 STATUS ordinary ANY amt WHERE grd1 :amt ∈ ℕ THEN act1 :balance≔balance+ amt END transfer ≙ STATUS ordinary ANY amt accountNo WHERE grd1 :amt∈ℕ grd2 :accountNo ∈ℕ grd3 :amt≤balance THEN act1 :balance ≔ balance−amt act2 :targetAccount≔accountNo END END Hình 21: Event-B đặc tả chương trình bản Chúng ta tạo khía cạnh để rút tiền gửi phải phí trả phí cho người dụng rút tiền lần Chúng cần thêm biến fee, bonus, bFirst để định lại giá trị tương ứng Trong trường hợp làm mịn kiện withdraw_c, mã hành vi bổ sung balance chuyển đổi thành act1 Sử dụng ProB [6], cơng cụ kiểm tra mơ hình Event-B, chúng tơi tìm ví dụ chứng minh biến balance ∈ ℕ Điều có nghĩa vi phạm ràng buộc chương trình Để làm cho mơ hình xác, chúng tơi bổ sung điều kiện kích hoạt kiện withdraw_c bằng cách thêm vào mệnh đề grd3: bonus > fee rằng bonus lớn fee khía cạnh cần kiểm tra điều kiện mã hành vi Sự kiện 43 mở rộng withdraw_c rút tiền máy ATM đặc tả Event-B khía cạnh mơ tả hình 22 sau: withdraw_c ≙ extended STATUS ordinary REFINES withdraw WHEN grd1 :amount < balance grd2 :bFirst=TRUE grd3 :bonus>fee THEN act1 :balance≔balance−amount−fee+bonus END Hình 22: Đặc tả Event-B khía cạnh Hình 23 minh họa kết thực soạn thảo công cụ Rodin, sinh kiểm chứng tự động mệnh đề cần chứng minh Hình 23: Kết quả thực hiện Hình 24 minh họa kết trình mơ hình hóa kiểm chứng tự động thể qua bảng Statistics, cho thấy toàn ràng buộc chứng minh đảm bảo đặt 44 Hình 24: Kết quả bảng Statistics 45 KẾT LUẬN Những đóng góp kết luận văn việc “Mơ hình hóa kiểm chứng chương trình phần mềm hướng khía cạnh”, kết cụ thể sau: Luận văn trình bày kiến thức sở liên quan đến việc toán kiểm chứng phần mềm cụ thể là: Lập trình hướng khía cạnh (Aspect Oriented Programming – AOP), lập trình hướng khía cạnh dựa kiện (Event-based Aspect Oriented Programming – EAOP) Event-B Luận văn trình bày cơng cụ hỗ trợ Rodin, công cụ hỗ trợ cho phương pháp hình thức Event-B Luận văn trình bày quy luật mơ hình hóa ứng dụng lập trình hướng cạnh hệ thống hướng kiện dùng Event-B Luận văn trình bày mơ hình hóa cách tiếp cận thực tế bằng sử dụng công cụ Rodin để kiểm chứng thuộc tính chương trình có còn bảo tồn số thuộc tính sau thực đan chương trình, ràng buộc khác dựa cơng cụ chứng minh tự động Ưu điểm cách tiếp cận chương trình bao gồm khía cạnh, biến ràng buộc mơ hình hóa dễ dàng bằng đặc tả logic Event–B invariants events Do đó, tính đắn hệ thống chứng minh bằng phương pháp hình thức Hơn nữa, cách tiếp cận luận văn gần với thực tế, triển khai cơng cụ theo ý tưởng để chuyển đổi mơ hình EAOP từ Event–B sang cơng cụ Rodin tự động Luận văn minh họa phương pháp mơ hình hóa kiểm chứng chương trình ATM Lập trình hướng khía cạnh dựa kiện phương pháp tiếp cận mở rộng cho lập trình hướng khía cạnh Lập trình hướng khía cạnh dựa kiện kết hợp ưu điểm 46 hai lập trình hướng khía cạnh kiến trúc dựa kiện Đề xuất phương pháp, chuyển đổi chương trình lập trình hướng khía cạnh dựa kiện sang ngôn ngữ đặc tả Event-B Sử dụng Event-B để sinh mệnh đề cần chứng minh để kiểm tra lại ứng dụng ràng buộc ảnh hưởng bởi khía cạnh Do thời gian nghiên cứu lượng kiến thức có được, nên cịn số vấn đề mà luận văn phải tiếp tục hoàn thiện phát triển thời gian tới như: Tiếp tục phát triển cần phải mở rộng với crosscuts phức tạp vào mơ hình lập trình hướng khía cạnh dựa kiện Phát triển thử nghiệm cần tiến hành để đánh giá xác lợi ích hạn chế phương pháp tiếp cận 47 TÀI LIỆU THAM KHẢO [1] Event-B and the Rodin platform http://www.event-b.org, 2012 [2] J.R Abrial Modeling in Event-B: System and software engineering Cambridge University Press, New York, NY, USA 1st edition, 2010 [3] R Douence and M Sudholt A model and a tool for event-based aspect-oriented programming (eaop) Technical Report TR 02/11/INFO Ecole des Mines de Nantes, 2002 [4] L Guan, X Li, and H Hu A petri net-based approach for supporting khía cạnh oriented modeling In Theoretical Apects of Software Engineering, 2008, pages 83-90, June 2008 [5] Holzer, L Ziarek, K Jayaram, and P Eugster Putting events in context: Khía cạnhs for event-based distributed programming In Proceedings of the Tenth International Conference on Aspects-oriented Software Development, AOSD '11, pages 241-252, New York, NY, USA, 2011 ACM [6] O Ligot, J Bendisposto, and M Leuschel Debugging event-b models using the prob disprover plug-in Proceedings AFADL'07, Juni 2007 [7] T N Thuan and N V Ha Using b to verify the weaving of aspects In Software Engineering Conference, 2007 APSEC 2007 14th Asia-Pacifc, pages 199-205, Dec 2007 [8] N Ubayashi and T Tamai Khía cạnh-oriented programming with model checking In Proceedings of the 1st international conference on Aspect-oriented software development, AOSD '02, pages 148-154, New York, NY, USA, 2002 ACM [9] D.-X Xu, O El-Ariss, W.-F Xu, and L.-Z Wang Aspect-oriented modeling and verification with fnite state machines J Comput Sci Technol., 24(5):949961, Sept 2009 [10] J Zhang, Y Chen, and G Liu Modeling Aspect-oriented programming with uml profile In Education Technology and Computer Science, 2009 ETCS '09 First International Workshop on, volume 2, pages 242-245, March 2009 [11] Anh-Hoang Truong, Phuc Dinh Nguyen, Tuyen Luu, Checking implementations of UML 2.0 sequence diagrams 48 [12] Joseph D Gradecki, Nicholas Lesiecki, Mastering AspectJ Aspects-Oriented Programming in Java - Wiley, edition (March 7, 2003) [13] Ramnivas Landdad AspectJ in Action practical aspect-oriented programming Manning publishing -2004 [14] Visser W, et.al, Model Checking Programs, 15th IEEE International Conference on Automated Software Engineering, 2000 [15] R Douence, P.Fradet, and M Sudholt A framework for the detection and resolution of aspect interactions In Proc of the ACM SIGPLAN/SIGSOFT Conf on Generative Programming and Component Engineering (GPCE), October 2002 [16] R Douence, O Motelet, and M Sudholt A formal definition of crosscuts In Proc of the 3rd Int Conf on Metalevel Architectures and Separation of Crosscutting Concerns, volume 2192 of LNCS Springer Verlag, September 2001 [17] Trịnh Thanh Bình, Trương Anh Hồng, Nguyễn Việt Hà, Kiểm chứng giao thức tương tác thành phần chương trình đa luồng sử dụng lập trình hướng khía cạnh, Chun san Các cơng trình nghiên cứu, phát triển ứng dụng CNTT-TT, Tạp chí Cơng nghệ thơng tin & Truyền thông, T V-1, S (24), 36-45, 2010 [18] Trịnh Thanh Bình, Trương Ninh Thuận, Nguyễn Việt Hà, Kiểm chứng tuân thủ ràng buộc thời gian ứng dụng phần mềm, Tạp chí Tin học Điều khiển học, T 26, S 2, 173-184, 2010 [19] Trịnh Thanh Bình (2011) Kiểm chứng thành phần Java tương tranh Luận án tiến sỹ, Trường Đại học Công Nghệ, Đại học Quốc Gia Hà Nội, tr 6,7 49 PHỤ LỤC Chương trình đặc tả Event-B chương trình máy ATM MACHINE M VARIABLES balance amount targetAccount sourceAccount INVARIANTS inv1 inv2 inv3 inv4 inv5 inv6 EVENTS :balance ∈ ℕ :amount ∈ ℕ :balance ≥ :amount ≥ :sourceAccount ∈ ℕ :targetAccount ∈ ℕ INITIALISATION ≙ STATUS ordinary BEGIN act1 :balance ≔ act2 :amount≔0 act3 :targetAccount≔0 act4 :sourceAccount≔0 END withdraw ≙ STATUS ordinary WHEN grd1 :amount < balance THEN act1 :balance≔ balance−amount END deposit ≙ STATUS ordinary ANY 50 amt WHERE grd1 :amt ∈ ℕ THEN act1 :balance≔balance+ amt END transfer ≙ STATUS ordinary ANY amt accountNo WHERE grd1 :amt∈ℕ grd2 :accountNo ∈ℕ grd3 :amt≤balance THEN act1 :balance ≔ balance−amt act2 :targetAccount≔accountNo END END Chương trình đặc tả Event-B khía cạnh máy ATM MACHINE M1 REFINES M VARIABLES balance amount targetAccount sourceAccount fee bonus bFirst INVARIANTS inv1 :fee ∈ ℕ inv2 :bonus ∈ ℕ inv3 :bFirst∈ BOOL EVENTS 51 INITIALISATION ≙ extended STATUS ordinary BEGIN act1 :balance ≔ act2 :amount≔0 act3 :targetAccount≔0 act4 :sourceAccount≔0 act5 :fee ≔ act6 :bonus ≔ END withdraw ≙ extended STATUS ordinary REFINES withdraw WHEN grd1 :amount < balance THEN act1 :balance≔ balance−amount END deposit ≙ extended STATUS ordinary REFINES deposit ANY amt WHERE grd1 :amt ∈ ℕ THEN act1 :balance≔balance+ amt END transfer ≙ 52 extended STATUS ordinary REFINES transfer ANY amt accountNo WHERE grd1 :amt∈ℕ grd2 :accountNo ∈ℕ grd3 :amt≤balance THEN act1 :balance ≔ balance−amt act2 :targetAccount≔accountNo END withdraw_c ≙ extended STATUS ordinary REFINES withdraw WHEN grd1 :amount < balance grd2 :bFirst=TRUE grd3 :bonus>fee THEN act2 :balance≔balance−amount−fee+bonus END END ... tả vào công cụ Rodin để kiểm tra chứng minh 37 Hình 14: Phương pháp mơ hình hóa kiểm chứng chương trình hướng khía cạnh Áp dụng phương pháp mơ hình hóa kiểm chứng chương trình hướng khía cạnh. .. hình hóa kiểm chứng chương trình phần mềm hướng khía cạnh? ??, kết cụ thể sau: Luận văn trình bày kiến thức sở liên quan đến việc toán kiểm chứng phần mềm cụ thể là: Lập trình hướng khía cạnh. .. THỰC NGHIỆM Áp dụng các lý thuyết trình bày mơ hình hóa kiểm chứng phần mềm hướng khía cạnh ở Kết q trình kiểm tra chương trình có còn bảo tồn số tính chất sau đan chương trình, bảo tồn hệ thống