Đối với kiểm chứng bất biến bằng chèn khẳng định, quá trình kiểm chứng sẽ bị dừng lại khi bắt gặp một vi phạm khẳng định. Điều đó có nghĩa là chúng ta không nhận được nhiều thông báo vi phạm sau một lần thực hiện kiểm chứng. Sau khi hoàn chỉnh các đoạn mã kiểm chứng được trình bày trong mục 4.4 và cho JPF thực thi kiểm chứng mô hình một trong các đoạn mã đó, kết quả thực nghiệm thu được như sau:
Theo nội dung thông báo vi phạm trên thì nguyên nhân gây ra sự vi phạm bất biến là giá trị của thuộc tính SilverATM.WithdrawAmountPerDay>3000. Vị trí khẳng định cũng được thông báo đầy dủ.
4.6. Kết luận
Trong chương này chúng tôi trình bày phương pháp sinh tự động các ca kiểm thử sử dụng thực thi ký hiệu, một thành phần mở rộng của JPF, và áp dụng để sinh các ca kiểm thử để kiểm tra lại phương pháp kiểm chứng bất biến sử dụng AOP. Chúng tôi cũng trình bày phương pháp kiểm chứng bất biến của đối tượng bằng phương pháp chèn các khẳng định vào chương trình Java và so sánh với phương pháp kiểm chứng bất biến của đối tượng sử dụng AOP. Qua đó cho thấy phương pháp kiểm chứng bất biến của đối tượng sử dụng AOP có nhiều ưu việt hơn. Phần thực nghiệm của phương pháp sinh các ca kiểm thử tự động bằng thực thi ký hiệu là một mở rộng của JPF và thực nghiệm của phương pháp kiểm chứng bất biến bằng việc chèn khẳng định cũng được trình bày. ====================================================== error #1 gov.nasa.jpf.jvm.NoUncaughtExceptionsProperty java.lang.AssertionError: SilverATM.WithdrawAmountPerDay>2000 at SilverATM.withdrawMoney(Test.java:41) at Test.main(Test.java:75)
KẾT LUẬN
Kiểm chứng phần mềm là một trong những công việc quan trọng giúp phát hiện và sửa lỗi nhằm mục đích nâng cao chất lượng phần mềm. Kiểm chứng bất biến của đối tượng là một công việc khó, đặc biệt là kiểm chứng tại thời điểm thực thi. Việc kiểm chứng bất biến tại thời điểm thực thi có ý nghĩa quan trọng với lý do: các vi phạm bất biến có thể gây ra các sai sót sau khi tích hợp các mô-đun trong các môi trường khác nhau; các bất biến có thể bị vi phạm trong quá trình thực thi một phương thức và dẫn đến sự sai khác trong các hành vi của hệ thống, đặc biệt là trong các hệ thống tương tranh.
Với sự phát triển không ngừng của các phương pháp lập trình hiện nay, phương pháp lập trình hướng khía cạnh AOP nổi lên như một phương pháp lập trình mới cung cấp khả năng tách biệt các mối quan tâm cắt ngang hệ thống. Sau khi nghiên cứu những ưu điểm của phương pháp AOP và nội dung nghiên cứu được đề xuất trong [23, 3], chúng tôi đã đề xuất các cách tiếp cận mở rộng để kiểm chứng bất biến của đối tượng Java tại thời điểm thực thi và cài đặt thực nghiệm trên các ví dụ minh họa. Các mở rộng bao gồm sự thừa kế các ràng buộc trong AspectJ, 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 và kiểm chứng bất biến liên quan đến thuộc tính được thêm vào lớp con. Với lập trình hướng khía cạnh (AOP), các aspect được cài đặt theo các đặc tả UML/OCL để chèn các mã kiểm chứng vào chương trình Java gốc. Sau quá trình đan kết chúng ta thu được một chương trình Java cuối cùng chứa các mã kiểm chứng. Trong quá trình thực thi, nếu có bất kỳ vi phạm bất biến nào, chương trình sẽ sinh ra lỗi hay cảnh báo hoặc lưu các lỗi hay cảnh báo vào các tệp tin nhằm tra cứu khi sửa lỗi. Phương pháp này cho phép kiểm chứng các thuộc tính của các đối tượng Java ngay khi giá trị của chúng được thay đổi tại bất kỳ thời điểm nào trong quá trình thực thi. Nội dung chúng tôi đề xuất đã mở rộng phương pháp kiểm chứng này đối với các thuộc tính được thừa kế ở lớp con mà chúng ta không thể cài mã kiểm chứng một cách trực tiếp và các thuộc tính được thêm vào ở lớp con.
Vấn đề thứ hai trong nội dung của luận văn, chúng tôi nghiên cứu công cụ kiểm chứng mô hình cho các chương trình Java là Java PathFinder, đặc biệt là phần mở rộng của nó là thực thi ký hiệu. Chúng tôi đã sử dụng thực thi ký hiệu để sinh tự động các ca kiểm thử cho các phương thức trong ví dụ minh họa nhằm kiểm tra lại các aspect dùng để kiểm chứng bất biến.
Vấn đề thứ ba, chúng tôi trình bày phương pháp kiểm chứng bất biến của đối tượng sử dụng phương pháp chèn các khẳng định vào mã nguồn Java. Sau khi các khẳng định được chèn vào mã nguồn Java và được thực thi bởi công cụ kiểm chứng mô hình JPF thì JPF sẽ thông báo vi phạm đầu tiên nó gặp phải và dừng quá trình thực thi. Chúng tôi cũng tiến hành các so sánh phương pháp này với phương pháp kiểm
chứng bất biến của đối tượng sử dụng AOP và đưa ra kết luận phương pháp AOP có nhiều ưu điểm vượt trội. Tuy nhiên, phương pháp AOP có những nhược điểm như đã trình bày ở mục 1.3.7 nên khi làm việc với AOP phải chú ý đến việc tối thiểu hóa những nhược điểm của phương pháp này.
Từ các kết quả thực nghiệm có thể thấy phương pháp đề xuất có thể kiểm tra được các vi phạm bất biến và có khả năng ứng dụng thực. Tuy nhiên chúng tôi mong muốn cài đặt hoàn thiện công cụ kiểm chứng cho phương pháp này đồng thời phát triển một công cụ để sinh các aspect kiểm chứng tự động cho tất cả các bất biến ứng với tất cả các lớp dựa trên các quan hệ của các lớp và các biểu thức OCL được lưu trữ trong các định dạng tệp tin cụ thể đối với phương pháp kiểm chứng bất biến sử dụng AOP. Chúng tôi cũng muốn phát triển một công cụ để thực hiện việc chèn các khẳng định một cách tự động vào các chương trình nguồn Java tương ứng nhằm làm đầu vào cho công cụ kiểm chứng mô hình JPF.
TÀI LIỆU THAM KHẢO Tiếng Việt
1. Đoàn Văn Ban, Lập trình hướng đối tượng với Java, Nhà xuất bản khoa học kỹ thuật, 2003.
2. Lê Đăng Hưng, Tạ Tuấn Anh, Nguyễn Hữu Đức, Nguyễn Thanh Thủy, Lập trình hướng đối tượng với C++, Nhà xuất bản khoa học kỹ thuật, 1999.
3. Nguyễn Thị Thu Trang, Mô hình hóa và kiểm chứng Aspect, Luận văn Thạc sĩ, Đại học Bách khoa Hà Nội, 2007.
Tiếng Anh
4. Sinan Si Alhir, Learning UML, O'Reilly Publisher, July 2003.
5. Christel Baier, Joost-Pieter Katoen, Principles of Model Checking, The MIT Press, May 2007.
6. Yoonsik Cheon, Carmen Avila, Steve Roach, Cuauhtemoc Munoz, Neith Estrada, Valeria Fierro, and Jessica Romo, “An Aspect-Based Approach to Checking Design Constraints at Run-time”, ITNG 2009: 6th International Conference on Information Technology: New Generations, April 27-29, 2009, Las Vegas, NV, pages 223-228, IEEE Computer Society.
7. Steve Cook and John Daniels, Designing Object Systems: Object-Oriented Modelling with Syntropy, Prentice Hall International (UK) Ltd., 1994.
8. Massimiliano Dessì, Spring 2.5 Aspect-Oriented Programming, Packt Publishing, 2009.
9. 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.
10. Ian Gorton, Essential Software Architecture, Springer, 2006.
11. Joseph D Gradecki, Niclolas Lesiecki, Mastering AspectJ – Aspect-oriented programming in Java, Wiley Publishing, Inc., 2003.
12. Barry J. Holmes, Daniel T. Joyce, Object-Oriented Programming with Java, Second Edition, Jones and Bartlett Publishers, Inc., 2001.
13. Ivan Kisilev, Aspect-oriented programming with AspectJ, SAMS Publishing, 2003.
14. B. H. Liskov and J. M. Wing, “A behavioral notion of subtyping”, ACM Trans. Prog. Lang. Syst., 16(6):1811–1841, Nov. 1994.
15. Kenneth L. McMillan, Symbolic Model Checking - An approach to the state explosion problem, Doctor of Philosophy in Computer Science thesis, Carnegie Mellon University, May 1992.
16. Bertrand Meyer, Applying "design by contract", Computer, 1992. 25(10): pages 40-51.
17. Bertrand Meyer, Ilinca Ciupa, Andreas Leitner, and Lisa Ling Liu, “Automatic Testing of Object-Oriented Software”, Chair of Software Engineering, ETH Zurich, Switzerland.
18. Bertrand Meyer, Design By Contract - An Advances in Object-Oriented Software Engineering, Prentice Hall, 1991.
19. Thomas Pressburger, Klaus Havelund, “Java PathFinder - A Translator from Java to Promela”, NASA Ames Research Center, Recom Technologies, Moffett, California, USA.
20. M. Richters, A precise Approach to Validating UML Models and OCL Constraint”, Universitat Bremen, 2002.
21. Hiromasa Shin, Yusuke Endoh, and Yoshio Kataoka, “ARVE: Aspect-Oriented Runtime Verification Environment”, Corporate Research & Development Center, Toshiba Corporation.
22. Ian Sommerville, Software Engineering, 8th Ed., Addison-Wasley, 2006.
23. Ho Tat Thanh, Nguyen Thi Thu Trang, Truong Ninh Thuan, Nguyen Viet 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. 24. Thomas Van de Velde, Bruce Snyder, Christian Dupuis, Sing Li, Anne Horton,
and Naveen Balani, Beginning Spring Framework 2, Wiley Publishing, Inc., 2008.
25. Willem Visser, Peter C. Mehlitz, John Penix, The JPF Runtime Verification System.
26. Xerox Corporation, 2002-2003 Palo Alto Research Center, The AspectJ
Programming Guide.
27. JBoss AOP – Aspect-Oriented Framework for Java, JBoss AOP Reference Documentation.
28. http://aspectwerkz.codehaus.org/index.html
29. Object Constraint language OMG Available Specification, version 2.0, May 2006.
30. Java PathFinder. http://javapathfinder.sourceforge.net/.