Modern software systems, such as those found in the Avionics Industry, the Automobile Industry, the Chemical Industry, Telecommunications, Consumer Electronics, Banking, etc. are highly critical from a socioeconomic standpoint both in terms of their use and of their design, maintenance and evolution. These systems share the characteristic of having to respect both functional and quantitative requirements in addition to their intended use. Examples of such requirements include specific execution times and energy consumption rates. Requirements compliance may depend on a number of factors including processor speed, bandwidth, battery capacity, resource availability, etc. Violation of these requirements entails, at the least, degraded service provision. It may also induce serious failures that can produce irreparable damage.
The increased complexity of systems where the software component plays a preponderant role, poses numerous technical problems in all cycles of software development: requirements analysis, specification, design, deployment, integration, coding and validation. In this general context, it is becoming increasingly difficult to grasp the global behavior of a system with current tools (languages, models, theories, methodologies, EDI, etc). It is therefore imperative to foster new directions in state-of-the-art tools and models, both in terms of foundations and technologies. Innovative methods and tools should be sought for, that allow a means of addressing the inherent complexity of these systems.
There are many factors that contribute towards the complexity of software systems. A non-exhaustive list follows:
- The large number and heterogeneity of the constituent components. In the process of engineering complex systems there is a need for applying knowledge arising from different areas. As a consequence, the structure, functionality and properties of the tools and models resting on existing theories and industrial practices become increasingly difficult to apply.
- Complex hardware architectures. The use of complex platforms (distributed, multiprocessor, programmable, wireless, etc.) is motivated by the need for added speed, accessibility, robustness, etc. However, this creates gaps in the development chain since current software analysis, development and optimization techniques are not suited for exploiting these platforms at their maximum capacity.
- Domain specific, high-level programming and modelling languages. Their appearance responds to the need for higher levels of abstraction in system development, in order to describe them as independently as possible from execution platforms while at the same time harnessing the intrinsic power of the specific domain of application. This is the origin of a vast set of theoretical and practical problems related to the preservation of semantics across different phases of development.
- Interaction of software subsystems with the environment and physical components with complex, continuous dynamics. In order to grasp the global behavior of the system and its effect on the environment with which it interacts, it is necessary to develop hybrid dynamic models, combining both discrete and continuous event based systems.
It is becoming clear that current tools and methods for the rigorous description, design and implementation of software systems fall short in addressing additional emerging requirements such as those discussed above. Putting these tools and methods to work requires a profound understanding of the dynamic behavior of these systems, of their constraints and also their requirements. Indeed, these additional elements must be fully integrated into the model.
The use of heavily automated methods that feed on high-level models is one possible response to the correctness and precision requirements without relegating quality in the sense that the automatically generated code can be guaranteed to respect the requirements described in the model. The application of this approach would help minimize ruptures in the development cycle, reducing the time required to obtain market-quality products and hence also their total costs.
However, the production of a faithful model of dynamic behavior for complex systems poses significant scientific and technical challenges. In order to respect execution requirements it is imperative to relate, starting from the design phase, functional behavioral aspects with non-functional ones related to temporal constraints on the execution of components, synchronization of components required for their proper integration, constraints related to communication services, distribution of components dictated by the execution platform, temporal characteristics, data placement in different physical memory banks, temporal and spatial properties of dynamic memory administration and more.
In order to tackle these problems, the research activity of LIA focuses on the development of new semantic foundations for programming languages and software models, and new techniques for the specification, modeling, verification and synthesis of implementations. The approach taken by LIA is based on formal, symbolic methods and models allowing the specification of properties of systems, the possibility of automating the verification of these properties either by static or dynamic analysis, and also the use of descriptions that model the run-time environment or execution platform.
The research program proposes the development of methodologies and tools which can aid in the automatic synthesis of an implementation which is correct by construction, providing guarantees that the compilation process respects functional and quantitative properties, as required by application software and constraints on execution platforms.