WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Automatisation des lignes de produits logiciels en entreprise


par Thomas Petit
 - M2 Informatique 2019
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

RAPPORT D'ALTERNANCE

2018-2019

Automatisation des lignes de produits logiciels en entreprise

10 MAI 2019

THOMAS PETIT

thomaspetit23131@gmail.com

10 Mai 2019

Table des matières

INTRODUCTION 6

L'informatique 6

Les entreprises face aux défis de la réutilisation 9

Les lignes de produits logiciels 9

L'alternance 14

Le plan du mémoire d'alternance 16

LE BUT 17

La réduction des couts de développement 18

Réduction du délai de mise sur le marché des logiciels 18

Réduction des efforts de maintenabilité des logiciels. 19

Amélioration de la qualité des logiciels 19

Etat de l'art et prérequis 20

La ligne de produit logiciel 20

Ingénierie du domaine et ingénierie d'application 23

Analyse du domaine 23

Conception du domaine. 23

Réalisation du domaine 23

Ingénierie d'application 24

Configuration des produits. 24

Génération des produits 24

Les approches de conceptions traditionnelles 25

Le développement from scratch 25

Le clone and own 25

Le répertoire commun 25

Les approches fondamentales pour les LPL 27

L'approche Proactive 27

L'approche Extractive 30

L'approche Réactive 31

Quelle approche adaptée aux PME ? 34

L'analyse Formelle 36

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

La variabilité d'une Ligne de produit logiciel 40

La gestion de la variabilité 40

Caractéristique logicielle 40

Modèle des caractéristiques 41

L'implémentation LPL par annotation et par composition 43

Annotation 43

L'implémentation en compositionnel 45

Le degré de granularité 47

Localisation des caractéristiques 48

Résumé LPL 51

SPL generator 53

Les objectifs de l'approche 53

Mon alternance 55

Les étapes de L'intégration 56

Identification des assets et l'entrée des produits 57

Problématiques lors de mon alternance 57

L'entrée des produits 58

L'entrée des caractéristiques du produit 58

L'identification des assets du code source du produit. 59

L'unicité des Identifiants 60

Acquisition des artefacts 61

Les modèles de variabilité et leur extraction 64

Qu'est-ce qu'un modèle de variabilité ? 65

Comment peut t on extraire automatiquement la variabilité SPL et ses contraintes ? 67

FCA pour la variabilité 67

Le calcul de la variabilité dans notre Outils SLP generator 68

Création du contexte formel (PCM) à partir des assets 70

Extraction de la variabilité à partir du Treillis 71

La localisation des caractéristiques. 72

L'analyse de concepts formels (ACF) pour réaliser la localisation. 72

Conclusion et résultats préliminaires 74

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Pensées et remerciements envers mes parents pour m'avoir soutenu tout au long de mes études.

Merci à Laurent pour ses conseils avisés tout au long de l'année 2018-2019.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Mon alternance avait pour but dans un premier temps de participer à la maintenance d'une Ligne de Produits Logiciels (LPL) en tant qu'ingénieur informaticien, puis dans un second temps, d'automatiser les processus de création de LPL afin d'en faciliter d'adoption pour des entreprises clientes

du groupe Accenture.

Les Lignes de Produits Logiciels ont pour but d'industrialiser la fabrication
de logiciels partageant des caractéristiques communes afin d'en diminuer
le temps et les coûts liés au développement et à leur maintenance des
produits logiciels. Les LPL permettent une réutilisation de caractéristiques
et une personnalisation des produits logiciels. Malheureusement,
l'adoption des LPL a un coût d'investissement conséquent pour les
entreprises, et cela a fait souvent défaut au déploiement des LPL dans les
entreprises de petite taille.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

INTRODUCTION

L'informatique

L'essor de l'informatique au début du XXème siècle, puis d'internet à la fin du XXème siècle ont révolutionné notre quotidien et notre façon de vivre. En France, La transformation numérique a fait basculer les métiers de l'industrie vers le tertiaire et les services faisant accroitre de manière exponentielle le développement d'outils informatique. L'informatique, puis internet ont largement contribué à cette révolution. Cette digitalisation a permis entre autres d'automatiser des taches par des algorithmes en passant par des applications et logiciels.

Aujourd'hui, l'informatique occupe une place immense dans notre quotidien. Les nouvelles technologies évoluent constamment chaque jour, cherchant toujours à automatiser ces processus de la vie courante. La demande croissante de nouveaux logiciels oblige les fabricants à accélérer le processus développement ainsi que des logiciels à plus grande échelle.

Les programmes sont constitués de code et de données. Le code est la série d'instructions qui indiquent à l'ordinateur la tâche à accomplir ensuite et la manière dont il doit hiérarchiser les tâches. Les programmeurs utilisent ces instructions pour ordonner à l'ordinateur d'exécuter des tâches spécifiques, comme l'enregistrement de fichiers ou l'organisation d'images sur votre bureau ; ce sont les programmes, qui doivent être écrits dans un ou plusieurs langages de programmation. Ces logiciels ont pour but d'automatiser des taches souvent avec une interface graphique permettant à l'utilisateur d'interagir avec le logiciel.

Un logiciel, parfois appelé programme, est un ensemble d'instructions qui indiquent à l'ordinateur ce qu'il doit faire. Ce type de programme peut être écrit dans un ou plusieurs

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

langages.

RAPPORT D'ALTERNANCE 2018-2019

THOMAS PETIT

Gutenberg invents the reconfigurable printing press

Vaucanson creates

his automated Digesting Duck

Jacquard invents an automated mechanism for the weaving loom using punched cards

ElectricDog, the

first robot

Grace Hopper invents the first

compiler

Unimate, the first industrial robot

Invention of the CD-ROM

104

ii

The CERN invents the World Wide Web

Sojourner robot ex® plores planet Mars

1,0

1 billion websites

0

0

Wikipedia is launched

Julius Caesar encrypts his military messages

9

0

Al Khwarizmi explains the first algorithms

Babbage creates the difference engine

Ada Lovelace writes

the first computer

program


·

Zuse3 is the first computer


·
·
·
·

IBM invente la disquette


·

ARPANET, the ancestor of Internet, is launched

DeepBlue, a computer, defeats chess

champion Kasparov

Honda-P2, one of the first humanoid

robots

9
·
·
·. . .
·
·
·

9.

Aibo, one of the first entertainment robots

a

9

Turing proposes a theoretical model of con-_.

WIKIPEDIA

TAeFrce.Er dop can.

10 Mai 2019

Dans le monde de l'entreprise la production de ces logiciels n'est pas adaptée pour les productions de masse, en effet chaque entreprise développe son propre logiciel sans possibilité de réutiliser du code déjà existant.

Afin de maintenir un équilibre entre vitesse de production et qualité les entreprises ont du s'adapter et évoluer. L'émergence du génie logiciel est due à la nécessité de trouver des méthodes de conception, des outils et des paradigmes qui répondent aux besoins des fabricants, ainsi qu'aux besoins des informaticiens généralistes dans le but de fournir une aide aux développements des logiciels.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Les entreprises face aux défis de la réutilisation

De plus les entreprises se confrontent à des problèmes de maintenances et d'évolutions des logiciels qui entrainent des pertes de temps et donc d'argent. En effet la maintenance et le support des applications, sont très chronophages pour les développeurs, qui sont parfois contraints de se relayer pour pouvoir assurer ce service en continue.

Les développeurs dans les entreprises ne maitrisent pas forcement l'historique de l'ensemble des modifications et des améliorations acquises à travers le temps. Ils doivent parfois ainsi se plonger dans le logiciel parfois mal implémenté avant de pouvoir y apporter une modification. Ceci entraine une perte de temps considérable.

La construction des logiciels est relativement statique au départ, une fois celui-ci développé et livré au client, toute maintenance requise et envisagée pour ces systèmes nécessite des modifications potentiellement importantes du code source existant. Ceci n'est plus acceptable pour les systèmes logiciels contemporains, car la complexité de la production et de la maintenance génère souvent des coûts qu'il faut prendre en compte.

