Source:University of Limerick, Limerick (2009)
Keywords:ecs; software evolution; software evolution; evolving critical systems; lero
There are few areas of modern life in which software is not an important (though often invisible) component. The software in our lives is increasingly complex; its interaction with the real world means that its requirements are in a state of constant change (Lehman & Fernández-Ramil, 2006). Many non-software products and services, from healthcare to transport, education to business, depend on reliable, high-quality software.
Software engineering is the activity that applies engineering principles to software. It applies systematic, rigorous discipline to the design and development of software, much as civil engineering does to construction. Software engineering improves the quality, reliability and predictability of software systems, by generating knowledge, tools and processes that both facilitate and improve the software development process. These qualities are essential wherever software failure might lead to significant safety, security, or economic losses.
Software systems frequently need to be modified in response to changes in system requirements and in their operational environment (Swanson, 1976). Such modification may involve the addition of new functionality, the adjustment of existing functions, or the wholesale replacement of entire systems. All such change is fraught with uncertainty – software projects involving change frequently fail to meet requirements, run over time and budget, or are abandoned (Rajlich and Bennett, 2000). As the ubiquity and complexity of software increase, a requirement has emerged for critical software which can successfully evolve without loss of quality—software that is engineered from the start to be easily changed, extended and reconfigured, while retaining its security, its performance, its reliability and predictability.