Alea jacta test Tester n’est pas (que) douter Pierre-Yves Lapersonne / Orange ✿✿✿✿ ʕ •ᴥ•ʔ/ ︻デ═一 Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution 4.0 International . Version 8 - 08/11/2016
Alea jacta testTester n’est pas (que) douter
Pierre-Yves Lapersonne / Orange
✿✿✿✿ ʕ •ᴥ•ʔ/ ︻デ═一 Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution 4.0 International.Version 8 - 08/11/2016
PY LAPERSONNE
Développeur mobile
@pylapp
Alea jacta test
Plan de test● les clichés sur les tests
● exemples de tests manqués
● pourquoi en faire ?
● les tests en détails
● quelques outils
● démos !
quelques... trucs.
6
● 8ème Journée Française des Tests Logiciels12 / 04 / 2016Montrouge
● CFTLComité Français des Tests LogicielsPerros Guirrec
● ISTQBInternational Software Testing Qualifications BoardBruxelles
quelques chiffres
8
● 40 % du budget projet dédiés aux tests
● 39 % des devs sont en mode TDD
● 46 % des devs estiment ne pas avoirassez de temps pour les tests
les clichés sur les tests
10
tester c’est douter !
11
ça ne sert à rien !
12
ça prend trop de temps !
13
ça coûte trop cher !
14
le client est le meilleur testeur !
15
ça ajoute des sources à maintenir !
inutiles les tests ?
17
Therac 251980’
18
● outil de traitement de cancers par radiations
● exposition prévue de 200 rad
● exposition réelle de 20 000 rad
● au moins 6 morts
19
AT&T15 Janvier 1990
20
● mise à jour du réseau téléphonique
● transmissions de mauvais messages entre les antennes
● 9h de panne
● 60 millions $ de pertes
21
Mars Climate Orbiter23 Septembre 1999
22
● plusieurs équipes internationales...
● utilisant le système anglo-saxon...
● ... ET le système métrique
● navigation totalement défectueuse
● 900 millions $ perdus
23
vol 501 de Ariane 54 Juin 1996
24
● récupération d’éléments logiciels Ariane 4
● overflow dans les calculs de trajectoire
● problème de conversionfloat 64 bits unsigned 16 bits
● destruction de la fusée
● +370 millions $ ... à l’eau
25
retournement d’un F-18
26
● retournement une fois passé l’équateur
● mauvaise gestion des coordonnées
27
Louvois2011
28
● retards de paiement
● mauvais soldes versés
● les familles des militaires en danger
● 465 millions d’euros d’erreur... juste en 2012selon la Cour des Comptes
29
Stagefright2015
30
● AOSP, Firefox, Firefox OS
● librairie multimédia obsolète
● débordement mémoire ● execution de code arbitraire, etc.
31
iOS et le killer text2015
32
● réception d’un message particulier
● affichage dans les notifications
● débordement d’un buffer ● comportements dangereux de l’iPhone
redémarrage, blocage, boot loop, ...
33
SNCF et Linux...2015
34
● sur Windows ? Ça fonctionne.
● sur OS X ? Ça fonctionne.
● Linux ? Android ? Oups.
35
Castorama8 Juin 2016
36
● suggestions douteuses selon les requêtes
● fermeture du site en catastrophedonc manque à gagner pour l’entreprise
37
SAIP14 Juillet 2016
38
● notification des usagers 3h après la tragédie
● retard d’information par rapport à d’autresFacebook, Twitter, QWIDAM, les SMS...
pourquoi faire des tests ?
39
● prouver la qualité du logiciel
● identifier des comportements incohérents
● repérer d’éventuelles failles
● avoir des clients cont€nts
● éviter les surcharge$ liées aux bugs
● et puis avoir la conscience tranquille aussi...
mais qu’est-ce qu’un test ?
définitions ISTQB / IEEE
mais qu’est-ce qu’un test ?
43
44
45
concrètement
mais qu’est-ce qu’un test ?
47
● pré-conditions, post-conditions, invariants
● paramètres, valeurs de retour
● succès, échec, en cours, pas fait, planté
48
● tests statiques
■ vérification des sourcesdead / unreachable code, métriques, syntaxe, standards...
■ pas d’exécution de code
49
● tests dynamiques
■ black boxse baser sur les spécifications, comportements macros / extérieurs,abstraction de la conception
■ white boxse baser sur la conception, comportements micros / intérieurs
50
● smoke / sanity / confidence tests
■ les autres tests pourront ou non démarrerlogiciel peut démarrer ? connexion faite ? etc.
● monkey tests
■ tester sans savoir ce que l’on faitrépétitif, générations probabilisées d’inputs, random...
51
● plusieurs types
■ utilisateursalpha / beta tests, utilisabilité, retours directs du public cible
■ systèmestress tests, performances, conformité envers les specifications
52
● plusieurs types
■ intégrationcommunication entre les composants via leurs interfaces
■ unitairesisoler les composants, chercher les défauts dans les API
le cycle de vie d’un test
54
1. planningscope, méthodologie, gestion des defects...
2. développementcas de tests, scénarios, scripts
3. exécutionexécution, résultats
55
4. defects reportingrejouer les tests, rapports
5. product delivery
les 6 commandements
57
1. Il doit être automatisé et rejouable
2. Il doit être facile à concevoir
3. Une fois écrit, il demeurera
4. Tout le monde peut le lancer
5. Il doit être lancé aussi simplement qu’un click sur un bouton
6. Il doit être rapide d’exécution
et les bugs dans tout ça ?
59
● niveaux de bugsnew, open, assign, test, deferred, rejected, duplicate, verified, closed
● sévéritésminor / low, average / medium, major / high, critical
Test-Driven Development
61
● méthodologie de projetKent Beck, 2003
● héritage de eXtreme Programmingrevues de codes, tests unitaires, cycles très courts, test-first
● Test Driven Development: By Example, Kent BeckAddison-Wesley Longman, 2002, ISBN 0-321-14653-0, ISBN 978-0321146533
62
63
la (grosse) boîte à outils
67
68
69
70
71
72
73
74
75
Monkey
adb shell monkey -p com.package.myApp --throttle 300 -s 123456 10
adb shell monkey -p com.package.myApp --pct-touch 50 -pct-motion 25 --pct-trackball 25 10000
76
Monkeyrunner
77
78
https://github.com/pylapp/AleaJactaTest
one more slide
81
● les tests sont indispensables
● les développeurs sont de bons testeurs du code
● les utilisateurs sont de bons testeurs du produit
● ce ne sont pas les outils qui manquent...
Merci !
@pylapp
Dura test, sed test. Alea jacta test !
● Des frameworks de tests
○ JUnit■ http://junit.org/
○ QUnit■ https://qunitjs.com/
○ UnitJS■ http://unitjs.com/
○ JSUnit■ http://www.jsunit.net/
○ Jasmine■ http://jasmine.github.io/
○ Mocha■ https://mochajs.org/
○ Appium■ http://appium.io/introduction.html?lang=en■ http://appium.io/slate/en/tutorial/android.html?java#■ https://github.com/appium/java-client
○ Robotium■ http://robotium.com/■ https://github.com/robotiumtech/robotium
○ Robotframework■ http://robotframework.org/
○ UIAutomator■ http://developer.android.com/tools/testing-support-library/index.html#UIAutomator
○ And others links...■ https://google.github.io/android-testing-support-library/■ https://google.github.io/android-testing-support-library/docs/androidjunitrunner-guide/index.html■ https://github.com/googlesamples/android-testing■ https://developer.android.com/tools/testing-support-library/index.html■ https://medium.com/@nileshjarad/how-to-do-tdd-in-android-90f013d91d7f#.dhvrjw8ug■ https://medium.com/@nileshjarad/why-developers-scared-to-refactor-code-47efd1b854e7#.ojtyerioc■ https://developer.android.com/studio/test/monkey.html■ https://developer.android.com/studio/test/monkeyrunner/index.html
● Des plateformes de tests
○ Google Cloud Test Lab■ https://developers.google.com/cloud-test-lab/
○ Sauce Labs■ http://saucelabs.com/
● Des robots de tests
○ Tapster■ https://www.tindie.com/products/hugs/tapster/■ http://bitbeam.org/■ https://www.youtube.com/watch?v=c_rfTvQs4YU■ https://www.youtube.com/watch?v=in2av9LtCfE
○ Rob5X■ http://www.keolabs.com/automation.html
○ Chrome Touch Bot■ http://www.frandroid.com/marques/google/291985_chrome-touchbot-robot-teste-reactivite-appareils-de-google
● D’autres liens chouettes
○ http://fr.slideshare.net/tfrommen/an-introduction-to-software-testing○ http://www.slideshare.net/UdayaSree/software-testing-life-cycle-presentation○ http://blog.hubstaff.com/why-you-should-write-unit-tests/○ http://blog.hubstaff.com/survey-many-developers-write-unit-tests/○ http://artofunittesting.com/○ http://programmers.stackexchange.com/questions/21133/how-to-write-good-unit-tests○ http://blog.stevensanderson.com/2009/08/24/writing-great-unit-tests-best-and-worst-practises/○ https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks○ http://android-developers.blogspot.fr/2015/12/leveraging-product-flavors-in-android.html○ http://www.journaldugeek.com/2015/05/28/un-bug-qui-permet-a-un-sms-de-redemarrer-votre-iphone/○ http://www.numerama.com/tech/135593-sncf-empeche-achat-de-billets-train-ter-sous-linux.html○ https://fr.wikipedia.org/wiki/Logiciel_unique_%C3%A0_vocation_interarm%C3%A9es_de_la_solde○ https://jenkins-ci.org/○ http://www.marmiton.org/recettes/recette_pate-a-crepes-des-plus-raffinees_49665.aspx○ http://radonc.wikidot.com/radiation-accident-therac25○ http://users.csc.calpoly.edu/~jdalbey/SWE/Papers/att_collapse.html○ https://www.youtube.com/watch?v=_p3Qxl4736A○ https://www.nirgal.net/mco_end.html