Evolution, Maintenance et Réutilisation des logiciels, aka: E/M/R.
Transcription
Evolution, Maintenance et Réutilisation des logiciels, aka: E/M/R.
Evolution, Maintenance et Réutilisation des logiciels, aka: E/M/R. Olivier Inizan - Bureau PEPI IDL - INRA - GAP - URGI La Londes Les Maures, 5-9 décembre 2011 Objectifs de la session Dans votre expérience quotidienne: identifier les éléments qui permettent d’assurer l’E/M/R des logiciels. E/M/R - Définitons I Evolution: à partir d’un système existant, augmenter le comportement du système. Métaphore du contrat. intégrer de nouvelles clauses. I Maintenance: conserver le comportement du système. Toujours la métaphore du contrat, les clauses ne sont pas respectées. I Réutilisation: d’un système à un autre système, être en mesure de reprendre ”qqch”. Se positionner par rapport aux autres métiers de l’ingénieur I L’E/M/R n’est pas la chasse gardée de l’ingénierie logicielle. I L’idée ici est de regarder ces notions dans d’autres métiers de l’ingénieur. I Pour tout produit manufacturé (une automobile, un viaduc, un smartphone) comment décriveriez vous ces notions ? I Maintenance: réparation. / Evolution: création d’un nouveau produit. / Réutilisation: plans et pièces ... Software v.s Hardware I I Est ce que l’industrie du software présente des spécificités par rapport à ces notions ? Caractéristiques du software: I I I ”soft”: ce qui est modifiable sur une base matérielle. discipline relativement jeune par rapport aux autres métiers de l’ingénierie. Est ce que ces caractérisitiques nous permettent d’avoir une idée plus précise des notions d’E/M/R pour notre discipline ? Le problème I L’aspect ”souple” du soft le rend plus accessible aux changements. I Il est, en théorie, plus ”facile” de maintenir et de faire évoluer un logiciel qu’un autre produit. I La discipline est ”jeune” et bénéficie d’un historique faible: moins de capitalisation. I Deux rythmes se téléscopent: le rythme rapide de l’évolution et de la maintenance, le rythme ”lent” de la capitalisation. Eléments A partir de ce problème il s’agit d’identifier dans l’ingénierie logicielle les éléments qui solutionnent l’E/M/R: I En quoi la conception influence l’E/M/R ? I Est ce que le choix d’un langage informatique a un impact sur l’E/M/R ? I Le cycle de développement logiciel: existe-t-il des cycles plus adaptés à l’E/M/R ? I Comment positionner le test et la production de code par rapport à l’E/M/R ? En quoi la conception influence l’E/M/R ? Eléments de conception I ”Ce qui se conçoit bien s’énonce clairement”. I Un logiciel ”bien” conçu doit être facilement maintenable et réutilisable. I Qu’est ce qu’un logiciel bien conçu lorsque ”fondamentalement c’est du 0/1”. I Comment ”bien” concevoir pour une machine ? La réponse par les approches I I De l’approche procédurale à l’approche objet. Pierre-Alain Muller: ”Modélisation Objet avec UML.” I I Petit exercice: modéliser un même exemple avec une approche procédurale et une approche objet. Quel sont nos schémas de pensée ? Sont-ils compatibles avec la représentation des données en machine ? L’approche objet est-elle suffisante ? I L’approche objet est-elle suffisante pour produire un logiciel ”plus” adapté aux E/M/R ? I Les ”piliers” de la conception objet sont une première réponse. Ex: l’héritage favorise la réutilisation. I Aller plus en avant: les ”design patterns”, les principes de conception. Design Patterns I ”Gang of four”: formaliser des solutions génériques à des problèmes récurrents. I Exemple: une seule instance pour une classe, le pattern singleton. I Exemple: un objet se comporte comme une valeur, le pattern value object. Les principes orientés objet, POO I I Récoltés et formalisés par Robert C. Martin, ’Uncle Bob”. Exemple. Open close principle: un code doit être ouvert aux évolutions mais fermé aux modifications: I I Exemple: principe de substitution de Liskov. I I Tout ajout au système doit au minimum ”casser” l’existant. Dans un hierarchie d’héritage il doit être possible de remplacer les objets les moins spécialisés par les objets les plus spécialisés. Les patterns sont une abstraction, les principes sont l’abstraction de l’abstraction: plusieurs patterns ”implémentent” le même principe. Patterns et Principes: les dérives I Ticket d’entrée d’entré élevé. I De l’esthétique dans le code. I Une première tendance, abuser de l’esthétique: la ”pattern-ite”. I Une seconde tendance, l’élitisme: ”software craftmanship”. Est ce que le choix d’un langage informatique a un impact sur l’E/M/R ? Langages I Les langages informatiques ne sont pas égaux devant l’E/M/R. I Exemple: d’expérience une modification est plus facile à impacter sur un code python que sur un code C++. I Pourquoi ? compilé v.s. interprété / syntaxe / ticket d’entrée / connaissance du langage / ... I Tendance pour l’E/M: s’orienter vers des langages qui remplissent les critères ci-dessus. Les limites de la tendance I Limite 1: interprété plutôt que compilé: coût en performance. I Limite 2: d’un langage à l’autre les piliers de la conception objet sont plus ou moins ”respectés”: I En python pas de notion d’encapsulation, pas d’interfaces: impact sur la modélisation. Une seconde tendance I I Appréhender le cycle de vie d’un code. Un code héberge des parties stables et des parties variables: I I Stable = code peu modifié, ancien, aux interfaces clairement définies. Variable = code souvent modifié, récent, aux interfaces pas clairement définies. I Dynamique du cycle: d’un code variable vers un code stable. I La performance arrive généralement en second dans le cycle. Un début de solution I Le code stable (design éprouvé + performance) peut être écrit avec un langage à typage fort. I Le code variable (design incomplet) peut être écrit avec un langage à typage faible. Existe-t-il des cycles de développement plus adaptés à l’E/M/R ? Cycle de développement I 1970, crise du logiciel: de plus en plus de bugs, de la nécessité de formaliser le cycle. I Un premier pas: cycle en V, cycle en cascade. I Cycle courts, notion d’itérations: RAD. I 2000 Kent Beck: ”Embrace change”. Agile Manifesto. I 2005 SCRUM Cycle en V I La phase de décision (spécifications) ne communique pas du tout avec la phase de réalisation. I Effet ”tunnel”: toutes les spécifications sont arrêtées à un moment. I Difficile de revenir sur les spécifications un fois que le développement a débuté. I Or, en phase de développement, des problèmes de périmètre se posent. Itérations I Découper en petits cycles en V la construction du logiciel: diffuser la phase de spécifications tout au long du cycle. I Adaptation au changement I: ne pas limiter les décisions dans le temps. I Adaptation au changement II: profiter du logiciel déjà produit pour ajuster les décisions, le feedback. Le prix à payer I Avec des spécifications fréquentes, un formalisme imposant comme le cahier des charges n’est plus envisageable. I I User Stories, Features. Implication forte du ”client”. I Product Owner. (PO) I Ingénierie incrémentale: tout le système n’est pas imaginé au début. I Etre en mesure à chaque itération de produire un logiciel opérationel (mode dégradé). I Construire une architecture qui s’adapte au changement. I Gestion technique et gestion de projet à revoir. En quoi la production de tests peut influencer l’E/M/R ? Un détour par la production de code I Différentes ”façons” de produire du code. I A partir d’un modèle. I A partir d’un modèle et de façon automatique (MDA). I A partir des tests: TDD. La non régression: le retour immédiat sur l’investissement I Assurer que le contrat est rempli suite à une modification du code. I Une pratique pour assurer la non régression: le test fonctionnel (TF). I TF: à chaque item décrit dans les spécifications correspond un test. I Une pratique un peu extrême: les spécifications par les tests, BDD. I Systématiser l’écriture d’un TF lors de la spécification avec le client. I Spécification et test ne font plus qu’un: bı̂nomage ? Le TDD et le test first I I Le TDD, 3 étapes: coder le test, l’implémentation et se soucier du design (refactoring). D’expérience du TDD au test first: I 2 étapes: coder le test puis l’implémentation. I Mécaniquement la non régression est assurée, mais à un niveau plus fin que le TF: aide au diagnostic. I Existe - t - il d’autres partiques qui assurent une non regression à ce niveau ? C.f. cours tests. A vous de jouer ! 3 groupes I Faire un retour d’expérience en se basant sur les éléments listés. I Les relations entre personnes: un élement pour l’E/M/R ? I Sensibiliser votre hiérarchie à l’E/M/R.