SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
Pyramide des tests
d'où sort-il?
Johan Martinsson
@johan_alps
Tuesday, May 14, 13
Le cas de ...
Fred Sandra
Les tests de boîte noire sont top!
Simples à écrire, ils ont du sens
pour tout le monde. Nous n’avons
pas tellement besoin de tests
unitaires.
Nous avons beaucoup fait les tests
boite noire, mais nous avons du
tous les jeter! On arrivait plus à les
maintenir.
Tuesday, May 14, 13
Le cas de ...
Fred Sandra
150 tests système
5 min
à l’intérieur du f-work
une seule BDD
600 tests système
9 heures
5 processus dont 2 batch
Selenium
2 BDD, 2 FS
Tuesday, May 14, 13
Couverture de code
Tuesday, May 14, 13
Un bon test
• Casse pour de vrais erreurs
• Ne casse pas pour un ajout
• N’est pas aléatoire
• Ne dépend pas d’autres tests
• Tourne vite
Tuesday, May 14, 13
Ratio vraie / fausse alerte
Lorsqu’un test système échoue c’est
• Un bug
• ou un évènement aléatoire
• pb réseau
• autres aplications HS (backend, bdd)
• maintenance manuel
• ou d’un dommage collateral
• Modification des données de test
• Nouvelle fonctionnalité modifie le comportement de
l’application (login)
• Données attendues trop larges
Tuesday, May 14, 13
Coût de fixer un bug
Tuesday, May 14, 13
Coût de fixer un bug
Tuesday, May 14, 13
Coût de maintenance
Tuesday, May 14, 13
Avec la taille de
l'application l'intérêt
des tests bas niveau
se fait sentir
Tuesday, May 14, 13
unitaire(
intégra(on*
Système
Tuesday, May 14, 13
Test d’intégration
@Test public void
it_knows_the_price_of_fruit() throws Exception {
storage.addFruit(fruit("Strawberries"), money(500));
assertThat(storage.priceFor(fruit("Strawberries"))).isEqualTo(money(500));
}
Test focalisé sur une librairie/service
externe (BDD, web service, framework)
Tuesday, May 14, 13
Tests unitaires un frein?
Tuesday, May 14, 13
Tests unitaires un frein?
@Test public void
a_discount_for_two_fruit_applies_for_two_fruit() throws Exception {
List<Fruit> fruits = asList(APPLE, APPLE);
Money discount = discountOf50for2apples.apply(fruits);
assertThat(discount).isEqualTo(money(50));
}
Tuesday, May 14, 13
Tests unitaires un frein?
@Test public void
a_discount_for_two_fruit_applies_for_two_fruit() throws Exception {
List<Fruit> fruits = asList(APPLE, APPLE);
Money discount = discountOf50for2apples.apply(fruits);
assertThat(discount).isEqualTo(money(50));
}
@Test
public void testReadXml() {
try {
ApplicationTargets applicationTargetList = roleXmlReader.readXml();
if (applicationTargetList != null) {
if (applicationTargetList.getApplicationTargetList() == null
&& applicationTargetList.getApplicationTargetList()
.size() == 0) {
fail("Error while reading XML file");
}
} else {
fail("Error while reading XML file");
}
} catch (Exception e) {
fail("Error while reading XML file");
}
}
Tuesday, May 14, 13

Contenu connexe

Plus de martinsson

De legacy au tdd - Agile pays basque
De legacy au tdd  - Agile pays basqueDe legacy au tdd  - Agile pays basque
De legacy au tdd - Agile pays basquemartinsson
 
Usable software design ncraft
Usable software design ncraftUsable software design ncraft
Usable software design ncraftmartinsson
 
Usable software design - code utilisable
Usable software design - code utilisableUsable software design - code utilisable
Usable software design - code utilisablemartinsson
 
Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testablemartinsson
 
Changer Pour Mieux Coder
Changer Pour Mieux CoderChanger Pour Mieux Coder
Changer Pour Mieux Codermartinsson
 

Plus de martinsson (7)

De legacy au tdd - Agile pays basque
De legacy au tdd  - Agile pays basqueDe legacy au tdd  - Agile pays basque
De legacy au tdd - Agile pays basque
 
Usable software design ncraft
Usable software design ncraftUsable software design ncraft
Usable software design ncraft
 
Usable software design - code utilisable
Usable software design - code utilisableUsable software design - code utilisable
Usable software design - code utilisable
 
Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testable
 
Changer Pour Mieux Coder
Changer Pour Mieux CoderChanger Pour Mieux Coder
Changer Pour Mieux Coder
 
Mikado
MikadoMikado
Mikado
 
Mikado
MikadoMikado
Mikado
 

Pyramide des tests

  • 1. Pyramide des tests d'où sort-il? Johan Martinsson @johan_alps Tuesday, May 14, 13
  • 2. Le cas de ... Fred Sandra Les tests de boîte noire sont top! Simples à écrire, ils ont du sens pour tout le monde. Nous n’avons pas tellement besoin de tests unitaires. Nous avons beaucoup fait les tests boite noire, mais nous avons du tous les jeter! On arrivait plus à les maintenir. Tuesday, May 14, 13
  • 3. Le cas de ... Fred Sandra 150 tests système 5 min à l’intérieur du f-work une seule BDD 600 tests système 9 heures 5 processus dont 2 batch Selenium 2 BDD, 2 FS Tuesday, May 14, 13
  • 5. Un bon test • Casse pour de vrais erreurs • Ne casse pas pour un ajout • N’est pas aléatoire • Ne dépend pas d’autres tests • Tourne vite Tuesday, May 14, 13
  • 6. Ratio vraie / fausse alerte Lorsqu’un test système échoue c’est • Un bug • ou un évènement aléatoire • pb réseau • autres aplications HS (backend, bdd) • maintenance manuel • ou d’un dommage collateral • Modification des données de test • Nouvelle fonctionnalité modifie le comportement de l’application (login) • Données attendues trop larges Tuesday, May 14, 13
  • 7. Coût de fixer un bug Tuesday, May 14, 13
  • 8. Coût de fixer un bug Tuesday, May 14, 13
  • 10. Avec la taille de l'application l'intérêt des tests bas niveau se fait sentir Tuesday, May 14, 13
  • 12. Test d’intégration @Test public void it_knows_the_price_of_fruit() throws Exception { storage.addFruit(fruit("Strawberries"), money(500)); assertThat(storage.priceFor(fruit("Strawberries"))).isEqualTo(money(500)); } Test focalisé sur une librairie/service externe (BDD, web service, framework) Tuesday, May 14, 13
  • 13. Tests unitaires un frein? Tuesday, May 14, 13
  • 14. Tests unitaires un frein? @Test public void a_discount_for_two_fruit_applies_for_two_fruit() throws Exception { List<Fruit> fruits = asList(APPLE, APPLE); Money discount = discountOf50for2apples.apply(fruits); assertThat(discount).isEqualTo(money(50)); } Tuesday, May 14, 13
  • 15. Tests unitaires un frein? @Test public void a_discount_for_two_fruit_applies_for_two_fruit() throws Exception { List<Fruit> fruits = asList(APPLE, APPLE); Money discount = discountOf50for2apples.apply(fruits); assertThat(discount).isEqualTo(money(50)); } @Test public void testReadXml() { try { ApplicationTargets applicationTargetList = roleXmlReader.readXml(); if (applicationTargetList != null) { if (applicationTargetList.getApplicationTargetList() == null && applicationTargetList.getApplicationTargetList() .size() == 0) { fail("Error while reading XML file"); } } else { fail("Error while reading XML file"); } } catch (Exception e) { fail("Error while reading XML file"); } } Tuesday, May 14, 13