I am a postdoctoral researcher at LIP6 lab of Sorbonne University, Paris, France. Before Joining Sorbonne University, I was a postdoctoral researcher at LTA lab of Università degli Studi di Milano-Bicocca (UniMib) and at LATECE of Université du Québec à Montréal (UQAM), Montreal (Quebec) Canada.
I obtained my Ph.D. degree in Computer Science from LIRMM lab of University of Montpellier, France. I worked under the supervision of Prof. Abdelhak Seriai, University of Montpellier and Prof. Houari Sahraoui, University of Montreal, Canada. I received my Master and Bachelor degrees in Computer Science respectively from Jordan University of Science and Technology and Irbid National University, Jordan. I also worked in industry for more than 4 years as software developer at Maysalward R&D, Jordan.
My research interests focus on automated software engineering including:
Conference organization:
Journal and book reviewer:
Program committee:
Jordan University of Science and Technology, Irbid, Jordan
C++ programming language
Computer Science - Software Engineering
Université de Montpellier, France
Computer Science, Excellent, 93.4% (Ranked 1st)
Jordan University of Science and Technology, Jordan
Computer Science, Excellent, 93.9% (Ranked 1st)
Irbid National University, Jordan
Computer Technology
Alhuson University College, Albalqa Applied University, Jordan
As results of my research, I have proposed several approaches that contribute to many software engineering tasks including: reengineering, reverse engineering, code refactoring, program analysis, change impact analysis, and software product line. The approaches are designed to analyze large open-source legacy software (e.g., APIs, software variants/versions, multilanguage Web applications) based on the investment of use data mining, graph, formal concept analysis and optimization algorithms. The approaches are validated through empirical studies on open source software.
NGPaaS envisages 5G as: a build-to-order platform, with components, features and performance tailored to a particular use case; developed through a “Dev-for-Operations” model that extends the IT industry’s DevOps approach to support a multi-sided platform between operators, vendors and verticals; and with revised Operational and Business Support Systems (OSS/BSS) to reflect the new parameters and highly dynamic environment. NGPaaS can enable 5G to become central to a cooperative future with cloud developers, by removing the technological silos between the telco and IT industries. NGPaaS builds on 5G-PPP phase 1 projects and lays the foundation for large-scale phase 3 deployments and industrial usage, through a stepped validation of several Telco, IoT/vertical and combined scenarios culminating in a live test in Paris-Saclay campus that can incorporate innovative SMEs selected for showcasing NGPaaS’ s operational, service and business benefits.
In the context of NGPaaS, our team at University of Milano-Bicocca manages the contribution of the operational framework that is a key engineering part of the PaaS. It handles the lifecycle management aspects of services and the underlying infrastructure. This is an important aspect of maintaining a continued service without any outages that may cause financial penalties due to non-compliance of contractual or service elements. As such the services offered by an operational framework are largely inwards focused, ensuring that the PaaS is operating as expected.
We outline the key responsibilities of the operational framework including ensuring the reliability of the system and ensuring that the lifecycle of the service and the underlying platform is maintained. We studied the state of the art techniques and then determined how these can be carried forward and implemented in the overall operational framework that will be developed in NGPaaS.
We identify the different operational framework elements that NGPaaS will incorporate into the different PaaSes that it will develop. The operational framework has many synergies with the business logic layer and also needs to be linked with many of the core services. This is due to the fact that the operational framework is normally responsible for the life-cycle management of services that exist on a platform. Although they do not offer outward facing business value, the services offered by operational frameworks allow for continued and sustained business practices, which help assure compliance with the contractual terms set out on what the infrastructure and services should be doing. This information that is usually decided in the business logic layer as part of the availability and requirements will feed through into the operational framework as a series of configuration options.
To enable a useful and efficient operational framework requires monitoring of the infrastructure and the services. A combination of the configuration and the monitoring information allow introspective checks and for remedial actions to be carried out by the operational framework. This also requires that the operational framework can perform orchestration tasks as a delegated action or have communication through APIs to the orchestration framework in order to take the actions needed.
In addition to monitoring, we describe some of the reliability metrics that can be gathered and detail a root cause analysis framework that helps to identify the sources of failures that can then be actioned. Certain types of failures are more destructive and/or have a greater chance of occurring, so it is important to weigh up the costs of mitigating such risks and balance them according to the business demands. To this effect, we also detail how high availability systems can be enabled by providing examples of working and industrial solutions. We then describe the upgradeability of the underlying infrastructure and the services by looking at a platform from one of the partners as an example of a distributed, upgradeable platform. We take inspiration from this work to help design an upgradeable and updateable system that can have both the services and the platform on which those services run, be able to continue to operate while being upgraded.
By combining all the tools and techniques mentioned above, we will offer a framework that is upgradeable, configurable and will allow operators to decide the level of fault tolerance and reliability that is required in the overall NGPaaS platform.
Service-orientation views applications as orchestrations of independent software services that (1) implement functions that are reusable across many applications or application domains, (2) can be distributed and invoked remotely, and (3) are exposed such that their interfaces (a) abstract the specificities of their implementation technology and (b) allow any client, regardless of its implementation technology, to invoke them.
An organization that applies service-oriented development can develop new applications (1) by performing a high-level decomposition of the functions of the applications into coarse functional blocks, (2) by mapping those functional blocks to available services, (3) by implementing the functional blocks that have no corresponding services, and (4) by implementing the process that orchestrates all the services. The more services we have available, the more productive and effective is service-oriented development.
Therefore, an organization may also want to re-engineer its legacy applications to use service-oriented development (1) by mining the existing applications for reusable functions that could qualify as services, (2) by packaging these functions as services to enable their (re)use, and (3) by rewriting some existing applications to (re)use the newly-identified services. Indeed, while service identification and packaging is useful for future application development, they do little for existing applications. Therefore, refactoring existing applications into service-oriented applications is also important to modernize legacy applications and ease future maintenance.
We choose legacy JEE applications as the input of the re-engineering effort for many reasons. First, we chose not to have to deal with language or language paradigm issues, and focus on architectural issues. Thus, we needed a legacy whose programming language(s) can support the SOA style. Second, we chose JEE in particular, as opposed to plain Java applications, because JEE applications embody the range of complexities that we are likely to encounter in enterprise applications. Indeed, JEE applications are multi-tier, multi-language, rely on external configuration files to link the pieces together, and rely on frameworks and containers during runtime to connect the pieces together. As such, they illustrate the range of complexities one is likely to encounter in recent legacy enterprise applications. Finally, we chose JEE because the technology has been in use since 1999, and is quite popular for enterprise applications.
Validation and impact:
We suppose that industrial and scientific communities will get the benefits of this contribution to re-engineer their JEE applications to SOA.
Dissemination:
Results of this project was published in 4 conference papers (MSR 2017, CIEL 2017, ICSOC2018, APSEC2018) and 6 technical report (as LATECE reports) and some other papers under the process of publication.
It is widely recognized that software quality and productivity can be significantly improved by applying a systematic reuse approach. In this context, Component-Based Software Engineering (CBSE) and Software Product Line Engineering (SPLE) are considered as two important systematic reuse paradigms. CBSE aims at composing software systems based on pre-built software components and SPLE aims at building new products by managing commonalty and variability of a family of similar software. However, building components and SPL artifacts from scratch is a costly task. In this context, our dissertation proposes three contributions to reduce this cost.
Firstly, we propose an approach that aims at mining reusable components from a set of similar object-oriented software product variants. The idea is to analyze the commonality and the variability of product variants, in order to identify pieces of code that may form reusable components. Our motivation behind the analysis of several existing product variants is that components mined from these variants are more reusable for the development of new software products than those mined from single ones. The experimental evaluation shows that the reusability of the components mined using our approach is better than those mined from single software.
Secondly, we propose an approach that aims at restructuring object-oriented APIs as component-based ones. This approach exploits specificity of API entities by statically analyzing the source code of both APIs and their software clients to identify groups of API classes that are able to form components. Our assumption is based on the probability of classes to be reused together by API clients on the one hand, and on the structural dependencies between classes on the other hand. The experimental evaluation shows that structuring object-oriented APIs as component-based ones improves the reusability and the understandability of these APIs.
Finally, we propose an approach that automatically recovers the component-based architecture of a set of object-oriented software product variants. Our contribution is twofold: the identification of the architectural component variability and the identification of the configuration variability. The configuration variability is based on the identification of dependencies between the architectural elements using formal concept analysis. The experimental evaluation shows that our approach is able to identify the architectural variability.
Validation and impact:
The results of this project were used for another research (as a continuity) by Zakarea Alshara for his Ph.D. thesis. We worked on code transformation of the identified components to be confirmed with existing component models. Also, our tool was used by another Ph.D. student (Seza Adjoyan) for identifying services from object-oriented legacy software. Furthermore, we have got requests about the implementation tool from international researchers as they intend to compare their approaches with ours.
The project was validated, as my Ph.D. thesis by the jury composed of Prof. Franck Barbier (University of Pau), Prof. Jean-Michel Bruel (University of Toulouse), Prof. Flávio Oquendo (University of Brittany) and Dr Abdelkader Gouaich (University of Montpellier).
Dissemination:
As results of this project, we published 2 journal papers in JSS and 7 conference papers (1 ECSA 2016, 2 ICSR 2015, GPCE 2015, 1 SEKE 2014, 1 IRI 2013).
Holodeck is an industrial cross-platform game engine developed at Maysalward R&D. It is composed of a set of tools and API’s used for game development inspired from the "Write Once, Run Anywhere" concept. It addresses challenges related to build portable games for different environments (JavaME, Android, BlackBerry, GWT, JavaFX, Desktop and Web).
Validation and impact:
Holodeck provides a sufficient support to the activities of the development team at Maysalward. For example, the ability to derive executable files for different handsets and platforms can be done based on one source code.
Dissemination:
Holodeck is a privet product accessed only by the development team at Maysalward. However, more information can be existed at http://hudhaifas.blogspot.ca/p/holodeck-game-engine.html.
External links: DPLB, Google Scholar, Research Gate
[Context] Recommender systems for requirements are typically built on the assumption that similar requirements can be used as proxies to retrieve similar software. When a stakeholder proposes a new requirement, natural language processing (NLP)-based similarity metrics can be exploited to retrieve existing requirements, and in turn, identify previously developed code.
[Question/problem] Several NLP approaches for similarity computation between requirements are available. However, there is little empirical evidence on their effectiveness for code retrieval.
[Method] This study compares different NLP approaches, from lexical ones to semantic, deep-learning techniques, and correlates the similarity among requirements with the similarity of their associated software. The evaluation is conducted on real-world requirements from two industrial projects from a railway company. Specifically, the most similar pairs of requirements across two industrial projects are automatically identified using six language models. Then, the trace links between requirements and software are used to identify the software pairs associated with each requirements pair. The software similarity between pairs is then automatically computed with JPLag. Finally, the correlation between requirements similarity and software similarity is evaluated to see which language model shows the highest correlation and is thus more appropriate for code retrieval. In addition, we perform a focus group with members of the company to collect qualitative data.
[Results} Results show a moderately positive correlation between requirements similarity and software similarity, with the pre-trained deep learning-based BERT language model with preprocessing outperforming the other models. Practitioners confirm that requirements similarity is generally regarded as a proxy for software similarity. However, they also highlight that additional aspects come into play when deciding software reuse, e.g., domain/project knowledge, information coming from test cases, and trace links.
[Contribution] Our work is among the first ones to explore the relationship between requirements and software similarity from a quantitative and qualitative standpoint. This can be useful not only in recommender systems but also in other requirements engineering tasks in which similarity computation is relevant, such as tracing and change impact analysis.
Berger-Levrault is an international company that developed applications in GWT for more than 10 years. However, GWT is no longer actively maintained, with only one major update since 2015. To avoid being stuck with legacy technology, the company decided to migrate its applications to Angular. However, because of the size of the applications (more than 500 web pages per application), rewriting from scratch is not desirable. To ease the migration, we designed a semi-automated migration approach that helps developers migrate applications' front-end from GWT to Angular and a tool that performs the migration. In this paper, we present our approach and tool. We validated the approach on concrete application migration and compared its benefits to redeveloping the application manually. We report that the semi-automated migration offers an effort reduction over a manual migration. Finally, we present recommendations for future migration projects.
requirements can be used as proxies to retrieve similar software. When a new requirement is proposed by a stakeholder, natural language processing (NLP)-based similarity metrics can be exploited to retrieve existing requirements, and in turn identify previously developed code. [Question/problem] Several NLP approaches for similarity computation are available, and there is little empirical evidence on the adoption of an effective technique in recommender systems specifically oriented to requirements-based code reuse. [Principal ideas/results] This study compares different state-of-the-art NLP approaches and correlates the similarity among requirements with the similarity of their source code. The evaluation is conducted on real-world requirements from two industrial projects in the railway domain. Results show that requirements similarity computed with the traditional tf-idf approach has the highest correlation with the actual software similarity in the considered context. Furthermore, results indicate a moderate positive correlation with Spearman's rank correlation coefficient of more than 0.5. [Contribution] Our work is among the first ones to explore the relationship between requirements similarity and software similarity. In addition, we also identify a suitable approach for computing requirements similarity that reflects software similarity well in an industrial context. This can be useful not only in recommender systems but also in other requirements engineering tasks in which similarity computation is relevant, such as tracing and categorization.
The emergence of the microservice-oriented architecture (MSA) has led to increased maintainability, better readability, and better scalability. All these advantages make migrating a monolithic software towards an MSA an attractive prospect for organizations. The migration process is recognized to be complex and consequently risky and costly. This process is composed of two phases: (1) the microservice-based architecture recovery phase and (2) the transformation (i.e. materialization) phase. In this paper, we propose a systematic approach to transform an object-oriented monolithic application towards an MS-oriented one by applying a set of transformation pattern. To validate our approach we automated it with our tool MonoToMicro, and applied it on a set of monolithic Java applications to be migrated towards microservices-based ones.
The coronavirus (COVID-19) pandemic has caused severe adverse effects on the human life and the global economy affecting all communities and individuals due to its rapid spreading, increase in the number of affected cases and creating severe health issues and death cases worldwide. Since no particular treatment has been acknowledged so far for this disease, prompt detection of COVID-19 is essential to control and halt its chain. In this paper, we introduce an intelligent fuzzy inference system for the primary diagnosis of COVID-19. The system infers the likelihood level of COVID-19 infection based on the symptoms that appear on the patient. This proposed inference system can assist physicians in identifying the disease and help individuals to perform self-diagnosis on their own cases.
The clone-and-own approach becomes a common practice to quickly develop Software Product Variants (SPVs) that meet variability in user requirements. However, managing the reuse and maintenance of the cloned codes is a very hard task. Therefore, we aim to analyze SPVs to identify cloned codes and package them using a modern systematic reuse approach like Service-Oriented Architecture (SOA). The objective is to benefit from all the advantages of SOA when creating new SPVs. The development based on services in SOA supports the software reuse and maintenance better than the development based on individual classes in monolithic object-oriented software. Existing service identification approaches identify services based on the analysis of a single software product. These approaches are not able to analyze multiple SPVs to identify reusable services of cloned codes. Identifying services by analyzing several SPVs allows to increase the reusability of identified services. In this paper, we propose ReSIde (Reusable Service Identification): an automated approach that identifies reusable services from a set of object-oriented SPVs. This is based on analyzing the commonality and the variability between SPVs to identify the implementation of reusable functionalities corresponding to cloned codes that can be packaged as reusable services. To validate ReSIde, we have applied it on three product families of different sizes. The results show that the services identified based on the analysis of multiple product variants using ReSIde are more reusable than services identified based on the analysis of singular ones.
Software developers rely on the clone-and-own approach to rapidly develop software product variants (PVs) that meet variability in market needs. To improve the comprehension of how PVs are evolved and varied, we analyze the clone-and-own practices applied by developers of these PVs. We perform an empirical study on 75 android families to gain insights about observable phenomena related to the commonality and variability between the source code of PVs of these families.In particular, we study three research questions to identify the commonality and variability related to the organization of source code files, cloning Java methods, and configuration parameters of AndroidManifest.xml files. The results show that cloning packages, Java files and Java methods is a common practice used by developers of all android families. Maintainers should put efforts for managing the diverse implementations (bodies) of the modified cloned methods and it is essential to consider the commonality and variability of configuration parameters.
J2EE applications tend to be multi-tier and multi-language applications. They rely on the J2EE platform and containers that offer infrastructure and architectural services to ensure distributed, secure, safe, and scalable executions. These mechanisms hide many program dependencies, which helps development but hinders maintenance, evolution, and re-engineering of J2EE applications. In this paper, we study (i) the J2EE specifications to extract a declarative specification of the dependencies that are inherent in the services offered and that are not visible in the user code that uses them. Then, we introduce (ii) a codification of the dependencies into rules, and (iii) a tool that supports the specification of those dependencies and their detection in J2EE applications. We validate our approach and tool on a sample of 10 J2EE applications. We also compare our tool against JRipples, a state-of-the-art tool for change-impact analysis tasks. Results show that our tool adds, on average, 15% more call dependencies, which would have been missed otherwise. On change impact analysis tasks, our tool outperforms JRipples in all 10 applications, especially for the early iterations of change propagation exploration.
Smart Cities are future urban aggregations, where a multitude of heterogeneous systems and IoT devices interact to provide a safer, more efficient, and greener environment. The vision of smart cities is adapting accordingly to the evolution of software and IoT based services. The current trend is not to have a big comprehensive system, but a plethora of small, well integrated systems that interact one with each other. Monitoring these kinds of systems is challenging for a number of reasons.
This paper presents two new challenges for the Telco ecosystem transformation in the era of cloud-native microservice-based architectures. (1) Development-for-Operations (Dev-for-Operations) impacts not only the overall workflow for deploying a Platform as a Service (PaaS) in an open foundry environment, but also the Telco business as well as operational models to achieve an economy of scope and an economy of scale. (2) For that purpose, we construct an integrative platform business model in the form of a Multi-Sided Platform (MSP) for building Telco PaaSes. The proposed MSP based architecture enables a multi-organizational ecosystem with increased automation possibilities for Telco-grade service creation and operation. The paper describes how the Dev-for-Operations and MSP lift constraints and offers an effective way for next-generation PaaS building, while mutually reinforcing each other in the Next Generation Platform as a Service (NGPaaS) framework.
The reuse at the component level is generally more effective than the one at the object-oriented class level. This is due to the granularity level where components expose their functionalities at an abstract level compared to the fine-grained object-oriented classes. Moreover, components clearly define their dependencies through their provided and required interfaces in an explicit way that facilitates the understanding of how to reuse these components. Therefore, several component identification approaches have been proposed to identify components based on the analysis object-oriented software applications. Nevertheless, most of the existing component identification approaches did not consider co-usage dependencies between API classes to identify classes/methods that can be reused to implement a specific scenario. In this paper, we propose an approach to identify reusable software components in object-oriented APIs, based on the interactions between client applications and the targeted API. As we are dealing with actual clients using the API, dynamic analysis allows to better capture the instances of API usage. Approaches using static analysis are usually limited by the difficulty of handling dynamic features such as polymorphism and class loading. We evaluate our approach by applying it to three Java APIs with eight client applications from the DaCapo benchmark. DaCapo provides a set of pre-defined usage scenarios. The results show that our component identification approach has a very high precision.
Cloud systems are complex and large systems where services provided by different operators must coexist and eventually cooperate. In such a complex environment, controlling the health of both the whole environment and the individual services is extremely important to timely and effectively react to misbehaviours, unexpected events, and failures. Although there are solutions to monitor cloud systems at different granularity levels, how to relate the many KPIs that can be collected about the health of the system and how health information can be properly reported to operators are open questions. This paper reports the early results we achieved in the challenge of monitoring the health of cloud systems. In particular we present CloudHealth, a model-based health monitoring approach that can be used by operators to watch specific quality attributes. The CloudHealth Monitoring Model describes how to operationalize high level monitoring goals by dividing them into subgoals, deriving metrics for the subgoals, and using probes to collect the metrics. We use the CloudHealth Monitoring Model to control the probes that must be deployed on the target system, the KPIs that are dynamically collected, and the visualization of the data in dashboards.
Software Product Line Engineering (SPLE) aims at applying a pre-planned systematic reuse of large-grained software artifacts to increase the software productivity and reduce the development cost. The idea of SPLE is to analyze the business domain of a family of products to identify the common and the variable parts between the products. However, it is common for companies to develop, in an ad-hoc manner (e.g. clone and own), a set of products that share common services and differ in terms of others. Thus, many recent research contributions are proposed to re-engineer existing product variants to a software product line. These contributions are mostly focused on managing the variability at the requirement level. Very few contributions address the variability at the architectural level despite its major importance. Starting from this observation, we propose an approach to reverse engineer the architecture of a set of product variants. Our goal is to identify the variability and dependencies among architectural-element variants. Our work relies on formal concept analysis to analyze the variability. To validate the proposed approach, we evaluated on two families of open-source product variants; Mobile Media and Health Watcher. The results of precision and recall metrics of the recovered architectural variability and dependencies are 81%, 91%, 67% and 100%, respectively.
Object-oriented Application Programing Interfaces (APIs) support software reuse by providing pre-implemented functionalities. Due to the huge number of included classes, reusing and understanding large APIs is a complex task. Otherwise, software components are accepted to be more reusable and understandable entities than object-oriented ones. Thus, in this paper, we propose an approach for reengineering object-oriented APIs into component-based ones. We mine components as a group of classes based on the frequency they are used together and their ability to form a quality-centric component. To validate our approach, we experimented on 100 Java applications that used four APIs.
Software quality is considered as one of the most highly interacting aspects in software engineering. It has many dimensions that vary depending on the users' requirements and their points of view. Thus, the varying dimensions lead to complications in measuring and defining the software quality appropriately. The use of libraries increases software quality more than using generic programming as these libraries are prepared and tested in advance. Moreover, these libraries reduce the effort spent in the designing, testing and the maintaining processes. In this research, a new model is introduced to calculate the saved effort that results from using libraries instead of generic programming in testing, coding, and productivity processes. The proposed model consists of three metrics. These metrics are the library investment ratio, the library investment level, and program simplicity. An experimental analysis has been done onto ten software products to compare the outcomes of the model with reuse percent. The outcomes show that the model gives better results than reuse percent, because the model is deepening in the source code more than the reuse percent does. Also, the model has a better effect on the improvement of software quality and productivity, rather than reuse percent.
In this paper, we propose a program slicing approach for the output stream object in JEE applications. Our approach is based on extracting a dependency call graph from KDM models of JEE applications. Then, it applies breath-first search algorithm to identify the program slice as a graph reachability problem. The proposed approach is implemented as an extension of our DeJEE tool.
In the literature of software engineering, many approaches have been proposed for the recovery of software architectures. These approaches propose to group classes into highly-cohesive and loosely-coupled clusters considered as architectural components. The recovered architecture plays mainly a documentation role, as high-level design views that enhance software understandability. In addition, architecture recovery can be considered as an intermediate step for migration to component-based platforms. This migration allows to fully benefit from all advantages brought by software component concept. For that, the recovered clusters should not be considered as simple packaging and deployment units. They should be treated as real components: true structural and behavior units that are instantiable from component descriptors and connected together to materialize the architecture of the software. In this paper, we propose an approach for revealing component descriptors, component instances and component-based architecture to materialize the recovered architecture of an object-oriented software in component-based languages. We applied our solution onto two well known component-based languages, OSGi and SOFA.
In this report, we propose our approach that identifies a KDM model of JSP pages. Our approach is based on two main steps. The first one aims to reduce the problem space by translating JSP pages into Java Servlets where we can use existing tools to identify a KDM model. The second step aims to complete the resulting KDM model by identifying dependencies of JSP tags that are not codified by the translation step.
Java Enterprise Edition (JEE) applications are implemented in terms of a set of components developed based on several JEE technologies includ- ing, but not limited to, Servlet, JSP, JSF, EJB, JavaBeans. These JEE technologies rely on a varied set of communication mechanisms to commu- nicate between each others. Examples of these communication mechanisms are HTTP requests, Remote Method Invocation (RMI), Java DateBase Connectivity (JDBC), etc. These communication mechanisms represent program dependencies between JEE components. However, one communi- cation mechanism can be implemented following different implementation ways by different JEE technologies. Therefore, to be able to detect related dependencies, we identify these implementation ways used by a set of JEE technologies. In this technical report, we focus on the Web tier technologies that are Servlets, JSPs and JSFs. Also, we present how these technologies access the JavaBeans and Manage Beans components.
In this paper, we answer a set of research questions that are required to develop service identification approach based on the analysis of object- oriented software. Such research questions are: (1) what is a service, (2) how are services different from software components, (3) what are types of services, (4) what are existing service identification approaches that consider service types into account, and (5) how to identify services based on the object-oriented source code with respect to their types. Our methodology is based on performing a literature review to identify the answers of these research questions. Also, we propose a taxonomy of service types.
In the literature of software engineering, many approaches have been proposed for the recovery of software architectures. These approaches propose to group classes into highly-cohesive and loosely-coupled clusters considered as architectural components. The recovered architecture plays mainly a documentation role, as high-level design views that enhance software understandability. In addition, architecture recovery can be considered as an intermediate step for migration to component-based platforms. This migration allows to fully benefit from all advantages brought by software component concept. For that, the recovered clusters should not be considered as simple packaging and deployment units. They should be treated as real components: true structural and behavior units that are instantiable from component descriptors and connected together to materialize the architecture of the software. In this paper, we propose an approach for revealing component descriptors, component instances and component-based architecture to materialize the recovered architecture of an object-oriented software in component-based languages. We applied our solution onto two well known component-based languages, OSGi and SOFA.
It is widely recognized that software quality and productivity can be significantly improved by applying a systematic reuse approach. In this context, Component-Based Software Engineering (CBSE) and Software Product Line Engineering (SPLE) are considered as two important systematic reuse paradigms. CBSE aims at composing software systems based on pre-built software components and SPLE aims at building new products by managing commonalty and variability of a family of similar software. However, building components and SPL artifacts from scratch is a costly task. In this context, our dissertation proposes three contributions to reduce this cost. Firstly, we propose an approach that aims at mining reusable components from a set of similar object-oriented software product variants. The idea is to analyze the commonality and the variability of product variants, in order to identify pieces of code that may form reusable components. Our motivation behind the analysis of several existing product variants is that components mined from these variants are more reusable for the development of new software products than those mined from single ones. The experimental evaluation shows that the reusability of the components mined using our approach is better than those mined from single software. Secondly, we propose an approach that aims at restructuring object-oriented APIs as component-based ones. This approach exploits specificity of API entities by statically analyzing the source code of both APIs and their software clients to identify groups of API classes that are able to form components. Our assumption is based on the probability of classes to be reused together by API clients on the one hand, and on the structural dependencies between classes on the other hand. The experimental evaluation shows that structuring object-oriented APIs as component-based ones improves the reusability and the understandability of these APIs. Finally, we propose an approach that automatically recovers the component-based architecture of a set of object-oriented software product variants. Our contribution is twofold: the identification of the architectural component variability and the identification of the configuration variability. The configuration variability is based on the identification of dependencies between the architectural elements using formal concept analysis. The experimental evaluation shows that our approach is able to identify the architectural variability.
A Software Product Line (SPL) aims at applying a pre-planned systematic reuse of large-grained software artifacts to increase the software productivity and reduce the development cost. The idea of SPL is to analyze the business domain of a family of products to identify the common and the variable parts between the products. However, it is common for companies to develop, in an ad-hoc manner (e.g. clone
and own), a set of products that share common functionalities and differ in terms of others. Thus, many recent research contributions are proposed to re-engineer existing product variants to a SPL. Nevertheless, these contributions are mostly focused on managing the variability at the requirement level. Very few contributions address the variability at the architectural level despite its major importance. Starting from this observation, we propose, in this paper, an approach to reverse engineer the architecture of a set of product variants. Our goal is to identify the variability and dependencies among architectural-element variants at the architectural level. Our work relies on Formal Concept Analysis (FCA) to analyze the variability. To validate the proposed approach, we experimented on two families of open-source product variants; Mobile Media and Health Watcher. The results show that our approach is able to identify the architectural variability and the dependencies.
Object-oriented Application Programing Interfaces (APIs) support software reuse by providing pre-implemented functionalities. Due to the huge number of included classes, reusing and understanding large APIs is a complex task. Otherwise, software components are admitted to be more reusable and understandable entities than object-oriented ones. Thus, in this paper, we propose an approach for reengineering object- oriented APIs into component-based ones. We mine components as a group of classes based on the frequency they are used together and their ability to form a quality-centric component. To validate our approach, we experimented on 100 Java applications that used Android APIs.
Migrating towards Service Oriented Architecture SOA has become a major topic of interest during the recent years. Since emerging service technologies have forced non-service based software systems to become legacy, many efforts and researches have been carried out to enable these legacy systems to survive. In this context, several service identification solutions have been proposed. These approaches are either manual, thus considered expensive, or rely on ad-hoc criteria that fail to identify relevant services. In this paper, within the big picture of migrating object-oriented legacy systems towards SOA, we address automatic service identification from source code based on service quality characteristics. To achieve this, we propose a quality measurement model where characteristics of services are refined to measurable metrics.
Software quality is considered as one of the most important challenges in software engineering. It has many dimensions which differ from users’ point of view that depend on their requirements. Therefore, those dimensions lead to difficulty in measuring and defining the software quality properly. Software quality measurement is the main core of the software quality. Thus, it is necessary to study and develop the software measurements to meet the better quality. The use of libraries increases software quality more than that of using generic programming because these libraries are prepared and tested in advance. In addition, these libraries reduce the effort that is spent in designing, testing, and maintenance processes. In this research, we presented a new model to calculate the saved effort that results from using libraries instead of generic programming in the coding, testing, and productivity processes. The proposed model consists of three metrics that are Library Investment Ratio, Library Investment Level, and Program Simplicity. An empirical analyzes has been applied into ten projects to compare the results of the model with Reuse Percent. The results show that the model has better indication of the improvement of software quality and productivity rather than Reuse Percent.
I like to follow scram approach by making weekly meetings with students to discuss and analyze ideas, and solve problems they face. As for post-graduate students, I prefer to direct them working on problems as part of running research projects, if available. This enables them to have the opportunity to works with other researchers and to understand how to integrate their work with the others’ work.
In general, I would enjoy to teach software engineering, programming languages, algorithm and data mining courses. I would like also to supervise both post and undergraduate students.
Pôle Universitaire Léonard de Vinci, Paris, France
Invited teacher at the elective courses' week at engineering school to teach Data Mining in Software Engineering course for 30 students.
University Milano-Bicocca, Italy
Supervising 3 Master theses to develop Monitoring as a Service for cloud services.
University of Montpellier, France
Taught the development of Android for Master students (practice) with Prof. Djamel Seriai.
Jordan University of Science and Technology, Jordan
Taught the courses of C++ (theory and practice) and introduction to algorithm to Bachelor students.
Tour 25-26, Office 203
Laboratory of Computer Science of Paris 6 (LIP6)
Sorbonne University
4 Place Jussieu, 75005 Paris, FRANCE