2019_2020:s3:methodo:td:env1:tests
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
2019_2020:s3:methodo:td:env1:tests [2019/08/25 10:16] – [Retour sur l'indépendance des tests] blay | 2019_2020:s3:methodo:td:env1:tests [2019/08/25 14:24] (current) – [Eclipse et couverture de tests] blay | ||
---|---|---|---|
Line 2: | Line 2: | ||
====== Tests en Java - Rappel ou Apprentissage ====== | ====== Tests en Java - Rappel ou Apprentissage ====== | ||
- | Voir pour plus de détail le livre p. 96 de ISBN 978-3-030-24094-3, | + | . |
- | Il devrait être disponible à la bibliothèque et vous trouverez une version électronique en ligne. | + | <note warning>Voir pour plus de détail le livre à partir de la page 96 de ISBN 978-3-030-24094-3, |
+ | |||
+ | Il devrait être disponible à la bibliothèque et vous trouverez une version électronique en ligne. | ||
+ | |||
+ | **L' | ||
+ | |||
+ | </ | ||
- | Beaucoup des éléments qui suivent en sont une simple traduction. | ||
===== Structuration d'une suite de tests ===== | ===== Structuration d'une suite de tests ===== | ||
Line 26: | Line 31: | ||
En utilisant l' | En utilisant l' | ||
+ | |||
+ | === Test fixture === | ||
+ | Une fixture est un morceau de code qui permet de fixer un environnement logiciel pour exécuter des tests logiciels. Cet environnement constant est toujours le même à chaque exécution des tests. Il permet de répéter les tests indéfiniment et d' | ||
+ | |||
+ | |||
<code java> | <code java> | ||
Line 57: | Line 67: | ||
} | } | ||
</ | </ | ||
- | 1. Robert C. Martin. Clean Code: A Handbook of Agile Software Craftmanship. Prentice Hall, 2009. | + | |
+ | ===== Couverture des tests ===== | ||
+ | |||
+ | Il n'est pas toujours physiquement possible de tester de façon exhaustive l' | ||
+ | |||
+ | De toute évidence, nous devons choisir les tests à réaliser parmi toutes les possibilités (par exemple, sélectionner les configurations du jeu de dame à tester). | ||
+ | |||
+ | Une méthode classique pour déterminer ce qu'il faut tester est basée sur le concept de couverture. De manière informelle, une mesure de couverture de test est un nombre (généralement un pourcentage) qui détermine la quantité de code exécutée lorsque nous exécutons nos tests. Les mesures de couverture de test peuvent ensuite être calculées par des outils de couverture de code qui gardent la trace du code qui est exécuté lorsque nous exécutons des tests unitaires. Cela peut paraître simple, mais le problème est qu'il existe différentes définitions de ce que l'on peut entendre par " | ||
+ | |||
+ | ==== Couverture d' | ||
+ | |||
+ | La couverture des instructions est simplement le nombre d' | ||
+ | <code java> | ||
+ | public boolean canMove() { | ||
+ | if( isEmpty() ) | ||
+ | return false; | ||
+ | else | ||
+ | return true; | ||
+ | } | ||
+ | </ | ||
+ | Le test suivant ne couvre alors que les premières instructions soit 60% du code de la méthode. | ||
+ | |||
+ | <code java> | ||
+ | @Test | ||
+ | public void testCanMove_Empty() | ||
+ | { | ||
+ | aPile = new FoundationPile(); | ||
+ | assertFalse(aPile.canMove()); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | La logique qui sous-tend la couverture des instructions est simplement que si un défaut est présent dans une instruction qui n'est jamais exécutée, les tests ne vont pas aider à le trouver. Bien que cette logique puisse sembler attrayante, la couverture des relevés est en fait une mauvaise mesure de couverture. Une première raison est que cela dépend fortement de la structure détaillée du code. Nous pourrions réécrire la méthode '' | ||
+ | <code java> | ||
+ | public boolean canMove() { | ||
+ | return !(isEmpty()); | ||
+ | } | ||
+ | </ | ||
+ | La deuxième raison est que toutes les instructions ne sont pas créées de la même manière, et il peut y avoir beaucoup de choses qui se passent dans une instruction, | ||
+ | |||
+ | ==== Couverture des branches ==== | ||
+ | |||
+ | La couverture des branches est le nombre de " | ||
+ | <code java> | ||
+ | public boolean canMoveTo(Card pCard) | ||
+ | { | ||
+ | if( isEmpty() ) | ||
+ | { | ||
+ | return pCard.getRank() == Rank.ACE; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | return pCard.getSuit() == peek().getSuit() && | ||
+ | pCard.getRank().ordinal() == | ||
+ | peek().getRank().ordinal()+1; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | Cependant, les branches vraies et fausses conduisent toutes deux à des instructions qui sont constituées d' | ||
+ | |||
+ | |||
+ | D'une manière générale, la couverture des branches est l'un des critères de couverture des tests les plus utiles. Elle est bien étayée par des outils de test et relativement facile à interpréter, | ||
+ | |||
+ | ==== Eclipse et couverture de tests ==== | ||
+ | [[https:// | ||
+ | Depuis la version 2.0, EclEmma est basé sur la bibliothèque de codes JaCoCoCo. L' | ||
+ | |||
+ | |||
+ | |||
+ | Vous avez différents types de compteurs à disposition (voir https:// | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | et pour mieux comprendre les codes en couleur : https:// | ||
+ | |||
+ | ==== Sélection des cas de tests ==== | ||
+ | |||
+ | |||
+ | Aujourd' | ||
+ | |||
+ | * Les **tests fonctionnels (ou de boîte noire)** tentent de couvrir autant que possible le comportement spécifié d'un programme, en se basant sur certaines spécifications externes de ce que le programme doit faire en particulier au travers de post-condition(Nous verrons également que dans le processus de production d'un programme, on prévoit des tests à réaliser dans les histoires utilisateurs). Les tests de boîte noire présentent de nombreux avantages, notamment le fait qu'il n'est pas nécessaire d' | ||
+ | * Les **tests structurels (ou de boîte blanche)** tentent de couvrir autant que possible le comportement implémenté d'un programme, sur la base d'une analyse du code source de l' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Références ===== | ||
+ | 1. Robert C. Martin. Clean Code: A Handbook of Agile Software Craftmanship. Prentice Hall, 2009.\\ | ||
+ | 2. Le livre de référence : https:// | ||
+ | 3. Les codes sources associés au livre : https:// |
2019_2020/s3/methodo/td/env1/tests.1566728170.txt.gz · Last modified: 2019/08/25 10:16 by blay