Concurrency is useful in a wide range of applications. Errors in these applications and systems may be life threatening, adversely affect our quality of life or may have severe financial implications. An understanding of the principles of concurrent programming and an appreciation of how it is practiced is essential for software engineering professionals. This tutorial takes a structural model-based approach to the design of concurrent and distributed programs. The models, based on labelled transition systems LTS (a form of finite state machine), provide insight into the composite behaviour of the programs composed from components, and can be automatically analysed to check various safety and liveness properties before implementation.
Furthermore, we believe that such an architectural model-based approach is also beneficial in the design, analysis and construction of adaptive software systems. Rigorous techniques are needed to develop adaptive systems which can cope with both changes in the environment and with changing goals. The objective is to minimise the degree of explicit management necessary for construction and subsequent evolution whilst preserving the safety properties implied by its specification. We focus on an architectural approach to self-management, in which software components automatically configure their interaction as required. We present an outline three-layer reference model as a context in which to articulate some of the main issues and to describe our pilot implementation.
The approach, concurrency concepts and analysis will be demonstrated through a series of examples and using the LTSA model checker. In addition, current research work in the area of adaptive software will be discussed and demonstrated including current research on plan synthesis from goals and properties.
(reference : Concurrency - State Models and Java Programs, Jeff Magee & Jeff Kramer, Wiley 2006).