Aperçu du cours Avant propos Définitions MI3/GL Cours de Génie Logiciel Programmation Orientée Objet (Avancée) Daniel Le Berre CRIL-CNRS FRE 2499, Université d Artois, Lens, FRANCE {leberre}@cril.univ-artois.fr 1 er novembre 2004 MI3GL 2004/2005 1
Aperçu du cours Avant propos Définitions Avant propos Définitions MI3GL 2004/2005 2
Aperçu du cours Avant propos Définitions Au début... Le génie logiciel (software engineering) est un terme qui est apparu lors d une conférence de l OTAN, du 7 au 11 octobre 1968 à Garmisch-Partenkirchen (Allemagne). Il a été défini par un groupe de scientifiques dans le but de résoudre deux problèmes liés à l augmentation en puissance des ordinateurs 1. les logiciels ne sont pas stables 2. il est très difficile de réaliser dans les délais prévus un logiciel satisfaisant son cahier des charges. MI3GL 2004/2005 3
Aperçu du cours Avant propos Définitions Aujourd hui 40 ans après, les mêmes problèmes sont observés. La POO améliore le développement des applications depuis 20 ans. Pas de méthode universelle pour garantir le succès d un projet informatique. On connait quelques pièges à éviter. Erreurs suivantes trouvées dans [2], proviennent de [12]. MI3GL 2004/2005 4
Aperçu du cours Avant propos Définitions Bug de l an 2000, de l année bisextile Un supermarché a reçu une amende de 1000 US$ pour avoir vendu de la viande ayant dépassé sa date limite de consommation d un jour, un 29 Février 1988. Le logiciel imprimant les dates limite de consommation ne prennait pas en compte les années bisextiles. MI3GL 2004/2005 5
Aperçu du cours Avant propos Définitions Mauvaise utilisation d interface Le 10 avril 1990 ; à Londre, un métro est parti de sa station sans son conducteur. Le conducteur avait appuyé sur le bouton qui démarrait le train, en laissant le soin au système de sécurité des portes des wagons qui empêche le métro de démarrer portes ouvertes de faire véritablement démarrer le métro. Ce jour là, le conducteur était sortit du train pour fermer une porte restée coincée... MI3GL 2004/2005 6
Aperçu du cours Avant propos Définitions Securité Le 2 novembre 1988, un ver apparu sur Internet. Le programme explaitait des vulnérabilités de services réseaux, comme par exemple le programme sendmail, pour se propager d un ordinateur à un autre. Malheureusement, une fois sur la machine, le ver consommait toutes ses ressources de calcul et la plantait. On estime que 10% des machines qui étaient reliées à Internet furent touchées. L éradication du ver pris plusieurs jours. MI3GL 2004/2005 7
Aperçu du cours Avant propos Définitions Retard et dépassement de budget En 1995, des problèmes dans un système automatique de prise en charge des bagages à l aéroport International de Denver entrainait la détérioration des bagages. L aéroport a ouvert avec 16 mois de retard, un dépassement de budget de 3.2 milliards de $, avec un système de gestion de bagage presque manuel. MI3GL 2004/2005 8
Aperçu du cours Avant propos Définitions Pourquoi faire simple... L avion cargo C-17 de McDonnell Douglas dépassa son budget de 500 millions de $ à cause de ses logiciels embarqués. Le C-17 était composé de 19 ordinateurs de bord, de 80 microprocesseurs et de 6 langages de programmation différents. MI3GL 2004/2005 9
Aperçu du cours Avant propos Définitions Pourtant... Nos systèmes d exploitations sont de plus en plus complexes et fonctionnent! Nos applications aussi : suites office, jeux, environnements de développement, etc. Les avions de ligne (et maintenant les voitures) sont gérés par des logiciels et il y a peu de problèmes. Qu est ce qui fait que certains projets aboutissent et d autres pas? L équipe de développement! MI3GL 2004/2005 10
Aperçu du cours Avant propos Définitions Mes Mentors Bertrand Meyer[11] Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides[6] Martin Fowler[3, 4, 5] Kent Beck[1] Robert C. Martin[9, 10] Ward Cunningham Grady Booch, Jim Rumbaugh et Ivar Jacobson MI3GL 2004/2005 11
Aperçu du cours Avant propos Définitions Logiciel/Software Ce n est pas seulement un programme pour ordinateur. Il s agit aussi de toutes les données qui lui sont associées : documentation, fichiers de configuration etc. Par exemple, un logiciel est souvent constitué de un ou plusieurs programmes, des fichiers de configuration, de la documentation du système qui indique la structure du système et la documentation utilisateur qui indique comment utiliser le système, avec éventuellement un site web qui permet aux utilisateurs d accéder à des informations récentes sur le produit. On distingue généralement deux types de logiciels : les logiciels génériques et les logiciels à façon (progiciels). MI3GL 2004/2005 12
Aperçu du cours Avant propos Définitions Processus de développement de logiciel/software process Il s agit des activités et des résultats associés qui conduisent à la création d un logiciel. Il y a quatre activités principales : Spécification, Développement, Validation et Evolution. MI3GL 2004/2005 13
Aperçu du cours Avant propos Définitions Génie Logiciel le génie logiciel est donc l art de spécifier, de concevoir de réaliser, et de faire évoluer, avec des moyens et dans des délais raisonnables, des programmes, des documentations et des procédures de qualité en vue d utiliser un ordinateur pour résoudre certains problèmes. [7] MI3GL 2004/2005 14
Aperçu du cours Avant propos Définitions Vers un bon logiciel Qu est ce qui fait un bon logiciel? Evolutivité Fiabilité (sécurité, robustesse, sûreté) Efficacité (CPU, mémoire, etc) Ergonomie MI3GL 2004/2005 15
De l utilité des tests Vérifier/Garantir le comportement du programme Aider du développement du programme Donner confiance au programmeur MI3GL 2004/2005 16
Les tests du programmeur Programmer Testing des tests écrits par les programmeurs plus général que unit testing dédiés au test des objets suivent le modèle : créer un objet invoquer une méthode vérifier le résultat conditions nécessaires : être automatisés être explicites faciles à exécuter MI3GL 2004/2005 17
Mais aussi... Les tests se font aussi dans le code les assertions permettent de vérifier que ce qui ne devrait pas arriver n arrive effectivement pas les exceptions permettent de se prémunir d une mauvaise utilisation du code. MI3GL 2004/2005 18
Assertion: syntaxe Pour vérifier le comportement du code que l on écrit. Aussi appelé white box testing. assert x>0; assert x>0 : x negatif ou nul ; Les assertions peuvent être activées au désactivées à l exécution du programme : java -ea MonProg # assertions activees java MonProg # assertions desactivees Laisser les assertions activées pendant le développement voire en production MI3GL 2004/2005 19
Implantation des assertions en Java assert x>0 : texte est traduit par : if (ASSERTION_ENABLED&&!(x>0)) { throw new AssertionError(texte); } Problèmes potentiels : affecte les performances du programme? OUI [13] affecte la taille des programmes? OUI MI3GL 2004/2005 20
Programmation assertive (assertive programming) Si cela ne peut pas arriver, utiliser une assertion pour vérifier que cela n arrivera pas [8] attention aux effets de bord : ne jamais exécuter une méthode qui doit être appelée dans un assert. MI3GL 2004/2005 21
Exercice : Une pile MI3GL 2004/2005 22
/** @param a should be strictly positive */ public int faitle(int a) throws Exception { if (a<=0) { throw new Exception( a should be positive ); }... } try { int i = faitle(v); // tout va bien } catch (MyException e) { // exception lancee, il faut la gerer } finally { // Dans tous les cas... (optionnel) } MI3GL 2004/2005 23 Exceptions: syntaxe
Quand utiliser des exceptions? Pour gérer des cas exceptionnels Pour s assurer que les méthodes publiques sont appelées convenablement. Pour indiquer un état inattendu de l objet Il y a trois types d exceptions (Throwable) en Java : Exceptions d exécution runtime exception : ce sont les seules exceptions qui peuvent être lancées sans être déclarées. Erreurs Error : problèmes graves (AssertionError, OutOfMemoryError,. Les autres : Il faut absolument les déclarer pour les utiliser, sinon, on obtient une erreur à la compilation. MI3GL 2004/2005 24
Quelques exceptions utiles en Java NullPointerException InvalidArgumentException : quand l un des arguments de la méthode ne respecte pas les préconditions. UnsupportedOperationException : quand le corps d une méthode n a pas encore été implanté ou quand une opération optionnelle n est pas disponible. NoSuchElementException IndexOutOfBoundException MI3GL 2004/2005 25
public TimeoutException() { super(); } public TimeoutException(String message) { super(message); } super(message, cause); } public TimeoutException(Throwable cause) { super(cause); } MI3GL 2004/2005 26 Créer ses propres exceptions Il suffit de créer une sous classe de java.lang.exception public class TimeoutException extends Exception {
Conception par contrat Design by Contract proposé par Bertand Meyer[11] Utilisé dans le langage Eiffel. précondition ce qui doit être vrai à l appel de la routine postcondition ce que la routine garantie ; l éat du monde après l appel à la routine. invariant de classe une condition qui est toujours vérifiée du point de vue de l appelant. si toutes les préconditions des routines sont vérifiées, alors les routines doivent garantir que les postconditions et les invariants de classe seront vérifiés après exécution. MI3GL 2004/2005 27
Exemple /** * Liste ordonnée * @inv forall Node n in elements() * n.prev()!=null * implies n.value().compareto(n.prev.value()) > 0 */ public class DBCList { /** * @pre contains(anode) == false * @post contains(anode) == true */ public void insertnode(final Node anode) { //... MI3GL 2004/2005 28
Conception par contrat en Java icontract n est plus disponible. Il n y a plus de bonne solution. utiliser des assertions ou des exceptions pour vérifier les préconditions utiliser des assertions pour vérifier les postconditions pas de mécanisme pour les invariants de classe: il faut les ajouter à la main dans le code à l aide d assertions par exemple. Utiliser la programmation par aspect MI3GL 2004/2005 29
Kent Beck. extreme Programming explained, Embrace Change. Addison Wesley, 2000. Bernd Bruegge and Allen H. Dutoit. Object Oriented Software Engineering: Conquering Complex and Changing Systems. Prentice Hall, 2000. ISBN: 0-13-017452-1. Martin Fowler. Refactoring: Improving the Design of Existing Code. Object Technology Series. Addison Wesley, 2000. Indispensable! Martin Fowler. Patterns of Enterprise Application Architecture. The Addison-Wesley Signature Series. Addison Wesley, 2003. MI3GL 2004/2005 30
Martin Fowler. UML distilled: A brief Guide to the Standard Object Modelling Language. Object Technology series. Addison Wesley, 3rd edition, 2004. Indispensable! Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns, Elements of Reusable Object-Oriented Software. Addison Wesley, 1995. A posséder absolument! Marie-Claude Gaudel, Bruno Marre, Françoise Schienger, and Gilles Bernot. Précis de Génie Logiciel. Enseignement de l Informatique. Masson, 1996. ISBN : 2-225-85189-1. MI3GL 2004/2005 31
Andrew Hunt and David Thomas. The Pragmatic Programmer. Addison Wesley, 2000. Un livre interessant (mais en anglais) pour tous les programmeurs. Robert C. Martin. Agile Software Development: Principles, Patterns and Practices. Prentice Hall, 2003. Utile. Robert C. Martin. UML for Java Programmers. Prentice Hall, 2003. Bertrand Meyer. Conception et programmation orientées objet. MI3GL 2004/2005 32
Eyrolles, 1997. Indispensable pour tout programmeur dans un langage objet, même si les exemples donnés sont plutôt en Eiffel. P. G. Neumann. Computer-Related Risks. Reading. Addison-Wesley, MA, 1995. Jack Shirazi. Java Performance Tuning, 2nd edition. O Reilly, 2003. MI3GL 2004/2005 33