Teaching concurrency in the programming languages course
SIGCSE '91 Proceedings of the twenty-second SIGCSE technical symposium on Computer science education
The Z notation: a reference manual
The Z notation: a reference manual
ACM Transactions on Programming Languages and Systems (TOPLAS)
An experiment in automatic generation of test suites for protocols with verification technology
Science of Computer Programming - Special issue on COST 247, verification and validation methods for formal descriptions
Concurrent programming CAN be introduced into the lower-level undergraduate curriculum
Proceedings of the 2nd conference on Integrating technology into computer science education
Monitors: an operating system structuring concept
Communications of the ACM
Specifying Systems: The TLA+ Language and Tools for Hardware and Software Engineers
Specifying Systems: The TLA+ Language and Tools for Hardware and Software Engineers
Capsules: A Shared Memory Access Mechanism for Concurrent C/C++
IEEE Transactions on Parallel and Distributed Systems
A suite of tools for teaching concurrency
Proceedings of the 9th annual SIGCSE conference on Innovation and technology in computer science education
Constructive Alignment for Teaching Model-Based Design for Concurrency
Transactions on Petri Nets and Other Models of Concurrency I
Tool Presentation: Teaching Concurrency and Model Checking
Proceedings of the 16th International SPIN Workshop on Model Checking Software
Curricula for concurrency and parallelism
Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications
Modeling Concurrent Systems with Shared Resources
FMICS '09 Proceedings of the 14th International Workshop on Formal Methods for Industrial Critical Systems
Consolidated ada reference manual: language and standard libraries
Consolidated ada reference manual: language and standard libraries
Curricula in concurrency and parallelism
Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion
Practical parallel and concurrent programming
Proceedings of the 42nd ACM technical symposium on Computer science education
Introducing parallelism and concurrency in the data structures course
Proceedings of the 43rd ACM technical symposium on Computer Science Education
Behavioral interface specification languages
ACM Computing Surveys (CSUR)
A verified implementation of priority monitors in java
FoVeOOS'11 Proceedings of the 2011 international conference on Formal Verification of Object-Oriented Software
Hi-index | 0.00 |
We present an undergraduate course on concurrent programming where formal models are used in different stages of the learning process. The main practical difference with other approaches lies in the fact that the ability to develop correct concurrent software relies on a systematic transformation of formal models of inter-process interaction (so called shared resources), rather than on the specific constructs of some programming language. Using a resource-centric rather than a language-centric approach has some benefits for both teachers and students. Besides the obvious advantage of being independent of the programming language, the models help in the early validation of concurrent software design, provide students and teachers with a lingua franca that greatly simplifies communication at the classroom and during supervision, and help in the automatic generation of tests for the practical assignments. This method has been in use, with slight variations, for some 15 years, surviving changes in the programming language and course length. In this article, we describe the components and structure of the current incarnation of the course—which uses Java as target language—and some tools used to support our method. We provide a detailed description of the different outcomes that the model-driven approach delivers (validation of the initial design, automatic generation of tests, and mechanical generation of code) from a teaching perspective. A critical discussion on the perceived advantages and risks of our approach follows, including some proposals on how these risks can be minimized. We include a statistical analysis to show that our method has a positive impact in the student ability to understand concurrency and to generate correct code.