Welcome to the UEA Software Engineering Group Website
This is the online home of the Software Engineering Group of the University of East Anglia. We are a member of the Machine Learning and Statistics Lab in the School of Computing Science. Within the School of Computing Science we are responsible for conducting research in the area of Software Engineering, where we focus in particular on data analysis, process analysis and decision support for the development of software and management of development processes. In addition we are responsible for the design, development and delivery of the Software Engineering part of curriculum at the School of Computing Sciences as well as special topic lectures in other schools at UEA.
Software development is a never ending stream of decisions that software engineers have to take in order to deliver a software system that is functional, easy to use, stable, evolvable, etc. And with an ever increasing pressure to deliver high-quality products, getting decisions right, such as the choice of the system architecture and the impact severity of changing certain aspects of a system, is critical to ensure success. A software engineer during development will typically be in the following situation:
In this situation the developer is faced with the task of transforming some software development artefact X (a class diagram, a requirement specification, etc) to a new artefact Y (for example going from a class in a class diagram to its actual implementation in Java or C#). Typically there are many ways such a transformation can be realised and it is up to the engineer to decide which is the best. A similar effect can be observed when validating an Artefact Y against Artefact X, for example when reverse engineering a legacy software system into a clas diagram.
The difficulty for the software engineer lies in the fact that generally speaking there is no clear best answer to the decision that needs to be taken. Deciding which architectural style will provide the best evolvability or which system parts will be affected by a change in a specific component is complicated as software systems are complex and the available information can be hard to understand and interpret. This is in particular true for large scale software systems due to their size and fragmented and incomplete documentation.
The Software Engineering Group specialises on decision support approaches that aid software engineers in assessing these situations by systematically exploring, analysing and structuring the data that is available within the current and related software projects This can be through the automated analysis and structuring of the source code of legacy software systems, pattern recognition in historical commit data or evaluation mechanisms for partial and incomplete information. The realisation of such approaches typically is achieved with the following steps:
Decision and Data Analysis
The first step focusses on understanding the type of decision that needs to be taken and understanding the data that can be used to enhance the insight of the software engineer when faced with such decisions. This step typically involves in depth research into specific software development challenges, such as change impact analysis or resource allocation, and identifying which information can augment understanding as well where such information can be short on detail which can hinder its interpretation.
Data and Alternative Evaluation Modelling
The second step targets the ability to consistently represent the alternative solutions that exist for a specific type of decision as well as a quantification of their relevant properties so they can be evaluated accurately and uniformly. This can be for example an enriched model that quantifies the expected evolvability based on historical extension requests, or the strength of relations between software components based on their shared commit history.
We base the representations for data and alternative evaluation around mathematical models that allow for the accurate representation of data relations as well as the quantification of any uncertainty that can occur in the data using probability theory and fuzzy set representations and operators.
Visualisation and Interpretation
For the interpretation of the data and its contribution to resolving the decisions faced by the developer this step involves the creation of an analysis and optimisation algorithm that can systematically evaluate and rank the alternative solutions. This step generally includes the application of well known optimisation and pattern recognition techniques to for example recognise clusters of related software components inside large-scale legacy software systems. The evaluation results then require an intuitive and clear visualisation mechanism that aids the software engineer in understanding the results of the analysis.
Tooling and Evaluation
The final step of our research generally involves the creation of a working prototype of the proposed approach that demonstrates its viability. These tools are typically used to evaluate the accuracy of the approach together with industrial partners before they are made available to the public via this website in the Tools section.
It is the goal of the Software Engineering Group to conduct world-leading and industry-relevant research and we are therefore always interested in collaborating with other research groups and industry partners.
Within the School of Computing Science the Software Engineering Group is responsible for the Software Engineering part of the curriculum, which involves the design, development and delivery of the Software Engineering 1 and Software Engineering 2 modules.
Software Engineering 1 introduces students to the foundations of modern software development, introducing concepts such as agile methodology, software decomposition and group based sofwtare development. To support these activties the module introduces students to industry standard development tools, such as git and trello. Where possible this module works with industry-inspired coursework assignments as well as guest lectures from industry.
Software Engineering 2 builds upon the foundations of Software Engineering 1, focussing on the topic of building reusable software components to streamline the development of product families. The module introduces the students to the principles of legacy software, reverse engineering and the creation of application frameworks to support software reuse. This is combined with the introduction of the principles of mobile application development using the Android platform. This module also keeps strong connections with industry through guest lectures and up-to-date industry relevant technologies.
In addition the Software Engineering Group regularly provides special topic lectures in other schools at UEA, such as the lectures on Brand Leadership in IT and Innovation in IT for the Norwich Business School.
Research Transfer, Consultancy and Collaboration with Industry
The Software Engineering Group has a strong commitment to real world relevance and collaboration with industry. Our research therefore not only results in academic publications but also software tools that we make available in the Tools section of this website. We evaluate the research and tools we produce with industrial partners and we are involved in industry-driven research projects. Where possible we also seek valorisation of our research results by developing them into spin-out companies.
Members of the Software Engineering Group are also available for consultancy and course delivery in industry through UEA Consulting Ltd. We can provide the development of small to medium-sized software systems, in-depth analysis and evaluation of software system and company structures, knowledge transfer partnerships and collaborative research. Companies interested in collaborating with the Software Engineering Group can contact the group leader Joost Noppen (email@example.com).
Copyright© 2016, School of Computing Sciences, University of East Anglia, Norwich, Norfolk, United Kingdom. All Rights Reserved.