Software Engineering is concerned with concepts, processes and tools that support the timely and cost effective development of quality software. Central problems in Software Engineering involve the management of large and complex software systems that are continuously being modified and enhanced to evolve in response to changes in user requirements and changes in the hardware/software environment in which they operate. Research interests of members of the Software Engineering group at the University of Toronto lie in the following core areas:
Requirements Engineering
Requirements 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 Architecture
Software 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 Methods
Formal 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 Engineering
In 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 Evolution
Software evolution involves developing techniques for managing thedevelopment 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.
The Management of Software Projects and Organizations
This field investigates how to choose from diverse sets of requirements for the next iteration of a software product subject to time and resource constraints. This requires the appropriate use of metrics in software development management and an understanding of what organizational structures help or hinder software projects.Faculty
Marsha Chechik
Steve Easterbrook
Azadeh Farzan
Eric C.R. Hehner
John Mylopoulos
Dave Wortman