On Teaching Formal Methods: Behavior Models and Code Analysis

  • Jan Kofroň
  • Pavel Parízek
  • Ondřej Šerý
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 5846)


Teaching formal methods is a challenging task for several reasons. First, both the state-of-the-art knowledge and the tools are rapidly evolving. Second, there are no comprehensive textbooks covering certain topics, especially code analysis. In this paper, we share our experience with teaching two courses. The first is focused on classics of modeling and verification of software and hardware systems (LTS, LTL, equivalences, etc.), while the other one involves topics related to automated analysis of program code. We hope that other lecturers can benefit from our experience to improve their courses.


Model Check Formal Method Behavior Model Code Analysis Symbolic Execution 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Java modeling language (JML),
  2. 2.
  3. 3.
  4. 4.
  5. 5.
  6. 6.
  7. 7.
  8. 8.
  9. 9.
  10. 10.
  11. 11.
  12. 12.
    Uppaal integrated environment,
  13. 13.
  14. 14.
    Adámek, J., Kofroň, J., Plášil, F.: NSWI101: Behavior models and verification,
  15. 15.
    Adamek, J., Plasil, F.: Component composition errors and update atomicity: static analysis: Research articles. Journal of Software Maintenance and Evolution: Research and Practice 17(5), 363–377 (2005)CrossRefGoogle Scholar
  16. 16.
    Alur, R., Dill, D.L.: A theory of timed automata. Theoretical Computer Science 126(2), 183–235 (1994)zbMATHCrossRefMathSciNetGoogle Scholar
  17. 17.
    Anand, S., Pasareanu, C.S., Visser, W.: JPF-SE: A symbolic execution extension to Java PathFinder. In: Grumberg, O., Huth, M. (eds.) TACAS 2007. LNCS, vol. 4424, pp. 134–138. Springer, Heidelberg (2007)CrossRefGoogle Scholar
  18. 18.
    Ball, T., Bounimova, E., Cook, B., Levin, V., Lichtenberg, J., McGarvey, C., Ondrusek, B., Rajamani, S.K., Ustuner, A.: Thorough static analysis of device drivers. SIGOPS Oper. Syst. Rev. 40(4), 73–85 (2006)CrossRefGoogle Scholar
  19. 19.
    Barnett, M., Chang, B.-Y.E., DeLine, R., Jacobs, B., Leino, K.R.M.: Boogie: A modular reusable verifier for object-oriented programs. In: de Boer, F.S., Bonsangue, M.M., Graf, S., de Roever, W.-P. (eds.) FMCO 2005. LNCS, vol. 4111, pp. 364–387. Springer, Heidelberg (2006)CrossRefGoogle Scholar
  20. 20.
    Barnett, M., Leino, K.R.M.: Weakest-precondition of unstructured programs. In: Proceedings of the 2005 ACM SIGPLAN-SIGSOFT Workshop on Program Analysis For Software Tools and Engineering, PASTE 2005, pp. 82–87. ACM, New York (2005)CrossRefGoogle Scholar
  21. 21.
    Bergstra, J., Klop, J.: Process algebra for synchronous communication. Information and Control 60(1-3), 109–137 (1984)zbMATHCrossRefMathSciNetGoogle Scholar
  22. 22.
    Beyer, D., Henzinger, T.A., Jhala, R., Majumdar, R., Beyer, D.: The software model checker blast: Applications to software engineering. Int. J. Softw. Tools Technol. Transfer, 505–525 (2007)Google Scholar
  23. 23.
    Beyer, D., Henzinger, T.A., Théoduloz, G.: Program analysis with dynamic precision adjustment. In: Proceedings of the 23rd IEEE/ACM International Conference on Automated Software Engineering (ASE 2008), pp. 29–38. IEEE Computer Society Press, Los Alamitos (2008)CrossRefGoogle Scholar
  24. 24.
    Clarke, E.M., Grumberg, O., Peled, D.A.: Model Checking. MIT Press, Cambridge (1999)Google Scholar
  25. 25.
    Dijkstra, E.W.: Cooperating sequential processes. In: Programming Languages: NATO Advanced Study Institute, pp. 43–112. Academic Press, London (1968)Google Scholar
  26. 26.
    Fokkink, W.: Introduction to Process Algebra. Springer-Verlag New York, Inc., Secaucus (2000)zbMATHGoogle Scholar
  27. 27.
    Giannakopoulou, D., Pasareanu, C.S., Cobleigh, J.M.: Assume-guarantee verification of source code with design-level assumptions. In: 26th International Conference on Software Engineering (ICSE 2004), pp. 211–220. IEEE Computer Society, Los Alamitos (2004)Google Scholar
  28. 28.
    Gulavani, B.S., Henzinger, T.A., Kannan, Y., Nori, A.V., Rajamani, S.K.: Synergy: a new algorithm for property checking. In: SIGSOFT 2006/FSE-14: Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering, pp. 117–127. ACM, New York (2006)CrossRefGoogle Scholar
  29. 29.
    Henzinger, T. A., Jhala, R., Majumdar, R.: SPIN Workshop 2005 – Blast tutorial slides,
  30. 30.
    Holzmann, G.J.: The SPIN Model Checker: Primer and Reference Manual. Addison-Wesley Professional, Reading (2003)Google Scholar
  31. 31.
    Kroening, D., Strichman, O.: Decision Procedures: An Algorithmic Point of View. Springer, Heidelberg (2008)zbMATHGoogle Scholar
  32. 32.
    Newborn, M.: Automated Theorem Proving: Theory and Practice. Springer, Heidelberg (2001)zbMATHGoogle Scholar
  33. 33.
    Nielson, F., Nielson, H.R., Hankin, C.: Principles of Program Analysis. Springer-Verlag New York, Inc., Secaucus (1999)zbMATHGoogle Scholar
  34. 34.
    Parízek, P., Šerý, O.: NSWI132: Program analysis and code verification,
  35. 35.
    Pasareanu, C.S., Pelanek, R., Visser, W.: Predicate abstraction with under-approximation refinement. Logical Methods in Computer Science 3(1) (2007)Google Scholar
  36. 36.
    Pasareanu, C.S., Visser, W.: Verification of java programs using symbolic execution and invariant generation. In: Graf, S., Mounier, L. (eds.) SPIN 2004. LNCS, vol. 2989, pp. 164–181. Springer, Heidelberg (2004)Google Scholar
  37. 37.
    Ranjit, T.H., Henzinger, T.A., Jhala, R., Majumdar, R.: Lazy abstraction. In: POPL, pp. 58–70. ACM Press, New York (2002)Google Scholar
  38. 38.
    Ruys, T.C.: SPIN Workshop 2002 – SPIN beginners’ tutorial,
  39. 39.
    Ruys, T.C., Holzmann, G.J.: SPIN Workshop 2004 – advanced SPIN tutorial,
  40. 40.
    Schwartzbach, M.: Lecture notes on static analysis,
  41. 41.
    Visser, W., Havelund, K., Brat, G.P., Park, S., Lerda, F.: Model checking programs. Automated Software Engineering 10(2), 203–232 (2003)CrossRefGoogle Scholar
  42. 42.
    Zhang, L., Malik, S.: The quest for efficient boolean satisfiability solvers. In: Brinksma, E., Larsen, K.G. (eds.) CAV 2002. LNCS, vol. 2404, pp. 17–36. Springer, Heidelberg (2002)CrossRefGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2009

Authors and Affiliations

  • Jan Kofroň
    • 1
    • 2
  • Pavel Parízek
    • 1
  • Ondřej Šerý
    • 1
  1. 1.Department of Software Engineering Malostranské náměstí 25Charles University in PraguePrague 1Czech Republic
  2. 2.Institute of Computer Science Pod Vodárenskou věží 2Academy of Sciences of the Czech RepublicPrague 8Czech Republic

Personalised recommendations