naouel moha © guéhéneuc 2007 ptidej team – oo programs quality evaluation and enhancement using...

19
Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental Software Engineering Department of Informatics and Operations Research GEODES Les tests Démo 10 : IFT3912

Upload: victoire-roland

Post on 04-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

Naouel MOHA

© Guéhéneuc 2007

Ptidej Team – OO Programs Quality Evaluation and Enhancement using PatternsGroup of Open, Distributed Systems, Experimental Software EngineeringDepartment of Informatics and Operations ResearchUniversity of Montreal

GEODES

Les tests

Démo 10 : IFT3912

Page 2: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

2/16

Plan

Les tests en général Extreme programming (XP) JUnit Exemples

Page 3: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

3/16

Les tests

Les logiciels deviennent de plus en plus complexes et importants.

Pas de programme sans bug!

Important de tester avant de distribuer son code.

Page 4: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

4/16

Les tests

On peut distinguer les tests en fonction de leur :

objectif : – scénario : vérifier que le comportement fonctionnel est bien

celui attendu– non-regression : ce qui fonctionnait dans les version

précédentes du code fonctionne toujours dans la nouvelle version

– performance (bench) ou charge (load) : les temps de réponse à une requête sont conformes aux attentes

– intégration/fonctionnels : le code s'intègre bien avec les autres éléments du système.

cible : – scénarios : tester un cas d'utilisation– unitaires : tester un composant du système

technologie : – Web : envoyer des requêtes Web simulant le comportement

d'utilisateur(s)

Page 5: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

5/16

Les tests Exemples d’outils de tests

– Test Web • Load Runner• HttpUnit

– Tests unitaires • JUnit

– Tests fonctionnels/d'intégration • JFunc

– Test de charge/performance • JMeter

XP compte parmi ses recommandations les tests unitaires systématiques et les tests d'intégration continue.

Page 6: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

6/16

Extreme programming (XP) XP est une méthode agile de gestion de

projet informatique adaptée aux équipes réduites avec des besoins changeants. Elle pousse à l'extrême des principes simples.

Une méthode agile est une méthode de développement informatique permettant de concevoir des logiciels en impliquant au maximum le demandeur (client), ce qui permet une grande réactivité à ses demandes.

Page 7: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

7/16

Extreme programming (XP)

XP repose sur des cycles rapides de développement (des itérations de quelques semaines) dont les étapes sont les suivantes :– une phase d'exploration détermine les scénarios

clients qui seront fournis pendant cette itération ;– l'équipe transforme les scénarios en tâches à

réaliser et en tests fonctionnels ;– chaque développeur s'attribue des tâches et les

réalise avec un binôme ;– lorsque tous les tests fonctionnels passent, le

produit est livré.

Page 8: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

8/16

Extreme programming (XP)

Une bonne pratique de conception est de créer le test d'une fonctionnalité avant d'implémenter cette fonctionnalité (test-driven ou test-first design), afin de : – s'assurer de l'adéquation de la

conception/réalisation au besoin exprimé par le test

– garantir qu'une fonctionnalité peut être constamment vérifiée/évaluée au fil de son implémentation.

Page 9: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

9/16

JUnit Le test unitaire est un procédé permettant de

s'assurer du fonctionnement correct d'une partie déterminée d'un logiciel ou d'une portion d'un programme.

JUnit désigne un framework de rédaction et d'exécutions de tests unitaires.

Imaginé et développé en Java par Kent Beck et Erich Gamma, auteurs des ouvrages "SmallTalk Best Pratice Patterns" et "Design Patterns : Catalogue de modèles de conception réutilisables".

Page 10: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

10/16

JUnit But:

– Offrir au développeur un environnement de développement simple, le plus familier possible, et ne nécessitant qu'un travail minimal pour rédiger de nouveaux tests.

Idée principale:– Représenter chaque test par un objet– Un test correspond souvent à une classe du prgm– Un test pourra être composé de plusieurs tests

unitaires dont le rôle sera de valider les différentes méthodes de vos classes

Page 11: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

11/16

JUnit Architecture

Page 12: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

12/16

JUnit

Page 13: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

13/16

JUnitMéthodes d'assertion

– Une assertion est un élément de spécification placé au sein du code.

– Une assertion est caractérisée par une condition booléenne qui doit être vraie.

– Dans le cas d'un test, une assertion fausse entraîne l'échec du test.

– En général, on associe à chaque assertion un message d'erreur.

– Si l'assertion est fausse, le message d'erreur est affiché.

Page 14: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

14/16

JUnit

Méthode Rôle

assertEquals Vérifie que deux objets sont égaux

assertFalse Vérifie que l'expression est fausse

assertNotNull Vérifie que l'objet n'est pas nul

assertNotSame Vérifie que deux références ne sont pas les mêmes

assertNull Vérifie qu'un objet est nul

assertSame Vérifie que deux références sont les mêmes

assertTrue Vérifie que l'expression est vrai

fail Provoque l'échec du test

Documentation en ligne sur les assert :http://junit.sourceforge.net/javadoc/junit/framework/Assert.html

Page 15: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

15/16

import junit.framework.*;import org.javarome.exemple.MaClasse;

public class MonTest extends TestCase {

  public MonTest (String someTestName) {     super (someTestName);  }

  protected void setUp() {     // Initialisation des tests  }

  public void testScenario1() {     // Code du test de scénario 1     final String expected = "EXPECTED RESULT";     String tested = new MaClasse().method ();     assertTrue (expected.equals (tested));  }

  public void testScenario2() {     // Code du test de scénario 2  }

  protected void tearDown() {     // Nettoyage fin de test  }}

Page 16: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

16/16

import junit.framework.Test;import junit.framework.TestSuite;

public class MyTestSuite { public static Test suite() {

TestSuite suite = new TestSuite();

suite.addTestSuite(ATestClass.class);suite.addTest(AnotherTestSuite.suite());

return suite; }

/** * Runs the test suite using the textual runner. */ public static void main(String[] args) { junit.textui.TestRunner.run(suite()); }}

Page 17: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

17/16

Exemples

Tiré:

http://www.iut-orsay.fr/dptinfo/Pedagogie/Roger.Astier/app_java/javaTest.html

Page 18: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

18/16

Few reasons to use JUnit JUnit tests allow you to write code faster while

increasing quality. JUnit is elegantly simple. JUnit tests check their own results and provide

immediate feedback. JUnit tests can be composed into a hierarchy of test

suites. Writing JUnit tests is inexpensive. JUnit tests increase the stability of software. JUnit tests are developer tests. JUnit tests are written in Java. JUnit is free!

http://clarkware.com/articles/JUnitPrimer.html

Page 19: Naouel MOHA © Guéhéneuc 2007 Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns Group of Open, Distributed Systems, Experimental

19/16

Références JUnit Pocket Guide, Kent Beck, 2005 http://gfx.developpez.com/tutoriel/java/

junit/

http://www.iut-orsay.fr/dptinfo/Pedagogie/Roger.Astier/app_java/javaTest.html