The following are some areas of application, which are areas of engineering where the IMDEA Software Institute aim and expect to make an impact:
One of the application areas of software where correctness is more critical is embedded systems. An embedded system is a computational artifact that is subject to physical constrains, and whose correct functioning cannot depend on human guidance. In particular, embedded systems are involved in safety-critical applications (such as control systems of automobiles or aircrafts) or systems for highly remote operation (satellite, space, etc.). Embedded systems are also pervasive in areas of high economic impact, like mobile telephony or consumer electronics. Embedded systems must be resource-aware and are often also real-time systems. This means that the computation must be correctly performed within its time constraints, and also with an adequate use of resources. There is a common perception of the potential of rigorous techniques that can improve the quality of embedded software, or the time to market of new devices or families of devices.
Most of the research activities required by embedded and real-time systems and planned at the IMDEA Software Institute are strongly related to the Strategic Research Agenda of the European Technology Platform on Embedded Computing Systems, ARTEMIS.
Software is becoming pervasive in areas such as transportation (avionics, automotive), health, and control (of nuclear plants, of railway signalling systems, of conflict detection system), where a failure or malfunction may be extremely damaging, even in terms of human lifes. The constraints for such safety-critical systems are extremely stringent: the systems must be able to function during extremely long period of times, in presence of human mistakes or hardware or software failures, and provide an acceptable level of services at all times.
Thus, it is urgent to develop methods and tools that help support the development of such dependable software and its (quantitative) evaluation against the aforementioned constraints. To achieve this goal, it is important to build programming languages and software architectures that facilitate the development of fault-tolerant, resilient, and adaptable applications. One particular challenge is to scale existing methods so that they become effective in the context of distributed and networking systems
Computer infrastructures are evolving towards highly distributed networks able to provide users with a uniform and global access to services. At the same time, selling services has become the biggest growth business in the IT industry. Service Oriented Architectures (SOAs) are an attempt to provide at the level of software the necessary support for effectively programming, deploying, and maintaining services over highly-distributed networks. SOAs draw from many areas of computer science, including software engineering, concurrent and distributed systems, mobile code, and modular and component-based programming. While these areas are well developed in isolation, there remain significant challenges to combine the methodologies that stem from each area in order to deliver cost-effective approaches that support the construction and deployment of electronic services.
Most of the research activities required by SOAs and planned at the IMDEA Software Institute are strongly related to the Strategic Research Agenda of the European Technology Platform on Software and Services (NESSI).
As our society increasingly relies on information technology, there is an urgent and unprecedented need to develop new security mechanisms for protecting infrastructures, data, and applications. Several concomitant factors aggravate the problems of information security.
In order to face this challenge, one must provide scalable and rigorous techniques that can be integrated in prevailing software development processes to enforce security of applications. Since many attacks arise at application level, it is particularly important to achieve security at the level of programming languages, drawing from methods developed in programming language research (design, analysis, and verification), and developing security solutions at a level of abstraction that matches the programming language.