La réutilisation du code source est donc un point important qui peut aider les entreprises à accélérer le processus de développement maximiser la réutilisation dans un ensemble de produits logiciels créera un ensemble de Le logiciel est conçu autour de fonctionnalités communes. Pour les fabricants, cela offre des possibilités de conception Ce n'est plus un produit séparé, mais une série de produits. Ce changement L'échelle (passage d'un produit unique à une série de produits) leur permettra de produire plus L'important est que la quantité de logiciels augmente, mais cela améliore également la qualité et réduit les coûts. Les lignes de produits logiciels sont un outil permettant de répondre à ces problématiques.

Les lignes de produits logiciels

La « recherche » sur l'ingénierie des lignes de produits logiciels s'est avérée utile pour l'industrie notamment les petites et moyennes entreprise (PME). Mais elle reste largement peu utilisée dans les entreprises. L'objectif envisagé des LPL n'est plus d'obtenir un système logiciel unique, mais de partir de bases et caractéristiques communes pour développer et affiner les fonctionnalités du logiciel. En somme faire série de produits logiciels avec des caractéristiques communes. Mais garde cet ensemble. Les logiciels peuvent développer de manière laborieuse, et peuvent également engendrer des couts considérables pour les entreprises.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

L'ingénierie les lignes de produits logiciels a rencontré de nombreux succès ces dernières années. Cependant, il est rapide de constater qu'encore peu d'entreprise du logiciels informatique (tous secteurs confondu) ont adopté le développement de LPL.

Ce phénomène peut être expliqué par au moins plusieurs facteurs : la difficulté d'appliquer les trois approches d'adoptions existantes au contexte des PME couplée à une réticence à l'adoption de pratiques à risques dans l'entreprise.

La réutilisation logiciel peut jouer un rôle crucial dans cette diminution du temps de développement. Intuitivement, nous observons chez les développeurs une tendance à la réutilisation, qui prend la forme de copié collé successif, depuis des logiciels déjà conçu vers ceux en cours de conception. A terme, cette pratique nommé Clone&Own en anglais, fait émerger des familles de logiciels, ce sont des logiciels qui partagent des caractéristiques communes. Cette pratique est toutefois chaotique, et peut parfois être plus couteuse que de commencer le projet de zéro

De plus, elle fait émerger des familles de logiciels dont la maintenance doit être assurée de façon individuelle. C'est pourquoi il est préférable pour les entreprises de considérer l'utilisation de L'ingénierie des Lignes de Produits Logiciels (LPL) comme paradigme de développement pour leurs logiciels. L'objectif est de rendre la réutilisation systémique : les logiciels sont conçus par la réutilisation et pour la réutilisation.

La conception d'une famille de logiciels partageant des caractéristiques communes. Pour cela, les lignes de produits logiciels reposent sur la réutilisation et la configuration en masse. De façon générale, l'adoption des LPL dans le processus de développement permet : une diminution des temps de développement ; une augmentation de la qualité des logiciels ; et une amélioration de la maintenabilité des logiciels

Concevoir une série de produits à partir de zéro peut être compliquée, il y a de nombreux paramètres à prendre en compte comme le domaine d'activité, le domaine d'expertise du développeur, la technologie utilisée.

La demande de nouveaux logiciels a suivi l'augmentation de la popularité des appareils informatiques tels que les ordinateurs personnels, les smartphones, les voitures, appareils Et avec cette augmentation de la demande, les logiciels sont devenus plus complexes à concevoir, nécessitant de plus en plus de temps et d'efforts pour les développeurs de plus en plus de temps et d'efforts de la part des développeurs.

Le domaine du génie logiciel s'intéresse à la recherche de méthodologies et des techniques pour faciliter le développement d'un système logiciel. Par exemple, ces méthodes concernent l'amélioration de la qualité du logiciel, son accessibilité à la maintenance et à l'évolution dans le temps, ainsi qu'à la description de nouvelles approches pour faciliter son développement. Parmi ces méthodes, l'ingénierie des lignes de produits logiciels se concentre sur la conception de familles de logiciels de manière systématique. Une famille de logiciels est un ensemble de logiciels qui partage plusieurs fonctionnalités ou aspects

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

logiciels en commun. Le développement d'un logiciel standard permet de proposer une même solution globale pour l'ensemble des clients. Dans l'industrie, chaque utilisateur client accède à un logiciel contenant l'ensemble des fonctionnalités logicielles développées. Pour concevoir ce logiciel, l'entreprise s'adonne d'abord à une étude de marché pour déterminer les fonctionnalités logicielles les plus demandées. Puis, l'entreprise conçoit un logiciel qui implémente toutes ces fonctionnalités, par exemple la réservation, la création de comptes utilisateur ou encore un système de notation. Elle livre ensuite un seul et même logiciel à chacun des clients contenant l'ensemble des fonctionnalités. Le logiciel standard permet de n'avoir qu'un seul logiciel à maintenir par les développeurs. Avec le développement de logiciels individuels, une version du logiciel est conçue spécifiquement autour des besoins de chaque utilisateur.

Dans l'entreprise cliente, celle-ci développe trois versions de son logiciel pour convenir aux besoins spécifiques de ses clients. Cette stratégie de développement permet de réduire les coûts des logiciels à proposer aux utilisateurs, et de faire un logiciel qui correspond mieux à leurs besoins. On obtient alors une famille de produits logiciels au sens défini par David Parnas (1976) : « Une famille de produits logiciels est un ensemble de logiciels partageant une certaine proximité dans leurs objectifs et qui disposent de suffisamment de similarité pour justifier d'une mutualisation de leurs concepts et leur maintenance. »

Le problème est que ces logiciels sont à maintenir individuellement pour chaque utilisateur, ce qui augmente les coûts de maintenance.

Prenons l'exemple d'une automobile. Une famille de logiciels peut être construite à partir des logiciels qui tournent sur l'ordinateur principal d'un constructeur automobile, puisque ces voitures sont toutes équipées d'un système d'exploitation. Mais elles peuvent se différencier par des caractéristiques spéciales (par exemple, climatisation intelligente, écran multimédia). La conception de cette famille peut être considérée Grace a l'ingénierie des lignes de produits logiciels. Les produits logiciels sont les logiciels qui font partie des familles, tandis que la conception de ligne la conception de la plateforme pour construire ces produits' idée principale des LPL est de construire des logiciels en réutilisant la plupart de leur mise en oeuvre (c'est-à-dire leur code source, la structure de données, les données, code source, la structure des données, la base de données et les ressources) pour concevoir les prochains logiciels nécessaires. La réutilisation est facilitée par le fait que la LPL encourage les développeurs à concevoir leurs logiciels autour d'éléments réutilisables. Par conséquent, la motivation de LPL est la suivante développement de logiciels pour la réutilisation et par la réutilisation.

Ces éléments seront réutilisés à travers les divers logiciels, de façon à minimiser le temps et les coûts de développement de chacun des logiciels.

Nous désignons ces éléments hétérogènes par le terme plus abstrait d'asset (ou artefacts).

Des études ont estimé que les entreprises peuvent bénéficier d'un retour sur investissement positif avec les LPL dès le développement du troisième produits (par rapport au

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

développement d'un seul logiciel). Et pour le travail des développeurs, il y a une

amélioration de la qualité du logiciel ; une réduction du délai de mise sur le marché du produit ; gain de temps et d'efforts pour tout nouveau logiciel en réutilisant les anciennes parties au lieu de redévelopper. L'idée étant de réutiliser les anciennes parties au lieu de les redévelopper.

Cependant, l'adoption des LPL requiert des compétences spéciales pour maîtriser l'ingénierie d'un SPL, et de nombreux développeurs ne sont toujours pas formés pour celles-ci. Parmi elles, il y a l'ingénierie du domaine, l'identification des fonctionnalités et la gestion de la variabilité. Par conséquent, l'adoption des LPL comporte ses propres obstacles et présente des risques qui peuvent être trop élevés pour une entreprise.

En somme, L'ingénierie des lignes de produits logiciels promeut une réutilisation logicielle à grande échelle lors du développement de nouveaux produits. Au cours du développement, les caractéristiques de la ligne sont réutilisées pour la conception de nouveaux logiciels, ce qui réduit considérablement ses coûts de conception. Le gain est également visible sur le temps de développement qui tend à diminuer grâce à la réutilisation., cette réduction des coûts est seulement visible sur le temps long Cet investissement permet la conception des artefacts réutilisables en amont du développement des produits.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Lors de mon alternance, nous nous sommes concentrés sur la conception d'une nouvelle approche pour supprimer la barrière d'adoption à laquelle sont confrontés les développeurs. Notre fils rouge dans ce projet d'alternance était « Comment construire une approche automatisée d'adoption de Ligne de produit logiciel » Nous avons établi une liste d'objectifs intermédiaires à atteindre afin de définir notre approche.

Tout d'abord, nous décrivons notre approche automatisée et établissons les exigences pour ce que les développeurs devront avoir, afin d'utiliser la LPL et d'adopter l'approche. Pour être, nous notons que les développeurs auront besoin que la LPL soit compatible avec leur environnement de travail puisque le changer représente le principal risque pour l'entreprise.

Deuxièmement nous cherchons une approche d'automatisation qui construira la même LPL que ce que les développeurs auront fait manuellement. Enfin, nous voulons que la LPL résultante soit compréhensible pour les développeurs, afin que la maintenabilité et l'évolution soient possibles.

Lors de mon travail tout au long de l'alternance, je me suis concentré sur la conception d'une structure de données et d'un algorithme adéquat qui nous permettront d'intégrer itérativement les données. Cela nous permettra d'intégrer itérativement de nouveaux produits à l'intérieur d'une SPL, sans avoir besoin de l'intervention des développeurs. Troisièmement, nous concevons et mettons en oeuvre une technique spécifique pour localiser la fonctionnalité à l'intérieur de la SPL.

Et enfin, nous développons des techniques pour simplifier la compréhension de nos sorties SPL pour les développeurs. En suivant notre objectif, nous avons développé une nouvelle approche appelée « SPL Generator », et nous l'évaluons en utilisant différents cas préexistants. Nous L'évaluons en utilisant différentes études de cas préexistantes pour simuler la construction d'une SPL.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

L'alternance

Lors de cette année 2018/2019, j'ai eu l'honneur de faire mon alternance dans une petite entreprise cliente du groupe Accenture. Cette société s'occupe de la création et la maintenance de multiples logiciels pour des PME et autres sociétés. Ces logiciels peuvent être variés, l'entreprise possédant de nombreux clients très divers, d'où le possible nécessité d'avoir recours à des LPL. Les domaines d'activité sont surtout autour du numérique mais aussi de l'aviation ainsi que l'automobile.

Dès mon intégration en Septembre 2018, j'ai eu l'occasion de travailler sur les lignes de produits logiciel au sein de l'entreprise et de participer à la maintenance des multiples outils pour le développement des différentes gammes de logiciel à la demande des clients. Outre la maintenance et le support quotidien des logiciels en production, j'ai pu participer à l'élaboration d'un outil d'automatisation de la génération des lignes de produits logiciels. Pour cela il a fallu effectuer une étude de l'art des différentes recherche industrielles sur lignes de produits pour pouvoir par la suite proposer une nouvelle approche innovante avec les équipes R&D et IT.

La ligne directrice de mon alternance était, dans un premier temps, d'améliorer l'implémentation la ligne de produit et dans un second, de trouver un moyen d'automatiser l'intégration de nouvelles fonctionnalités dans cette ligne de produit logiciel. J'ai pu lors de mon alternance travailler avec différentes équipes :

L'équipe IT, qui s'occupe du support des logiciels et du bon fonctionnement de la ligne de produit se compose d'une dizaine de personne, elle s'occupe de la maintenance et des évolutions des logiciels avec l'équipe commerciale et les maitrises d'ouvrages.

L'équipe commerciale et les Maitres d'Ouvrages MOA : ces équipes sont au plus proches de l'environnement métier et dictent les projets ainsi que les nouvelles améliorations à intégrer dans les logiciels dans le but de satisfaire au mieux les attentes des clients. Ils prennent en compte les modification et changements du marché et ont une très bonne connaissance dans le domaine.

L'équipe Recherche et Développement, principalement composés d'ingénieurs et de chercheurs en ingénierie, cette équipe effectue une veille des dernières études de recherche dans différent domaine (génie logiciel, IA...) Leur but est d'adapter les travaux de recherche existant à notre entreprise, mais aussi de faire de la recherche en trouvant de nouvelles solutions innovantes. Le but de mon alternance s'inscrivait dans l'optique de la création de l'outil « SPL Generator », un générateur automatique de ligne de produit logiciel qui prend en compte une automatisation complète de la réingénie de la ligne de produit.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Lors de mon alternance, j'ai donc pu être en lien permanant tout au long de l'année entre ces différentes équipes, cela m'a permis d'avoir une vision complète du fonctionnement des équipes présentes au sein d'une PME.

Ce projet, considéré comme de la recherche industrielle, s'inscrit dans une approche innovante d'automatisation du processus de réingénierie des lignes de produit logiciel liant plusieurs domaine autour du génie logiciel.

L'outil développé par mes soins « SPL_Generator » est le travail de 10 mois de recherche et d'implémentation,( 4 mois étude de l'art et découverte des LPL, 2 mois pour la proposition de la solution,3 mois pour la conception 1 mois de test). Ce fut la tâche majeure de mon alternance en plus du support quotidien des différents logiciel, et l'élaboration d'autres outils pour les équipes IT et R&D.

Les autres outils développés en marge de mon alternance sont des applications qui permettent de déplacer des dossiers ou des fichiers a des heures précises et de faire tourner des processus permettant le bon fonctionnement des autres applications en production dans l'entreprise. « L'orchestre »

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Le plan du mémoire d'alternance

Le déroulement de ce mémoire d'alternance s'effectuera en plusieurs temps, en première partie nous expliquerons le fonctionnement des lignes de produits logiciel, leur adoption en entreprise, ainsi qu'une étude de l'art des lignes de produits logiciel, leur conception, les différentes approches, ainsi que les méthodes d'ingénierie existantes qui seront utile à notre approche innovante de réingénierie SPL_Generator.

La deuxième partie sera consacrée à l'outil SPL Generator, les diverses étapes de la conception, les méthodes utilisées pour l'automatisation du processus de réingénie, l'intégration des produits, l'identification des assets, la gestion de la variabilité de la LPL et la localisation des caractéristiques.

Enfin nous dresserons une conclusion avec les premiers résultats de notre application sur des cas concrets ainsi que sur les gammes de logiciels de l'entreprise.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

LE BUT

Comme entrevu précédemment, l'émergence de nouveaux besoins numériques, comme ceux qui accompagnent l'usage des téléphones mobiles ou des ordinateurs personnels, nos sociétés produisent davantage de logiciels et à grande échelle.

La recherche menée au sein du génie logiciel définit des méthodes et des techniques destinées à accompagner les ingénieurs dans la conception de ces logiciels. En particulier, le génie logiciel s'intéresse à l'amélioration des pratiques de conception, de maintenance, et d'évolution des logiciels.

Parmi les nombreux défis du génie logiciel se pose la question de la diminution des coûts de production et du temps de conception des logiciels.

En guise de solution, le génie logiciel recherche de nouvelles méthodes de conception basées sur la réutilisation des logiciels.

La réutilisation logicielle systématique vise à concevoir des éléments logiciels réutilisables et à développer de nouveaux logiciels grâce à ces mêmes éléments.

On parle généralement de développement pour la réutilisation et de développement par la réutilisation.

Grâce à la réutilisation, les ingénieurs peuvent réduire le temps de développement en réutilisant des artefacts déjà conçus.

Ils améliorent également la qualité des logiciels puisqu'ils réemploient des artefacts déjà éprouvés.

En somme, la réutilisation permet de diminuer les coûts de production en diminuant le temps de développement des logiciels.

L'objectif est de Définir une nouvelle approche réactive adaptée au contexte de développement de logiciels des PME. En étudiant les approches d'adoption existante, il n'apparait clairement qu'aucune n'est vraiment adaptée au contexte particulier des PME. Cependant, l'approche réactive semble être la plus proche de leur contexte, mais la difficulté de sa mise en oeuvre reste un obstacle majeur

Nous verrons dans la prochaine partie en quoi L'ingénierie des lignes de produits logiciels est un paradigme de développement de familles de logiciels similaires basé sur le principe de la réutilisation systématique des artefacts. La ligne de produits logiciels permet de capturer et de factoriser dans une plateforme configurable l'ensemble des artefacts communs à une même famille de logiciels. Pour le reste des artefacts, spécifiques aux différents logiciels, la LPL capture dans sa plateforme la variabilité sous la forme d'un ensemble d'artefacts optionnels. La production de nouveaux logiciels se matérialise par une sélection méthodique des artefacts à réutiliser, où sont sélectionnés d'office les artefacts communs ; tandis que les

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

artefacts optionnels sont sélectionnés de façon à personnaliser le nouveau produit selon les besoins exprimés par ses concepteurs. Cette réutilisation systématique, qui est organisée au travers d'une sélection d'artefacts préexistants, permet de réduire les coûts de production des logiciels, comparativement à un développement individuel.

C'est pour cela que nous proposons l'application de processus automatique pour réaliser l'ingénierie d'application de la Ligne de produit logiciel (LPL) afin d'en réduire ses coûts. Pour cela, notre approche réalisera automatiquement la construction de la plateforme variable, de modèles de variabilités, et des processus de gestion et d'évolution de la variabilité. De plus, notre outil devra effectuer automatiquement la génération des produits depuis la plateforme, dès lors que les développeurs fournissent une configuration hypothèse est que retirer l'effort lié à cette ingénierie permettra une meilleure adoption des LPL. Dans le but d'inciter peut-être plus d'entreprises à construire une LPL, puisque les risques liés aux coûts d'ingénierie se retrouvent réduit par une automatisation des tâches.

La réduction des couts de développement

Les avantages et bénéfices de l'adoption de l'ingénierie des LPL se mesurent par comparaison avec un développement "traditionnel" L'ingénierie des lignes de produits logiciels promeut une réutilisation logicielle à grande échelle lors du développement de nouveaux produits.

Au cours du développement, les artefacts de la ligne sont réutilisés pour la conception de nouveaux logiciels, ce qui réduit ses coûts de conception. Le gain est également visible sur le temps de développement qui tend à diminuer grâce à la réutilisation (c'est d'ailleurs la principale cause de réduction des coûts).

Cependant, cette réduction des coûts est seulement visible sur le temps long : des coûts survient à partir du troisième produit développé grâce à la ligne de produits comparativement aux coûts de développement produit par produit. De plus, la réduction des coûts nécessite un investissement initial conséquent. Cet investissement permet la conception des artefacts réutilisables en amont du développement des produits.

Réduction du délai de mise sur le marché des logiciels

Comme nous l'avons mentionné pour la réduction des coûts, l'application de cette ingénierie permet de réduire les temps de développement de nouveaux produits. Cette réduction de temps améliore les délais de mise sur le marché ou de livraison des produits logiciels. Il en découle des retours sur investissement plus rapides pour les entreprises, à condition là encore de concevoir les artefacts en amont

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Réduction des efforts de maintenabilité des logiciels.

À travers la plateforme configurable d'une LPL, la maintenance d'un artefact se propage virtuellement à tous les produits où cet artefact est implémenté. La plateforme supprime la nécessité de maintenir individuellement chaque produit et permet de factoriser les opérations de maintenance. À terme, cela permet de réduire l'effort de maintenance. De plus, la maintenance peut se faire sans connaître et maîtriser l'intégralité des implémentations des produits, ce qui réduit l'effort de compréhension

Amélioration de la qualité des logiciels

La réutilisation logicielle impacte également la qualité des produits développés. En effet, les artefacts d'une LPL sont réutilisés et testés à travers les différents produits générés. À force de réutilisation, ces artefacts sont maintenus par les développeurs et ont donc plus de chances d'être corrigés ou améliorés que le code non réutilisé. Cette réutilisation permet ainsi de mieux détecter les erreurs de conception et de les corriger, ce qui augmente la qualité des produits d'une LPL

L'emploi de la plateforme configurable permet également d'améliorer la qualité des logiciels de la ligne, car elle regroupe les opérations de maintenance.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Etat de l'art et prérequis

La ligne de produit logiciel

L'ingénierie des lignes de produits logiciels permet la conception d'un ensemble de produits logiciels partageant des caractéristiques communes, elles diffèrent cependant par l'implémentation de caractéristiques spécifiques. Prenons l'exemple d'une gamme d'imprimantes d'un même constructeur : Les logiciels embarqués dans ces imprimantes vont partager des fonctionnalités, comme celle de l'impression en couleur ou en noir et blanc. Mais certaines vont proposer des fonctionnalités supplémentaires et spécifiques, comme l'impression recto-verso, sur papier photo, ou encore un mode scanners de documents.

L'ingénierie des Lignes de Produits Logiciels (LPL) vise donc à regrouper des méthodes pour concevoir une famille de produits logiciels comme une ligne de produits logiciels. Ses objectifs se focalisent sur la réduction des coûts de développement, le raccourcissement des temps de livraison, l'amélioration de la qualité des logiciels et la réduction des efforts de maintenance.

Dans cette section, nous présentons les différentes notions et concepts qui forment l'ingénierie des LPL.

Les caractéristiques logicielles peuvent être définies de plusieurs façon. Souvent, nous les désignons comme des fonctionnalités logicielles de haut niveau, perçu par l'utilisateur. Il s'agit de caractéristique utilisation. Cependant, certaines caractéristiques peuvent être invisible pour l'utilisateur. Nous parlons dans ce cas de caractéristiques métier comme par exemple l'usage d'un protocole de communication, UDP ou TCP entre l'imprimante et l'ordinateur client. Enfin, une caractéristique dépend principalement du domaine d'activité pour lequel le logiciel se destine. C'est pourquoi il est possible de décrire un logiciel de la ligne par les caractéristiques qu'il implémente. Cela nous permet de définir pour chaque logiciel une configuration, un ensemble caractéristique que présente dans un produit logiciel particulier. Puisque les logiciels sont tous différents, et qu'ils sont construit depuis un même ensemble caractéristique, nous retrouvons dans une LPL des caractéristiques communes à tous les logiciels.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

L'implémentation des différentes caractéristiques est réalisée par un ensemble de divers éléments logiciels. Il s'agit essentiellement de code source, mais également de ressources comme du texte, des images, des scripts, des modules. Comme les caractéristiques qu'ils implémentent, un artefact peut être commun ou spécifique. C'est donc par l'intermédiaire des artefacts que la variabilité va être exprimé dans l'implémentation d'une LPL.

Plutôt que de concevoir séparément des logiciels différents, les LPLs proposent de les concevoir par une réutilisation systémique, en préservant une forte personnalisation des différents logiciels.

L'objectif de l'ingénierie d'une LPL est de concevoir une implémentation logicielle partagée par l'ensemble des logiciels de la ligne. Cette implémentation de la LPL regroupe les points communs entre tous les logiciels, ce qui représente un ensemble d'artefacts invariables.

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Elle comprend également les parties spécifiques aux produits, représentant l'ensemble des artefacts variables. Cette implémentation est en capacité de varier, ce qui permet la génération des différents produits. Pour cela, on y ajoute des mécanismes de variabilité, comme par exemple des annotations de pré-processing; ou des mécanismes basés sur le paradigme de composition de caractéristiques.

L'ingénierie des LPL intègre la réutilisation de logiciel en deux temps. Le développement pour la réutilisation des artefacts se réalise au travers d'un processus dédié appelé l'ingénierie du domaine

Dans ce processus, les artefacts relatifs à un domaine métier choisi sont identifiés, spécifiés et organisés pour former les parties communes et la variabilité des différents produits de la LPL.

Quant au développement avec réutilisation, un second processus appelé l'ingénierie d'application est dédié à la production des produits. L'ingénierie des LPL encourage l'application d'opérations de dérivation depuis la plateforme, pour sélectionner et intégrer les artefacts du domaine dans l'ingénierie du produit.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Ingénierie du domaine et ingénierie d'application

L'ingénierie du domaine est un processus d'analyse et de conception situé en amont du développement des produits d'une LPL. En fonction d'un domaine métier particulier (réservation, santé, automobile, aviation...), ce processus a pour objectif d'identifier tous les artefacts réutilisables et partagés par les produits de la future LPL. On parle généralement de l'ingénierie du domaine comme celle de l'ingénierie pour la réutilisation.

Analyse du domaine

L'ingénierie du domaine doit avant tout définir et focaliser le champ couvert par la LPL, en le réduisant à un domaine métier particulier. Ce choix est fait pour des raisons économiques et permet de restreindre le développement à des artefacts dont les développeurs pourront maximiser la réutilisation dans les produits ou à ceux qui répondent le mieux aux besoins identifiés par les clients. En d'autres termes, cela permet d'éviter le développement d'artefacts inutiles aux produits de la ligne (gain de temps et d'effort d'ingénierie). L'objectif de l'analyse du domaine est donc de définir et documenter les fonctionnalités et les comportements logiciels communs ou spécifiques aux produits de la LPL. Cette étape permet notamment de concevoir les modèles de variabilité de la LPL, souvent basée sur les fonctionnalités communes et spécifiques, identifiées pour les produits.

Conception du domaine.

Cette seconde étape s'appuie sur les connaissances acquises lors de l'analyse du domaine pour concevoir l'architecture générale de la plateforme configurable. À partir des modèles de variabilité, les concepteurs décident des points de variation dans l'architecture de la plateforme. Les modèles de variabilité peuvent être corrigés ou raffinés pour mieux correspondre à l'architecture générale de la plateforme et donc de la LPL.

Réalisation du domaine

Enfin, les concepteurs concrétisent l'architecture définie précédemment dans une plateforme logicielle, composée de l'ensemble des artefacts réutilisables du domaine.

La plateforme doit structurer les artefacts et les associer aux points de variation, afin de permettre la personnalisation de masse des produits. Cette personnalisation est faite à travers une sélection des fonctionnalités ou des comportements spécifiques que l'on souhaite avoir dans un produit ;Quant aux modèles de variabilité, ils permettent de rendre compte des combinaisons d'artefacts envisagés. Ces combinaisons définiront les différents produits d'une ligne.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Ingénierie d'application

L'ingénierie d'application vise à construire les produits de la ligne depuis le résultat de l'ingénierie du domaine. Ce second processus est donc un développement par la réutilisation. L'ingénierie d'application présente souvent deux phases distinctes : la configuration des produits et la génération des produits parfois appelée dérivation de produits dans la littérature.

Configuration des produits.

Les configurations des produits doivent respecter les contraintes métiers entre les artefacts, Par exemple. si deux fonctionnalités ont été définies comme mutuellement exclusives, alors elles ne peuvent pas apparaître dans le même produit.

Des allers-retours sont parfois nécessaires entre l'ingénierie du domaine et celle d'application, afin de compléter l'analyse du domaine, car l'expertise des spécifications des produits peut révéler de nouveaux besoins.

Génération des produits

Dans un second temps, la génération du code des produits est réalisée à partir de la configuration du produit et de la plateforme.

Les artefacts sélectionnés dans la configuration sont assemblés suivant une structure donnée par la plateforme, afin de former correctement le code source du produit. La génération du produit est souvent une étape automatique. Le produit généré est ensuite testé, ce qui permet là encore des allers-retours avec l'ingénierie du domaine (correction, modification, ajout de fonctionnalité, etc.). Les produits peuvent ensuite être livrés aux clients.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Les approches de conceptions traditionnelles

Le développement from scratch

L'approche from scratch signifie simplement commencer à coder un projet à partir de zéro. Quel que soit le domaine métier du projet, le développeur va se lancer dans le développement sans l'utilisation de framework, librairie ou template. Ce développement radical est toutefois de moins en moins utilisé puisque de nombreuses librairies ou code source sont aujourd'hui déjà disponibles en ligne. Mais on peut aussi parler de développement from scratch de façon plus générale lorsqu'on début avec peu d'assistance d'outils déjà existants.

Le clone and own

L'approche Clone and Own contraste particulièrement avec l'approche from scratch puisqu'elle consiste à partir du code d'un projet existant, et de le cloner pour coder le projet suivant. Cette pratique est très souvent utilisée dans l'industrie et chez les développeurs en général. Elle apparaît surtout lorsque le nouveau projet partage un grand nombre de similarités avec un projet déjà existant. Cela nécessite toutefois une grande connaissance du code existant pour être le plus efficace possible. Beaucoup de temps est souvent consacré à l'appropriation du code ou au nettoyage des parties inutiles du code. Mais cette technique peut être très complexe à mettre en place, car elle dépend trop de la qualité du code existant.

Le répertoire commun

Le répertoire commun est une approche qu'on trouve principalement à l'échelle d'une équipe de développement. Ce répertoire spécialement créé pour les projets de l'entreprise va contenir les codes sources, schémas, documents et devis client, ressources graphiques, relatives aux différents projets. Ce dossier est souvent volumineux et sa hiérarchie le rend peu pratique lorsque l'on veut y rechercher un élément pour le réutiliser. Et une fois un élément trouvé, il faudra encore l'adapter pour le faire convenir aux besoins du nouveau projet. Cette pratique peut être vu comme une façon ad hoc de réutiliser les éléments du projet.

Nous venons de le voir, les approches classiques souffrent de beaucoup de défauts, mais elles démontrent aussi une volonté de vouloir réutiliser un maximum le code ou les artefacts déjà créés. C'est ce constat qui poussa à la création d'un outil généralisant la réutilisation intelligente et pertinente du code et des autres artefacts des projets. Les lignes de produits logiciels vont offrir un environnement qui encourage le développement pour la réutilisation. Plutôt que de coder pour un seul produit, il est désormais possible de coder pour un

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

ensemble de produits qui partageront des caractéristiques communes, mais qui auront surtout des caractéristiques variables.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Les approches fondamentales pour les LPL

Indéniablement, les lignes de produits logiciels ont montré leur potentiel industriel. Toutefois, nous pouvons encore déplorer le manque d'adoption à grande échelle de cette ingénierie, car rares sont les industriels à s'être emparés de cette ingénierie dans leur processus de développement quotidien. Pour comprendre ce constat, nous commençons par introduire les différentes stratégies d'adoption de l'ingénierie des lignes de produits.

Pour la conception d'une LPL il existe 3 approches fondamentales :

L'approche Proactive

La stratégie proactive est la stratégie conventionnelle où sont réalisées dans l'ordre l'ingénierie du domaine puis l'ingénierie d'application. En réalisant l'ingénierie du domaine en premier, les développeurs s'assurent d'avoir fait une analyse approfondie des artefacts réutilisables du domaine

L'investissement initial de cette phase est coûteux et représente donc un risque. Toutefois, il s'avère rentable une fois l'ingénierie d'application amorcée et le retour sur investissement apparaît dès le troisième produit

Cette stratégie se destine donc davantage à des entreprises qui disposent d'une expertise dans un domaine précis, ou qui disposent des ressources nécessaires pour financer l'investissement initial

L'approche proactive est un processus Top-Down basé sur une analyse approfondie du domaine d'activité de la ligne de produit pour identifier et construire tous ses éléments. L'approche Proactive est souvent décrite en deux phases principales : l'ingénierie du domaine, et l'ingénierie de l'application. Comme vu précédemment dans la partie précédente, L'ingénierie du domaine est une phase dont l'objectif est de s'approprier en profondeur un domaine métier particulier (e.g. le e-commerce, la réservation hôtelière, l'impression, etc.), pour en faire ressortir les cas d'utilisations ou besoins métiers du domaine. Ces cas et besoins vont être décris sous la forme d'exigences logicielles, et vont donner naissance aux différentes caractéristiques de la LPL. Les développeurs d'une LPL tirent de cette analyse l'ensemble de caractéristiques logicielles distinctes et réutilisables. L'enjeu est ici de découvrir un maximum des caractéristiques, et d'évaluer l'intérêt de chacune d'entre elles à être implémentées dans la LPL finale, afin de rester dans des coûts de productions rentable pour l'entreprise. L'ingénierie du domaine permet donc aux développeurs de déterminer la variabilité du domaine. Cette variabilité s'applique aux différentes caractéristiques découvertes et les développeurs ont pour objectifs d'obtenir les relations qui existent entre ces caractéristiques.

Par exemple, ils doivent s'interroger des conditions d'utilisation d'une caractéristique particulière dans un produit (e.g. est-il possible d'imprimer en couleur sans pouvoir imprimer en noir et blanc ? Cette conception de la variabilité s'accompagne de la réalisation de modèles de variabilité, comme des modèles de caractéristiques

Pour finir, l'ingénierie du domaine permet aux développeurs de définir l'architecture

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

logicielle de leur LPL, en tenant compte des caractéristiques et de la variabilité précédemment obtenus.

L'ingénierie d'application est la seconde phase, celle-ci se consacre au développement de la LPL. Son but est de réaliser l'implémentation de la LPL et ses produits à partir de l'architecture et des caractéristiques définis lors de l'ingénierie du domaine. La structure de la LPL regroupe toutes les implémentations des différentes caractéristiques, c'est à dire leurs implémentations par un ensemble d'artefacts.

L'implémentation SPL contient également les mécanismes de la variabilité de la SPL, qui lui permettent de varier pour former les différents produits. C'est donc depuis cette implémentation que les développeurs vont faire émerger les différents produits de la LPL. Pour cela, les développeurs définissent des configurations de produits, lesquelles décrivent les caractéristiques présentent dans le produit. Pour obtenir un produit, un moteur de génération vient, le plus souvent automatiquement, générer le produit à partir de l'implémentation de la LPL en y appliquant la configuration du produit. L'ingénierie d'application se termine par le test des différents produits ou des différentes caractéristiques. En fonction des tests, il est possible de faire des allers-retours avec la phase d'ingénierie du domaine, afin de corriger d'éventuels problèmes de conception

Avantages et Inconvénients

L'approche Proactive comporte plusieurs avantages.

D'une part, son ingénierie (domaine et application) permet d'obtenir une couverte maximale du domaine d'activité de la LPL. Ainsi, le risque d'absence d'implémentation de caractéristiques essentiels à un domaine est minimisé.

D'autre part, la réalisation de l'ensemble des constituants de la LPL par les développeurs, - comme les caractéristiques, l'implémentations de la LPL, ainsi que les modèles de variabilités et produits-, leurs offre une maîtrise de la maintenabilité et de l'évolution de leur ligne de produits. Les développeurs savent donc comment sont implémentées les caractéristiques et connaissent les mécanismes de variabilités mis en oeuvre pour construire les produits. Cependant, en pratique cette approche est difficile à mettre en place dans les entreprises. Tout d'abord, s'il existe des IDE pour assister les développeurs, le travail d'ingénierie de la

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

LPL reste essentiellement manuel. Cette ingénierie étant différente de celle d'une conception traditionnelle de logiciels, la première difficulté est de trouver des développeurs compétents pour mener à bien cette approche, et notamment l'ingénierie du domaine. Cette phase est la plus risqué des deux, car elle nécessite des compétences d'analyse du domaine, de gestion de la variabilité et de construction d'architecture. Il est donc important d'anticiper et de couvrir le plus de caractéristiques possibles, afin d'éviter les allers-retours avec l'ingénierie du domaine et d'application.

Ainsi l'ingénierie du domaine est inadaptée pour les entreprises qui sont dans l'incapacité d'anticiper les besoins de leurs produits.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

L'approche Extractive

La stratégie extractive est une adoption par rétro-ingénierie, où une famille de produits préexistante est transformée en une ligne de produits logiciels Cette stratégie permet de tirer profit du développement déjà éprouvé des produits. La LPL est construite par extraction, c.-à-d. qu'on vient identifier les artefacts communs et variables des produits pour concevoir la LPL. L'avantage de cette stratégie est son potentiel d'automatisation, et des travaux se sont déjà employés à proposer des mécanismes d'extraction outillés. Si elle est outillée, le coût d'investissement destiné à la transformation peut être largement réduit, en fonction cependant du degré d'automatisation proposé par l'outil. La stratégie extractive se destine donc à des entreprises qui disposent de famille de produits gérés individuellement et qui souhaitent bénéficier des LPL pour réduire leurs efforts de maintenance, d'évolution et de production de nouveaux produits

L'approche extractive est un processus Bottom-Up d'extraction des constituants d'une LPL à partir d'un ensemble déjà préexistant produits. Il s'agit donc d'une réingénierie d'une famille de produits vers ligne de produit. Dans le papier « Empirical Software Engineering » (2017) cette réingénierie doit s'articuler selon trois phases génériques : la détection, l'analyse et la transformation.

La phase de détection débute le processus d'extraction. Elle se consacre à la récupération de la variabilité des différents produits, en l'étudiant au travers des artefacts des produits. L'objectif est donc étant de différencier les artefacts communs à l'ensemble des produits, des artefacts spécifiques à seulement quelques-uns d'entre eux. La détection s'accompagne souvent d'une localisation de l'implémentation des caractéristiques (ou feature location en anglais), qui permet de rétroactivement faire l'ingénierie du domaine de la ligne de produits

La phase d'analyse s'appuie sur la variabilité acquise lors de la détection pour construire les modèles de variabilités de la LPL. Ces modèles prennent le plus souvent la forme de modèle de caractéristiques (ou feature-model en anglais)

Enfin, la phase Transformation construit une implémentation pour la LPL qui respecte la variabilité détectée et qui structure l'ensemble des artefacts.

Avantages et Inconvénients :

Les avantages de l'extraction pour la construction d'une LPL sont multiples. Premièrement, les constituants de la SPL peuvent être récupérés automatiquement (par exemple : les artefacts, les fonctionnalités, le Feature-Model) en analysant les codes sources et autres artefacts associés à ces produits (par exemple les exigences logicielles, le manuel utilisateur,

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

les documents de conception...). Par conséquent, ce processus est généralement automatique, ce qui rend le coût de réingénierie des produits vers la LPL relativement faible. L'automatisation rend cette approche rapide à déployer, et sans risques particuliers pour les entreprises. Cependant, il est à noter que la réalisation et le fonctionnement de ce type d'approche repose sur plusieurs hypothèses dans le code informatique utilisé par les développeurs. Les produits préexistants ont été construit de façon ad hoc, c'est-à-dire que les développeurs ont réutilisé des portions des produits les plus anciens pour créer les plus récents. On retrouve ainsi des portions de codes communes, et le plus souvent une architecture commune à tous ces produits. Le source code des produits est disponibles et est utilisé pour l'analyse la réingénierie.

Ainsi, le principal obstacle à l'adoption de cette approche réside dans la disponibilité d'un large ensemble de variants de produits préexistant, développés de manière ad hoc, et suffisant pour couvrir le plus de caractéristiques d'un même domaine d'activité. Si l'ensemble des produits est insuffisant, la réingénierie automatique devra logiquement être complétée manuellement : ce qui augmentera les coûts, et diminuera l'intérêt de l'approche. Il est évident que de nombreuses entreprises ne remplissent pas ces conditions comme les TPE PME.

En plus de cette limitation, les travaux existants appliquant une approche extractive se limite à proposer une implémentation fermée de la LPL, très difficile à y analyser (en boîte noir). Ils destinent souvent la LPL extraite à être utilisée par des gestionnaires de produits s'en servent comme d'un inventaire de leurs produits, plutôt que par des développeurs. Ces derniers devant maintenir et faire évoluer une LPL, si nécessaire. Selon la première loi de l'évolution des logiciels de Lehmann - qui stipule que tout logiciel qui n'évolue pas meurt -, l'implémentation fermé de la LPL, a donc un impact négatif sur sa longévité. Cela rend également impossible le fait de compléter manuellement la LPL une fois extraite. Par conséquence, l'approche extractive se révèle intéressante pour une utilisation par un gestionnaires de produits, et pour des entreprises type éditeurs de logiciels, qui souhaitent migrer un ensemble de logiciels gérés individuellement, vers une ligne de produits logiciels.

L'approche Réactive

La stratégie réactive propose une construction de la LPL par itération, en fonction des besoins Contrairement à la stratégie proactive, les ingénieries du domaine et d'application sont réalisées de façon partielle à chaque itération, de sorte à ne couvrir que les artefacts nécessaires à la production d'un nouveau produit. Cette stratégie permet de répartir l'investissement initial sur plusieurs itérations. La prise de risque est donc réduite, car les produits conçus à chaque itération peuvent être livrés sans délai, ce qui accélère la rentabilité de chaque investissement. Cet avantage est contrebalancé par les difficultés liées à la réingénierie itérative de la LPL. Contrairement à la proactive, chaque itération demande de reprendre l'ingénierie du domaine et d'application, afin d'intégrer à la LPL de nouvelles

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

exigences. Cette stratégie s'adapte au contexte de développement des entreprises qui ne sont pas en mesure de prévoir les exigences de leur LPL. Elle s'adapte aussi aux sociétés ayant à effectuer des cycles de développements occasionnels, ou ne disposant pas des ressources pour adopter une stratégie proactive. L'approche réactive ressemble à l'approche proactive mais elle fonctionne de manière itérative, l'approche se fait de manière plus locale par des petite analyse afin de détecter le minimum d'un nouveau produit

L'approche réactive peut être décrite comme un processus itératif afin de construire graduellement une LPL. Plutôt que de concevoir une LPL entière en une seule itération, l'approche réactive répartit l'investissement dans la LPL sur le long terme. La construction de la ligne est motivée par l'apparition de nouvelles exigences pour de nouveaux produits, et donc de nouvelles caractéristiques à inclure dans la LPL. L'arrivée occasionnelle de nouvelles exigences est donc un moteur opportuniste de construction pour la ligne de produit. Cette approche est comparable à un processus de développement logiciel dit traditionnel

Dans les deux cas, les développeurs doivent concevoir leurs nouveaux produits à partir des exigences (c'est-à-dire la description d'un nouveau produit formulé par un client).

L'approche réactive remplace le fastidieux clone&own que l'on a présenté précédemment. Comme cette approche se concentre principalement sur la livraison de nouveaux produits, elle profite aux entreprises travaillant sur des logiciels sur mesure, qui recherchent un retour sur investissement rapide de leur SPL, ou aux entreprises dont les contours sont encore incertains

Avantages et Inconvénients :

L'approche réactive apparait comme une approche ayant un potentiel industriel important, du fait sa répartition des coûts d'investissement et son aspect itératif (qui permet d'interrompre la construction à tout moment). Cependant, d'autres études rapportent que l'approche réactive souffre encore de difficultés majeures liées à la réingénierie itérative de la LPL. En effet, le problème est que l'intégration de nouvelles exigences est difficile et nécessite une expertise liée au domaine métier et au domaine technique. Il s'agit d'identifier toutes les fonctionnalités déjà implémentées dans la LPL, les nouvelles fonctionnalités destinées à un nouveau produit, et la relation de variabilité entre elles. Pour l'expertise technique, qui est le rôle des développeurs, il s'agit de modifier l'implémentation existante de la LPL afin d'intégrer les artefacts des nouvelles fonctionnalités requises sans mettre en péril la capacité de la LPL à régénérer ses anciens produits. Comme son ensemble de produits augmente avec le temps, une LPL devient plus complexe à réingénier avec plus de fonctionnalités, plus d'interactions entre les fonctionnalités et une variabilité plus riche. De plus, les développeurs doivent mesurer soigneusement les impacts de leurs choix d'implémentation, car ils peuvent avoir un effet imprévisible sur les itérations suivantes. Dans certains cas, l'effort de réingénierie, et donc son coût, peut être si élevé qu'il devient un risque pour l'entreprise. Par conséquent, cette difficulté à construire et à faire évoluer manuellement un SPL est considérée comme le principal obstacle à l'adoption généralisée de l'approche réactive

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

En résumé :

L'adoption de l'ingénierie de lignes de produits propose trois stratégies : proactive, extractive et réactive.

La stratégie proactive conçoit l'ingénierie de haut en bas, de l'ingénierie du domaine à l'ingénierie d'application. Cette stratégie est coûteuse et risquée, mais qui permet de construire la LPL en une fois. Elle se destine aux entreprises capables d'en assurer les coûts ou aux éditeurs de logiciels capables de maîtriser les spécificités d'un domaine d'activité particulier.

La stratégie extractive est une ingénierie rétroactive, de bas en haut. Elle propose de transformer une famille de produits préexistante en une ligne de produits logiciels. Par conséquent, son adoption est restreinte aux entreprises disposant d'une famille de produits préexistante. Cette stratégie dispose d'un fort potentiel d'automatisation, comme l'ont montré les travaux relatifs à son automatisation.

Enfin l'approche réactive étant une version itérative de l'approche proactive, qui dilue l'investissement initial et l'ingénierie de la LPL au fur et à mesure de l'apparition de besoins pour de nouveaux produits. Si l'ingénierie par itération est sa principale qualité, elle oblige cependant à faire la réingénierie manuelle de la LPL à chaque itération. Cette réingénierie est complexe et peut engendrer plus de coûts qu'une approche proactive.

En conclusion, nous constatons que ces stratégies souffrent toutes de limitations, et ne peuvent être adoptées par tous types d'entreprises. Pour les stratégies proactive et réactive, les problèmes sont liés à une ingénierie manuelle complexe ; et les tentatives d'automatisation notamment lié à l'extractif se montrent finalement incomplètes.

Figure 1: Voici un exemple

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Quelle approche adaptée aux PME ?

Les exigences d'une PME vis-à-vis de l'automatisation des LPL s'articule autour de 3 points fondamentaux : La facilité de manipulation par des développeurs, l'automatisation par l'intégration de nouveaux produits et enfin l'évolution dans le temps de la LPL.

Nous avons vu qu'il existait trois approches pour l'adoption des lignes de produits logiciels. Parmi elles, les approches proactives et extractives s'adaptent difficilement aux PME : la première demande un coût d'investissement initiale trop important et son cycle de développement est inadéquat avec celui des PME (développement à la demande) ; La seconde repose sur l'utilisation de produits préexistant pour construire la ligne, ce qui est rarement le cas des PME.

Mais surtout, l'approche extractive n'envisage pas l'évolution de la LPL une fois l'extraction réalisée. La dernière approche d'adoption, dite réactive, s'adapte mieux au rythme de développement des PME, car elle propose un développement opportuniste de la LPL, en fonction du besoin de créations de nouveaux logiciels. Cependant, cette approche demande des compétences en ingénierie des LPL, souvent absente chez les développeurs (analyse du domaine, application du domaine, compréhension et gestion de la variabilité). Et malgré cela, sans doute la plus difficile des trois à maitriser, du fait de la réingénierie de la LPL qu'elle impose à chaque création de nouveaux produits.

En plus des problèmes propres aux approches d'adoption, la mise en oeuvre des LPL est freinée par une réticence aux changements des pratiques de développement, établis dans les entreprises. En effet, imposer de nouvelles pratiques de développements est complexe, quelques soient l'entreprise. Cela implique souvent des restructurations d'équipes de développeurs, l'acquisition de nouvelles compétences (par la formation ou le recrutement de développeurs), et autres changements dans le processus de production des logiciels. Mais cela l'est sans doute d'avantage chez les PME, car elles ont construit des pratiques de développements efficaces, pour répondre aux contraintes fortes de temps auxquelles elles font face.

Par ailleurs, l'adoption et la mise en oeuvre des LPL comprend deux grands défis : d'une part elle oblige souvent les entreprises à repenser et transformer leurs pratiques de développement afin d'être correctement adoptée D'autre part, les bénéfices des LPL sont visibles sur le long terme. Leur retour sur investissement arrive souvent après le développement du troisième produit issue de la LPL

Face à aux défis que représente l'adoption, les entreprises perçoivent souvent l'adoption des LPL comme un risque, plutôt que comme un avantage stratégique. Dans ce contexte particulier des PME, l'adoption des LPL est complexe, compte tenu des par les problèmes rencontrés dans les approches d'adoption existantes, et du fait de leurs réticences l'adoption de nouvelles pratiquement de développement.

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

L'approche réactive apparait donc comme la plus adaptée au contexte des petites et moyenne entreprises

Cependant cette approche possède des mauvais côtés que nous allons étudier en profondeur pour pouvoir, peut-être, résoudre par une automatisation de certains processus afin de la rendre acceptable dans le cadre des PME

Dans l'approche réactive, l'ajout de nouvelles caractéristiques (ou leurs évolutions pour répondre aux spécifications d'un nouveau produits), peut avoir des répercussions sur le fonctionnement de produits préexistants dans la LPL. Ainsi, la première difficulté pour les développeurs est de s'assurer que leur réingénierie ne compromette pas l'intégrité des caractéristiques, et donc des produits, préexistants.

Deuxièmement, il ressort d'études sur la mise en pratique de l'approche réactive, que cette phase peut être simplifié ou complexifié par les choix pris par les développeurs lors des réingénieries précédente. Plus l'implémentation est facile à maintenir, plus il sera facile d'y intégrer le nouveau produit. Pour faciliter cette maintenabilité, il est nécessaire que les développeurs face preuve d'une capacité à anticiper de potentiels ajouts dans leur implémentation. Or, cette anticipation vient se confronter à l'aspect réactif de l'approche, où il est difficile de prédire les besoins des futurs produits. De plus, chaque modification représente un coût, qui ne peut être rentabilisé que si l'anticipation s'avère finalement utile. Cette accumulation de coûts provoque un risque pour ces petites et moyennes entreprises, et donc une probable diminution de son adoption des LPL.

Les entreprises nouvelles ou petites n'arrivent peut-être pas à envisager les futurs produits qu'elles vont devoir créer et donc les transformations qu'elles vont devoir apporter à la LPL. Ces entreprises n'ont pas le recul nécessaire pour anticiper ces contraintes en raison de leur taille. Et la création de nouveau produit pourrait compromettre les différents produits déjà préexistants.

Comme nous l'avons vu, la stratégie réactive propose une ingénierie basée sur un cycle de développement opportuniste de la LPL. Si l'on prend le cas des PMEs, ces entreprises fonctionnent de façon opportuniste : ceux sont les demandes occasionnelles de clients qui motivent la production de nouveaux produits. Ainsi il apparaît nécessaire que le développement de la LPL soit compatible avec un cycle de production opportuniste et occasionnel : les développeurs doivent pouvoir construire et mettre en pause l'ingénierie de la LPL à tout moment.

Dans la deuxième grande partie de mon mémoire d'alternance, nous verrons aussi que notre outil SPL Generator peut également s'appliquer dans une stratégie extractive. Il suffit pour cela de disposer d'une famille de produits en amont de l'utilisation. Cette famille de produits est ensuite intégrée en une seule fois, c'est-à-dire que les produits sont passés un à un et sans délai pour leurs intégrations, dans le but d'obtenir une LPL en sortie.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

L'analyse Formelle

L'analyse formelle des concepts (Formal Contexts Analysis en anglais, FCA) est une méthode générique de classification non supervisée et de regroupement dans sa version primitive. Elle permet, à partir d'une description de données appelée un contexte formel, de former des concepts et une hiérarchie entre ces concepts appelée le réseau de concepts. Un Contexte Formel (CF) est une relation binaire représentant la propriété entre objets et attributs. Représenté sous la forme de tableau, ils matérialisent deux contextes formels. L'un représente les produits logiciels associés aux fonctionnalités qu'ils fournissent et un second, lui, associe les produits logiciels aux artefacts qui les mettent en oeuvres.

Un concept représente l'association d'un groupe maximal d'objets avec le groupe maximal d'attributs qu'ils partagent. Chaque concept est divisé en deux parties : une intention et une extension. L'intention représente l'ensemble des attributs. L'extension, quant à elle, représente l'ensemble des objets.

Une hiérarchie entre concepts est formée à partir d'un ordre partiel basé sur l'inclusion de l'intention et de l'extension. Cet ordre partiel permet donc une forme d'héritage entre les concepts. Alors un diagramme représentant une hiérarchie de concepts ne montre, pour un concept, que son réduit intention, privé de ses attributs hérités ainsi que son réduit extension, privé de ses objets hérités.

Plusieurs hiérarchies peuvent être construites avec FCA, le treillis de concepts étant la hiérarchie contenant tous les concepts. Ce travail utilisera la hiérarchie restreinte aux concepts qui introduisent au moins un objet ou un attribut.

L'extraction de relations permet de récupérer les liens entre les attributs des concepts, par exemple des relations de co-occurrence, d'implication, et d'exclusion mutuelle.

En particulier, les relations implication, co-occurrence, et exclusion mutuelle. Les implications sont déduites des liens d'héritage entre les concepts introducteurs : les attributs introduits par un concept parent sont impliqués par les attributs introduits par ses enfants. D'autre part, l'exclusion mutuelle est présente entre les attributs de deux concepts dont les extents ne se croisent pas. Une exclusion mutuelle signifie que les attributs de deux concepts ne peuvent jamais être trouvés ensemble. Des techniques sont disponibles dans la littérature pour extraire ces relations

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

L'Analyse de Concepts Relationnels (RCA en anglais) est une extension de FCA qui crée des hiérarchies de concepts connectés multiples pour apprendre et regrouper à partir de relations dirigées entre des contextes formels multiples. En entrée, RCA prend une Famille de Contextes Relationnels. Une FCR contient deux ensembles, un ensemble de contextes formels et un ensemble de contextes relationnels. Un Contexte Relationnel représente une relation unidirectionnelle entre deux types d'objets. Plus précisément, il s'agit d'une relation binaire, orientée des objets d'un contexte formel source vers les objets d'un contexte formel cible. Pour calculer les concepts, RCA crée des attributs relationnels quantifiés, qui représentent des quantificateurs (par exemple, existentiel 2 ou universel ?), r est une RC et C'est un concept du treillis du Contexte Formel cible de r. Par conséquent, un attribut relationnel décrit les objets d'un contexte formel par leurs liens avec les concepts d'un autre contexte formel. Dans ce travail, nous utilisons le quantificateur 2, qui établit un lien entre un produit et un concept d'artefact ou un concept de caractéristique lorsque le produit possède au moins un élément de l'extension du concept.

En sortie, RCA produit de multiples hiérarchies de concepts, par exemple de multiples AOC-Posets, un pour chaque contexte formel. Notez que l'AOC-Poset d'un CF qui est la source d'un ou plusieurs RC, contient deux types d'attributs dans ses concepts intents : attributs natifs ; et attributs relationnels ce sont les attributs pointant à travers une relation vers les concepts du contexte formel cible.

Dans les diagrammes, lorsque les concepts cibles sont des introducteurs, ils sont remplacés par leurs propres attributs natifs pour simplifier la lecture et être utilisés dans notre approche.

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Un Contexte formel (CF) est donc l'ensemble des relations entre des objets et des attributs. Il peut se décrire dans une matrice comme illustré dans la Table ci-dessus

Un concept représente l'association d'un groupe maximal d'objets avec le groupe maximal d'attributs qu'ils partagent. Chaque concept est divisé en trois parties (de haut en bas) : un nom, une intension et une extension L'intention représente l'ensemble des attributs partagés par l'ensemble des objets du concept.

L'extension, quant à elle, représente l'ensemble des objets regroupés dans ce concept parce qu'ils partagent les attributs de l'intension Les concepts peuvent être hiérarchisés pour former un treillis de concepts Une hiérarchie est formée à partir d'un ordre partiel basé sur l'inclusion des intensions et extensions des concepts. Cet ordre partiel permet une forme d'héritage entre les concepts. Les concepts sont hiérarchisés pour former un treillis de concepts

Dans le treillis de concepts, il est souvent choisi de ne représenter que l'intension réduite et l'extension réduite des concepts pour simplifier la représentation. L'intension réduite d'un concept est privée des attributs mentionnés dans les intensions des super-concepts. De même, l'extension réduite est utilisée pour ne faire apparaître les objets dans un concept seulement si l'intension complète du concept contient l'ensemble des attributs des objets.

L'avantage d'utiliser les intensions et extensions réduites est qu'elles permettent de faire apparaître explicitement les concepts introducteurs d'attributs ou d'objets. Un concept est introducteur d'attributs (respectivement d'objets), si son intention (resp. extension) réduite contient au moins un attribut (resp. objet). Dans notre projet, nous utiliserons les concepts réduits pour la représentation des AOC-Posets.

Plusieurs hiérarchies peuvent être construites avec l'ACF, le treillis de concepts étant la hiérarchie contenant tous les concepts. Dans notre projet, nous utiliserons la hiérarchie des AOC-Posets. Cette hiérarchie est restreinte aux concepts introducteurs (c.-à-d. aux concepts qui introduisent au moins un objet ou un attribut).

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

La variabilité d'une Ligne de produit logiciel

La gestion de la variabilité

Lors de l'ingénierie d'une ligne de produits, les concepteurs sont amenés à définir et à exprimer la variabilité des artefacts. Pour concevoir la ligne, ils doivent spécifier les artefacts communs et optionnels, en plus des contraintes de variabilité entre ces artefacts qu'il faut respecter pour construire les produits. Le paradigme de développement multiproduits des LPL exige donc une modélisation de la variabilité d'une LPL. Cette modélisation accompagne les concepteurs tout au long du cycle de vie de la LPL. Les modèles de variabilité facilitent la compréhension, la maintenance et l'évolution de la LPL. En agissant sur autant d'étapes du cycle de vie d'une LPL, il apparaît essentiel que cette modélisation soit la plus compréhensible et accessible possible pour les différents acteurs participant à l'ingénierie (p. ex. développeurs, responsables produits, clients, commerciaux, etc.).

Car lors de mon alternance, il est apparu évident de clarifier au maximum les différentes parties des fonctionnalités de la LPL et de son implémentation pour que l'intégralité des équipes IT puissent facilement s'y retrouver.

Parmi les techniques de modélisation de la variabilité existante, la modélisation de la variabilité par caractéristiques est la plus populaire comme l'approche de Czarnecki (2012)

Caractéristique logicielle

La configuration de la plateforme permet de générer l'implémentation du produit souhaité par une sélection les artefacts spécifiés par les développeurs. Cependant, il devient rapidement fastidieux de sélectionner ces artefacts un à un pour générer un produit. C'est pourquoi l'ingénierie des LPL préconise de décrire les produits en termes de caractéristiques logicielles qui les composent. Ce paradigme de description conçoit le logiciel en termes de caractéristiques. La caractéristique logicielle est une fonctionnalité logicielle ou un comportement particulier dans un logiciel, souvent perçu par l'utilisateur du logiciel. Plusieurs dizaines de définitions apparaissent dans la littérature pour tenter de définir formellement ce qu'est une caractéristique.

C'est comportement d'un système logiciel visible par un utilisateur. Les caractéristiques sont utilisées dans l'ingénierie des LPL pour spécifier et communiquer les points communs et les différences des produits aux différents intervenants et pour guider la structuration, la réutilisation et les variations à travers chaque étape de vie d'un système logiciel Les caractéristiques permettent de décrire les spécificités implémentées par chaque produit, et de décrire un logiciel comme la somme de ses caractéristiques Dans le contexte d'une même

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

ligne de produits logiciels, deux logiciels partageant les mêmes caractéristiques sont considérés comme égaux. L'ensemble des caractéristiques d'un produit forme la configuration du produit.

Lors de l'ingénierie d'application, l'étape de configuration des produits consiste donc à décrire les produits d'après l'ensemble des caractéristiques qui les composent. La variabilité de la LPL est donc le plus souvent exprimée en utilisant les caractéristiques.

Les caractéristiques sont directement liées aux différents artefacts réutilisables de la LPL. Au travers de la sélection de caractéristiques, les concepteurs de la LPL peuvent donc sélectionner des artefacts à implémenter dans le produit. Les artefacts sont perçus comme l'implémentation concrète des caractéristiques dans la plateforme configurable de la LPL. La configuration de la plateforme, qui permet d'obtenir un produit, se fait en appliquant à la plateforme une configuration du produit désiré, c.-à-d. en sélectionnant les artefacts des caractéristiques mentionnées dans la configuration du produit.

Modèle des caractéristiques

L'emploi des caractéristiques pour décrire les produits peut s'appliquer pour la description de la variabilité de la plateforme configurable, et donc de la LPL. La plus souvent, la variabilité est décrite par des modèles de variabilités, le plus commun étant donc le modèles des caractéristiques

Les modèles de variabilité, et notamment celui des caractéristiques (appelé feature-model en anglais), décrivent l'espace de la variabilité de la LPL en fonction des caractéristiques qui la composent. Le modèle des caractéristiques représente la variabilité comme une arborescence, où les caractéristiques sont des noeuds et où les branches sont des contraintes de variabilité. Les caractéristiques abstraites servent principalement à regrouper les caractéristiques concrètes (qui en sont des sous-caractéristiques) et donc à structurer le feature-model.

Ce type de modèle permet de décrire l'ensemble des configurations possibles que peut accepter la plateforme configurable, et donc l'ensemble des produits de la LPL Les éléments graphiques qui composent le feature-model sont les suivants :

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Dans l'élaboration de notre outil, nous considérons que les interactions de caractéristiques sont donc des comportements logiciels particuliers, implémentés dans la LPL et ses produits, qui interviennent pour assurer le bon fonctionnement d'un produit lorsque plusieurs caractéristiques peuvent s'influencer entre elles.

De plus, nous considérons que chaque interaction peut avoir une implémentation concrète et spécifique dans la plateforme de la LPL.

Cette implémentation prend la forme d'un ensemble d'artefacts dans la plateforme. Enfin, nous considérons qu'une interaction n'est présente dans un produit que si les caractéristiques en interaction le sont également.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

L'implémentation LPL par annotation et par composition

On distingue pour cela deux types d'implémentation possible.

Annotation

L'approche par annotation (ou approche annotative) hérite de son fonctionnement des systèmes de Macro de pré compilation, notamment populaire dans les langages C et C++

À l'image du code avec Macro, le code source d'une plateforme configurable contient des instructions spécifiques à un langage de précompilation, qui permet d'activer ou désactiver certaines portions du code source, afin d'inclure ou non le code spécifique d'une caractéristique. l Une annotation consiste à ajouter un méta donné pour référencer une ou plusieurs parties de code. Chaque annotation doit être définie d'une manière à se déclencher pour une configuration donnée, après avoir exécuté une partie de code statique et commun. Les annotations peuvent être -- implicites -- explicites : Faite manuellement par un utilisateur. Le cas commun d'annotation explicite dans les langages de programmation c'est bien l'utilisation des blocs si et sinon (if else) à l'intérieur d'un programme, comme le montre la figure suivante.

Les annotations délimitent virtuellement le code de la plateforme pour lier les artefacts aux caractéristiques. L'annotation peut se comprendre comme une condition logique à satisfaire pour inclure ou non la portion de code annoté dans un produit. Chaque annotation déclare une formule logique où les noms des caractéristiques sont des propositions. En fonction de

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

la configuration choisie pour un produit, un processus de précompilation parcourt le code de la plateforme à la recherche des annotations. Pour chaque annotation visitée, la formule de l'annotation est interprétée en considérant à "Vrai" les propositions correspondantes aux caractéristiques de la configuration. Si la formule renvoie "Vrai", le code annoté est conservé dans le produit, sinon il est retiré ou rendu inactif par des commentaires

L'approche par annotation explicite les mécanismes de variabilité d'une plateforme configurable. Les concepteurs perçoivent en une seule vue l'implémentation de tous les artefacts variables, et donc de toutes leurs caractéristiques. L'implémentation des caractéristiques est dite virtuellement séparée, car elles coexistent toutes dans une même vue, mais elles sont séparées par des annotations. Avec l'approche par annotation, le code d'un produit généré conserve une grande proximité avec le code annoté dans la plateforme. Pour les concepteurs de la plateforme, cette génération permet de conserver le même code dans les produits que celui observé dans la plateforme. Cela facilite la maintenabilité de la plateforme et des produits.Le système d'annotations permet également de facilement implémenter les interactions de caractéristiques. Les interactions de caractéristiques correspondent à l'implémentation d'un comportement spécifique lorsque plusieurs caractéristiques sont présentes ensemble dans un même produit.

Pour finir, l'approche par annotations est indépendante du langage de programmation choisi et de la nature de l'élément à annoter. Elle peut d'ailleurs être appliquée à des fichiers de textes, des fichiers XML ou CSV, etc.

Limitations des annotations

La séparation virtuelle des implémentations peut engendrer des problèmes de compréhension lié à un manque de lisibilité du code de la plateforme.

Ces problèmes, dits de l'enfer des if/else, résultent d'une difficulté des concepteurs à interpréter la multiplicité des embranchements du code liée aux conditions des annotations

Cette difficulté s'accentue avec la taille des formules, c.-à-d. nombre de propositions dans la formule d'une annotation, et le nombre d'annotations au sein d'un même fichier. Il faut ajouter à ces difficultés deux autres particularités des annotations : elles peuvent être imbriquées pour implémenter la variabilité

Elles peuvent également être déclarées n'importe où dans le code, c.-à-d. à l'intérieur d'une méthode, autour du contenu d'un fichier, dans l'entête de la déclaration d'une classe, dans la signature d'une méthode, etc. Ce second point présente cependant un avantage, puisqu'il permet d'annoter finement les artefacts de la plateforme et donc d'annoter précisément l'implémentation d'une caractéristique. Enfin, le dernier point important est que la maintenabilité d'une plateforme annotée est différente de celle d'un code traditionnel. Les

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

outils de vérification statique du code basé sur le parseur ou l'arbre de syntaxe abstrait (AST) sont désactivés ou restreints. Ces outils sont inadaptés, car ils ne sont pas conçus pour tenir compte de la variabilité de la plateforme. Par exemple, deux mêmes attributs déclarés plusieurs fois dans la même classe peuvent appartenir à deux annotations différentes (donc deux caractéristiques différentes).

En résumé, l'approche par annotation présente un système simple et intuitif pour

implémenter les mécanismes de variabilité d'une plateforme. Toutefois, cette simplicité peut engendrer un manque de clarté du code source, et des difficultés de compréhension plus le nombre d'annotations augmentent (enfer des if/else). L'approche par annotation nécessite donc une certaine rigueur dans son application pour limiter des efforts de compréhension du code.

L'implémentation en compositionnel

L'approche par composition est souvent présentée comme une alternative aux limitations des approches par annotations. Son objectif principal est de résoudre la séparation virtuelle des implémentations en proposant une séparation physique. Ainsi dans l'approche par composition, les caractéristiques sont chacune physiquement isolées dans des dossiers qui sont propres à leur implémentation Comme son nom l'indique, la composition propose de composer les différentes caractéristiques pour construire l'implémentation du produit lors de la génération. Pour cela, la composition s'appuie sur la structure du code ciblé.

Cela consiste finalement à composer une ou plusieurs parties de code. Le choix des parties de code, se fait avant l'exécution du code, en choisissant les parties à exécuter. Pour cela, on s'intéresse à la notion de point de composition, qui est une étape ou on peut ajouter à une partie de code, une autre partie pour pouvoir exécuter les deux.

Avantages et inconvénients :

Il est notamment possible de comparer ces deux approches en termes de granularité, sûreté, traçabilité des produits pour choisir celui qui répond à notre besoin. Toutefois ces deux approches peuvent être combinées pour tirer le meilleur profit. Cependant, la figure suivante permet de distinguer la différence entre l'implémentation des deux approches.

L'approche par composition offre une séparation des implémentations pour chaque caractéristique, ce qui facilite la localisation de leurs implémentations pour les développeurs. Cependant, l'approche par composition est complexe et peu intuitive pour les développeurs. En premier lieu, elle introduit un nouveau paradigme de conception pour la plateforme, où chaque implémentation de caractéristiques doit être isolée. L'approche par

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

composition demande donc plus de temps et d'efforts pour concevoir la plateforme que l'approche par annotation.

Deuxièmement, le moteur de composition des produits construit des produits dont l'implémentation est différente de celle de la plateforme. En effet, dans le cas d'une granularité Instruction, le code des méthodes peut être modifié pour réaliser une composition. Ces méthodes d'emballage modifient la structure du code source sans en changer la sémantique, mais cela peut contribuer à perturber la compréhension du code généré pour les concepteurs de la plateforme. Contrairement à l'approche par annotation pour un produit équivalent, le code généré s'éloigne de celui de la plateforme.

Troisièmement, bien que les composeurs soient indépendants d'un langage de programmation, leur fonctionnement nécessite de disposer d'une représentation en arborescence du code source pour pouvoir être composés. De plus, ils doivent être adaptés pour chaque langage de programmation, afin de construire les règles de composition propres aux spécificités de chaque langage. Pour finir sur les limitations, l'approche par composition représente souvent difficilement une granularité fine. Ainsi à la granularité Instruction, dans la plupart des approches par composition, il est rarement possible d'introduire des instructions au milieu d'une méthode existante afin d'étendre une séquence. La manipulation d'instructions au milieu d'une méthode, de paramètres ou d'expressions est impossible dans aucune approche par composition, à cause des mécanismes de composition basés sur les emballages de méthodes

Synthèse

Nous retiendrons de l'étude que l'approche par annotation est plus avantageuse que l'approche par composition, notamment concernant son intuitivité, la granularité permise, et son déploiement quasi universel.

Les annotations (notamment dans le contexte du C/C++) ont une réputation négative et sont souvent critiquées pour rendre le code difficile à comprendre et à maintenir. Cependant, certaines expérimentations indiquent que ces critiques ne semblent pas avoir de réels fondements en pratique, puisque l'impact des annotations sur la maintenabilité semble minime comparé au gain précédemment

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Le degré de granularité

La granularité est une notion récurrente dans l'ingénierie d'une LPL. De façon générale, la granularité définit la taille du plus petit élément qui compose un système. Elle désigne donc la limite du niveau d'analyse des éléments, niveau à partir duquel un élément est considéré comme insécable. Dans l'ingénierie des LPL, la granularité peut s'employer à différents niveaux, pour définir la finesse (ou la précision) avec laquelle doivent être déclarés les artefacts et donc la variabilité d'une LPL

Ainsi, la granularité de la variabilité donne le niveau de détails avec lequel la variabilité et les artefacts sont définis dans la LPL. Concernant l'implémentation de la variabilité et les artefacts de code source, différents niveaux de granularité existent. Nous proposons ici notre synthèse de ces différents niveaux :

Classe : définit une granularité qui considère l'intégralité d'un fichier de code ou d'une classe (en programmation orientée objet OO) comme le plus petit élément à considérer. Par exemple, la variabilité à cette granularité se fait en ajoutant ou retirant des fichiers dans le code source des produits.

Méthodes : définit une granularité qui considère les méthodes ou les fonctions qui composent respectivement une classe OO ou un fichier de code. Par extension, cette granularité considère également les déclarations d'attributs ou de variable relative à un fichier. Par exemple, la variabilité se fait en ajoutant ou en retirant une méthode dans une classe.

Instruction : définit une granularité qui considère les instructions du code source comme le niveau le plus fin. Cette granularité permet de considérer chaque instruction du corps d'une méthode ou d'une fonction comme un artefact individuel.

Expression : définit une granularité qui considère les opérande et opérateur d'une expression (plus fin qu'Instruction).

Signature : définit une granularité qui considère les paramètres d'une signature de méthode ou d'une fonction ou d'une classe. Par exemple en ajoutant ou en retirant l'expression qui déclare l'extension du type dans une classe. Plus la granularité est fine, plus elle précise l'implémentation des différentes caractéristiques dans la plateforme. Cette finesse permet également de mieux factoriser le code partagé par plusieurs produits et donc d'améliorer la maintenabilité de ces derniers. La même étude montre qu'il est donc plus pertinent d'adopter une granularité Instruction que des granularités Fichier-Classe et même Méthode-Fonction. Ainsi, plus la granularité est fine, plus le code de la plateforme

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

configurable peut être factorisé, maximisant ainsi le code commun entre les produits de la LPL.

Localisation des caractéristiques

Dans le cadre des lignes de produits logiciels, la localisation de caractéristiques (ou Feature Location en anglais) consiste à retrouver l'implémentation d'une caractéristique connue, c'est-à-dire à lui associer des artefacts parmi ceux de la LPL. La localisation est à distinguer de l'identification des caractéristiques feature identification, qui consiste à déterminer la caractéristique à associer à des artefacts. Les techniques de localisation s'appliquent généralement dans deux cas : sur un seul produit, ou sur une famille de produits.

Dans les deux cas, associer des caractéristiques à des artefacts consiste à lier l'ensemble des artefacts à l'ensemble des caractéristiques. Plusieurs hypothèses sont possibles concernant ces associations. Par exemple, un artefact peut être associé seulement à une caractéristique ; ou il peut être associé à plusieurs caractéristiques. Il faut également considérer la présence d'interactions de caractéristiques dans l'implémentation des produits. Dans nos travaux au sein de l'entreprise, nous nous intéressons principalement à la notion de localisation des caractéristiques dans le contexte des lignes de produits logiciels. Dans ce contexte, nous rencontrons le plus souvent la localisation dans les stratégies extractives. (Cette étape n'est pas encore terminée dans notre implémentation mais elle fera l'objet de modification en fin septembre 2019 par mes soins)

Les techniques de localisation existantes pour des artefacts de code source sont classées en trois catégories : analyse dynamique, analyse statique et analyse textuelle. Certaines techniques proposent parfois de combiner ces types d'analyse pour améliorer leur performance.

Analyse Dynamique

L'analyse dynamique consiste à localiser l'implémentation des caractéristiques lors de l'exécution des logiciels. Cette analyse s'appuie sur une instrumentation du code source des produits pour produire des traces d'exécution. Les scénarios d'exécution du programme sont nécessaires et construits en amont de l'exécution, en accord avec l'instrumentation du code source.

Il existe plusieurs techniques de localisation basées sur l'analyse dynamique (voir inventaire complet dans

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Parmi les premières proposées figurent celles de Wilde (1995). Leur technique propose d'exécuter deux types de scénarios à la suite : l'un activant une caractéristique, et l'autre où la caractéristique n'est pas activée. Les traces d'exécution sont comparées pour déterminer les artefacts qui sont les candidats les plus probables pour être l'implémentation d'une caractéristique spécifique. La localisation basée sur l'analyse dynamique des traces est limitée par la construction des scénarios choisis. En effet, rien ne permet d'affirmer que l'exécution des scénarios suffise à couvrir l'ensemble des artefacts associés à une caractéristique.

Analyse statique

L'analyse statique se focalise sur une exploration du code source et des ressources ou documents associés à un logiciel pour déterminer l'implémentation des caractéristiques parmi les artefacts d'un logiciel. Nous pouvons distinguer deux types d'analyse statique : sur un seul produit et sur un ensemble de produits.

L'analyse statique sur un seul produit consiste essentiellement à regrouper les artefacts du code source sur l'hypothèse qu'il existe une cohésion parmi eux. Cette cohésion peut être structurelle ou lexicale. Dans le cas d'une cohésion structurelle, l'analyse statique considère les dépendances structurelles (p. ex. méthode définie dans une classe ; fichiers définis dans un paquet) ou de références (p. ex. la méthode fait référence à un attribut ; la classe contient un attribut dont le type est défini dans une autre classe).

Pour faciliter le regroupement des artefacts, la localisation est parfois semi-automatique, et il est attendu d'un expert qu'il indique une graine ; dans le code à partir de laquelle la localisation peut commencer. Cette graine peut être une méthode, une instruction, une classe, ou tout autre élément du code.

Parmi ces approches de localisation sur un seul produit, Chen (2000) a proposé une approche semi-automatique. Leur approche construit un graphe de dépendances à partir des éléments du code source dont les liens sont des invocations de méthodes, références d'attributs, relation d'héritage. À partir du graff, un expert sélectionne un noeud en tant que graine (étiquetée avec le nom de la caractéristique à localiser) à partir de laquelle la localisation va se propager pour atteindre les différents noeuds et obtenir une implémentation pour une caractéristique donnée.

L'analyse statique sur une famille de produits est moins étudiée que celle sur un seul produit. De façon générale, les approches proposées se basent sur la variabilité des produits pour isoler l'implémentation des caractéristiques (car on connaît les caractéristiques

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

associées à chaque produit. Pour cela, les approches font l'hypothèse de la cooccurrence entre les caractéristiques décrites dans les produits et les artefacts qui composent ces produits. Ainsi, elles associent artefacts et caractéristiques sur le postulat que si un groupe d'artefacts est toujours présent dans un produit lorsqu'une caractéristique l'est, alors ces artefacts doivent correspondre à l'implémentation de la caractéristique.

Les approches de localisation par analyse statique sont nombreuses et présentent toutes leurs limites et leurs forces. Nous pouvons généraliser en disant que les techniques appliquées à un seul produit sont souvent semi-automatiques et utilisent des graines pour propager la localisation. Quant aux techniques appliquées à une famille de produits, elles sont souvent automatiques, mais basées principalement sur l'étude de la variabilité. De plus, ces approches ne prennent souvent pas en compte les interactions de caractéristiques

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Résumé LPL

L'ingénierie des lignes de produits logiciels est donc un ensemble de méthodes et de techniques qui tente de systématiser et d'encadrer la conception d'une famille de logiciels. Ses deux principes fondamentaux sont la promotion des principes de personnalisation de masse des logiciels et de réutilisation systématique.

Pour réaliser ces deux principes, l'ingénierie des LPL propose la conception d'une plateforme logicielle configurable, capable de varier en fonction de caractéristiques logicielles que les utilisateurs sélectionnent pour aboutir au produit désiré (une personnalisation de masse). Les produits (logiciels) d'une LPL sont donc tous construits depuis la même plateforme, ils partagent ainsi une partie de leur implémentation.

La notion de variabilité est intrinsèque aux LPL. Leur variabilité est généralement modélisée par un modèle de caractéristique (feature-model en anglais). Ce modèle met en relation les différentes caractéristiques d'une LPL par rapport des contraintes de variabilité (par exemple, implications, exclusion, co-occurrences, ou autres conditions).

Chaque caractéristique dispose d'une implémentation spécifique dans la plateforme d'une LPL, sous la forme d'un ensemble d'artefacts. Les artefacts sont des éléments de nature hétérogène (éléments de code, fichier texte, base de données, ressource sonore, etc.) et sont souvent décrits avec une granularité définie par les concepteurs de la LPL (Fichier-Classe, Méthode-Fonction, Instruction, etc.).

La plateforme configurable regroupe et structure l'ensemble des artefacts de sorte qu'une sélection des caractéristiques puisse permettre de générer le produit correspondant. Cette génération par sélection est rendue possible par l'implémentation de mécanismes de variabilité dans la LPL. Il existe deux types d'approches pour implémenter la variabilité de la plateforme, l'approche par annotation et celle par composition. Si ces deux approches possèdent leurs forces et leurs limitations, il faut noter que l'approche par annotation reste plus accessible et intuitive pour les concepteurs que l'approche par composition ; elle permet aussi une implémentation avec une granularité plus fine.

Enfin, l'ingénierie des LPL dispose de nombreux avantages face à une ingénierie

monoproduits (c.-à-d. Logiciels individuels). Grâce à la réutilisation systématique, les LPL permettent une réduction des coûts de développement, une réduction du temps de mise sur le marché des produits, une diminution de l'effort de maintenabilité et une amélioration de la qualité des logiciels. Cependant, ces bénéfices n'apparaissent qu'à partir du troisième produit mis sur le marché), du fait d'un investissement initial important à fournir pour les LPL.

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Nous allons désormais vous présenter notre outil SPL Generator : ce dernier est dans l'étape finale de conception. Débuté en Novembre 2018, SPL Generator a pour but de faciliter l'adoption des Lignes de produits logicielles en entreprise en offrant aux développeurs une facilité d'exécution.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

SPL generator

Les objectifs de l'approche

Notre l'approche SPL Generator, est une approche réactive automatisé. Elle est schématisée dans la figure ci-dessous. C'est donc une approche construite sur un cycle en trois phases : L'intégration, la génération et la maintenance de la LPL.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Nous proposons l'application de processus automatique pour réaliser l'ingénierie d'une LPL afin de réduire ses coûts. Notre hypothèse est que retirer l'effort lié à l'ingénierie manuelle permettra une meilleure adoption des LPL par les entreprises. Notre outil peut faciliter plus la construction d'une LPL puisque les risques liés aux coûts d'ingénierie sont réduits par l'automatisation des tâches. Cette réduction des coûts doit être accompagnée d'un effort d'adoption faible de l'approche, notamment pour limiter la résistance aux changements des développeur.

Dans le chapitre précédant, nous avons exposé des différentes approches d'adoptions des Lignes de Produits Logiciels. Nous avons discuté des avantages et inconvénients de chacune d'entre elle, pour finalement retenir l'approche réactive comme étant la plus adapter aux métiers des développeurs et à celui des entreprises. Toutefois, nous avons mis en avant l'importance de proposer une automatisation de l'approche réactive, afin d'en réduire ses coûts. Ces coûts sont directement à la complexité de la réingénierie d'une Lignes de Produits. Mais également, nous avons fait le constat que les développeurs d'aujourd'hui préfèrent travailler sur une conception traditionnelle de logiciels, plutôt que sur une conception en vue d'incrémenter une Ligne de produits. Dans cette partie nous présentons notre outil : « SPL Generator », d'une approche réactive automatisé pour la création d'une Ligne de Produits Logiciels. Nous évoquerons les différentes étapes notre approche, de l'intégration à la génération de produits. Nous discuterons également des objectifs et des difficultés à surmonter pour réaliser cette approche. Cette partie répond à la question suivante : Comment construire une approche réactive automatique adapter aux développeurs ? Ces trois phases coïncident trois grands scénarios d'utilisation :

Notre premier objectif est de s'appuyer sur les compétences existantes des développeurs de l'équipe IT, à savoir la conception efficace de logiciel en un minimum de temps et d'énergie. Cette compétence est maîtrisée et recherchée par les entreprises, qui favorise un développement rapide. Notre objectif vise donc à utiliser en entrée de la réingénierie les produits conçus par les développeurs : il s'agit du code source du logiciel. Cela confère à notre approche une meilleure conservation et une intégration aux processus de développement déjà en place dans les entreprises. Mais également, cela permettra de ne pas nécessiter l'acquisition de nouvelles compétences pour les développeurs et donc formations pour les entreprises. Le second objectif est la transparence de l'approche : son utilisation doit se faire en marge du développement des produits, afin de ne pas le retarder. Le principal défaut de l'adoption de l'ingénierie des LPL rapporté par l'industrie est l'investissement de départ pour la conception d'une ligne. Cet investissement perturbe les délais de mise sur le marché des entreprises. En souhaitant faciliter l'adoption de l'approche réactive, nous devons accepter ce constat et proposer une approche qui peut être déployée sans perturber les délais de conception déjà en place dans les entreprises. En claire, notre objectif est d'avoir un impact positif sur le temps de mise sur le marché, et non négatif, et cela dès les premiers produits.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Il faut que cette génération automatique de la plateforme produise un résultat qui soit compréhensible par le plus grand nombre de développeurs, afin de renforcer le potentiel de maintenabilité de la LPL. C'est pourquoi dans notre approche, nous choisissons de construire une plateforme avec une représentation Annotative, car elle est réputée comme intuitive pour les développeurs.

Comme annoncée précédemment, la construction de la LPL se fait au travers des produits. Dans notre approche, la LPL est utilisée pour faciliter le développement de nouveaux produits : au début d'un nouveau projet, on consulte la LPL pour générer un produit partiel, le plus proche possible des besoins exprimés. Une fois complété, ce produit sera intégré automatiquement dans la LPL et les nouveautés ou modification qu'il introduit seront ajoutés de façon disciplinée dans la LPL. Ainsi, le développement de nouveaux produits ne dépend plus d'une réingénierie manuelle et obligatoire de la LPL. Les développeurs sont libres de concevoir leurs produits comme ils ont l'habitude de le faire, i.e. sans se préoccuper de la gestion de la variabilité, de l'implémentation des caractéristiques, de l'impact des nouvelles caractéristiques sur les anciennes ou éventuellement de leurs interactions négatives. Cela a pour autre avantage de faire participer les développeurs non familiers avec les LPL aux développements de nouveaux produits. Nous faisons ici l'hypothèse que cela permettra aux entreprises de réduire l'effort de formation de leurs développeurs, voir même de le supprimer. Dernièrement, cette pratique permet s'adapter au processus de développement déjà en place dans l'entreprise. On permet aux équipes de développement de conserver une grande partie de leur façon de travailler (comme le choix de l'IDE par exemple). Ce qui permet de construire la LPL sans impacter la productivité des développeurs.

Malheureusement, peu d'entreprises ont les moyens de construire l'ensemble de leur LPL en une seule traite. Il est de plus improbable que de nouveaux produits ne viennent pas s'ajouter à la LPL.

Si l'on prend le cas des PME, ces entreprises fonctionnent de manière simple : elles ont un cycle de production réduit et occasionnel en fonction des mises a jours des logiciels nécessaires transmises par les maitrises d'ouvrages.

Mon alternance

Lors de mon alternance, les équipes métiers transmettaient un cahier des charges sur les nouvelles spécificités à intégrer dans la gamme de logiciel. Les équipes IT devaient donc comprendre les mises à jour à implémenter et ensuite appliquer ces modifications dans le logiciel. Ainsi il apparait nécessaire que le développement de la LPL soit compatible avec un cycle de production simple et occasionnel : on doit pouvoir construire et mettre en pause là

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

l'ingénierie de la LPL à tout moment. Notre outil peut également être appliqué dans un contexte de réingénierie d'une famille de produits vers une LPL (extractif). Cela peut se fait facilement si on considère que ce sont les produits qui motivent la construction de LPL : disposer en amont de tous les produits ou les créer un à un avec LPL, ne doit pas changer le résultat de notre approche. Enfin, nous pouvons aussi faire l'hypothèse que notre approche est adaptée à une production proactive de la LPL. Cette hypothèse suppose des prérequis. Les développeurs doivent réaliser en amont l'ingénierie du domaine pour acquérir des connaissances sur l'ensemble des caractéristiques et la variabilité de la LPL. Ils doivent également réaliser l'ingénierie d'application afin de connaitre l'ensemble des configurations de produits à réaliser. Dans ce cas-là, l'outil doit être applicable pour discipliner et accompagner l'ingénierie d'un LPL, en proposant de créer un à un les produits. La compatibilité de « SPL generator » avec les trois stratégies d'adoption (proactive, réactive, extractive) permet d'adapter notre approche à différents profils d'entreprises. Ce qui accentue le potentiel d'adoption de notre approche

Voyons désormais l'étape d'intégration des produits, étape importante de la réingénierie

Les étapes de L'intégration

Nous définition quatre étapes interne aux processus de réingénierie par Intégration de la LPL. Ces étapes sont invisibles pour les développeurs, et donc entièrement automatique. En premier lieu, la réingénierie commence par une étape d'identification des artefacts. Cette identification a pour but de déterminer quels sont les assets (ou artefacts) du produit. Rappelons que les assets (ou artefacts) peuvent être l'ensemble des éléments se trouvant dans du code source ; des images, du contenu audio, web, des fichiers de configurations. L'identification fait donc l'inventaire de tous les assets d'un produit. Ensuite, la seconde étape est l'acquisition des artefacts au sein de la LPL existante. Chaque asset issu du produit est comparé avec les assets déjà présent dans la LPL, afin de déterminer s'il s'agit d'un nouvel élément. Cela permet d'incrémenter au fur et à mesure l'ensemble des artefacts de la LPL. L'acquisition de ces assets veillent également à préserver le comportement des produits. Vient ensuite la troisième étape, celle du calcul de la variabilité. Dans cette étape, la variabilité introduites par les artefacts et caractéristiques du produit vient modifier la variabilité de la LPL précédente. Cela permet de mettre à jour les modèles de variabilités qui seront présentés aux développeurs. Enfin la dernière est la localisation des caractéristiques parmi les artefacts de la LPL. Cette étape permet de tracer les liens entre les caractéristiques renseignés su nouveau produit, et les groupes d'artefacts qui seront désignés comme étant leurs implémentations, ou alors l'implémentation d'une interaction entre plusieurs caractéristiques.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Identification des assets et l'entrée des produits

La première partie du projet est consacrée à l'identification des artefacts du produit à intégrer Nous y présentons notre solution concernant l'analyse à granularité fine d'un code source. Afin de répondre au problème de construction de l'ensemble des artefacts, nous proposons une identification automatique des artefacts depuis une analyse statique du code source des produits.

Cette identification à plusieurs objectifs :

Premièrement, le processus d'identification doit parcourir le code source d'un produit pour y détecter l'ensemble de ses artefacts. C'est-à-dire qu'elle identifie toutes les classes, interfaces, méthodes ou instructions du code source. Deuxièmement, le processus d'identification doit conserver la structure initiale du produit en structurant ses artefacts de façon à maintenir leurs ordres d'apparition des éléments ordonnés du code. Nous parlons notamment de conserver l'ordre des artefacts déclarés dans des séquences, comme p. ex. les instructions. Nous devons préserver ces séquences si l'on veut éviter de modifier le comportement du produit une fois intégré.

Troisièmement, l'identification doit permettre de décrire un produit sous la forme d'un ensemble d'artefacts. Cet ensemble d'artefacts est le socle sur lequel repose la construction des configurations d'artefacts d'un produit, et donc la création du contexte formel des artefacts

Nous avons dû faire face à de multiples enjeux et problématiques décrits ci-dessous Problématiques lors de mon alternance

L'identification des artefacts est nécessaire pour construire la plateforme, et étudier la variabilité de la LPL. Son objectif est double : construire un ensemble d'artefacts de sorte à distinguer tous les artefacts dans un produit, et utiliser cet ensemble pour comparer les artefacts entre plusieurs produits. L'identification des artefacts est relativement simple si on considère une granularité Fichier-Classe ou Méthode-Fonction, mais l'identification se complexifie au niveau Instruction. Pour le comprendre, commençons par le cas d'une granularité Fichier-Classe. A cette granularité, pour identifier les artefacts dans un produit, il suffit de considérer l'ensemble de ses fichiers. Pour les fichiers, l'unicité des éléments s'obtient du fait que les systèmes d'exploitation rendent impossible la déclaration de deux fichiers au même nom déclaré dans un même dossier

Il n'existe donc pas deux fichiers qui partagent à la fois le même nom et le même chemin. On distingue s'ils ont des fichiers homonymes, car ils ont des chemins différents. Le même principe s'applique globalement aux classes. On s'intéresse ici à la signature d'une classe dans son namespace lors de sa déclaration pour identifier l'artefact. L'identification est souvent triviale, car les compilateurs refusent l'ambiguïté d'avoir plusieurs classes homonymes dans un même fichier. Le cas des sous-classes homonymes est différent, car

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

elles sont deux classes déclarées dans des champs différents. L'unicité des artefacts au niveau Fichier-Classe est donc garantie par les règles du système d'exploitation et/ou du compilateur.

Au niveau Méthode-Fonction, on utilise la signature de l'élément déclaré (méthode ou fonction) pour identifier l'artefact. Globalement, les compilateurs empêchent la déclaration de deux méthodes (ou fonctions) partageant la même signature dans un même champ de déclaration. Dans le cas de deux méthodes partageant la même signature (par exemple le polymorphisme), dans deux classes différentes, on utilise leurs chemins dans l'AST pour les distinguer

L'entrée des produits

L'intégration est donc le point d'entrée de notre approche. Son principe est de prendre en entrée un produit, accompagné d'une liste des caractéristiques implémentées dans celui-ci. La phase d'intégration a pour objectif de décomposer un produit en artefacts pour les ajouter à la LPL. L'intégration repose sur deux étapes : l'identification des artefacts et leurs acquisitions au sein de la plateforme. Ces deux étapes sont effectuées automatiquement à partir d'une analyse statique du code source du produit. Nous faisons l'hypothèse simplificatrice que le code source contient à lui seul l'implémentation complète des caractéristiques d'un produit. Cette hypothèse facilite notre conception pour SPL Genarator car elle restreint l'analyse de la variabilité aux artefacts de codes sources. Cependant, l'hypothèse déforme la réalité car l'implémentation d'une caractéristique peut dépendre d'éléments extérieurs au code (des images, du texte, des bases de données).

La phase de réingénierie prend comme première entrée un produit (le code source d'un logiciel conçu par les développeurs). Dans la pratique, cela revient à passer à notre outil SPL Generator, le projet du produit : son code source, mais aussi ses ressources. En somme, l'ensemble des éléments logiciels constitutifs du produit. Son principe est de prendre en entrée un produit, accompagné d'une liste des caractéristiques implémenté par celui. La phase d'intégration a pour objectif d'intégrer ce produit et ses caractéristiques dans la LPL. En d'autres termes, l'intégration automatiquement réalise le processus de réingénierie

L'entrée des caractéristiques du produit

D'autre part, une seconde entrée correspond au nom des caractéristiques implémentées dans par le produit. Ces dernières prennent la forme d'une liste de noms, et sont renseignés par les développeurs. En renseignant manuellement la liste des caractéristiques implémentés dans un produit, les développeurs réalisent une analyse partielle du domaine dans la LPL. Cette analyse peut se réaliser par l'étude du cahier des charges associés au produit. Toutefois, cette tâche est loin d'être triviale et dépend principalement de la capacité des développeurs à faire émerger du cahier des charges un ensemble de

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

caractéristiques. Or, nous pouvons noter un manque de standard dans l'industrie et donc de formalisme sur la tenue de ces cahiers des charges. Ainsi certaines pratiques spécifiques aux entreprises, viendront faciliter ou non la réalisation de l'analyse du domaine par les développeurs de l'équipe IT après mon départ de l'entreprise.

L'identification des assets du code source du produit.

Les nouveaux produits qui sont soumis à la LPL prennent la forme de d'un arbre syntaxique. Abstrait (Abstract Syntax Tree en anglais). Ces arbres sont composés des artefact ou asset du nouveau produit à integrer.la première étape consiste à identifier les artefacts de ces produits à partir de leur AST. L'identification des assets (ou artefacts) vise à trouver tous les assets du code source d'un produit logiciel qui peuvent être intégrés dans une LPL. Cette technique peut être appliquée à n'importe quel langage possédant un arbre syntaxique

L'étape d'identification permet de distinguer l'ensemble des artefacts qui compose un produit.

Un asset (ou artefact) a une valeur, qui représente le code source de l'élément logiciel qu'il représente. L'identification crée un artefact pour chacun des noeuds principaux de l'AST. Les artefacts identifiés sont stockés dans une variable regroupant l'ensemble des Assets formant une structure d'asset (SA) sous forme d'arborescence.

A la manière d'un Arbre Syntaxique, cette SA stocke les assets en suivant une hiérarchie de parent-enfants. Ainsi, une SA ressemble à l'arbre syntaxique d'un langage ciblé.

Pour identifier ces artefacts depuis le code source, nous passons donc par sa représentation sous forme d`un arbre de syntaxe abstraite. Cela évite de devoir dépendre de la mise en forme du code et l'arborescence est simple à naviguer à l'aide d'un patron de conception Un parcours en profondeur permet de construire une structure de donnée formant un arbre à partir des caractéristiques des assets. En fonction du noeud visité dans l'Arbre syntaxique, un artefact est créé et ajouté à la SA.

L'artefact considéré ici est un élément de l'AST. Il peut être la déclaration d'une classe, d'une méthode ou encore d'une instruction.

Chaque artefact est défini dans un modèle des artefacts, modèle qui est entendu depuis un modèle des artefacts générique. Nous détaillerons ces modèles dans la section. Les assets ont tous un identifiant différent à l'intérieur d'une SA. Ces identifiants sont essentiels pour éviter l'acquisition d'artefacts déjà intégrés dans la LPL, et ainsi éviter la redondance, lié à la duplication de l'implémentation de fonctionnalités.

Lorsque nous intégrons des artefacts à une implémentation SPL, nous devons nous assurer que nous n'ajoutons pas d'artefacts déjà intégrés et ainsi éviter d'ajouter l'implémentation de la même fonctionnalité. Ceci afin d'éviter l'effet indésirable de devoir maintenir deux versions de la même fonctionnalité dans une implémentation SPL. Par conséquent, il faut

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

que chaque artefact soit unique dans une implémentation SPL. Cette unicité doit être garantie lors de l'acquisition de nouveaux artefacts, en comparant les artefacts d'un

nouveau produit avec ceux qui se trouvent déjà dans la SPL. Par exemple, les artefacts de classes, de méthodes et de champs sont facilement distinguables car ils ne sont déclarés qu'une seule fois par fichier. Cependant, avec notre objectif de granularité fine, l'unicité des artefacts doit prendre en compte le cas particulier des déclarations, qui peuvent apparaître plusieurs fois dans un produit. Ainsi, le premier problème est de conserver l'unicité de tous les artefacts pendant la réingénierie de la SPL, c'est-à-dire la phase d'intégration. La première question est donc la suivante : comment garantir cette unicité des identifiants dans la SA (Structure d'Asset) ?

L'unicité des Identifiants

Ces identifiants vont nous permettre de comparer les artefacts présents dans deux LPL. C'est à partir de cette comparaison que de nouveaux artefacts seront acquis : en comparant les deux structures d'asset de la LPL avec ceux d'un produit. Par exemple, nous pouvons comparer les deux ensembles d'artefacts de la SA et celui du nouveau produit pour trouver quels sont les nouveaux artefacts du produit. Par conséquent, nous savons qu'il existe une seule instance de chaque artefact, c'est-à-dire qu'il n'y a pas de duplication, si aucun artefact ne partage le même ID dans l'implémentation finale de la LPL. L'ID d'un artefact est calculé comme la clef de hachage de la valeur de l'artefact, ajouté à l'ID de son parent. Cette construction récursive des ID, qui démarre de la racine de la SA, garantit que chaque artefact a un ID unique dans une Structure d'Asset. De plus, nous pouvons étendre cette propriété d'unicité des ID à l'ensemble du produit. En effet, l'artefact de l'unité de compilation reçoit une valeur qui correspond au chemin relatif du fichier réel, à l'intérieur du produit. Comme deux fichiers différents auront nécessairement un chemin relatif différent, deux racines de la SA ne peuvent pas partager le même ID. Avec cette construction des ID, seuls les artefacts qui partagent la même hiérarchie parentale et qui ont la même valeur, partageront le même ID. Par exemple, cela peut se produire si deux déclarations de la même méthode partagent le même code. Si un produit possède deux artefacts identiques avec le même ID. Pour les différencier, nous ajoutons spécifiquement pour les artefacts de déclaration un autre paramètre pour construire leurs ID. Ce paramètre est défini comme étant le nombre de jumeaux qui précède l'artefact, plus un. Dans notre exemple, cela est symbolisé par l'indice donné à l'artefact.

Ainsi l'étape d'acquisition des artefacts se présentent comme une fusion entre les SA d'un produit, et ceux d'une LPL. Cette étape a pour objectif d'ajouter à la LPL tous les nouveaux artefacts introduit par le produit. En d'autres termes, l'acquisition doit ajouter au bon endroits les artefacts du produit dans la Structure d'Asset d'une LPL et éviter d'ajouter une seconde fois un artefact déjà présent dans la LPL.

Cela est essentiel pour construire correctement la plateforme, et éviter la génération de produit erroné.

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Acquisition des artefacts

Une fois les artefacts identifiés sur les nouveaux produits, il faut les intégrer dans la LPL et fusionner ces nouvelles fonctionnalités c'est tout l'objet de cette seconde partie nécessaire à la construction de notre outil SPL Genrator

L'acquisition est donc l'étape d'ajout des artefacts identifiés dans la ligne de produits.

L'objectif de l'acquisition est ainsi d'intégrer à la LPL l'ensemble des artefacts spécifiques aux produits, tout en respectant les critères suivants : l'absence de redondance ; la préservation des produits déjà intégrés ; et la préservation du produit que à intégrer. Pour réaliser cela, l'acquisition s'effectue en considérant les deux arbres d'artefacts : celui identifié depuis le produit, et celui de la plateforme d'une LPL.

L'intégration se charge également d'actualiser la représentation interne d'une LPL. Chaque élément d'un produit fait l'objet d'un artefact. Nous adoptons pour l'ensemble de ces artefacts une structure de donnée sous la forme d'une arborescence. Comme vu précédemment tous les assets peuvent être stocker dans la Structure d'Asset (SA) L'essentiel à retenir ici est qu'une SA peut-être est augmentée de nouveaux assets à chaque

intégration, si le produit en contient de nouveaux.

Pour acquérir les nouveaux artefacts d'un produit et les intégrer, nous devons fusionner deux ensembles : d'une part l'ensemble des Sas du produit ; et d'autre part l'ensemble des SAs déjà présents dans la SPL. Pour fusionner ces deux ensembles, nous formons des couples de Structure d'Asset : une SA provenant du produit et un de la LPL, s'ils correspondent au même fichier. Pour tout nouveau fichier introduit dans le produit, les SAs correspondantes ne correspondront pas dans la LPL, ils sont donc ajoutés sans fusion.

Pour cela il existe des algorithmes permettant de fusionner des Arborescences.

Algorithm 1: Algorithme de fusion de deux Structures d'Asset pour l'acquisition des artefacts

Il est nécessaire de préserver la séquence des assets à l'intérieur de la SA. Puisque deux SAs peuvent contenir deux séquences d'instructions différentes, leur fusion doit assurer que la SA de sortie préserve ces séquences, sans doublons. Nous proposons de construire dans la SA fusionnée une super-séquence qui couvre les deux séquences de la Structure d'Asset produit et de la SA LPL. Notre solution repose sur l'algorithme Longest Common Subsequence (LCS) , mais une présentation complète de LCS sort du cadre de cette thèse. LCS calcule la plus longue séquence d'éléments qui sont communs aux deux séquences. Nous présentons notre algorithme de superséquence basé sur LCS. Tous les artefacts

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

nouvellement ajoutés sont mis en évidence en gris. Cependant, dans certains cas, il est obligatoire de dupliquer les artefacts pour construire.

Algorithm 2: l'algorithme Longest Common Subsequence (LCS)

Une sous-séquence est la sous-séquence maximale d'une séquence donnée, où une sous-séquence est une liste consécutive et ordonnée d'éléments de l'ensemble initial.

Qu'est-ce que le LCS ?

Le problème de la plus longue sous-séquence commune consiste à trouver toutes les sous-séquences possibles d'une chaîne donnée ou, si elles sont finies, à calculer la plus longue. En général, de nombreux algorithmes fonctionnent bien pour trouver de longues séquences communes dans des chaînes de caractères dont les types de caractères sont aléatoires, mais dès que ces types de caractères deviennent suffisamment longs (100-150), il peut être très difficile de calculer des solutions optimales avec des algorithmes aléatoires qui ne se terminent pas après un certain nombre d'étapes. Parmi les autres problèmes informatiques qui peuvent avoir une complexité récursive similaire, citons la correspondance de chaînes de caractères et la recherche de similitudes DNF.

Bien que le problème n'ait pas de solution pour toutes les chaînes de caractères, il existe des algorithmes qui peuvent le résoudre efficacement pour de grandes classes de chaînes de

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

caractères. Le plus efficace d'entre eux est l'algorithme de Hirschberg, mais il existe diverses améliorations et simplifications de celui-ci (par exemple, l'algorithme de Rabin-Karp).

Le problème de la plus longue sous-séquence commune est un cas particulier de la correspondance optimale des sous-séquences et de la construction d'arbres de suffixes. Si nous connaissons toutes les sous-séquences de deux séquences données, nous pouvons utiliser la programmation dynamique pour trouver la plus longue de ces sous-séquences. Puisque ces séquences ne sont pas connues dans leur intégralité, nous pouvons construire un arbre de suffixes avec la plus longue sous-séquence commune comme feuille, et itérer sur le sous-arbre.

Le problème de la plus longue sous-séquence commune est NP-dur pour toutes les chaînes de caractères.

L'algorithme le plus efficace qui résout le problème de la plus longue sous-séquence commune pour les chaînes de longueur "n" avec une probabilité élevée (voir Algorithme) est appelé algorithme de Hirschberg (ou algorithme de Hirschberg), bien qu'il existe plusieurs améliorations basées sur la géométrie computationnelle qui rendent cette solution plus efficace. Il utilise à la fois l'algorithme glouton pour trouver les sous-chaînes et les arbres de suffixes pour trouver les sous-chaînes maximales. Lorsque les longueurs des deux chaînes sont éloignées l'une de l'autre, il peut être nécessaire de diviser la chaîne à un certain point et d'itérer en trouvant une sous-chaîne dans une chaîne qui contient un préfixe ou un suffixe de la partie. Cela peut être fait en un temps raisonnable dans la pratique, même lorsque la recherche d'une sous-séquence commune maximale n'est pas réalisable. Lorsqu'on travaille avec des graphes géométriques où les noeuds représentent des chaînes au lieu de sommets, on parle de problème de recherche d'arbre de suffixes de Hirschberg lorsqu'on travaille avec des graphes au lieu de chaînes. Dans ce cas, ce problème devient apparenté aux problèmes NP-complets en raison de sa similarité avec ces problèmes.

Pour en revenir à nos Structures d'Asset : Ces deux structures du même type sont appairées et fusionnées au sein d'une Structure de donnée mère, contenant un exemplaire de chaque artefact en provenance des deux SAs.

L'ordre des artefacts ordonnés est conservé au sein d'une super-séquence, qui est construite à partir d'un algorithme basé sur la plus longue sous-séquence commune Cet algorithme de super-séquence nous assure de pouvoir retrouver les séquences issues des deux structures d'asset.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Notre fusion évite donc bien la redondance et la construction de super-séquences valides qui préserve le comportement de tous les produits. Pour finir, l'acquisition et les super-séquences peuvent mettre en lumière l'existence des artefacts dupliqués. Tout comme les artefacts jumeaux, les artefacts duplicata sont différent d'une redondance au sens où ils sont nécessaires pour la création d'une super-séquence valide, et donc d'une plateforme valide. Ces artefacts duplicata disposent de leur propre indice, l'indice duplicata, ce qui permet de les distinguer et de maintenir la distinction des artefacts.

Une fois l'acquisition réalisée, les structures d'Asset remplacent les anciennes de la ligne de produits. La LPL intègre désormais les nouveaux artefacts du produit, ce qui termine la première phase d'intégration de la réingénierie.

Les nouvelles structure d'Asset serviront à la génération du code de la plateforme configurable et à la génération de nouveaux produits pour la LPL.

Avec l'identification et l'acquisition, nous proposons une méthodologie pour identifier les artefacts d'un code source et les acquérir au sein de la LPL, afin d'en construire la plateforme. Comme nous l'avons décrit, ces étapes sont réalisées de sorte à minimiser la redondance du code intégré dans la plateforme.

Les modèles de variabilité et leur extraction

Dans les parties précédentes nous avons présenté l'identification des artefacts permet d'obtenir un ensemble cohérent contenant les artefacts d'un produit et comment l'acquisition des artefacts permet d'ajouter ces derniers aux arbres des assets (SA) qui composent notre représentation de la LPL.

À la suite de l'intégration se déroule l'analyse de la variabilité et la localisation des caractéristiques de la ligne de produits. À travers ces deux étapes, notre objectif est de construire des modèles décrivant la variabilité et les contraintes des caractéristiques (et artefacts). Ainsi que d'extraire des liens de traçabilité entre les caractéristiques et les artefacts qui forment leurs implémentations. Pour réaliser ces deux étapes, nous nous appuyons sur l'analyse de concepts formels (ACF), et son extension l'analyse de concepts relationnels (ACR)

Nous utiliserons également cette méthode pour la localisation de caractéristique(en plus d'autres méthodes tirée de papiers de recherches)

Nous définirons rapidement en quoi consiste un modèle de variabilité avec des exemples simples puis dans un second temps l'extraction des modèles de variabilité.

L'ACF est appliquée séparément, d'une part sur l'ensemble des artefacts, et d'autre part sur celui des caractéristiques, afin d'analyser la variabilité de ces deux ensembles et d'extraire

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

leurs contraintes de variabilité

Nous présentons enfin succinctement l'ACR qui permet de réunir l'ensemble des artefacts et celui des caractéristiques afin de localiser l'implémentation des caractéristiques et de leurs interactions parmi les artefacts qui composent la LPL

Qu'est-ce qu'un modèle de variabilité ?

La variabilité d'une LPL se visualise grâce à un modèle de variabilité. Il existe différent modèle. Le modèle le plus répandu est le modèle de caractéristiques (ou feature-model en anglais). Le Feature-Model représente une arborescence où chaque caractéristique occupe la place d'un noeud. Les branches du feature-model mettent en relations les caractéristiques, comme l'implication, mais aussi des exclusions, ou des alternatives.

Exemple : prenons l'exemple d'une voiture. Une voiture possède des éléments communs obligatoires. La carrosserie est donc une caractéristique obligatoire. Voici la notation adaptée pour le FM :

En revanche, une climatisation est optionnelle dans une voiture, la notation pour un feature Optionnelle se note

Nous pouvons avoir également une composition de feature, un choix, ou un choix exclusif

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Enfin nous avons également des contraintes de cohérence qui sont matérialisés par des dépendances de présence entre les features

Cette variabilité s'applique aux différentes caractéristiques découvertes et les développeurs ont pour objectifs d'obtenir les relations qui existent entre ces caractéristiques. Par exemple, ils doivent s'interroger les conditions d'utilisation d'une caractéristique particulier dans un produit. Cette conception de la variabilité s'accompagne de la réalisation de modèles de variabilité, comme des modèles de caractéristiques

Le processus d'extraction. Elle se consacre à la récupération de la variabilité des différents produits, en l'étudiant au travers des artefacts des produits. L'objectif est donc étant de différencier les artefacts communs à l'ensemble des produits, des artefacts spécifiques à seulement quelques-uns d'entre eux. La détection s'accompagne souvent d'une localisation de l'implémentation des caractéristiques (ou feature location en anglais), qui permet de rétroactivement faire l'ingénierie du domaine de la ligne de produit

L'étape d'analyse de la variabilité nous permet de découvrir la variabilité des artefacts et des caractéristiques, ainsi que les contraintes de variabilités (implications, cooccurrence et exclusion mutuelle).

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Ces contraintes sont utilisées pour construire deux modèles de variabilités, celui des artefacts et celui des caractéristiques.

Nous avons également expliqué comment ces deux modèles pouvaient être employés par les développeurs lors de la maintenance de la LPL ou lors de la génération de nouveaux produits, c'est à dire pour la sélection des caractéristiques d'une nouvelle configuration.

Le processus décrit pour l'analyse de la variabilité adresse le défi présenté à la section

Comment peut t on extraire automatiquement la variabilité SPL et ses contraintes ?

Pour déterminer la variabilité des assets et des fonctionnalités, ainsi que leurs contraintes, nous appliquons l'analyse formelle des concepts (FCA)

FCA pour la variabilité

FCA travaille sur un contexte formel, qui est un ensemble d'associations entre objets et attributs. Chaque objet est décrit par un ensemble d'attributs qui le caractérisent. Par exemple, les produits logiciels peuvent être l'objet, chacun d'entre eux ayant un ensemble d'artefacts comme attributs. La FCA construit un ensemble de concepts à partir d'un contexte formel. Un concept est un regroupement maximal d'objets qui partagent un ensemble minimal d'attributs. Un concept est constitué d'une intention et d'une extension. L'intention du concept donne l'ensemble de ses attributs, et son extension donne l'ensemble des objets qui partagent ces attributs particuliers. De plus, FCA établit un ordre partiel sur ces concepts, où un concept A est supérieur à un concept B si les attributs des objets dans B sont dans A, ou vice versa si les objets avec les attributs dans A sont dans B. L'ordre partiel forme une hiérarchie sur ces concepts, ce qui permet de construire un treillis de conception donne l'ensemble des objets qui partagent ces attributs particuliers.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

En sortie d'intégration, la modification de la variabilité

Après l'acquisition des artefacts, nous expliquons maintenant comment la variabilité est gérée :

Chaque SPL est caractérisée par sa capacité à varier afin de générer des produits différents. Il est donc nécessaire pour le fonctionnement d'une SPL de distinguer dans son implémentation les parties communes, de ses parties variables. Nous désignons ces parties variables par le terme points de variation. La connaissance des points de variation permet aux développeurs de comprendre la variabilité dans l'implémentation de leur SPL. De plus, cela leur permet de concevoir leurs produits, en sélectionnant les artefacts appropriés d'un point de variation à inclure dans un produit. Il est donc essentiel pour les développeurs de savoir où se trouvent ces points de variation et quels assets variables peuvent y être sélectionnés. Cependant, une vision binaire de la variabilité, c'est-à-dire variable, est insuffisante. Les développeurs doivent également connaître les contraintes entre la fonctionnalité (et donc entre les artefacts). Cela nécessite d'extraire les contraintes de variabilité nécessaires entre les fonctionnalités et entre les assets.

Le calcul de la variabilité dans notre Outils SLP generator

Pour déterminer la variabilité des artefacts et des fonctionnalités, ainsi que leurs contraintes, l'idée est d'appliquer l'analyse formelle des concepts (FCA)

Notre objectif est de construire des modèles décrivant la variabilité et les contraintes des assets. Ainsi que d'extraire des liens de traçabilité entre les caractéristiques et les artefacts qui forment leurs implémentations. Pour réaliser ces deux étapes, nous nous appuyons sur l'analyse de concepts formels (ACF), et son extension l'analyse de concepts relationnels.

Nous effectuons l'analyse de la variabilité de la LPL. Cette étape a pour objectif de déterminer quels sont les assets communs et les assets optionnels de la LPL, et il en va de même pour les caractéristiques. Pour effectuer cette analyse, notre outil s'appuie sur l'Analyse de Context Formel. Cette méthode a été appliqué dans ce précédant travaux pour découvrir la variabilité et les contraintes entre les caractéristiques d'une famille de produits. L'analyse permet d'obtenir l'ensemble de savoir quel est l'ensemble des artefacts communs, et celui des assets optionnels (ou spécifique à quelques produits, mais pas tous). On peut faire de même pour les caractéristiques (partie suivante !)

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Cette d'analyse automatique de la variabilité s'intègre dans notre outil afin de déterminer la variabilité des assets de la LPL puis de construire des modèles de variabilité à destination des développeurs, afin de représenter la variabilité.

L'objectif de cette section est donc de présenter notre processus d'analyse de la variabilité tel que nous le concevons dans pour l'automatisation.

Nous savons d'après les prérequis et l'études de l'art que la FCA permet d'extraire au moins trois types de contraintes : l'implication, l'exclusion mutuelle et la cooccurrence. Pour expliciter ces trois contraintes, prenons deux groupes d'éléments

A et B L'implication indique quels sont les éléments A qui sont toujours présents dans un produit quand les éléments B sont présents. L'exclusion mutuelle indique que les éléments de A ne sont jamais présents en même temps que les éléments de B. Et enfin la cooccurrence indique que les éléments A sont toujours présent avec B, et réciproquement, pour n'importe quel produit où apparaissent A ou B.

L'analyse de la variabilité nous sert de deux manières lors de l'ingénierie automatique de la LPL : d'une part, elle permet de distinguer dans la plateforme quels sont les artefacts communs des artefacts optionnels. La même chose peut être effectuée pour les caractéristiques, ce qui permet de savoir lesquelles sont communes et lesquelles sont optionnels. D'autre part, l'analyse nous permettait de construire deux modèles de variabilités : celui des artefacts et celui des caractéristiques. Ces deux modèles sont construits sur la base des trois contraintes extraites grâce à l'application de FCA. Pour les développeurs, l'intérêt vient surtout de l'utilisation du modèle de variabilité des caractéristiques. Il permet d'une part la sélection des caractéristiques lors de la génération de nouveaux produits. Par ailleurs, il offre une vue globale des caractéristiques de la LPL et de leur la variabilité, ce qui est utile pour la compréhension et la maintenabilité de la LPL

Les modèles de variabilités sont des diagrammes générés par notre outil. Ils permettent de rendre compte de la variabilité qui à lieux dans une LPL à une itération donnée. Puisque la LPL évolue à chaque itération, la réingénierie étant induite par l'aspect réactif de l'approche. Ces modèles évoluent également. La variabilité est automatiquement analysée depuis l'ensemble des produits passés en entrée de SPL Generator.Il existe dans notre outil deux types de modèles : le modèle de variabilité des artefacts, et le modèles de variabilités des features. Nous présentons ici les informations présentent dans le modèle de variabilité des artefacts, et comment elles peuvent être utiles aux développeurs :

1. la variabilité binaire des artefacts, qui désigne si un artefact est commun à l'ensemble des produits, ou s'il est spécifique à certains produit (donc optionnel du point de vue de la LPL).

2. L'implication entre les artefacts. L'implication est une contrainte qui désigne qu'entre deux groupes d'artefacts A et B, si A implique B alors les artefacts B doivent forcement être sélectionné dans un produit si A est sélectionné. En d'autres termes, cela signifie qu'il existe une dépendance entre A et B, et qu'il est probable que modifier les artefacts de A est un impact sur le comportement des artefacts de B. Cette information est donc utilisable par les développeurs lors de la maintenance de leur LPL.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

3.

10 Mai 2019

L'exclusion mutuelle entre les artefacts. L'exclusion est la seconde contrainte qui désigne que A ne peut pas être sélectionne si B l'est également, et inversement. En d'autres termes, il n'existe pas de dépendance entre ces deux groupes. Les développeurs peuvent donc modifier A sans craindre d'impacter le comportement de B, et inversement.

4. La cooccurrence des artefacts. La cooccurrence est une contrainte qui s'applique sur un groupe d'artefacts : Pour deux artefacts x et y, s'ils appartiennent aux mêmes groupes A, alors x implique y et inversement. Ils doivent toujours apparaître ensemble dans un produit. Ainsi en modifiant un artefact d'un groupe cooccurrent, les développeurs doivent être vigilant et veiller à l'impact que peuvent avoir ces modifications sur l'ensemble du groupe. Le modèles des caractéristiques contient ces quatre mêmes informations, mais les présentes au niveau des caractéristiques de la LPL. Puisqu'il existe une traçabilité entre les assets et les features des deux modèles, les développeurs peuvent naviguer entre les informations de variabilité, représentée sur deux niveaux : celui des features et celui des artefacts. Cela facilite la compréhension logicielle en permettant de savoir quels sont caractéristiques de la SPL, leurs contraintes, et quels sont les artefacts qui les implémentent.

Création du contexte formel (PCM) à partir des assets

L'application de l'ACF sur le contexte formel des artefacts permet d'obtenir un ensemble de concepts. Chaque concept regroupe des produits partageant un ensemble maximum d'artefacts. Les concepts des artefacts sont ensuite hiérarchisés pour construire l'AOC-Poset; et respectivement les concepts des caractéristiques sont construit et hiérarchisés, afin d'obtenir un AOC-Poset des caractéristiques.

Nous commençons par la variabilité des assets d'une SPL. Grâce aux ID uniques des artefacts, nous pouvons créer un contexte formel où nous garantissons que chaque ID

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

représente un artefact spécifique dans les produits. Pour créer ce contexte formel, nous assignons à chaque produit une liste de l'ID de l'asset, qui correspond à l'asset identifié dans ce produit.

FCA construit ensuite un treillis à partir du contexte formel. Extraction de la variabilité à partir du Treillis

Le but de cette partie est d'extraire les implications ainsi que les relations des contraintes à partir du treillis obtenu dans la partie précédente, Nous mettons en place la méthodologie décrite dans le papier de Al-MsieDeen (2014). L'extraction de la variabilité s'effectue donc depuis les AOC-Posets obtenues des artefacts

Nous allons donc ici décrire l'extraction sur l'AOC-Poset des. Le treillis nous permet d'abord d'extraire la variabilité binaire (c'est-à-dire commune ou variable) : les artefacts communs

Nous savons que l'AOC-Poset peut être exploité pour extraire la variabilité et ses contraintes. Dans un premier temps, la variabilité binaire des attributs peut s'extraire d'un AOC-Poset en considérant le concept de plus haut niveau dans la hiérarchie. Dans un AOC-Poset, ce concept sommet regroupe l'ensemble des attributs partagés par l'ensemble des objets. Puisque ces attributs sont partagés par l'ensemble des objets, alors ils désignent l'ensemble des attributs communs à tous les produits jusqu'ici intégrés dans la ligne de produit.

Le concept de sommet de l'AOC-Poset des artefacts contient dans ces attributs l'ensemble des artefacts communs

Une fois l'ensemble des artefacts communs obtenu, on peut en déduire l'ensemble des artefacts optionnels, puisqu'il s'agit de tous les autres artefacts qui n'apparaissent pas dans le concept sommet. Ainsi, l'AOC-Poset nous permet donc de récupérer la variabilité binaire des éléments de la LPL.

Dans un deuxième temps, nous utilisons chacun des AOC-Posets pour extraire les contraintes entre leurs attributs. Nous savons que trois contraintes portant sur les attributs d'un contexte formel peuvent être extraites depuis l'AOC-Poset : l'implication, la cooccurrence et l'exclusion mutuelle.

Des algorithmes sont proposés pour récupérer ces trois contraintes de variabilité dans le papier de Al-MsieDeen (2014).

L'étape d'analyse de la variabilité nous a permis de découvrir la variabilité des artefacts, ainsi que les contraintes de variabilités (implications, cooccurrence et exclusion mutuelle). Nous avons également expliqué comment ces deux modèles pouvaient être employés par les développeurs lors de la maintenance de la LPL ou lors de la génération de nouveaux produits, c'est-à-dire, pour la sélection des caractéristiques d'une nouvelle configuration.

Une fois cette étape d'extraction de la variabilité terminée il reste a localiser les caracteristiques qui viendront implémenter les assets

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

La localisation des caractéristiques.

L'étape de localisation des caractéristiques nous permet de tracer les caractéristiques aux artefacts qui ont été identifiés et intégrés à la LPL lors de l'intégration.

Comme vu dans l'état de l'art, cette localisation des caractéristiques donc consiste à associer chaque artefact à au moins une caractéristique et vice versa. En général, les techniques de Feature Location supposent que les caractéristiques de chaque produit sont connues.

Dans la première partie du mémoire d'alternance, nous avons discuté dans l'état de l'art des approches existantes appliquant une localisation de caractéristiques. Or beaucoup de techniques utilisées par ces approches étaient limitées par une granularité trop grosse (Méthode-Fonction) et par l'absence d'une localisation des interactions de caractéristiques. Ce faisant, l'application des techniques proposée par ces travaux est limitée, car les traces extraites ne pouvaient pas être employées pour reproduire les implémentations des produits initiaux.

Nous avons utilisé plusieurs méthodes issues de différents papiers, notamment par l'analyse textuelle préalablement définie dans la section de l'état de l'art. Nous recherchons une approche hybride pour notre projet mais cette étape n'est pas encore terminée à ce jour, car les résultats ne sont pas satisfaisants et par manque de temps. Nous planifions de terminer cette étape courant Septembre 2019.

Nos analyses basées sur la recherche textuelle pour la localisation des caracteristiques n'ont pas été probantes, donc nous allons donc chercher à mettre en pratique l'ACF, jadis utilisé pour les assets, mais cette fois dans l'optique d'une localisation de caractéristique. Comme dans le papier de Al-MsieDeen: feature-location-in-a-collection-of-software-product-variants-using-formal-concept-analysis (2014)

L'implémentation de la localisation des caractéristiques est toujours en cours à ce jour et nous ne pouvons pas donner encore de résultats précis quant aux approches que nous allons décrire par la suite :

L'analyse de concepts formels (ACF) pour réaliser la localisation.

L'intérêt d'ACF est que son application est indépendante de la nature des artefacts pourvu qu'un contexte formel puisse être construit. Ainsi, dans cette section, notre objectif est de formuler une technique de localisation basée sur l'analyse de concepts formels. Notre outil proposera une localisation à granularité fine pour les caractéristiques et de leurs interactions. De plus, en appliquant l'analyse de concepts formels à la localisation, nous réutiliserons les contextes formels, créés à l'occasion de l'analyse de la variabilité, ce qui donnera une certaine cohérence aux méthodes déployées dans l'automatisation.

L'étape de localisation des caractéristiques nous permet de tracer les caractéristiques aux artefacts qui ont été identifiés et intégrés à la LPL lors de l'intégration

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Les contextes formels des artefacts et des caractéristiques, utilisés à l'étape d'analyse de la variabilité, sont utilisés pour construire un AOC-Poset relationnel. Les concepts de l'AOC-Poset relationnel introduisent à la fois des artefacts et des caractéristiques, et nous y appliquons nos algorithmes pour extraire des traces corps et des traces d'interactions. Ces traces seront ensuite transformées en formule logique puis réduite afin de simplifier leurs interprétations et compréhension par les développeurs.

L'étape de localisation de caractéristiques extrait donc les traces les caractéristiques avec les artefacts de la plateforme configurable. L'implémentation d'une caractéristique est donc définie comme un ensemble distinct d'artefacts. La technique de localisation mise en place considère aussi bien la récupération des implémentations de chaque caractéristique, que celles des interactions entre caractéristiques. Ainsi grâce à la localisation, nous saurons quels sont les artefacts codant pour une caractéristique, ou pour une interaction spécifique. Le travail de maintenabilité des développeurs s'en voit facilité car les traces de la localisation permettent d'indiquer précisément où sont implémenté les caractéristiques parmi les artefacts de la plateforme configurable.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

10 Mai 2019

Conclusion et résultats préliminaires

Tout au long de mon alternance j'ai pu me familiariser avec les différentes approches des lignes de produits logiciel, la participation à la maintenance de ces outils m'ont permis de me familiariser avec les LPLs tout en ayant une vue plus complète des problématiques autour de l'automatisation de ces dernières. Ayant été dans la peau d'un informaticien en ligne de produit logiciel, j'ai pu ainsi mettre en pratique mes connaissances acquises à ce poste pour planifier cette automatisation. Notre approche a donc été guidée par la volonté de faciliter le travail des développeurs. Le développement et le suivi de la LPL était donc une de nos priorités dans la conception de SPL Generator.

Pourquoi l'outil est-t- intéressant pour les développeurs ?

Il se positionne comme un processus qui s'insère dans un cycle de développement logiciel déjà établi. Il s'adopte selon une stratégie hydrique, mêlant l'itératif de la stratégie réactive et l'automatisation souvent rencontrée dans la stratégie extractive. SPL Generator permet de débuter la construction d'une nouvelle LPL selon une ingénierie dirigée par la conception de nouveaux produits, ou de transformer une famille de produits existant en une LPL. Le cycle de conception d'une LPL est itératif : lorsque le besoin d'un nouveau produit se présente, les développeurs peuvent réutiliser les artefacts d'une LPL en générant un produit partiel, à travers la sélection des caractéristiques qu'ils souhaitent inclure dans ce produit partiel.

Et enfin il permet ainsi aux développeurs d'appliquer une réutilisation systématique lors de la conception de nouveaux produits, tout en construisant la LPL de façon automatique. L'automatisation réduit l'effort d'adoption puisqu'elle libère les développeurs des tâches de l'ingénierie du domaine et d'application, et leur permet de se concentrer sur le développement de leurs produits (tâche qu'ils maîtrisent déjà).

Le développement de l'outil SPL Generator a débuté en Novembre 2018, et il est aujourd'hui au stade de la finalisation. De nouvelles méthodes de features location devraient être mises en place et sont sur le point d'être terminées et testées sur notre outil.

Nous avons testé notre outil sur une version très simplifiée de nos logiciels afin de voir si l'intégrations des produits ainsi que toute l'ingénierie fonctionnaient. Nous avons des taux proches de 100% pour l'intégration des produits pour nos premiers tests.

Comme vue dans les parties précédentes, les techniques de features location peuvent être améliorés cela sera l'objet de nos prochains travaux et améliorations de notre outils qui se déroulera durant les prochains mois.

Finalement notre outil SPL Generator s'appuie sur des techniques innovantes d'ingénierie

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

LPL avec des contributions inédites dans notre façon méthodologie.

Une étude quantitative sur la réduction des couts au sein de l'entreprise sera effectuée pour essayer de mesurer le gain de notre approche SPL Generator.

L'ingénierie manuelle des LPL -à travers des stratégies d'adoption que sont la proactive, la réactive et l'extractive- nécessite un coût d'investissement élevé, et l'emploi de développeurs experts pour concevoir la LPL. L'ingénierie manuelle est un investissement sur le long terme qui se trouve être risquée pour les entreprises. Deuxièmement, les travaux existants qui tentent de réduire les coûts de cette ingénierie par l'automatisation souffrent de limitations qui font obstacle à leurs déploiements dans un contexte industriel. Leurs limitations concernent et impactent principalement la sortie du processus, à savoir la LPL obtenue. Notre outil SPL Generator permet un processus automatisé pour l'ingénierie des lignes de produits logiciels.

Durant cette alternance, j'ai pu construire un outil d'aide à la création de lignes de produits logiciel. J'ai pu détailler le fonctionnement général de mon outil SPL Generator et son insertion dans le contexte industriel des développeurs au sein de l'entreprise.

Notre processus s'applique aussi bien pour construire une nouvelle LPL selon une ingénierie dirigée par les besoins de nouveaux produits, ou bien pour migrer une famille de produits préexistante vers une LPL. De plus, après migration, les développeurs peuvent continuer d'appliquer notre outil pour ajouter de nouveaux produits. Le cycle de conception d'une LPL est itératif et se divise en trois phases : l'intégration, l'analyse et la génération. Nous avons présenté ces phases en détail dans les chapitres précédents.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

J'ai pu tout au long de mon alternance, mettre en pratique des connaissances acquises au sein de mes études, tel que la programmation objet, et le management de projets. J'ai acquis de multiples compétences dans le domaine de l'informatique, et plus particulièrement l'univers peu connu des Lignes de produits logiciels. Piloter ce projet m'a permis d'en apprendre plus sur le monde de l'entreprise mais aussi également sur moi-même et mon rapport aux autres.

Dès Septembre 2019, nous allons mettre en production les nouvelles méthodes pour la localisation de caractéristique et allons tester l'outil dans une plus grande ampleur avec à la clef de nouveaux résultats.

J'ai également eu le plaisir de signer un CDD de 1 an afin de continuer cette aventure pour améliorer encore cette automatisation.

J'aimerais encore remercier Laurent sans qui rien de tout cela n'aurait été possible.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT

Voici quelques ouvrages qui ont servis à préparer ce mémoire et à construire notre outil SPL GENERATOR :

M. M. Lehman. Laws of software evolution revisited.(1996)

ANTON KHRITANKOV : « INDUSTRIALIZING SPL DEVELOPMENT FOR SMALL COMPANIES » (2016)

Al-MsieDeen: feature-location-in-a-collection-of-software-product-variants-using-formal-concept-analysis (2014)

Ra'Fat Ahmad Al-Msie'Deen : Reverse Engineering Feature Models From Software Variants to Build Software Product Lines

AOC-posets: a scalable alternative to Concept Lattices for Relational Concept Analysis(Xavier Dolques, Florence Le Ber, and Marianne Huchard) (2013)

Yinxing Xue : Feature Location in a Collection of Product Variants (2000)

L. Bergroth :. A survey of longest common subsequence algorithms, (2000) Magnus Eriksson. An Introduction To Software Product Line Development.

10 Mai 2019

RAPPORT D'ALTERNANCE 2018-2019 THOMAS PETIT






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Les esprits médiocres condamnent d'ordinaire tout ce qui passe leur portée"   François de la Rochefoucauld