Développement logiciel en méthode agile Laurent Bristiel 18/09/2012
Agenda Qui suis-je ? De quoi parle-t-on au juste ? Agilité Tests Bilan
Qui suis-je ? Ingénieur logiciel chez Fermat/Moody's de 2004 à 2012 Responsable d'une équipe de testeurs Contexte : éditeur, bancaire, agile Embauché chez Forgerock depuis 2 jours Mission semblable mais contexte différent
Développement logiciel en méthode agile ? Spécification Programmation Tests Logiciel Traditionnel (application) Soft As a Service (web) App (smartphone) Méthodes Cow-boy Cascade Cycle en V Agile Open Source (bazar)
2001
Agile = scrum + XP Scrum : méthode de gestion de projet Populations : product manager, dev, scrumMaster Outils : stories, itérations, backlog, board, post-it Réunions : planning, daily, démo, rétro
XP = Extrem Programming : méthode dév Intégration continue, feedback loop Pair-programming, propriété collective TDD, tests fonctionnels
Agile aujourd'hui Facebook, Ebay, Google... « Lean Startup » Livraison permanente « Lean Startup » Création startup en continu Communauté importante à Grenoble Yahoo, Kelkoo, Samse, Orange, EDF, Moody's... 2012 : 5e conférence « Agile Grenoble » (500 personnes, 40 sessions)
Agile chez Moody's 7 équipes de 10 personnes (PM, Prog, Testeurs) Ratio Testeurs/Prog : 1/2 Releases de 3 mois, itérations de 2 semaines Succès Capacité à réagir (réglementation, marché etc.) équipes (re)motivées et plus solides Meilleure transparence et predictabilité Difficultés Équipes distribuées Agilité limitée à la R&D Logiciels vieillissants
Zoom sur les tests (en Agile / chez Moody's) Pour toute nouvelle version Les nouvelles fonctionnalités doivent marcher Les corrections de bugs doivent être effective Rien ne doit avoir été cassé (effets de bord) 2 activités de tests Tests de validation Tests de non regression
Types de tests Tests unitaires Tests de composants Tests end-2-end Tests techniques faits par le programmeur sur le code source (tests boite blanche) Tests de composants Tests technico-fonctionnels faits par programmeur ou testeur sur un service (boite grise) Tests end-2-end Tests fonctionnels fait par testeur ou product manager sur le système complet (boite noire)
Tests de validation Tests collectifs, au plus tôt et en continu Collaboration programmeur, testeur et PM Calcul des attendus théoriques (oracle) Programmeur : Test unitaires et TDD Testeurs : production de test cases (composants, E2E) + tests exploratoires Important : on ne teste pas tout Il y a aura des bugs
Tests de non régressions Risques de régressions ? Tests de non régressions : somme de tous les tests de validation du passé => croissance infinie Fréquence des tests de NR : aussi souvent que possible (coût bug, intégration continue..) Méthodes de tests : Manuels : simple mais long (offshoring ?) Automatique : compliqué mais rapide (expertise) Important : On ne reteste pas tout (évaluation de risques) Il n'y aura pas forcément de régression
Pyramide idéale des tests automatisés
Bilan de 8 ans de tests Les régressions sont le réel enjeu (progiciel) « on a le droit à l'erreur, mais une seule fois » Difficulté à faire comprendre la pyramide « montrez-moi vos tests ! » Cas particulier des tests d'interface graphique « comment vous avez pu rater ça ? » Bug du 29 février 2008 « on a eu chaud »
Bilan de 8 ans de tests Métier passionnant en méthode agile véritables enjeux d'ingénierie logicielle métier peu connu et reconnu Frustration sur le contexte C++/Oracle/licence versus Java/Web/OpenSource
Des questions ?