Mô hình hoá và kiểm chứng ASPECT Mô hình hoá và kiểm chứng ASPECT Mô hình hoá và kiểm chứng ASPECT luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ KHOA HỌC MƠ HÌNH HĨA VÀ KIỂM CHỨNG ASPECT NGÀNH: CƠNG NGHỆ THÔNG TIN MÃ SỐ: NGUYỄN THỊ THU TRANG Cán hướng dẫn: TS Nguyễn Việt Hà HÀ NỘI 2007 Lời cảm ơn Trước hết xin gửi lời cảm ơn đặc biệt tới TS Nguyễn Việt Hà, 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 q trình thực luận văn cao học Tôi xin gửi lời cảm ơn sâu sắc tới Trung tâm Đào tạo Sau đại học thầy cô giáo Khoa Công nghệ thông tin, Trường Đại học Bách Khoa Hà Nội tận tình giảng dạy truyền đạt kiến thức, kinh nghiệm quý báu suốt năm học Cao học Tơi xin bày tỏ lịng cảm ơn chân thành tới tất bạn bè, thầy cô giáo, đồng nghiệp Khoa Công nghệ thông tin, Trường Đại học Bách Khoa Hà Nội động viên, tạo điều kiện cho suốt thời gian thực luận văn Một phần luận văn thực khuôn khổ đề tài nghiên cứu QC.07.04, Đại học Quốc Gia Hà Nội Tôi xin gửi lời cảm ơn đến thành viên nhóm nghiên cứu đề tài, đặc biệt TS Trương Ninh Thuận Hồ Tất Thành Cuối xin dành tình cảm biết ơn tới Bố, Mẹ, Chồng gia đình, người ln ln bên cạnh tơi, động viên, chia sẻ suốt thời gian học cao học trình thực luận văn cao học Hà Nội, tháng 10 năm 2007 Nguyễn Thị Thu Trang ii Lời cam đoan Tôi xin cam đoan cơng trình nghiên cứu riêng tơi Các kết nêu luận văn trung thực chưa công bố cơng trình khác Hà Nội, tháng 10 năm 2007 Nguyễn Thị Thu Trang iii Mục lục Lời cảm ơn ii Lời cam đoan iii Mục lục iv Danh mục ký hiệu, từ viết tắt vii Danh mục bảng biểu viii Danh mục hình vẽ ix Chương Mở đầu 1.1 Bối cảnh nghiên cứu 1.1.1 Kiểm chứng phần mềm 1.1.2 Lập trình hướng khía cạnh 1.2 Nội dung nghiên cứu 1.3 Cấu trúc luận văn Chương Lập trình hướng khía cạnh (Aspect-Oriented Programming) 2.1 Tổng quan 2.2 Khó khăn lập trình hướng đối tượng 2.2.1 Các mối quan tâm hệ thống 2.2.2 Thực thi mối quan tâm OOP 2.2.3 Các vấn đề gặp phải thực thi OOP 2.3 Lập trình hướng khía cạnh - AOP 2.3.1 Lịch sử hình thành iv 1 7 9 11 11 12 14 18 19 2.4 2.5 2.3.2 Phương pháp lập trình hướng khía cạnh 2.3.3 Lợi ích AOP AspectJ 2.4.1 Thực thi cắt ngang 2.4.2 Join point 2.4.3 Point cut 2.4.4 Advice 2.4.5 Introduction 2.4.6 Compile-time declaration 2.4.7 Aspect Kết luận Chương Kiểm chứng mơ hình (Model Checking) 3.1 Tổng quan 3.2 Quy trình kiểm chứng mơ hình 3.2.1 Mơ hình hố hệ thống (System Modeling) 3.2.2 Đặc tả đặc tính (Properties Specification) 3.2.3 Kiểm chứng (Verification) 3.3 Ơ-tơ-mát 3.3.1 Định nghĩa Ơ-tơ-mát 3.3.2 Các định nghĩa liên quan 3.4 Logic thời gian (Temporal Logic) 3.4.1 Ngôn ngữ logic thời gian 3.4.2 Cú pháp hình thức logic thời gian 3.4.3 LTL CTL 3.5 Công cụ kiểm chứng 3.5.1 Các thuật toán kiểm chứng 3.5.2 Một vài công cụ kiểm chứng phổ biến 3.6 Kết luận Chương Sử dụng AOP để kiểm chứng chương trình Java 4.1 Đặt vấn đề 4.2 Ngơn ngữ mơ hình hóa thống UML 4.2.1 Đặc tính (Property) v 21 23 25 26 27 30 32 34 34 35 37 38 38 39 39 40 41 41 42 43 45 46 52 53 54 54 55 58 bất biến 60 60 62 62 4.3 4.4 4.5 4.6 4.7 4.2.2 Thao tác (Operation) Ngôn ngữ ràng buộc đối tượng OCL 4.3.1 Biểu thức OCL 4.3.2 Bất biến (Invariant) 4.3.3 Đối tượng đặc tính Ví dụ minh họa Sử dụng AOP để kiểm chứng bất biến 4.5.1 Bất biến kết hợp 4.5.2 Bất biến liên kết Thử nghiệm Kết luận 64 65 67 67 68 70 72 74 77 80 81 Chương Sử dụng kiểm chứng mơ hình để kiểm chứng ứng dụng AOP 5.1 Đặt vấn đề 5.2 Phương pháp kiểm chứng 5.3 Ví dụ minh họa 5.3.1 Mơ hình hóa 5.3.2 Biểu diễn đặc tính logic thời gian 5.4 Thử nghiệm 5.4.1 Thiếu advice 5.4.2 Đủ advice 5.5 Kết luận 83 83 84 86 89 89 90 92 95 96 Chương Kết luận 98 6.1 Kết luận luận văn 98 6.2 Hướng nghiên cứu 100 Tài liệu tham khảo 102 Phụ lục A Cài đặt aspect kiểm chứng 107 A.1 Aspect StaffVerifier 107 A.2 Aspect AccountVerifier 108 vi Danh mục ký hiệu, từ viết tắt AIS Account Information System AOP Aspect-Oriented Programming API Application Programming Interface ATM Automatic Teller Machine BDD Binary Decision Diagram CMU Carnegie Mellon University CTL Computation Tree Logic ERP Enterprise Resource Planning FSM Finite State Machine HR Human Resource IRST Istituto per la Ricerca Scientifica e Tecnolgica JAC Java Aspect Component LTL Linear Time Logic NIST National Institute of Standards and Technology OCL Object Constraint Language OOP Object-Oriented Programming PLTL Past Linear Time Logic PARC Palo Alto Research Center SPIN Simple Promela Interpreter UML Unified Modeling Language vii Danh mục bảng biểu 2.1 Ánh xạ loại join point point cut designator [1] 32 4.1 Kết kiểm chứng bất biến 82 5.1 So sánh số cơng cụ kiểm chứng mơ hình 93 viii Danh mục hình vẽ 2.1 Các mối quan tâm hệ thống 13 2.2 Thực thi mối quan tâm cắt ngang OOP 15 2.3 Chồng chéo mã nguồn 16 2.4 Dàn trải mã nguồn 17 2.5 Thực thi mối quan tâm cắt ngang AOP 19 2.6 Các giai đoạn phát triển AOP 22 2.7 Ví dụ định nghĩa point cut 31 2.8 Các điểm khác chèn vào join point 33 3.1 Quy trình kiểm chứng mơ hình 40 3.2 Mơ hình hệ thống mật mã số 43 3.3 Phần đầu thực thi hệ thống mật mã số 45 3.4 Các định đề sở ô-tô-mát chuỗi thực thi 48 3.5 Các toán tử thời gian tương lai 49 3.6 Các toán tử thời gian khứ 51 3.7 Các toán tử số lượng nhánh 52 3.8 Bốn cách kết hợp E A với F G 59 4.1 Biểu diễn đặc tính lớp Order thuộc tính 63 4.2 Biểu diễn đặc tính lớp Order liên kết 64 4.3 Ví dụ biểu đồ lớp hệ thống ngân hàng đơn giản 71 4.4 Quy trình kiểm chứng bất biến sử dụng AOP 73 ix 5.1 Quy trình kiểm chứng ứng dụng AOP sử dụng kiểm chứng mơ hình 85 5.2 Ví dụ mơ hình hóa trường hợp đủ advice 90 5.3 Ví dụ mơ hình hóa hình thức trường hợp đủ advice 91 5.4 Ví dụ mơ hình hóa trường hợp thiếu advice 92 5.5 Ví dụ đặc tính liên quan đến advice 92 x Nguyễn Thị Thu Trang 96 Cao học CNTT 2005-2007 state = executing & !cannotGetConnection : TRUE; : getConnectionSuccessfully; esac; init(execute) := TRUE; next(execute) := TRUE; next(executeSuccessfully) := case state = executing & cannotManipulateToDatabase : FALSE; state = executing & !cannotManipulateToDatabase : TRUE; : executeSuccessfully; esac; next(cannotManipulateToDatabase) := case state = initiated & executeSuccessfully : FALSE; state = initiated & !executeSuccessfully : TRUE; : cannotManipulateToDatabase; esac; init(destroy) := TRUE; next(destroy) := TRUE; Trong trường hợp này, ta biểu diễn hai đặc tính để kiểm chứng NuSMV Kết kết Cả hai đặc tính thỏa mãn (true) hai advice sử dụng NuSMV > check_ctlspec -p "AG (state = opened -> AF state = closed)" specification AG (state = opened -> AF state = closed) is true NuSMV > check_ltlspec -p "G (state = executing -> (Y state = opened & X state = closed))" specification G(state = executing -> (Y state = opened & X state = closed)) is true 5.5 Kết luận Trong chương này, đề xuất phương pháp kiểm chứng ứng dụng AOP sử dụng kiểm chứng mơ hình Phương pháp đề xuất tập trung chủ yếu vào việc mơ hình hóa dựa aspect, đặc tả đặc tính cần kiểm chứng sử dụng NuSMV làm cơng cụ kiểm chứng Chúng tơi đưa ví dụ minh họa thử nghiệm công cụ kiểm chứng NuSMV Nếu hệ thống không thỏa mãn đặc tính cần kiểm chứng phản ví dụ đưa để chứng minh điều Phản ví Chương 5: Sử dụng kiểm chứng mơ hình để kiểm chứng ứng dụng AOP Nguyễn Thị Thu Trang 97 Cao học CNTT 2005-2007 dụ trợ giúp cho nhà phát triển lần theo vết lỗi để đưa giải pháp sửa lỗi đắn Chương 5: Sử dụng kiểm chứng mơ hình để kiểm chứng ứng dụng AOP Chương Kết luận 6.1 Kết luận luận văn Trong thời gian thực luận văn, chúng tơi tìm hiểu lý thuyết kiểm chứng phần mềm, công việc quan trọng giúp phát sửa lỗi nhằm đảm bảo chất lượng phần mềm Với phát triển không ngừng phương pháp lập trình nay, phương pháp lập trình hướng khía cạnh AOP lên phương pháp lập trình cung cấp khả tách biệt mối quan tâm cắt ngang hệ thống Sau nghiên cứu vấn đề đề xuất phương pháp kiểm chứng cài đặt thử nghiệm ví dụ minh họa Phương pháp đầu tiên, “có thể sử dụng AOP để kiểm chứng phần mềm khác không?” Dựa vào ý tưởng khả tách biệt mối quan tâm cắt ngang hệ thống với mơ-đun AOP, chúng tơi đề xuất phương pháp sử dụng AOP để kiểm chứng bất biến đối tượng Java thời điểm thực thi Trong phương pháp này, việc kiểm chứng coi mối quan tâm cắt ngang hệ thống tách biệt với chương trình Java ban đầu qua aspect chứa mã kiểm chứng gọi aspect kiểm chứng Các aspect kiểm 98 Nguyễn Thị Thu Trang 99 Cao học CNTT 2005-2007 chứng tạo từ ràng buộc OCL - ngôn ngữ biểu diễn ràng buộc biểu đồ UML - với mục đích chèn thêm mã vào vị trí cần thiết cho mục đích kiểm chứng Sau đó, aspect kiểm chứng đan vào mã nguồn chương trình để thu chương trình có chứa đoạn mã tự kiểm chứng q trình thực thi Điều có nghĩa là, chương trình thực thi, có đối tượng Java vi phạm bất biến quy định ràng buộc OCL (được cài đặt aspect kiểm chứng), hệ thống đưa thơng báo có vi phạm cách đưa vết lỗi ném ngoại lệ, Nếu khơng có vi phạm xảy ra, chương trình thực thi bình thường Phương pháp kiểm chứng đề xuất tiến hành giai đoạn kiểm thử giai đoạn đầu triển khai bảo trì Khi hệ thống thực thi, công việc kiểm chứng tiến hành tự động nhờ đoạn mã kiểm chứng đan vào trước Phương pháp tìm lỗi vi phạm bất biến bên hệ thống, mà kiểm thử viên khách hàng khó phát Bên cạnh đó, phương pháp chúng tơi đề xuất kiểm chứng thuộc tính đối tượng Java chúng thay đổi qua lệnh gán khơng phải qua phương thức Chính thế, kết kiểm chứng xác phương pháp kiểm chứng qua phương thức [6] Phương pháp thứ hai, “vấn đề kiểm chứng thân ứng dụng AOP” Chúng tơi tìm hiểu số kỹ thuật kiểm chứng để tìm kỹ thuật kiểm chứng phù hợp với toán đặt Trong đó, chúng tơi lựa chọn kỹ thuật kiểm chứng mơ hình cho phương pháp kiểm chứng Đây kỹ thuật kiểm chứng tự động, tìm kiếm vét cạn không gian trạng thái hệ thống để xác định yêu cầu hệ thống có thỏa mãn hay khơng, khơng thỏa mãn đưa Chương 6: Kết luận Nguyễn Thị Thu Trang 100 Cao học CNTT 2005-2007 phản ví dụ Trong phương pháp chúng tơi đề xuất, có ba cơng việc Đầu tiên, hệ thống aspect hệ thống mơ hình hóa thành ơ-tơ-mát hữu hạn trạng thái Sau đó, đặc tính cần kiểm chứng hệ thống đặc tả logic thời gian Cuối cùng, ô-tô-mát hữu hạn biểu thức logic thời gian dùng làm đầu vào cho công cụ kiểm chứng NuSMV nhằm kiểm chứng xem hệ thống có thỏa mãn biểu thức logic thời gian (đặc tả đặc tính hệ thống cần thỏa mãn) hay khơng Phương pháp kiểm chứng đề xuất thứ hai áp dụng cho ứng dụng sử dụng AOP để phát triển Trong giai đoạn thiết kế, hệ thống thiết kế với aspect nhằm quản lý mối quan tâm cắt ngang mơ hình hóa thành ô-tô-mát hữu hạn làm đầu vào cho trình kiểm chứng Bên cạnh đó, phương pháp này, đặc tính hệ thống khơng giới hạn biểu thức logic thời gian tương lai mà bao gồm toán tử thời gian khứ Chính thế, khả biểu diễn đặc tính hệ thống rộng linh động 6.2 Hướng nghiên cứu Với phương pháp đề xuất việc sử dụng AOP để kiểm chứng bất biến đối tượng Java thời điểm thực thi, chúng tơi chưa cài đặt hồn thiện cơng cụ kiểm chứng Trong tương lai, tiếp tục phát triển phương pháp với ràng buộc bất biến phức tạp hồn thiện cơng cụ kiểm chứng bất biến chương trình Java thời điểm thực thi Với phương pháp đề xuất sử dụng kỹ thuật kiểm chứng mơ hình để kiểm chứng ứng dụng AOP cơng cụ kiểm chứng NuSMV, ví dụ minh họa cịn đơn giản, cơng việc mơ hình hóa NuSMV khơng Chương 6: Kết luận Nguyễn Thị Thu Trang 101 Cao học CNTT 2005-2007 thuận tiện phải thực tay sử dụng ngơn ngữ NuSMV ngôn ngữ văn để mô hình hóa Trong tương lai, chúng tơi mong muốn phát triển thêm tính mơ hình hóa đồ họa, giao diện người dùng trực quan cho công cụ NuSMV Tài liệu tham khảo [1] http://www.eclipse.org/aspectj/ [2] http://netlib.bell-labs.com/netlib/spin/ [3] http://www.uppaal.com [4] http://nusmv.irst.itc.it [5] G Booch, J Rumbaugh, and I Jacopson The Unified Modeling Language User Guide, 2nd edition Addison-Wesley, 2005 [6] A D Brucker and B Wolff Checking OCL Constraints in Distributed Component Based Systems Technical report, Institut fur Informatik Albert Ludwigs University at Freibur, Germany, 2001 [7] B Brard, M Bidoit, A Finkel, F Laroussinie, A Petit, L Petrucci, Ph Schnoebelen, and P McKenzie Systems and Software Verification Model Checking Techniques and Tools Springer, 2001 [8] A Cimatti, E Clarke, F Giunchiglia, and M Roveri NuSMV: A New Symbolic Model Verifier In 11th International Conference on Computer Aided, Verification (CAV’99), Trento, Italy, July, 2003 [9] E M Clarke, Jr O Grumberg, and D A Peled Model Checking The MIT Press, 1999 [10] A Colyer, A Clement, G Harley, and M Webster Eclipse AspectJ: Aspect-Oriented Programming with AspectJ and the Eclipse 102 Nguyễn Thị Thu Trang 103 Cao học CNTT 2005-2007 AspectJ Development Tools Addison Wesley Professional Publisher, 2004 [11] G Denaro and M Monga An Experience on Verification of Aspect Properties In Proceedings of the 4th International Workshop on Principles of Software Evolution, 2001 [12] O Grumberg E Clarke and D Long Verification tools for finitestate concurrent systems In A Decade of Concurrency, volume 803 of Lecture Notes in Computer Science, page 124-175 Springer, June 1993 [13] E A Emerson and J Y Halpern Sometimes and Not Never revisited: On branching versus linear time temporal logic In Journal of the ACM, volume 33(1): 151-178, 1986 [14] C Flanagan, K Rustan, M Leino, and R Stata Extended Static Checking for Java In ACM SIGPLAN Notices, Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation PLDI ’02, volume 37 ACM Press, May 2002 [15] M Fowler UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3rd Edition Addison Wesley, 2003 [16] J D Gradecki and N Lesiecki Mastering AspectJ Aspect-Oriented Programming in Java Wiley Publishing Inc, 2003 [17] The Standish Group CHAOS Report The Standish Group, 2000 [18] B Hailpern and P Santhanam Software Debugging, Testing and Verification IBM Systems Journal, 2002 [19] J Jackson Inside the UML Object Management Group, 1999 Nguyễn Thị Thu Trang 104 Cao học CNTT 2005-2007 [20] M Kersten Aop tools comparison Technical report, University of British Columbia, Feb 2005 http://www.ibm.com/developerworks [21] S Krishnamurthi, K Fisler, and M Greenberg Verifying Aspect Advice Modularly Proceedings of the 12th ACM SIGSOFT twelfth international symposium on Foundations of software engineering SIGSOFT ’04/FSE-12, 2004 [22] R Laddad AspectJ in Action Practical Aspect-Oriented Programming Manning Publications Co., 2003 [23] F Laroussinie and Ph Schnoebelen A hierarchy of temporal logics with past In Selected papers of the eleventh symposium on Theoretical aspects of computer science, Caen, France, 1995 [24] G Lindstrom, P Mehlitz, and W Visser Model Checking Real Time Java using JavaPathFinder In Proceedings of the Third International Symposium on Automated Technology for Verification and Analysis (ATVA) http://javapathfinder.sourceforge.net, October 2005 [25] A Cimatti M Benedetti Bounded Model Checking for Past LTL In Proceedings of the International Conference on Tools and Algorithms for the Construction and Analysis of Systems, 2003 [26] K L McMillan Symbolic Model Checking Wiley Publishing Inc., 2003 [27] T Tamai N Ubayashi Aspect-oriented programming with model checking In Proceedings of the 1st international conference on Aspect-oriented software development, Enschede, The Netherlands, April, 2002 [28] OMG Unified Modeling Language OMG, Version 1.5 March 2003 Nguyễn Thị Thu Trang 105 Cao học CNTT 2005-2007 [29] A Pnueli The temporal logic of programs In Proceedings of the 18th IEEE Symp Foundations of Computer Science (FOCS’77), volume pages 46-57, USA, Oct-Nov, 1977 [30] R S Pressman Software Engineering, A Practitioner’s Approach, 5th edtion Thomas Casson, 2001 [31] M Richters A precise Approach to Validating UML Models and OCL Constraints Universitat Bremen, 2002 [32] K Rustan, M Leino, G Nelson, and James B Saxe ESC/Java User’s Manual Compaq Computer Corporation, 2000 [33] RTI Health Social and Economics Research The Economic Impacts of Inadequate Infrastructure for Software Testing Final Report NIST - National Institute of Standards and Technology, 2002 [34] Ian Sommerville Software Engineering, 7th edtion Thomas Casson, 2004 [35] H T Thanh, N T T Trang, T N Thuan, and N V Ha An approach for verifying invariants of Java objects at runtime In Proceedings of the Japan-Vietnam Workshop on Software Engineering IoIT, Ha Noi, 2007 [36] N T T Trang, H T Thanh, T N Thuan, N V Ha, and H S Dam An approach for verifying aspect advices using model checking In The Third National Symposium Fundamental and Applied Information Technology Research (FAIR) Nha Trang Technology University, Nha Trang, 2007 Nguyễn Thị Thu Trang 106 Cao học CNTT 2005-2007 [37] M Y Vardi An automata-theoretic approach to linear temporal logic In Logics for Concurrency: Structure Versus Automata, volume 1043 of Lecture Notes in Computer Science, pages 238-266 Springer, 1986 [38] J Warmer and A Kleppe The Object Constraint Language: Precise Modeling with UML Addison-Wesley, ISBN 0-201-37940-6, 1999 [39] J B Warmer and A G Kleppe The Object Constraint Language: Precise Modeling with UML Addison-Wesley, 1999 Phụ lục A Cài đặt aspect kiểm chứng A.1 Aspect StaffVerifier package verifiers; import accountmng.*; privileged public aspect StaffVerifier { //Kiểm chứng bất biến kết hợp cho thuộc tính age pointcut verify_age(Staff obj, int val): target(obj) && set(int Staff.age) && args(val); before(Staff staff, int val): verify_age(staff, val) { //Kiểm tra bất biến trước giá trị age thay đổi //inv: self.gender = #female implies (self.age>=18 and self.age=18 && val=18 and self.age=18 && val=18 and self.age= 18 && staff.age =18 and self.age=18 && staff.age = 100.000 if (account.getStaffReflector()!=null && !(val>=100000)){ System.out.println(thisJoinPoint.getSignature().toString() + ", Staff Name: " + account.getStaffReflector().getName() + ", Account Number: " + account.getId() + " - invariant violated: staff.account.balance>=100.000"); } // Ràng buộc 3: context Company Nguyễn Thị Thu Trang } } 110 Cao học CNTT 2005-2007 // inv: self.account.balance >= 1.000.000 if (account.getCompanyReflector()!=null && !(val>=1000000)){ System.out.println(thisJoinPoint.getSignature().toString() + ", Company Name: " + account.getCompanyReflector().getName() + ", Account Number: " + account.getId() + " - invariant violated: company.account.balance>=1.000.000"); } ... bày kiểm chứng mơ hình, cơng cụ kiểm chứng mơ hình phổ biến 3.2 Quy trình kiểm chứng mơ hình Phương pháp kiểm chứng mơ hình bao gồm ba cơng việc Đầu tiên hệ thống mơ hình hóa thành mơ hình hình... nhánh 3.2.3 Kiểm chứng (Verification) Sau có mơ hình đặc tả đặc tính cần kiểm tra, bước kiểm chứng tiến hành cơng cụ kiểm chứng có cài đặt thuật tốn kiểm chứng Cơng cụ kiểm chứng mơ hình tìm kiếm... việc kiểm chứng tiến hành tự động công cụ kiểm chứng cài đặt thuật toán kiểm chứng Các cơng việc kiểm chứng mơ hình minh họa hình 3.1 3.2.1 Mơ hình hố hệ thống (System Modeling) Cơng việc mơ hình