Plan. Initiation au Génie Logiciel. Cours 4. Quelques outils pour le Génie Logiciel



Documents pareils
Plan. 1 Cycles de développement. 2 Méthodes agiles, principes généraux. 3 Comment se passe un Sprint?

Plan global Outils de développement et compilation. Ce que l on veut éviter. Plan. Git : gestion de code source et versionnement.

Introduction à Eclipse

La magie de SVN. Découverte & usage du logiciel

Les systèmes de gestion de version

Environnements de développement (intégrés)

Projet de développement

CCI Génie Logiciel UFR - IMA. Objectifs du cours d'aujourd'hui. Génie Logiciel Validation par le test. Qu est-ce que tester un programme?

Qualité du logiciel: Méthodes de test

TP Git. Author : Cedric Dumoulin Date : 2 déc Rev : 9 Dec. 2014

TD/TP 1 Introduction au SDK d Android

C.M. 1 & 2 : Prise en main de Linux

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Le système de gestion de version Git et GitHub

Manuel d utilisation du web mail Zimbra 7.1

1 Démarrage de Marionnet

ESPACE COLLABORATIF SHAREPOINT

Tutoriel d installation de Hibernate avec Eclipse

TUTORIEL Qualit Eval. Introduction :

Competence Management System (Système de Gestion de Compétences)

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Atelier La notion de session utilisateur sous Linux

Mes documents Sauvegardés

Manuel d utilisation de la messagerie.

Projet de Java Enterprise Edition

Apprendre Java et C++ avec NetBeans

Alice Sécurité Enfants (version )

Réglages du module de sauvegarde de Biblionet (Monoposte)

GUIDE RAPIDE EXPERT espace de partage

Créer et partager des fichiers

Guide de l utilisateur Mikogo Version Windows

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

TP1. Outils Java Eléments de correction

Guide de prise en main de la solution NetExplorer

Gestion de projet Gestion de configuration Gestion de Conflits. Lydie du Bousquet Philippe Lalanda

Table des matières. Chapitre 1 - Outils Espace de stockage Rafraichir Déposer un document Créer un dossier 5

TD séance n 2c Mise à jour des Systèmes

wxwidgets dans un environnement Microsoft Windows

bbc Launch Pad Juillet 2011 Version 10.0

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

Solutions en ligne Guide de l utilisateur

Eclipse atelier Java

Serveur Subversion Debian GNU/Linux

Environnements de développement (intégrés)

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Systèmes de gestion de code source

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

Guide d utilisation du contrôle parental FreeAngel (version 0.87)

Notice d installation du patch Lia 8.20

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Tutoriel code::blocks

GANTTPROJECT. Julien TENDERO

Programmation Mobile Android Master CCI

Serveur de travail collaboratif Michaël Hoste -

MEGA ITSM Accelerator. Guide de Démarrage

Tutorial Terminal Server sous

0.1 Mail & News : Thunderbird

Les logiciels de gestion de version exemple de GIT et application avec SmartGIT

TP 1 Prise en main de l environnement Unix

COURS WINDEV NUMERO 3

Informatique appliqué Microsoft Windows et la suite bureautique Office. Carlier François

Cahier n o 6. Mon ordinateur. Fichiers et dossiers Sauvegarde et classement

Hudson Serveur d Intégration Continue. Adrien Lecharpentier IR3 Ingénieurs2000, Université de Marne la Vallée

La base de données XML exist. A. Belaïd

INGÉNIEUR - DÉVELOPPEUR EXPÉRIMENT É PHP - MAGENT O. 30 ans - 6 ans d'expérience

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

K?ellaWeb Saisie des absences, retards et sanctions APLON en mode Web


Correspondances Windows-Linux

TigerPro CRM Application mobile

Utilisation du site de retours Lexibook

serena.com Processus et réussite Accélérez avec Serena TeamTrack

Contrôle de versions et travail collaboratif. Organisation du travail collaboratif. Organisation du travail collaboratif

TP1 - Prise en main de l environnement Unix.

Introduction : L accès à Estra et à votre propre espace Connexion Votre espace personnel... 5

Manuel fournisseur : procédure pour prendre connaissance d une consultation en ligne et soumettre une offre. Version de février 2014 SNCF

GESTION DE STOCKS AVEC CIEL GESTION COMMERCIALE

Licence Sciences et Technologies Examen janvier 2010

Plan de notre intervention 1. Pourquoi le test de charge? 2. Les différents types de tests de charge 1.1. Le test de performance 1.2.

