Abstract
The fun of teaching and learning concurrent programming is sometimes darkened by the difficulty in getting concurrent programs to work right. In line with other programming subjects in our department, we advocate the use of formal specifications to state clearly how a concurrent program must behave, to reason about this behavior, and to be able to produce code from specifications in a semi-automatic fashion. We argue that a mild form of specification not only makes it possible to get programs running easier, but it also introduces students to a quite systematic way of approaching programming: reading and understanding specifications is seen as an unavoidable step in the programming process, as they are really the only place where the expected conduct of the system is described. By using formal techniques in these cases, where they are undoubtedly appropriate, we introduce formality without the need to resort to justifications with artificial or overly complicated examples.
This research was partly supported by the Spanish MCYT project TIC2002-0055 and by EU projects FET IST-2001-33123 and FET IST-2001-38059.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
Similar content being viewed by others
References
Andrews, G.R., Schneider, F.B.: Concepts and notations for concurrent programming. In: Gehani, N., McGettrick, A.D. (eds.) Concurrent Programming, Addison-Wesley, Reading (1989)
Andrews, G.: Concurrent Programming: Principles and Practice. Benjamin/Cummings (1991)
Bruynooghe, M., Lau, K.-K. (eds.): Program Development in Computational Logic. LNCS, vol. 3049. Springer, Heidelberg (2004)
Burns, A., Wellings, A.: Concurrency in Ada. Cambridge University Press, Cambridge (1998)
Cohen, N.H.: Ada as a Second Language. McGraw-Hill, New York (1995)
Hanus, M., Kuchen, H., Moreno-Navarro, J.J., et al.: Curry: An integrated functional logic language. Technical report, RWTH Aachen (2000)
Feldman, M.B., Bachus, B.D.: Concurrent programming can be introduced into the lower-level undergraduate curriculum. In: Proceedings of the 2nd conference on Integrating technology into computer science education, pp. 77–79. ACM Press, New York (1997)
Gehani, N.H.: Capsules: a shared memory access mechanism for Concurrent C/C++. IEEE Transactions on Parallel and Distributed Systems 4(7), 795–811 (1993)
Hermenegildo, M., Bueno, F., Cabeza, D., Carro, M., García de la Banda, M., López García, P., Puebla, G.: The Ciao Multi-Dialect Compiler and System: An Experimentation Workbench for Future (C)LP Systems. In: Parallelism and Implementation of Logic and Constraint Logic Programming, April 1999, pp. 65–85. Nova Science, Commack (1999)
Herranz, A., Moreno, J.J.: On the design of an object-oriented formal notation. In: Fourth Workshop on Rigorous Object Oriented Methods, ROOM 4, March 2002, King’s College, London (2002)
William Higginbotham, C., Morelli, R.: A system for teaching concurrent programming. In: Proceedings of the twenty-second SIGCSE technical symposium on Computer science education, pp. 309–316. ACM Press, New York (1991)
Hoare, C.A.R.: Monitors, an operating system structuring concept. Communications of the ACM 17(10), 549–557 (1974)
Jackson, D.: A Mini-Course on Concurrency. In: Twenty-second SIGCSE Technical Symposium on Computer Science Education, pp. 92–96. ACM Press, New York (1991)
Jones, C.B.: Systematic Software Development Using VDM. Prentice-Hall, Upper Saddle River (1995)
Morales-Fernandez, R., Moreno-Navarro, J.J.: CC-Modula: A Modula-2 Tool to Teach Concurrent Programming. ACM SIGCSE Bulletin 21, 19–25 (1989)
The Joint Task Force on Computing Curricula IEEE-CS/ACM. Computing Curricula (2001), http://www.computer.org/education/cc2001/
Persky, Y., Ben-Ari, M.: Re-engineering a concurrency simulator. In: Proceedings of the 6th annual conference on the teaching of computing and the 3rd annual conference on Integrating technology into computer science education, pp. 185–188. ACM Press, New York (1998)
Robbins, S.: Using remote logging for teaching concurrency. In: Procs. of the 34th SIGCSE Technical Symposium on Comp. Sci. Education, pp. 177–181. ACM Press, New York (2003)
Taft, T.S., Duff, R.A., Brukardt, R.L., Ploedereder, E. (eds.): Consolidated Ada Reference Manual. Language and Standard Libraries International Standard ISO/IEC 8652/1995(E) with Technical Corrigendum 1. Springer, Heidelberg (2001)
van Lamsweerde, A.: Formal Specification: a Roadmap. In: Finkelstein, A. (ed.) The Future of Software Engineering, pp. 147–159. ACM Press, New York (2000)
Yeager, D.P.: Teaching concurrency in the programming languages course. In: Proceedings of the twenty-second SIGCSE technical symposium on Computer science education, pp. 155–161. ACM Press, New York (1991)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2004 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Carro, M., Mariño, J., Herranz, Á., Moreno-Navarro, J.J. (2004). Teaching How to Derive Correct Concurrent Programs from State-Based Specifications and Code Patterns. In: Dean, C.N., Boute, R.T. (eds) Teaching Formal Methods. TFM 2004. Lecture Notes in Computer Science, vol 3294. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-30472-2_6
Download citation
DOI: https://doi.org/10.1007/978-3-540-30472-2_6
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-23611-5
Online ISBN: 978-3-540-30472-2
eBook Packages: Springer Book Archive