Engineering Complex Software Systems
Our society relies on complex software systems. Smart cyber-physical systems and the Internet of Things underpin many aspects of our daily lives including healthcare, transport, and more. These systems are becoming increasingly heterogeneous and networked – and adding to the complexity, advanced algorithms based on artificial intelligence (AI) and quantum computing are now being incorporated.
The Engineering Complex Software Systems (Complex SE) department's mission is to develop new intelligent and efficient software engineering solutions to design, develop, test and maintain these complex software systems.
"In addition to handling uncertainties of complex software systems, one breakthrough research idea is to create quantum software for different applications. Suppose you had to make a new vaccine or a new drug – quantum software holds the potential to speed up its discovery exponentially and provide much more accurate analysis than current computational tools."- Shaukat Ali, Dept. Head
As the complexity of software systems and their interactions with the physical world increase, so too do the challenges of ensuring their reliability and performance. Understanding, developing, and testing complex systems made up of many interconnected and interdependent components presents a challenge for both humans and tools.
In the Complex SE Department, we address these challenges through:
We use approaches from model-based engineering, model-based testing, search-based software engineering, and empirical software engineering to develop novel methods to engineer complex software systems in classical and quantum computing domains.
Applying advanced techniques
We also apply advanced techniques to software engineering. These include digital twins, applied AI (e.g., genetic algorithms, deep learning, rule mining), and more recently, quantum computing.
Software system development
We develop software for classical, quantum and hybrid systems. Our work encompasses all phases of software system development: requirements engineering, design and modelling, development, testing and debugging, operation, and maintenance.