Research / Recherche

Interests / Intérêts

  • Software engineering / Génie logiciel
  • Formal methods / Méthodes formelles
  • Empirical software engineering / Génie logiciel empirique
  • Software design / Conception de logiciels
  • Software analysis / Analyse de logiciels
  • Model-driven engineering / Ingénierie dirigée par les modèles
  • Software product lines / Lignes de produits logiciels

Current projects / Projets actuels

(Je m’excuse, mais les déscriptions des projets sont disponibles en anglais seulement pour le moment.)

1. Management of Design Uncertainty /
Gestion de l’incertitude de conception

“Design uncertainty” concerns the content of a software system, and is different from uncertainty about the environment in which the system is meant to operate (known as environmental uncertainty). In other words, it is uncertainty that the developer has about what the system should be like, rather than about what conditions it may face during its operation. To tackle environmental uncertainty, developers use various strategies that result in functional systems that can operate under uncertain conditions. Thus, mitigating environmental uncertainty means creating uncertainty-aware software. In contrast, design-time uncertainty cannot be “coded away” but must be taken into account in the process by which software is created. In other words, mitigating design-time uncertainty means creating uncertainty-aware software development methodologies. In grad school, I developed such a formal, tool-supported methodology. The main idea, first introduced in a 2011 position paper and described in detail in my dissertation, revolves around the use of “partial models”, i.e., models of software where design uncertainty is explicitly represented. In my research, I work to adapt software engineering tasks so that they can be applied in the presence of such explicit representations of design uncertainty.

2. Product Lines with Design Choices /
Lignes de produits avec des choix de conception

When designing changes to a software product line (SPL), developers are faced with uncertainty about deciding among multiple possible SPL designs. Since each SPL design encodes a set of related products, dealing with multiple designs means that developers must reason about sets of sets of products. The additional degree of multiplicity is not well described by existing product line abstractions. In a 2017 vision paper, I proposed a research roadmap for dealing with design uncertainty within SPLs using a novel composition of variability modelling with an abstraction for capturing and managing design uncertainty. The envisioned approach will allow developers to accurately describe the decisions involved in making changes to an SPL during the design stage and provide them with a framework for SPL design space exploration by analyzing and enforcing SPL properties.

3. Lifting of Model Transformations /
Élévation des transformations de modèles

Software product lines and model transformations are two techniques used in industry for managing the development of highly complex software. Product line approaches simplify the handling of software variants while model transformations automate software manipulations such as refactoring, optimization, code generation, etc. In previous work, I co-developed a technique for adapting model transformations based on graph-rewriting to software product lines (SPLs). Specifically, it allowed transformations that were developed for transforming individual products to be applied to the entire product line, correctly transforming all products at once. Subsequently, we were able to use the lifting of individual graph-rewrite rules in order to lift DSLTrans, a full-fledged model transformation language that combines graph-rewriting with advanced language constructs and is rich enough to implement real-world transformations. The approach was shown to be industrially viable by means of a case study in the automotive domain. Using the insights gained from that experience, I work to lift more widely transformation languages, with direct industrial applications for tasks such as code generation, refactoring, evolution, reconfiguration, etc.

4. Developer Conversations about Design /
Conversations entre développeurs sur la conception

In my doctoral work on the management of design uncertainty, I made two key assumptions: (a) that developers know what decisions they are uncertain about, and (b) that for each such decision they have elicited a set of candidate design alternatives. Moving forward, I work to relax these two assumptions. So I study the socio-technical context in which modern software engineering occurs. Specifically, I try to identify how design decisions appear in online collaborations between developers, and to model the process by which they explore and make sense of the design space defined by these decisions.

5. Consensus-based Software Development /
Développement de logiciel basé sur le consensus

Traditional, vertical organizational models of software development have been challenged by more agile and collaborative structures. Recently, this has also been demonstrated in the emergence of explicitly horizontalist organizational structures, often emerging out of social movements, that focus on consensus-based decision making. In a 2017 vision paper, we described the principles and processes of these “Consensus-Based Communities” (CBCs) and outlined the main challenges they face as they try to implement “Consensus-Based Software Development” (CBSD). We expressed these as early, high level requirements, laying out the parameters for developing a tool supported methodology. By analyzing existing tools, we found that no single tool provides complete support for consensus-based group decision making. We thus described directions for future research, identifying opportunities for the development and deployment of model-based techniques in this emergent field.