Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software. Our broad research interest in this field is on programmer productivity with a special focus on software quality assurance. We develop practical techniques and tools to help programmers create cheaper, faster, and more reliable software systems. The topics we study include, but not limited to:
- Combinatorial Interaction Testing
- Model-based Testing
- Automated Debugging
- Dynamic Program Analysis
- Data-Driven Program Analysis
- Software Security
Formal Methods are techniques that are based on rigorous mathematical foundations to analyze systems. Traditional system validation through testing requires an implementation to exist to start the analysis, hence can be performed late in the system design life cycle. Formal methods, on the other hand, can be applied much earlier by building formal models of different system aspects such as requirements, architecture, behavior, etc. The analysis of these formal models allows detection of faults that would possibly go into the implementation of the system undetected. Formal behavioural models also allow automated generation of high quality test cases. Our research focuses on formal approaches to testing.