Expertise Areas

Software Verification and Validation

Verification aims at detecting faults in software systems whereas Validation is about gaining sufficient confidence in their dependability (reliability, security, safety)  to deploy and deliver them. Many different techniques exist to support either verification or validation.

Software Testing

One of the main type of techniques for verification and validation is testing. It denotes a set of techniques that aim at executing software systems in a systematic, controlled manner. One of the main challenges is to automate testing in order to scale up to large, complex systems. Another challenge is to find test strategies that maximize the chances of fault detection at a minimum cost. There are many different levels of testing (from unit to system levels) and many different types of testing strategies, which are applicable under varying conditions. Testing techniques can also differ in their objectives, whether they focus on functional faults or performance problems, for example. 

Model-based Verification

Testing applies once a running system is available, or at least partly so. Model-based verification enables the verification of system dependability at early stages of development, thus helping prevent major specification and design problems while they are still reasonably inexpensive to fix. 
To achieve rigorous and cost-effective verification techniques, we build on two major developments: the success of automated constraint solvers and optimization techniques in other engineering disciplines, and the increased usage of model-driven development in software industry. Specifically, we want to provide guidelines for building models that can be used for the purpose of verification, defining semantic-preserving model manipulation operators, formulating the dependability properties of software systems in terms of optimization problems, and systematically evaluating the proposed verification techniques using case studies and experiments.

Model-driven Software Engineering

Model-Driven Engineering (MDE) is meant to improve the quality of products and productivity of a product development process by 1) capturing information for a particular purpose in models, at a higher level of abstraction than code, 2) providing a knowledge-sharing platform for supporting communication among stakeholders, and 3) providing an opportunity to facilitate automated analysis such as change impact analysis to reliably and predictably handle changes. MDE tools also provide high degrees of automation, by supporting various tasks involved in software development, such as program code generation and model-based verification.

Requirements Engineering

Requirements Engineering (RE) concerns the specification of attributes, capabilities, characteristics, and qualities of a system-to-be in order for it to have value to its stakeholders. RE is traditionally performed as an early phase activity in the systems development lifecycle. The main outcome of the requirements phase is a requirements specification, which is subsequently used for systems design, verification and validation (V&V), and integration.