Software and Systems Engineering
Overview: Software and Systems Engineering is concerned with concepts, processes and tools that support the timely and cost effective development and maintenance of quality software systems. Although Software and Systems Engineering are considered distinct disciplines they have a synergistic relationship, where developments in one field influence the other. This relationship is also evident in CSI research output were contributions from both fields are used to inform the design and development of embedded, sensor, autonomic and pervasive systems. Here is a list of specific sub-themes that are being investigated at CSI.
Embedded Systems research focuses on the development of special purpose computer systems designed to perform one or a few dedicated functions, often with real-time computing constraints. Research issues focus on the optimisation of these systems, methods for reducing their size and increasing their reliability and performance. Researchers at CSI are also investigating power saving techniques for embedded systems.
Formal Methods involve the use of mathematics to specify systems. These can be software or hardware systems. Once specified, the challenge is to produce an implementation which satisfied the specification. CSI researchers are developing and using mathematical techniques that enable them to do so. The resulting implementation will be correct by construction. The long term aims of this work are to develop methods which practitioners can use to develop systems for industry which are reliable and free from errors. CSI researchers are particularly interested in exploring how these methods can be taught in an undergraduate curriculum so that students can learn them, and then apply them when they graduate.
Intelligent Agents are entities which observes and acts upon an environment and directs its activities toward achieving goals. A multi-agent system then, is a system composed of multiple interacting agents, which communicate to achieve common goals. Researchers at CSI have developed multi-agent platforms and languages, that have then been used to support a range of agent applications such as personal assistant agents in virtual environments such as a virtual shopping mall, agent-based integration with wireless sensor networks and robotics applications.
Performance Engineering focuses on the development of models and tools that aid in the design, performance, prototyping, testing and evaluation of various applications. Enterprise applications, for example, are becoming increasingly complex, where in recent times they have moved away from monolithic architectures to more distributed systems made up of a collection of heterogeneous servers. Such servers generally host numerous software components that interact to service client requests. Understanding what effects this will have on the performance of such systems can be a difficult task, especially in situations where systems are expected to handle large volumes of simultaneous users. CSI researchers are applying techniques from software performance engineering (e.g. modelling, design analysis, testing, monitoring) to better understand and improve the performance of enterprise applications. Examples of these enterprise applications include e-commerce web services such as Amazon or Ebay.
Pervasive Computing (or Ubiquitous computing) goes beyond the idea of the desktop model of human-computer interaction where a single user consciously engages a single device with a specific task in mind. More specifically, Pervasive Computing engages many embedded computer devices simultaneously in the course of a user’s activities. Hence, these devices should communicate with each other and intelligently adapt to changes in the user’s environment. CSI researchers are using Pervasive Computing in a range of applications such as e-Learning, and Sensor Network applications such as independent living environments, and personalised healthcare.
Programming Language research deals with designing programming abstractions to fit particular challenges. Such domain-specific languages, middleware, constructs and approaches can provide more productive software tools by matching the expression of software more closely to the way the system designer thinks about their problems. A particular area of interest is in languages for highly sensorised systems, where CSI researchers are exploring novel programming approaches for tackling high degrees of noise, uncertainty and incompleteness in sensor information. Another area of focus is constraint programming techniques where constraints are used directly within a programming language to address difficult combinatorial problems such as timetabling and scheduling.
Software Design research focuses on the development of lightweight software tools and techniques that aid the programmer, particularly in the context of Agile methods. For example, CSI researchers have combined Search-Based Software Engineering (SBSE) techniques with Automated Refactoring to develop an approach to automatically improving a program's maintainability. In another strand, a novel software component recommender system has been developed based on collaborative filtering. There is also a strong Design Patterns interest in CSI, addressing issues such as anti-pattern detection, automated pattern application and design pattern recognition.