Qu est ce que Visual Guard. Authentification Vérifier l identité d un utilisateur

TP3 Intégration de pratiques agiles. 1. User Stories (1) Scénario d intégration agile. En direct-live du château

DE CENTRALISE FACTURE CRE ATION

Sophos Endpoint Security and Control Guide de configuration pour réseaux étendus. Enterprise Console, version 3.1 EM Library, version 1.

Les structures. Chapitre 3

Tenrox. Guide d intégration Tenrox-Salesforce. Janvier Tenrox. Tous droits réservés.

AFTEC SIO 2. Christophe BOUTHIER Page 1

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Module pour la solution e-commerce Magento

Contrôle Parental Numericable. Guide d installation et d utilisation

Alors pour vous simplifiez la vie, voici un petit tuto sur le logiciel de sauvegarde (gratuit) SyncBack.

TP 1. Prise en main du langage Python

Contents Backup et réinstallation... 2

Vos outils CNED COPIES EN LIGNE GUIDE DE PRISE EN MAIN DU CORRECTEUR. 8 CODA GA WB 01 13

Votre premier projet Android

Contrôle Parental Numericable. Guide d installation et d utilisation

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

MEGA ITSM Accelerator. Guide de démarrage

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Transcription:

Plan Initiation au Génie Logiciel Cours 4 Quelques outils pour le Génie Logiciel 1 Gestion de version 2 Tests unitaires 3 Couverture de tests 4 Génération de documentation T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 1/ 33 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 2/ 33 Gestion de versions... quel est le problème? Il était une fois (Jo, Mo et Bo) qui travaillaient sur le même projet... Gestion de versions... ça se complique, Bo est une tru e! Bo s est trompé et souhaite annuler sa modification dea en A Ils copient sur leur machine le projet qui ressemble àça: Jo modifie son projet en Apartirde Comment font ils pour obtenir chacun une copie de? Mo modifie le sien en Combien de copies entre Jo, Mo et Bob sont nécessaires (au min.)? Bo modifie le sien en Comment font ils pour obtenir chacun une copie de Combien de copies entre Jo, Mo et Bo sont nécessaires (au min.)? T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 3/ 33? Remarque 1 (Ca n est possible que si au moins un développeur...) garde un historique des projets qu il copie sait quels sont les fichiers/répertoires à ajouter/supprimer d une version à l autre C est précisément ce que fait un gestionnaire de versions, y compris sur les fichiers eux-mêmes : (suppression, ajout, modification de ligne) T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 4/ 33

Gestionnaire de versions centralisé :le principe Un dépôt unique détient une copie de toutes les versions du projet Les développeurs interagissent avec le dépôt pour : I I I I créer le projet sur le dépot : import obtenir une copie locale de la version courante du projet : checkout lui soumettre des modifications du projet : commit obtenir les mises à jour des autres développeurs : update On va utiliser Subversion (SVN), un gestionnaire de versions centralisé extrêmement répandu et utilisé dans la forge de l ISTIC. Remarque 2 (Gestionnaires de versions décentralisés) Il existe d autres gestionnaires de versions sans dépôt (unique) centralisé. Par exemple GIT. Leur fonctionnement est légèrement di érent, nous n en parlerons pas ici. T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 5/ 33 Il était une fois... Jo, Mo et Bo avec SVN

