Omar Benomar


  Software Engineering


As a first stage, I study the application of visualization techniques to accomplish software maintenance tasks. My research focuses on the analysis Object-Oriented programs using program visualization for comprehension means. I'm interested in two particular aspects of the program: Evolution and Execution. These aspects share the property of change over time, the change of program's structure and the change of objects' state respectively. My goal is to trace program changes using visualization and infer high level information that aid its comprehension. Second, I use the execution events to detect phases that the program passes by during its execution. Execution phases are periods of the execution where the program does similar functionalities and operates on the same set of data. For instance, initialization, file manipulation, network communication... In the third stage, I consider software evolution as a sequence of changes which I use to identify evolution patterns.  Evolution patterns concern the periods of time where a software undergo similar types of changes. For instance, at the end of its life cycle, a software is not modified radically, rather the changes made to it are minor (quick fixes). The guideline for these three stages is the almost philosophical idea that software execution and software evolution comprehension problems are unifiable. In the sense that solutions to one domain problems can benefit from the other and vice versa.


Verso is a visualisation framework that represents an Object-Oriented program in a 3D scene. 3D boxes represent program elements (objects) and the graphical properties of these boxes are mapped to metrics computed on the objects. My research project consists of enriching the program visualization to include the representation of change in the program without clutering the visual scene. Here are some images of these visualizations: 

HeatMap1 HeatMap2 HeightMap LevelMap2 LevelMap1

PhaseFinder is a tool used to identify and detect similarties within a set of temporal change events. It utilizes heuristic search to cluster change events based on metrics computed on these changes. It supports several metaheuristic algorithms such as: Particle swarm optimization, Genetic algorithms, Simulated annealing and Multi-objective search algorithm (NSGA-2). PhaseFinder is used both in the software execution phase detection and in software evolution patten identification.