Trong chương trình này ,có các lớp atm, user, bank. Trong các lớp này có các phương thức như đã mô tả trong UML. Ví dụ lớp user như sau:
public class user { public user(){}
public void Withdraw(int Amount){ try {
Thread.sleep(9);
} catch (InterruptedException ex) {
//Logger.getLogger(ATMJPanel.class.getName()).log(Level.SEVERE, null, ex); ex.printStackTrace();
} }
}
Trong mỗi phương thức gọi Thread.sleep(n) để tạo ra mô phỏng thời gian trễ , nhằm kiểm tra ràng buộc thời gian.
Trong chương trình tôi tạo 2 kịch bản : + Gọi đúng chuỗi trong biểu đồ tuần tự.
+ Gọi sai, lặp lại phương thức Return() chẳng hạn.
Trong cả 2 kịch bản , thời gian trễ của mỗi phương thức được đặt tùy ý , chỉ cần có phương thức đúng ràng buộc thời gian, có phương thức không tuân theo ràng buộc thời gian .
5.2.4 Kiểm tra
5.2.4.1 Gọi đúng chuỗi trong biểu đồ tuần tự.
private void jButton18ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:
System.out.println("start checking \n"); u.Withdraw(1); a.CheckBalanceAccount(); a.CheckBalanceATM(); b.Return(); a.GiveMoney(1); a.ReturnCard();
ShowDialogBox msg=new ShowDialogBox(); System.out.println("\nChecking complete"); }
Nhận xét:
Ta thấy trong kịch bản kiểm tra này , việc chuyển trạng thái diễn ra suôn sẻ , theo đúng trình tự gọi các phương thức đặc tả trong biểu đồ UML.
Hình 5.9 kịch bản 1 ( gọi đúng chuỗi tuần tự , đã tắt kiểm tra ràng buộc thời gian)
+ Kết quả khi kiểm tra đồng thời tính tuần tự và ràng buộc thời gian:
Nhận xét:
o Với kiểm tra ràng buộc thời gian trong hình trên , cho hiển thị ra : thời gian ràng buộc, thời gian thực thi thực tế, và thông báo vi phạm hoặc thông báo ok.
5.2.4.2 Chuỗi gọi không đúng tuần tự.
Private void jButton19ActionPerformed(java.awt.event.ActionEvent evt) { // sự kiện của button // TODO add your handling code here:
u.Withdraw(1); a.CheckBalanceAccount(); a.CheckBalanceATM(); b.Return(); b.Return(); a.GiveMoney(1); a.ReturnCard(); } 5.3 Kết luận
Trong chương này,chúng tôi đã trình bày cách cài đặt công cụ kiểm tra tính tuần tự và ràng buộc thời gian dựa vào phương pháp “kiểm tra ràng buộc thời gian sử dụng
AOP”. Mã aspejct được sinh ra từ máy trạng thái FSM sẽ được đan vào mã nguồn của chương trình chính thông qua trình biên dịch AspectJ để kiếm chứng giao thức đặc tả trong thời gian chạy. Bước đầu tiến hành kiểm chứng một số giao thức thực tế, tôi thấy mã aspect tạo ra đã đáp ứng được các yêu cầu kiểm chứng.
Kết luận
Kết luận về khóa luận
Trong quá trình thực hiện luận văn này, chúng tôi đã tìm hiểu những kiến thức cơ bản về kiểm chứng phần mềm – là một trong những công đoạn vô cùng quan trọng giúp phát hiện và sửa lỗi phần mềm nhằm đảm bảo chất lượng phần mềm. Khi đã biết về thiết kế (UML ) của hệ thống, với yêu cầu viết mã aspect để kiểm tra tính đúng đắn của cài đặt và tính tuân theo ràng buộc thời gian khi hoạt động, thì chúng ta có thể trực tiếp viết mã đó và đan ngay vào chương trình cần kiểm thử. Nhưng như vậy với mỗi chương trình thì ta sẽ phải viết mã aspect mới do đó sẽ tương đối mất thời gian. Mục đích của khóa luận là tạo một chương trình tự động hóa việc sinh mã aspect cho việc kiểm thử. Để làm được việc đó ta sẽ phải tạo ra 1 khuân mẫu aspect, tất nhiên sẽ chỉ dùng được cho những chương trình có tính tương đồng với nhau ở mức nhất định, và từ khuôn mẫu đó ta sẽ chỉnh sửa để nó trở thành mã cho những chương trình cụ thể. Việc tạo template này giống như ta viết mã aspect cho một ví dụ cụ thể, nhưng sau đó sẽ khái quát lên. Đồng thời chúng tôi đã xây dựng phương pháp kiểm chứng phần mềm dựa trên AOP từ đó xây dựng công cụ tự động sinh mô-đun kiểm chứng.
Trong phương pháp kiểm chứng cho ứng dụng, các mô-đun aspect chứa mã kiểm chứng sẽ là các mô-đun cắt ngang hệ thống và tách biệt so với chương trình ban đầu. Từ biểu đồ trạng thái hay biểu đồ trình tự UML, tôi xuất biểu đồ này ra dạng tài liệu XMI. Tiếp đó tiến hành phân tích tài liệu XMI để xây dựng máy trạng thái mô tả giao thức đã được định nghĩa. Từ máy trạng thái xây dựng được, tôi tiến hành duyệt các trạng thái của máy trạng thái và dùng các thuật toán thao tác với xâu ký tự để sinh ra mã aspect chứa nội dung kiểm chứng.. Để minh họa cho phương pháp “kiểm tra ràng buộc thời gian sử dụng AOP”, tôi đã thực nghiệm và xây dựng thành công khi cài đặt được công cụ tự động sinh mã aspect từ tài liệu XMI mô tả giao thức.
Tuy nhiên, tôi cũng vấp phải một số khó khăn trong quá trình xây dựng phương pháp sinh mã aspect. công cụ chỉ sinh ra aspect từ những thông tin trong tài liệu XMI. Chính vì vậy việc xây dựng các mô-đun kiểm chứng chỉ từ tài liệu XMI biểu diễn giao thức nhiều khi là không đủ để sinh ra các mô-đun aspect kiểm chứng hoàn chỉnh. . Một khó khăn nữa là các biểu đồ UML rất hạn chế trong việc đặc tả các biểu thức điều kiện,
chính vì vậy đôi khi ta chỉ kiểm chứng được một vài nhánh của chương trình mà không thể kiểm chứng được tất cả các nhánh.
Hướng phát triển trong tương lai
Từ những vấn đề tồn tại của khóa luận này, trong tương lai tôi sẽ tiếp tục hướng nghiên cứu này nhằm xây dựng hoàn thiện phương pháp kiểm tra ràng buộc thời gian để đáp ứng mọi yêu cầu.
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] Anh-Hoang Truong, Thanh-Binh Trinh, Dang Van Hung, Viet-Ha Nguyen,
Nguyen Thi Thu Trang, and Pham Dinh Hung. “Checking Interface Interaction
Protocols Using Aspect-Oriented Programming”. SEFM' 08, Cape Town, South
Africa, November 10-14, 2008.
[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:AsAspectJ Development Tools. Addison Wesley Professional Publisher,
[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.pect- Oriented Programming with AspectJ and the Eclipse
[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
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 onAspect-oriented software
development, Enschede, The Netherlands, April, 2002.
[28] OMG. Unified Modeling Language. OMG, Version 1.5 March 2003.
[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
[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