Research interests of members of the Software Engineering group at the University of Toronto lie in the following core areas:
Requirements EngineeringRequirements engineering deals with the acquisition, modelling and analysis of stakeholder needs in order to determine the functional and non-functional requirements for a software system. Our past research on this topic has focused on requirements modelling languages, as well as formal analysis techniques for requirements specifications. For more details on these studies please visit www.cs.toronto.edu/km/tropos.
Design and ArchitectureSoftware architecture is the study of the structure and organization of software systems. Software design is the process by which a set of requirements is transformed into a collection of data structures and algorithms that implement the requirements as one or more computer programs. Software design can be viewed as navigating a design space of high dimensionality, attempting to converge on the most economical/efficient solution for a given set of requirements.
Formal MethodsFormal methods deal with the application of mathematics in designing and reasoning about software systems. They can be applied at the specification level to precisely capture the needs of users, or used later in the software design process to ensure that the software is correct with regard to its specification. Formal methods research at the University of Toronto deals primarily with automated verification (through theorem proving and model checking), formal specification languages and program refinement.
Software Performance EngineeringIn Software Performance Engineering the task is to predict the performance of large software systems while they are being designed and developed. At each stage of a top-down design, we want to get an idea of how the final system will perform. Initially, the models are very rough, and only distinguish response times of seconds from response times of hours. Later on, when the system design is nearing completion, the intent is to predict response times within a factor of two.
Software EvolutionSoftware evolution involves developing techniques for managing the
development and evolution of a software system over its lifetime,
including the execution of version control for source code and
documentation and configuration management for the system architecture.