Requirements engineering (RE) is concerned with identifying the purpose of a software intensive system, and the contexts in which it will be used. It acts as a bridge between the real world needs of users, customers, and other constituencies affected by a software system, and the capabilities and opportunities afforded by software-intensive technologies. We have a broad range of interests in this area, and focus on problem-oriented approaches to the representation and analysis of requirements, and formal analysis techniques for reasoning about partial, ambiguous, and inconsistent descriptions, including natural language requirements, formal specifications, and security policies.

We are also concerned with the design of software-intensive systems within the wider engineering process. We look across the phases of design, from problem analysis and modelling, through to design and development. Our work includes both analytic and empirical approaches, both formal and descriptive representation, and both theoretic and practice-centred perspectives. We consider a range of critical application areas and architectures, such as air traffic management and healthcare systems, and software product lines and service-oriented architectures.

A key concern of our research in this area is the interplay between requirements and design, and how we can create software architectures that are stable in the face of changing requirements, and/or systems that are adaptive in the face of such changes.