# Note - Ces transparents sont très largement inspirés des cours de Eric Cariou, Pierre Alain Muller, Jean-Marc Jezequel, Mireille Blay-Fornarino, Benoît Combemale, Stéphane Ducasse, Anne Etien, ...
# Introduction
## Définition > Software maintenance is the modification of a software product after delivery to correct faults, to improve performance or other attributes. ISO/IEC 14764:2006 Software Engineering — Software Life Cycle Processes — Maintenance
## Définition > Legacy software: A system which continues to be used because of the cost of replacing or redesigning it and often despite its poor competitiveness and compatibility with modern equivalents. The implication is that the system is large, monolithic and difficult to modify. http://mondofacto.com/facts/dictionary
## Disponibilité sur le long terme - Cycle de vie de l’Airbus A300 - Le programme a commencé en 1972, la production a été arrêtée en 2007 - 2007-1972 = **35 années** - Le support durera jusqu’en 2050 - 2050-1972 = **78 années** !!
## Complexité des logiciels ![Complexité des logiciels](/teachings/img/HMIN306/metamodelisation/complexite.png)
## Complexité des logiciels ``` 1 000 000 lignes de code * 2 = 2 000 000 secondes / 3600 = 560 heures / 8 = 70 jours / 20 = 3,5 mois ```
## Complexité des logiciels ![Complexité courbes](/teachings/img/HMIN306/metamodelisation/complexiteCourbes.jpg)
## Solution alternative Une autre solution qui permette : - Prendre du recul - Conforme à la réalité - D'aller plus vite - Dans le but de : - Comprendre le logiciel - Identifier les problèmes - Proposer des solutions / évolutions
## Principe Le code n’est pas seulement du texte. Il peut être abstrait et considéré comme un modèle
## Les choses et leurs représentation - Les choses - Réelles, virtuelles - Rares, chères, fragiles, dangereuses, inaccessibles, lointaines, trop nombreuses… - Les concepts pour penser les choses - Plus facile, moins cher, moins dangereux
## Besoin de modèle - Abstraction - Réutilisation - Meilleure compréhension - Rapidité de développement - Modularité - Interopérabilité - Indépendance vis-à-vis des outils
> Le développement comme la rétro ingénierie utilisent des modèles
![Modeling](/teachings/img/HMIN306/metamodelisation/modeling.png)
![Reverse](/teachings/img/HMIN306/metamodelisation/reverse.png)
## Comprendre un logiciel - Concepts manipulés - Problèmes potentiels
## Opportunités de refactoring - Mauvaise utilisation de l’héritage = réutilisation de code vs polymorphisme - Manque d’héritage = duplication, case statements - God classes = séparation des préoccupations
# Modèle
## Modèle - Différence entre spécification et description - Spécification d'un système à construire - Description d'un système existant - Relation entre un système et un modèle - ReprésentationDe (notée μ) ![Représente](/teachings/img/HMIN306/metamodelisation/represente.png)
## Modèle - Un modèle représente un système modélisé - De manière générale, pas que dans un contexte de génie logiciel ou d'informatique - Un modèle peut aussi avoir le rôle de système modélisé dans une autre relation de représentation ![Modèle XML de la carte de la France administrative qui est un modèle de la France « réelle »](/teachings/img/HMIN306/metamodelisation/representeXML.png)
# Méta-Modèle
## Méta-Modèle - Un modèle est conforme à son méta-modèle ![Modèle conforme](/teachings/img/HMIN306/metamodelisation/conforme.png)
### Méta-metamodèle ![Modèle conforme](/teachings/img/HMIN306/metamodelisation/metameta.png)
# Reverse Engineering
## Etape préparatoire - Définir le méta-modèle - Dans notre cas: - Etendre le métamodèle FAMIX
## AppSI en images
## AppSI en chiffres - Dump de 8400 lignes environ - Nombre de tables : 165 - Nombre de vues : 63 - Nombre de colonnes : 1151 - Nombre de triggers : 21 - Nombre de fonctions : 93
## Exemple de visualisation ![Famix SQL metamodel](/teachings/img/HMIN306/metamodelisation/exampleVisu.png)
## DB Critics - Exemple de règles : - Upper case in a column name or a table name - Foreign key referencing a non primary column - Table without primary key - Stub entities - Unused function - Unused primary key - View using another view - View using only one table - High and low number of columns in a table - ...
# A vous de jouer
### Hierarchy ```st defineHierarchy super defineHierarchy. container --|> widget. leaf --|> widget. ```
### Relations ```st defineRelations super defineRelations. container <>-* widget. ```
### Properties ```st defineProperties super defineProperties. (widget property: #name type: #String) comment: 'The name of the entity'. ```