Il était une fois... Jo, Mo et Bo avec SVN Jo, Mo et SVN, en vrai... SVN s utilise dans un terminal à l aide de la commande svn Clients graphiques pour SVN : TortoiseSVN (Windows), RapidSVN (Linux) En TP nous utiliserons : Subclipse, plugin SVN pour Eclipse Remarque 3 (Pour les dépôts sur http://forge.istic.univ-rennes1.fr) Le dépôt est consultable par un navigateur (Démo). Page projet > Sources > Parcourir le dépôt Subversion (lien à droite) T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 7/ 33

Jo, Mo et SVN, en vrai... (II) Exemple 1 (Jo importe le projet initial dans la forge du groupe B (genb)) % svn import cheminversprojet --username Jo http://subversion.istic.univ-rennes1.fr/genb/monprojet Exemple 2 (Mo réccupère une copie locale (synchronisée) du dépôt) % svn checkout --username Mo http://subversion.istic.univ-rennes1.fr/genb/monprojet Exemple 3 (Soumettre une modification de la copie locale + commentaire) % cd monprojet % svn commit -m "remplacement de la variable x par y" Exemple 4 (Obtenir les mises à jours des autres développeurs) % cd monprojet % svn update Jo, Mo et SVN, en vrai... (III) Exemple 5 (Ajouter un fichier/répertoire au dépôt) % cd monprojet % svn add monfichier % svn commit -m "Ajout du fichier monfichier" Exemple 6 (Supprimer un fichier/répertoire du dépôt) % cd monprojet % svn delete monfichier % svn commit -m "Suppression du fichier monfichier" Exercice 1 Le fichier test1.txt est déjà dans le dépôt. Corrigez la faute d orthographe dans le fichier test1.txt de Mo. Envoyez la correction au dépôt et vérifiez que Jo peut réccupérer cette modification. T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 8/ 33 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 9/ 33 Jo, Mo et SVN, en vrai... (IV) Quizz 2 (Cette suite de commande détruit définitivement monfichier?) % rm monfichier % svn commit -m "Suppression de monfichier" V R Oui Non Quizz 3 (Cette suite de commande détruit définitivement monfichier?) % svn delete monfichier % svn commit -m "Suppression de monfichier" V R Oui Non Dans gestionnaire de version, il y a le mot version Quizz 1 Remarque 4 (En SVN une version s appelle une révision) (Cette suite de commande échoue? V Oui R Non ) SVN conserve l historique complet de tous les commits e ectués! La % svn add monfichier révision n correspond àl état du dépôt après n commits. % svn commit -m "Ajout de monfichier" % svn add monfichier % svn commit -m "On ajoute à nouveau monfichier" Au lieu de : T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 6/ 12 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 10 / 33 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 11 / 33 Obtenir l historique des révisions : svn log Obtenir la révision 3 du projet : svn checkout -r3 Le dépôt SVN contient : Remarque 5 (Commandes SVN pour naviguer dans les versions) Obtenir la révision 2 du fichier A : svn update -r2 A

Dans gestionnaire de version, il y a le mot version (II) Exercice 2 1 Comment réccupérer un fichier du dépôt, détruit par erreur? 2 Comment réccupérer un fichier supprimé du dépôt? Remarque 6 (Importance des commentaires, commit -m "commentaire") Pour trouver le numéro de révision adéquat, les commentaires attachés au commit prennent toute leur importance! Sans commentaires Avec commentaires La vie n est pas un long fleuve tranquille : les conflits Définition 7 (Conflit de version) Si deux développeurs font des modifications contradictoires sur un même fichier, un conflit peut apparaître. Il touchera le dernier des deux faisant un commit. Ce dernier sera le seul pouvant résoudre le conflit. En pratique, les conflits de versions sont très rares, mais... (voir le titre) Exemple 8 (Exemple de conflit de version) Jo et Mo modifient di éremment la ligne i du fichier B de la révision r17. Jo fait son commit (r18). Ensuite, Mo tente de faire son commit. Celui-ci échoue car sa version (r17) n est plus à jour. Mo fait un update qui révèle un conflit sur la ligne i du fichier B. T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 12 / 33 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 13 / 33 Résolution de conflit SVN sur un fichier B 1 Rechercher les annotations de conflits dans le texte du fichier B : Le texte précédant la partie de texte en conflit. <<<<<<<.mine c est le texte de la ligne que je voulais commiter ======= c est le texte proposé par l autre développeur >>>>>>>.r18 La suite du texte qui n est pas en conflit. 2 Résoudre le conflit dans le texte du fichier B : Le texte précédant la partie de texte en conflit. C est le texte de la ligne que je voulais commiter complété par le texte proposé par l autre développeur. La suite du texte qui n est pas en conflit. 3 Informer le dépôt de la résolution du conflit sur B : % svn resolved monfichier % svn commit -m "Conflit résolu" T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 14 / 33 Résolution de conflit SVN sur un fichier B (II) Quizz 4 (Ces séquences de commandes sont-elles possible?) Sur la machine de Jo % cat test1.txt Le texte de ce document est très court % svn commit -m "modif texte" % svn update Sur la machine de Mo % cat test1.txt Le texte de ce fichier est vraiment très court % svn commit -m "" % svn update V Oui R Non Si Mo fait son commit avant Jo, il aura un conflit V Vrai R Faux Exercice 3 (Jo et Mo modifient en même temps la ligne 4 du fichier test1.txt) Mo commit sa modification. Que doit faire Jo pour envoyer, malgré tout, sa modification sur le dépôt sans perdre celle de Mo? Quizz 5 (Jo et Mo modifient de la même façon la même ligne du même fichier) Ceci déclenchera un conflit? V Oui R Non T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 15 / 33

SVN dans Eclipse : Subclipse Plan Toutes les commandes SVN sont accessible via : Clic droit sur le projet puis Team>... (import, commit, update, mark resolved, etc.) 1 Gestion de version La commande supplémentaire Synchronize permet une gestion plus fine des update et une résolution graphique des conflits : 2 Tests unitaires 3 Couverture de tests 4 Génération de documentation T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 16 / 33 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 17 / 33 Tester un logiciel pour quoi faire? π Le seul programme garanti sans bug est celui qui ne comporte aucune instruction Le test permet d avoir des garanties sur la fiabilité de votre programme Vous n aurez des garanties que sur ce qui a été e ectivement testé! Que faut-il tester, comment choisir les tests? Comment savoir si un programme est su samment testé? = Stratégies de tests + stratégie de sélection des tests Remarque 7 (Incomplétude du test) En général, il est impossible de tester complètement un programme car il possède un grand nombre (voire une infinité) de comportements possibles. Par contre, on peut prouver complètement les programmes : voir cours de vérification formelle en master 1 GL. T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 18 / 33 Stratégie de test : test unitaire, puis test d intégration Définition 9 (Test unitaire) Un test unitaire porte sur une méthode d une classe en isolation par rapport au reste de l application. Définition 10 (Test d intégration) Un test d intégration porte sur l intégralité de l application. Il peut faire intervenir plusieurs classes de l application. T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 19 / 33

Mise en oeuvre des tests unitaires avec JUnit 4 Une classe de test JUnit 4 (Java/Scala) peut comporter : Des définitions de variables (réinitialisées avant chaque test) Une opération d initialisation de l environnement de test : @Before Des tests : @Test Une opération de fermeture de l environnement de test : @After import org.junit.assert._ import org.junit.{test,before,after import application.contacts class TestContacts{ // Init de l env. de test // Fait avant chaque test @Before def init{ Contacts.ajouterFiche("ferry", "jules") // Réinitialisation de // l env. après chaque test @After def shutdown{ Contacts.reinit // Un test @Test def testobjectcreation{ assertnotnull(contacts) T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 20 / 33 Mise en oeuvre des tests unitaires avec JUnit 4 (II) Les principales instructions de test sont : assertnull(x:any):unit assertnotnull(x:any):unit assertequals(x:any,y:any):unit asserttrue(x:boolean):unit assertfalse(x:boolean):unit... Remarque 8 (Créer une classe de test dans EclipseGen) 1 Créez un nouveau répertoire de sources tests : New > Other > Java > Source folder 2 Dans ce répertoire créez un nouveau package 3 Dans ce package créez une classe Scala 4 Ajoutez au projet la librairie JUnit 4. Clic droit sur le projet puis : Properties > Java Build Path > Libraries > Add Library > JUnit 4 Remarque 9 (Lancer le test JUnit) Clic droit sur le fichier de test, puis Run As > Scala JUnit test case. T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 21 / 33 Mise en oeuvre des tests unitaires avec JUnit 4 (III) Quizz 6 (Qu a che le code suivant?) import org.junit.assert._ import org.junit.{test,before,after class Test1 { print("0") @Before def init={print("1") V 01240134 R 0124134 @After def finalt={print("4") @Test def test1={print("2") @Test def test2={print("3") Mise en oeuvre des tests unitaires avec JUnit 4 (IV) Quizz 7 (Le test suivant est-il réussi?) Le code de la classe A : package cm4 class A(x:Int){ var c=x import org.junit.assert._ import org.junit.{test,before,after import cm4.a class TestA { val a= new A(0) V Oui R Non @Test def test1{ assertequals(0,a.c) a.c=10 @Test def test2{ assertequals(10,a.c) T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 22 / 33 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 23 / 33

Tests unitaires pour assurer la non-régression JUnit est un outil de tests unitaires automatisés : Chaque test est écrit une seule fois, mais... Il peut-être utilisé à volonté (après toute modification importante) Les tests sont sauvegardés/versionnés sur le dépôt du projet Remarque 10 (JUnit pour le test automatique de non-régression) En préparant la version n + 1 du logiciel, en vérifiant que tous les tests de la version n passent encore, on asssure la non régression de la version n + 1 par rapport à la version n. Définition 11 (Test de non-régression) Un test de non-régression vérifie que l ajout de nouvelles fonctionnalités dans un programme ne perturbe pas les fonctions initiales. Plan 1 Gestion de version 2 Tests unitaires 3 Couverture de tests 4 Génération de documentation T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 24 / 33 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 25 / 33 Quels tests choisir? Le choix des tests àe ectuer est un exercice di cile : Que dois-je tester? Demandez à l utilisateur! Ai-je testé su samment ma fonction? Jamais! Exercice 4 Donnez des tests pour vérifier que delete(x:int,l:list[int]):list[int] supprime bien toutes les occurences de x dans l. Quels tests choisir : utiliser une métrique de couverture Définition 12 (Tests boîte noire/tests boîte blanche) Le test boîte noire vérifie que les sorties d un programme correspondent à la spécification. Dans le test boîte blanche, c est identique mais l on dispose du code du programme pour sélectionner les tests à e ectuer. Il existe de nombreuses métriques pour les tests boîte blanche : % de couverture des instructions du programme % de couverture des branches, % de couverture des chemins,... Définition 13 (Métrique de couverture instructions ) Un ensemble de tests couvre n% des instructions du programme si cet ensemble a exécuté, au moins une fois, n% des instructions du programme. Remarque 11 (Les métriques sont juste une indication de robustesse) Un programme dont 100% des instructions ont été testées peut encore comporter des bugs. Mais, il sera plus sûr que s il avait été testé à 50%. T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 26 / 33 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 27 / 33

Visualiser la couverture instruction avec ECLemma Plan 1 Gestion de version 2 Tests unitaires 3 Couverture de tests 4 Génération de documentation T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 28 / 33 T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 29 / 33 Génération de documentation : Scaladoc Remarque 12 (Génération de la Scaladoc dans EclipseGen) Dans EclipseGen, le bouton permet de générer la Scaladoc pour le projet sélectionné. La Scaladoc générée se trouve dans le répertoire doc du projet (F5 pour rafraichir le projet dans Eclipse). Par défaut la Scaladoc contient les packages, classes, objets, interfaces et membres avec leurs types. Exemple 14 (Génération de Scaladoc par défaut) Générer la Scaladoc pour le projet CM4, package vehicules. On peut compléter la Scaladoc en ajoutant dans le code des classes, objets, interfaces et membres des commentaires spécifiques /**... */ Exemple 15 (Scaladoc pour du code annoté) Générer la Scaladoc pour le projet CM4, package vehiculeannote. T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 30 / 33 Scaladoc : principales annotations /** Les nombres rationnels * @constructor Crée un nouveau rationnel à partir de son numérateur et dénominateur * @param n le numérateur * @param d le dénominateur * @throws DenominateurNul si le dénominateur est 0 */ class Rational(n:Int,d:Int){ if (d==0) throw DenominateurNul /** Le numérateur */ val num=n /** Le dénominateur */ val den=d /** Rend la somme de deux rationnels * @param r le rationnel à ajouter * @return la somme des deux rationnels */ def +(r:rational):rational = { new Rational(this.num*r.den+this.den*r.num,this.den*r.den) T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 31 / 33

Scaladoc : principales annotations (II) Remarque 13 (Constructeurs auxiliaires documentés comme des méthodes) /** Crée un nouveau rationnel à partir d un entier. En utilisant ce constructeur, le dénominateur vaudra 1. * @param x la valeur de l entier */ def this(x:int)={this(x,1) Remarque 14 (Il n est pas nécessaire de répéter la documentation des traits) /** Les Transporteurs de passagers.*/ trait Transporteur{ /** ajouter un passager au transporteur * @param p le passager à ajouter */ def ajouter(p: Passager):Unit class Vehicule extends Transporteur // La scaladoc Vehicule contiendra celle de Transporteur T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 32 / 33 Conseils de rédaction Scaladoc : allez à l essentiel 1 La 1ère phrase de la documentation classe/méthode/trait et les annotations doivent être synthétiques. Les détails seront dans le reste de la documentation de la classe/méthode/trait. /** Cette classe représente Les véhicules routiers. * Les véhicules contiennent des références vers [...] */ class Vehicule{... /** Cette méthode Rend le premier élément d une liste. * Si le premier élément n existe pas [...] * @return le premier élément de la liste s il existe, sinon rend [...] */ def premier[t](l:list[t]):t={... 2 Si une méthode rend un résultat XXX, commencez la première phrase de la documentation par Rend XXX. 3 Si la documentation de la méthode se résume à une seule ligne, ne pas le répéter dans l annotation @return /** Teste si le rationnel est nul. * @return true si le rationnel est égal à 0 */ def isnull:boolean=(num==0) T. Genet (genet@irisa.fr) (ISTIC/IRISA) GEN-4 33 / 33