Romuald, notre CTO (et Génie du développement Back-End) s'est mis à la portée de tous en vulgarisant le fonctionnement des tests unitaires et des tests d'intégration. Même les non-techs savent désormais gérer les complexités cyclomatiques !
Avis d'expert faisant l'état des lieux des tests logiciels aujourd'hui et expliquant comment mettre en place un processus de "continuous testing" en ligne avec son usine logicielle.
Aujourd’hui, les tests sont devenu un élément crucial au cycle de développement logiciel, des sociétés ont investi dans la création d’un service interne de tests, rien ne peut être mis en production sans être validé par ce service.
Pour cela, cette présentation va mettre en évidence les fondamentaux de test logiciel à savoir: définitions, types, processus, méthodes, outils, principes, stratégies, jeux de test, etc.
Le test, qu'il soit unitaire ou fonctionnel, est à la mode dans le monde du développement logiciel, suite entre autre à la mise en œuvre croissante des méthodes agiles et notamment de l'intégration continue ou des méthodes de développement telles que le TDD, le BDD ou la programmation par contrat. Récemment, ce phénomène a encore été amplifié au sein de la communauté PHP par l'apparition aux côtés de l'incontournable PHPUnit d'outils plus originaux tels que Behat, Praspel ou atoum qui permettent au développeur de rédiger des tests plus simplement. Pourtant, nous constatons tous les jours que le test conserve une grande part de mystère pour la plupart des développeurs, Bien souvent, ces derniers ne savent pas quoi tester, et encore moins comment écrire un test efficace ou mettre en place une politique de test pertinente. Certains s'interrogent par exemple sur la pertinence de leurs tests, se demandent s'il faut absolument tout tester, d'autres s'il est possible de tester la création d'un fichier, voir même s'il est intéressant de le faire, tandis que d'autres se demandent où se situe la frontière entre le test unitaire et le test fonctionnel ou s'il est nécessaire de tester toutes les méthodes d'une classe, alors que d'autres encore ne savent tout simplement pas par où commencer. Durant cette conférence, nous allons tenter, à l'aide de nos expériences respectives de créateur de framework de tests et de doctorat en informatique spécialisé dans le test, de répondre aux questions récurrentes que se pose une personne confrontée à la mise en place d'une politique de qualité logicielle en général et à l'écriture d'un test logiciel en particulier. À l'issue de cette foire aux questions didactique et interactive, vous devriez être capable d'aborder le test, indépendamment de sa nature, de manière plus sereine et efficace et produire ainsi un logiciel de la qualité que vous désirez.
Avis d'expert faisant l'état des lieux des tests logiciels aujourd'hui et expliquant comment mettre en place un processus de "continuous testing" en ligne avec son usine logicielle.
Aujourd’hui, les tests sont devenu un élément crucial au cycle de développement logiciel, des sociétés ont investi dans la création d’un service interne de tests, rien ne peut être mis en production sans être validé par ce service.
Pour cela, cette présentation va mettre en évidence les fondamentaux de test logiciel à savoir: définitions, types, processus, méthodes, outils, principes, stratégies, jeux de test, etc.
Le test, qu'il soit unitaire ou fonctionnel, est à la mode dans le monde du développement logiciel, suite entre autre à la mise en œuvre croissante des méthodes agiles et notamment de l'intégration continue ou des méthodes de développement telles que le TDD, le BDD ou la programmation par contrat. Récemment, ce phénomène a encore été amplifié au sein de la communauté PHP par l'apparition aux côtés de l'incontournable PHPUnit d'outils plus originaux tels que Behat, Praspel ou atoum qui permettent au développeur de rédiger des tests plus simplement. Pourtant, nous constatons tous les jours que le test conserve une grande part de mystère pour la plupart des développeurs, Bien souvent, ces derniers ne savent pas quoi tester, et encore moins comment écrire un test efficace ou mettre en place une politique de test pertinente. Certains s'interrogent par exemple sur la pertinence de leurs tests, se demandent s'il faut absolument tout tester, d'autres s'il est possible de tester la création d'un fichier, voir même s'il est intéressant de le faire, tandis que d'autres se demandent où se situe la frontière entre le test unitaire et le test fonctionnel ou s'il est nécessaire de tester toutes les méthodes d'une classe, alors que d'autres encore ne savent tout simplement pas par où commencer. Durant cette conférence, nous allons tenter, à l'aide de nos expériences respectives de créateur de framework de tests et de doctorat en informatique spécialisé dans le test, de répondre aux questions récurrentes que se pose une personne confrontée à la mise en place d'une politique de qualité logicielle en général et à l'écriture d'un test logiciel en particulier. À l'issue de cette foire aux questions didactique et interactive, vous devriez être capable d'aborder le test, indépendamment de sa nature, de manière plus sereine et efficace et produire ainsi un logiciel de la qualité que vous désirez.
Guide de tests fonctionnels. En utilisant ces principes, mes équipes ont réduit de 90% les défauts détectés en tests d’acceptation (UAT) et permis la livraison de trois projets avec zéro défaut.
L’université de la performance vous fera découvrir comment concevoir la plus grosse fonctionnalité implicite d’une application: Sa performance.
Pour cela nous vous proposerons une démarche en trois étapes: - Connaître les différents types de tests de charge et savoir quand les utiliser - Mettre en place un test de charge et des outils nécessaires pour le monitoring - Savoir identifier et optimiser les différents goulets d’étranglement de l’application
Le tout mis en pratique sur une application réelle.
Un banc de test est un système physique permettant de mettre un produit en conditions d'utilisation paramétrables et contrôlées afin d'observer et mesurer son comportement. Le banc de test est largement utilisé dans l'industrie, au point de représenter une part importante du budget de développement d'un produit.
Complexité et systèmes opérables - Fred HébertWeb à Québec
Tout système utile doit nécessairement devenir complexe. Non seulement le code tourne au pire, mais la charge cognitive imposée aux opérateurs est toujours croissante. Il n’est pas suffisant de prendre une approche centrée sur la propreté du code pour que nos systèmes soient opérables : nous avons également à comprendre comment nous formons nos modèles mentaux de nos systèmes, ce qui constitue une bonne abstraction, et savoir quels états internes exposer aux observateurs.
Objectif général : Acquérir les bases méthodologiques de la résolution d'un problème conduisant à la réalisation d'un programme informatique
Objectifs opérationnels :
- Connaître les étapes de résolution d’un problème
- Stocker et traiter des données simples
- Permettre à un programme de communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Traiter des données composites
- Définir et utiliser des procédures et des fonctions
Rédigé en Mars 2013
Introduction : ce que l’on va couvrir (et ne pas couvrir)
Définition : Qu’est-ce que l’automatisation des tests ?
Objectifs : Pourquoi automatiser ?
Couverture :
Qu’est-ce qu’on automatise ?
Pre et Post Process
Comment déterminer ce qu’on automatise ?
Responsabilité : Qui fait quoi?
ROI : Combien ça coute ?
Infrastructure de test
Processus d’automatisation
Conclusion
[AppTalks] Parce qu'il n'y a que des gens passionnés dans notre équipe, après Théo c'est Florian qui vient partager avec enthousiasme ses projets personnels.
Photographe sur son temps libre, il nous livre toutes ses connaissances du sujet et nous prépare pour son prochain talk ; l'astrophotographie
[AppTalks] Théo, futur doctorant du Lab Appstud dans le vaste domaine qu'est l'Intelligence Artificielle, est un passionné de robotique. Il a pris quelques minutes pour nous parler de ses projets et nous expliquer, ce qu'est l'IOT
Contenu connexe
Similaire à Tests et KPI(s) - quoi, pourquoi, comment ?
Guide de tests fonctionnels. En utilisant ces principes, mes équipes ont réduit de 90% les défauts détectés en tests d’acceptation (UAT) et permis la livraison de trois projets avec zéro défaut.
L’université de la performance vous fera découvrir comment concevoir la plus grosse fonctionnalité implicite d’une application: Sa performance.
Pour cela nous vous proposerons une démarche en trois étapes: - Connaître les différents types de tests de charge et savoir quand les utiliser - Mettre en place un test de charge et des outils nécessaires pour le monitoring - Savoir identifier et optimiser les différents goulets d’étranglement de l’application
Le tout mis en pratique sur une application réelle.
Un banc de test est un système physique permettant de mettre un produit en conditions d'utilisation paramétrables et contrôlées afin d'observer et mesurer son comportement. Le banc de test est largement utilisé dans l'industrie, au point de représenter une part importante du budget de développement d'un produit.
Complexité et systèmes opérables - Fred HébertWeb à Québec
Tout système utile doit nécessairement devenir complexe. Non seulement le code tourne au pire, mais la charge cognitive imposée aux opérateurs est toujours croissante. Il n’est pas suffisant de prendre une approche centrée sur la propreté du code pour que nos systèmes soient opérables : nous avons également à comprendre comment nous formons nos modèles mentaux de nos systèmes, ce qui constitue une bonne abstraction, et savoir quels états internes exposer aux observateurs.
Objectif général : Acquérir les bases méthodologiques de la résolution d'un problème conduisant à la réalisation d'un programme informatique
Objectifs opérationnels :
- Connaître les étapes de résolution d’un problème
- Stocker et traiter des données simples
- Permettre à un programme de communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Traiter des données composites
- Définir et utiliser des procédures et des fonctions
Rédigé en Mars 2013
Introduction : ce que l’on va couvrir (et ne pas couvrir)
Définition : Qu’est-ce que l’automatisation des tests ?
Objectifs : Pourquoi automatiser ?
Couverture :
Qu’est-ce qu’on automatise ?
Pre et Post Process
Comment déterminer ce qu’on automatise ?
Responsabilité : Qui fait quoi?
ROI : Combien ça coute ?
Infrastructure de test
Processus d’automatisation
Conclusion
[AppTalks] Parce qu'il n'y a que des gens passionnés dans notre équipe, après Théo c'est Florian qui vient partager avec enthousiasme ses projets personnels.
Photographe sur son temps libre, il nous livre toutes ses connaissances du sujet et nous prépare pour son prochain talk ; l'astrophotographie
[AppTalks] Théo, futur doctorant du Lab Appstud dans le vaste domaine qu'est l'Intelligence Artificielle, est un passionné de robotique. Il a pris quelques minutes pour nous parler de ses projets et nous expliquer, ce qu'est l'IOT
[Apptalk] Même en télétravail nous continuons les talks en interne. Aujourd'hui c'est Amélie qui a décidé de nous parler de quelque chose qu'elle connait bien : l'Action avec un grand A !
Entreprenante, audacieuse et déterminée, elle nous dévoile ses clefs pour avancer.
[AppTalks] Fawzi, notre docteur en vision par ordinateur, est revenu sur son sujet de thèse : l'Intelligence Artificielle pour nous expliquer les différences entre le Machine learning et le Deep learning
Quand les croyances impactent notre bonheurAppstud
[Apptalk] La rentrée scolaire est marquée par la reprise des talk en interne. Aujourd'hui c'est Jeanne, notre miss happiness, qui nous présente un aspect de la psychologie positive. L'idée : prendre confiance en soi et arrêter de croire que nous ne sommes pas capables
La collapsologie : l’effondrement de la civilisation thermo-industrielleAppstud
[AppTalks] Parce que le monde dans lequel nous vivons connaît des changements climatiques alarmants. Parce que la protection de l'environnement nous concerne tous et qu'elle devrait être un engagement commun. Parce que pour s'impliquer, il faut avant tout s'informer. Gaétan nous explique comment nous en sommes arrivés là et quelles sont les problématiques que nous rencontrons aujourd'hui !
L'utilisation du digital par l'agent de Police MunicipaleAppstud
[AppTalks] Thomas Julé, Digital Project Manager chez Agoranet, est allé au plus près de la où se passe l'action !
Deux semaines d'enquête pour analyser le SI de la police municipale et trouver comment le moderniser ! Son objectif était simple : proposer des solutions technologiques innovantes pour faciliter et sécuriser la vie d'un agent de terrain.
[AppTalks] Aujourd'hui c'est Alba (notre chef pâtissière療), qui nous présente les best practices les plus incroyables d'Android Découvertes lors de la plus grande conférence française dédiée à Android #AndroidMakers, c'est avec enthousiasme et concentration qu'on suit son parcours de talks durant ces deux jours
Un dev rêve mais un dev analyse aussi. Alors quand notre Bass nationale nous explique comment il a réussit à dompter ses rêves pour en faire des rêves lucides, on est tous attentifs ! Merci Jérémy Basso pour cet AppTalk !
Aujourd'hui, c'est Meg - artiste incontestée de la boite et experte en UXUI Design - qui nous parle de la gamification Présenté comme LE nouvel outil marketing et de management, ce terme à de belles années devant lui, on vous explique comment et pourquoi avec cette présentation !
Après la présentation de #Flutter, Julien nous révèle toute la puissance de #Go, encore un autre langage de programmation créé par Google.
After the #Flutter presentation, Julien reveals all the power of #Go, yet another programming language created by Google.
Winston Churchill disait que le succès c’était d’aller d’échecs en échecs sans jamais perdre son enthousiasme de réessayer. La crainte de commettre des erreurs entraîne une recherche excessive de sécurité et fait manquer des opportunités. Elle entrave la créativité et l’innovation. En ne se mettant jamais en danger, on risque de stagner et, au final, de régresser. Chez Appstud nous n'avons pas peur de faire des erreurs car ce sont elles qui nous amènent au succès. Aujourd’hui Jeanne notre miss Happiness nous parle des clés pour réussir son échec ;-)
Vous avez forcément déjà entendu parler du Bitcoin ou de l’Ethereum ! Florian Tranier, notre chevalier de l’ombre, nous a présenté le fonctionnement de la technologie qui héberge ces crypto-monnaies. La seule révolution qui rassemble clients, investisseurs et programmeurs : La Blockchain.
Sébastien Séblin nous a présenté la programmation neuro-linguistique (P.N.L) et son application dans notre quotidien. Que ce soit sur soi ou sur les autres, la PNL nous aide à développer des comportements de réussite en nous apprenant à mobiliser nos ressources et à utiliser nos sens.
Arnaud Vezin nous a fait partager son expérience passée dans l’acquisition mobile chez Google, et nous propose des axes de réflexion sur le développement de solutions à valeurs ajoutées pour nos clients.
3. Une histoire de systèmes11
3
Application de tests sur un système
donné.
Ici, une machine a café.
- On appuie sur le bouton bleu
- Un café est produit
4. Une histoire de systèmes11
4
Conception d’un robot pour tester la
fonctionnalité de la machine.
- Le robot appuie sur le bouton
- Il vérifie que le contenu dans la tasse
est bien du café
5. Une histoire de systèmes11
5
Appuie sur le
bouton
Produit du café
Vérification que
la tasse
contient du
café
6. Une histoire de systèmes11
6
Appuie sur le
bouton
Produit du THÉ
Vérification que
la tasse
contient du
café
7. Une histoire de systèmes11
7
Félicitation pour votre premier test unitaire !
“vérifier le bon fonctionnement d'une partie
précise d'une unité ou module”
Maintenant, vous pourrez facilement valider que
le bouton de la machine, quand on appuie
dessus, produit bien du café.
8. Une histoire de systèmes11
8
Plusieurs problèmes peuvent survenir:
- La machine n’a plus d’eau - Système de réservoir à eau
- La machine n’a plus de grain - Système de réservoir à grain
Le test unitaire valide une fonctionnalité, mais ne tient pas compte des
autres paramètres.
C’est pour ça qu’il existe des tests d’intégration.
Pour cela, on va créer un autre robot, plus complexe, qui mélange et
teste que ces différents systèmes réservoirs fonctionnent bien ensemble
9. Une histoire de systèmes11
9
Robot d’intégration (iRobot)
- Le robot vide le réservoir d’eau
- Appuie sur le bouton pour servir un
café
- La machine doit signaler qu’il lui
manque de l’eau
10. Une histoire de systèmes11
10
Vide le réservoir et
appuie sur le
bouton
Je ne peux pas
travailler: Réservoir
vide
Vérification que la
machine détecte bien
le réservoir vide suite
à la pression sur le
bouton
11. Pourquoi ?
11
11
“dans le test d’intégration, chacun des modules indépendants du logiciel est
assemblé et testé dans l’ensemble.”
- Test unitaire = On branche la machine directement à l’eau courante pour
ne pas tester la fonctionnalité “Réservoir”
- Test intégration = On branche le vrai réservoir à la machine et on teste que
le réservoir et le bouton fonctionnent bien ensemble.
14. Couverture
14
11
Robot “Servietsky”
Donne une métrique sur le pourcentage du
système testé : c’est la couverture des
tests.
Il va vérifier que les fonctionnalités sont au
moins exécutés une fois lors des tests.
19. Pourquoi ?12
Principalement pour savoir si un système est assez testé.
Une couverture élevée n’est pas un gage de qualité. Il nous faut une autre
métrique pour pouvoir juger si un système est correctement testé.
Il ne vérifie pas non plus que les tests sont OK ou NOK. Ce n’est pas son
job.
C’est le prochain robot qui va nous permettre de savoir ça.
23. Tests de mutations
23
13
Reprenons le robot du début mais, par
paresse, on le construit sans la
validation. Le test est incorrect / buggé
et ne teste rien.
- Le robot appuie sur le bouton
- Il vérifie que le contenu dans la tasse
est bien du café
27. Réponse au problème
27
Nous devons … tester les tests pour
s’assurer qu’ils servent à quelque chose.
C’est le boulot des tests de mutation !
13
28. Tests de mutations
28
13
Lance et analyse les
tests
Générer un système
qui a subit une
mutation = qui produit
quelque chose que le
système ne produit
jamais - ex: jus
d’orange
Génère et lance le système
“muté”
Résultat des tests
Vérification que les tests ont échoués et
donne un pourcentage
29. Tests de mutations
29
13
On teste donc les tests pour valider que la couverture est correcte.
Il permet de détecter si des tests inutiles ont été réalisés pour augmenter la
couverture.
En analysant les tests une première fois - le mutation testing peut générer
des valeurs que le système ne produirait jamais - et donc tester que les
tests échouent - à raison car le système ne fonctionne pas
normalement.
32. Complexité cyclomatique14
3
2
Permet de définir le nombre de tests /
cycles nécessaires pour couvrir
l’ensemble de fonctionnalités d’une
unité.
Imaginons qu’une seule fonction gère
les boutons de notre machine à café
35. Complexité cyclomatique - Pourquoi ?14
35
Permet de valider qu’un système ne cherche pas à faire trop de choses.
Plus un système veut gérer des choses - plus il est dangereux car
potentiellement lourd à faire évoluer ou à maintenir.
Imaginez un système qui gère toutes les fonctions de notre machine à
café, ce serait un problème d’architecture du système.
On essaie de suivre le Principe de responsabilité unique. Chaque système
doit avoir une responsabilité unique et distincte.
37. Complexité
37
14
Elle est souvent calculé grâce à une moyenne. Certaines fonctions doivent
fonctionner différemment en fonction des paramètres donnés en entrée.
On prends souvent total / nombre de fonctions ou fichier (car un fichier
contient au moins une fonction)
Par exemple: 619 / 500 (fichiers) = 1.238
39. Autres métriques
39
15
D’autres métriques existent
- % de duplication parce que deux boutons qui font la même chose ça ne
sert pas à grand chose
- Code “puant” mauvaise pratiques par rapport à un langage (souvent un
problème de syntaxe)
- Complexité cognitive est-ce que mon code est lisible simplement ?
41. Conclusion
41
16
Ces tests et métriques servent à valider la qualité d’un système.
“Un système devrait faire une seule chose et devrait bien le faire .
On s’assure que les fonctionnalités sont testées et correctement
testées
pour faciliter l’évolution et la maintenabilité du système en question.”
42. Etude de cas - Fédération Française de Tennis
- 90% de couverture du code dans les systèmes web et domain
- 10% de code mort (code inutilisé)
- Complexité cyclomatique de 3
- 5% de tests non résistants à la mutation
42
16
sur tout le code - nous sommes ~92% sur les systèmes web et domain
Pas de métrique - mais les outils de développement signalent automatiquement le code
mort et pas de warnings à ce sujet sur le projet
17% sur tout le code - nous sommes à ~ 10% sur les
systèmes web / domain
~ 1.24 sur tout le projet