SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
Delphi et les tests
unitaires
Webinaire du 3 novembre 2020
PRÉSENTATEUR
MVP Embarcadero
Prestataire informatique freelance et formateur Delphi
CV et contacts :
https://www.linkedin.com/in/patrickpremartin/
Blog Delphi/Pascal :
https://developpeur-pascal.fr
Outils Embarcadero
Les meilleurs outils de développement multi-
plateformes. Créez une fois et déployez des
applications modernes sur chaque plateforme.
Support Technique
Nos techniciens sont à votre service à tout
moment pour répondre à vos questions et
vous fournir des informations sûres.
Distributeur Officiel
Partenaire exclusif de Embarcadero
Technologies, largement reconnu pour
ses produits de programmation primés.
B A R N S T E N
QUI
Site : https://www.barnsten.com – Contacts FR : equipe@barnsten.com
NOTRE
Société de prestations informatiques.
Edition de sites Internet, logiciels, vidéos et livres.
Centre de formation référencé sur Datadock.
Infos et contacts : https://olfsoftware.fr
Formations en entreprise : https://se-former-a-delphi.fr
Formations en ligne : https://apprendre-delphi.fr
O L F S O F T W A R E
INTROD
Le cycle de vie d’un logiciel ne s’arrête pas au
développement, aux tests utilisateurs et à la mise
en production/vente. Il y a aussi l’idée de départ,
l’analyse des besoins, la conception, puis
plusieurs étapes de tests si on veut faire les
choses proprement et dans les règles de l’art
(dépendant beaucoup de l’impact du logiciel et
son public).
© Patrick Prémartin / developpeur-pascal.fr
INTROD
Aujourd’hui nous allons nous concentrer sur le
travail que peuvent produire les développeurs
afin de limiter le travail des testeurs en aval.
© Patrick Prémartin / developpeur-pascal.fr
PHASES
Différents types de tests :
- Unit testing
- Smoke testing
- Integration testing
- System testing
- Regression testing
- Performance, load et stress
testing
- Acceptance testing
© Patrick Prémartin / developpeur-pascal.fr
TESTS
Ce qui nous intéresse aujourd’hui ce sont les tests
unitaires, je vous laisse chercher pour les autres si
vous ne savez pas à quoi ils correspondent.
Petit tour sur Wikipédia pour la définition:
https://fr.wikipedia.org/wiki/Test_unitaire
© Patrick Prémartin / developpeur-pascal.fr
TESTS
En programmation informatique, le test unitaire (ou « T.U. », ou « U.T.
» en anglais) ou test de composants est une procédure permettant de
vérifier le bon fonctionnement d'une partie précise d'un logiciel ou
d'une portion d'un programme (appelée « unité » ou « module »).
Dans les applications non critiques, l'écriture des tests unitaires a
longtemps été considérée comme une tâche secondaire. Cependant,
les méthodes Extreme programming (XP) ou Test Driven Development
(TDD) ont remis les tests unitaires, appelés « tests du programmeur »,
au centre de l'activité de programmation.
© Patrick Prémartin / developpeur-pascal.fr
TESTS
En clair les tests unitaires sont des tests
développés pour s’assurer que les modules
développés pour le logiciel fonctionnent et
restent fonctionnels durablement malgré les
modifications qui leur sont apportées.
Ils ne permettent pas de tester l’interface
utilisateur. Ils ne sont là que pour le code.
© Patrick Prémartin / developpeur-pascal.fr
QUEL
On pourrait voir les tests unitaires comme une
perte de temps et dans certains cas ils le sont.
En revanche ils sont vitaux dans notre monde
ultra connecté où les logiciels dépendent de
morceaux provenant d’un peu partout. C’est
surtout vrai pour les applications en ligne, mais ça
le devient pour les « vrais » logiciels.
© Patrick Prémartin / developpeur-pascal.fr
QUEL
Les tests unitaires peuvent servir dans des
équipes de développeurs afin de s’assurer que ce
qui est nécessaire à l’un et développé par un
autre sort bien le résultat attendu histoire de
savoir d’où viennent les problèmes lorsqu’il y en a
une fois le code synchronisé.
© Patrick Prémartin / developpeur-pascal.fr
QUEL
Les tests unitaires permettent également de
s’assurer que le code du logiciel de base est
cohérent dans la durée, que les modifications
apportées au code ne cassent rien ailleurs.
Les tests unitaires sont à mettre dans la boite à
outil des tests de non régression.
© Patrick Prémartin / developpeur-pascal.fr
QUEL
Grâce aux tests unitaires on peut tester notre
code mais aussi sa dépendance avec les
frameworks, librairies et modules développés par
des tiers.
© Patrick Prémartin / developpeur-pascal.fr
PREMIER
Un programme contient une fonction permettant
d’additionner deux valeurs numériques.
function Ajoute(a, b: integer): integer;
begin
result := a + b;
end;
© Patrick Prémartin / developpeur-pascal.fr
PREMIER
Le test unitaire de cette fonction pourrait être
sous cette forme:
procedure TestAjoute;
begin
if 10 <> Ajoute(5, 5) then
raise exception.Create('erreur');
if 0 <> Ajoute(0, 0) then
raise exception.Create('erreur');
if 20 <> Ajoute(5, 15) then
raise exception.Create('erreur');
if 65535 <> Ajoute(32768, 32767) then
raise exception.Create('erreur');
end;
© Patrick Prémartin / developpeur-pascal.fr
PREMIER
Dans ce cas peu de risque de se planter jusqu’au
jour où la taille du type « integer » change selon
le système d’exploitation ou le processeur sur
lequel on travaille.
Autant être prévenu par des tests automatisés
plutôt que s’en apercevoir par hasard en
production quand on le voit…
© Patrick Prémartin / developpeur-pascal.fr
DEUXIEME
Prenons un autre cas typique des logiciels
développés avec Delphi avant la version 2009. On
utilise le type char au lieu de byte pour gérer des
zones mémoires ou tableaux d’octets.
Une fois passés à une version récente les
caractères ne sont plus des octets puisque
Unicode est devenu la norme.
© Patrick Prémartin / developpeur-pascal.fr
DEUXIEME
Le programme fonctionne peut-être encore
physiquement, mais les données traitées ne sont
pas les bonnes.
Un test unitaire vérifiant que la zone mémoire
traitée fait la taille qu’on attend d’elle pourrait
éviter des soucis.
© Patrick Prémartin / developpeur-pascal.fr
COMMENT
L’exemple d’avant avec les exceptions permet de
réaliser des tests unitaires, mais ce n’est pas
hyper pratique à l’usage. On a d’autres solutions
pour travailler proprement.
© Patrick Prémartin / developpeur-pascal.fr
COMMENT
Voici quelques solutions disponibles pour les
projets Delphi :
- Les assertions
- À la main
- DUnit
- DUnitm
- DUnitX
© Patrick Prémartin / developpeur-pascal.fr
ASSERTIONS
Les assertions sont gérées directement par le
compilateur dans le projet que vous développez.
Il suffit d’utiliser l’instruction assert()
Elles sont actives par défaut dans toutes les
configurations et toutes les plateformes. Vous
pouvez le modifier dans les options de projet.
© Patrick Prémartin / developpeur-pascal.fr
ASSERTIONS
L’avantage est que ça s’insère simplement dans le
code, pas besoin de faire quoi que ce soit de plus.
L’inconvénient, c’est qu’elles s’exécutent en
même temps que le code, donc uniquement si on
passe dessus à l’utilisation du logiciel.
© Patrick Prémartin / developpeur-pascal.fr
DEMONS
Exemple d’un programme utilisant les assertions
pour s’autotester en cours d’utilisation.
© Patrick Prémartin / developpeur-pascal.fr
METHODE
Sur le principe des assertions vous pouvez aussi
coder directement vos tests unitaires dans les
unités de vos projets.
Il suffit de les activer dans certains événements
ou dans l’initialisation des unités.
© Patrick Prémartin / developpeur-pascal.fr
METHODE
Evitez de les laisser s’exécuter dans la version de
production de vos logiciels. Utilisez une définition
conditionnelle ou directement DEBUG.
Assurez-vous de récupérer les informations liées
à vos tests qui échouent sous forme de log (fiche
« log », fichier, mail, FTP, CodeSite, …)
© Patrick Prémartin / developpeur-pascal.fr
DEMONS
Exemple d’un programme proposant des tests
unitaires manuels.
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
DUnit est un projet open source qui date des
années 199x.
Il est considéré comme obsolète pour les projets
récents mais fonctionne toujours très bien en
environnement Windows.
Plus d’infos sur http://dunit.sourceforge.net/
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
Embarcadero la propose en option lors de
l’installation de RAD Studio, Delphi et C++Builder.
Elle n’est plus recommandée pour les projets
Delphi mais sert toujours pour les projets
C++Builder.
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
DUnit ajoute un assistant de création de projet de
test et un assistant de création de cas de test.
Le projet de test correspond à un ou plusieurs
projets « réels ». C’est un projet Delphi.
Le cas de test est une unité liée à un projet de
test dans laquelle vous allez coder vos tests
unitaires.
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
Vous trouverez plus d’infos sur son usage dans sa
documentation sur
http://docwiki.embarcadero.com/RADStudio/Syd
ney/fr/Présentation_de_DUnit ou
http://dunit.sourceforge.net/#Documentation
Et à travers de nombreuses vidéos disponibles en
ligne dont https://youtu.be/1KeQf1urVQ4
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
Egalement open source, DUnitm n’est pas
proposée par Embarcadero.
Elle est disponible sur GitHub :
https://github.com/glenkleidon/DelphiTips/wiki/
DUnitm---Mini-Test-Framework
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
L’objectif annoncé est de simplifier la création de
tests unitaires sur vos projets. Ca reste dans tous
les cas du codage à faire à la main.
Vous trouverez des démos sur la page de
présentation et dans cette playlist YouTube :
https://www.youtube.com/playlist?list=PL42y13v
A83auEzqLTzmkwnQuC6pyOxlQE
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
DUnitX est fournie par Embarcadero sous forme
d’option lors de l’installation de Delphi,
C++Builder et RAD Studio. C’est aussi une librairie
open source dont le dépôt se trouve sur
https://github.com/VSoftTechnologies/DUnitX
Elle propose un assistant de projet DUnitX et
d’unité DUnitX.
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
L’automatisation des tests se fait à l’aide
d’attributs dans les déclaration des unités DUnitX
comme nos jeux de données de test.
Les tests sont codés une seule fois.
DUnitX s’occupe de les appeler avec les
paramètres déclarés en attributs.
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
Le mode d’emploi de base de DUnitX est
disponible sur
http://docwiki.embarcadero.com/RADStudio/Syd
ney/fr/Présentation_de_DUnitX
© Patrick Prémartin / developpeur-pascal.fr
LIBRAIRIE
Il y a également un mode d’emploi pour la
conversion de projets de tests DUnit en projets
DUnitX sur
http://docwiki.embarcadero.com/RADStudio/Syd
ney/fr/Comment_convertir_les_tests_DUnit_en_
DUnitX
© Patrick Prémartin / developpeur-pascal.fr
DEMONS
Exemple de projet Delphi avec son projet de tests
unitaires réalisés avec DUnitX.
© Patrick Prémartin / developpeur-pascal.fr
ALLER
L’avantage des tests unitaires est qu’ils
permettent dans certains cas de s’assurer que les
versions transmises entre développeurs ou avant
compilation automatisée sont fonctionnelles.
Les outils d’intégration continue comme Jenkins
peuvent gérer les résultats et agir en fonction
d’eux.
© Patrick Prémartin / developpeur-pascal.fr
ALLER
Plusieurs extensions sont disponibles pour l’IDE
de Delphi afin de gérer les tests en direct sans
lancer le programme de tests. Par exemple :
- Test Grip :
https://github.com/GDKsoftware/TestGrip
- Test Insight :
https://bitbucket.org/sglienke/testinsight/wiki
/Home
© Patrick Prémartin / developpeur-pascal.fr
TestGrip
C’est un projet open source disponible sur
https://github.com/GDKsoftware/TestGrip
Une vidéo de 2012 montre son fonctionnement :
https://youtu.be/cgI-VOAVGd8
© Patrick Prémartin / developpeur-pascal.fr
TestInsight
Conçu et maintenu par Stefan Glienke, MVP
Embarcadero allemand, Test Insight est
disponibles sur
https://bitbucket.org/sglienke/testinsight/wiki/H
ome
© Patrick Prémartin / developpeur-pascal.fr
TestInsight
L’installation se fait très simplement et fournit un
assistant à activer sur les projets de tests DUnit
ou DUnitX.
Une fois activé on n’a plus à compiler le projet de
test. L’assistant s’en occupe lui-même
régulièrement et nous informe des résultats en
temps réel.
© Patrick Prémartin / developpeur-pascal.fr
TestInsight
Un très bon tuto a été rédigé par David Millington
sur son blog à l’adresse
https://parnassus.co/unit-testing-with-
testinsight/
© Patrick Prémartin / developpeur-pascal.fr
DEMONS
Exemple de projet de tests unitaires DUnitX avec
Test Insight activé.
© Patrick Prémartin / developpeur-pascal.fr
CONCL
© Patrick Prémartin / developpeur-pascal.fr
Nous avons vu plusieurs solutions pour faire des
tests unitaires dans les projets Delphi.
Choisissez la méthode qui vous convient le mieux
et habituez-vous à en faire régulièrement au
moins sur les fonctionnalités sensibles de vos
projets.
CONCL
© Patrick Prémartin / developpeur-pascal.fr
Utilisez les assertions en pensant à les désactiver
sur les versions RELEASE pour ne pas perdre de
temps CPU « inutile ».
C’est simple et rapide à mettre en place pour les
sessions de test développeur/utilisateur.
CONCL
© Patrick Prémartin / developpeur-pascal.fr
Utilisez DUnitX pour les « vrais » tests unitaires
exécutables en masse régulièrement avant de
fournir des versions de vos logiciels à d’autres.
Activez les dans votre système d’intégration
continue si vous en avez un.
CONCL
© Patrick Prémartin / developpeur-pascal.fr
Et n’oubliez pas que le travail nécessaire à la mise
en place de tests unitaires peut permettre de
gagner du temps et de la fiabilité sur les projets
maintenus à plusieurs sur des années.
PLUS
© Patrick Prémartin / developpeur-pascal.fr
Pour des ressources complémentaires,
télécharger cette présentation et accéder aux
exemples, rendez-vous sur :
https://developpeur-pascal.fr/p/___00l-
webinaire-du-3-novembre-2020-delphi-et-les-
tests-unitaires.html
(RE)VOIR
© Patrick Prémartin / developpeur-pascal.fr
La rediffusion de ce webinaire devrait être
disponible sur la chaîne YouTube de Barnsten :
https://www.youtube.com/c/BarnstenFrance/vid
eos
Vous y trouverez également d’autres vidéos dont
une formation complète aux bases de la
programmation avec Delphi VCL et FMX.
PROCHAINS
© Patrick Prémartin / developpeur-pascal.fr
Prochains webinaires :
- 24 novembre 2020 : Diffuser nos logiciels et
gérer leurs mises à jour
- 29 décembre 2020 : Utilisation de Git dans
Delphi
Rediffusions, détails et inscriptions depuis
https://developpeur-pascal.fr/p/_6007-
webinaires.html
LIVRES
© Patrick Prémartin / developpeur-pascal.fr
Des livres sur le développement avec Delphi
sortent régulièrement. Retrouvez en la liste sur
https://delphi-books.com/
Le dernier en date est le très attendu « Delphi
GUI programming with FireMonkey » d’Andrea
Magni en vente sur https://amzn.to/3oOIoYD et
sur commande en librairie.
QUESTIONS
© Patrick Prémartin / developpeur-pascal.fr
CONTACTEZ NOUS

Contenu connexe

Similaire à Delphi et les tests unitaires

TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringneuros
 
Les Tests : une évolution, pas une révolution
Les Tests : une évolution, pas une révolutionLes Tests : une évolution, pas une révolution
Les Tests : une évolution, pas une révolutionZeenat Nazaroudine
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache MavenArnaud Héritier
 
Introduction au test_logiciel-fr
Introduction au test_logiciel-frIntroduction au test_logiciel-fr
Introduction au test_logiciel-frEmanBali
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logicielsSylvain Leroy
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicEmmanuel Hugonnet
 
Utiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateformeUtiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateformepprem
 
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...Sébastien Levert
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la rechercheJohan Moreau
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange LabsEmmanuel Hugonnet
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifkemenaran
 
Utiliser des dessins vectoriels à la place d'images
Utiliser des dessins vectoriels à la place d'imagesUtiliser des dessins vectoriels à la place d'images
Utiliser des dessins vectoriels à la place d'imagespprem
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outilsAgile Tour 2009 Québec
 
qualité logicielle (8).pdf
qualité logicielle (8).pdfqualité logicielle (8).pdf
qualité logicielle (8).pdfNoamHaythem
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Ippon
 
Avis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests LogicielsAvis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests LogicielsCloudNetCare
 
Diffuser nos logiciels et leurs mises à jour
Diffuser nos logiciels et leurs mises à jourDiffuser nos logiciels et leurs mises à jour
Diffuser nos logiciels et leurs mises à jourpprem
 
Objet direct 2013-05-11 Microsoft ALM 2013 Software Factory
Objet direct 2013-05-11 Microsoft ALM 2013 Software FactoryObjet direct 2013-05-11 Microsoft ALM 2013 Software Factory
Objet direct 2013-05-11 Microsoft ALM 2013 Software FactoryFactoVia
 
Créer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composantCréer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composantpprem
 

Similaire à Delphi et les tests unitaires (20)

TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoring
 
Les Tests : une évolution, pas une révolution
Les Tests : une évolution, pas une révolutionLes Tests : une évolution, pas une révolution
Les Tests : une évolution, pas une révolution
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Introduction au test_logiciel-fr
Introduction au test_logiciel-frIntroduction au test_logiciel-fr
Introduction au test_logiciel-fr
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
Utiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateformeUtiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateforme
 
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
 
Utiliser des dessins vectoriels à la place d'images
Utiliser des dessins vectoriels à la place d'imagesUtiliser des dessins vectoriels à la place d'images
Utiliser des dessins vectoriels à la place d'images
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outils
 
qualité logicielle (8).pdf
qualité logicielle (8).pdfqualité logicielle (8).pdf
qualité logicielle (8).pdf
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014
 
Avis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests LogicielsAvis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests Logiciels
 
Diffuser nos logiciels et leurs mises à jour
Diffuser nos logiciels et leurs mises à jourDiffuser nos logiciels et leurs mises à jour
Diffuser nos logiciels et leurs mises à jour
 
Objet direct 2013-05-11 Microsoft ALM 2013 Software Factory
Objet direct 2013-05-11 Microsoft ALM 2013 Software FactoryObjet direct 2013-05-11 Microsoft ALM 2013 Software Factory
Objet direct 2013-05-11 Microsoft ALM 2013 Software Factory
 
Créer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composantCréer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composant
 

Plus de pprem

Using FireMonkey as a game engine
Using FireMonkey as a game engineUsing FireMonkey as a game engine
Using FireMonkey as a game enginepprem
 
Using Delphi as a no code development environment
Using Delphi as a no code development environmentUsing Delphi as a no code development environment
Using Delphi as a no code development environmentpprem
 
Easy coding a multi device game with FireMonkey
Easy coding a multi device game with FireMonkeyEasy coding a multi device game with FireMonkey
Easy coding a multi device game with FireMonkeypprem
 
Utiliser FireMonkey comme moteur de jeux vidéo
Utiliser FireMonkey comme moteur de jeux vidéoUtiliser FireMonkey comme moteur de jeux vidéo
Utiliser FireMonkey comme moteur de jeux vidéopprem
 
Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?pprem
 
Utilisation de git avec Delphi
Utilisation de git avec DelphiUtilisation de git avec Delphi
Utilisation de git avec Delphipprem
 
Gérer le clavier virtuel sous iOS et Android
Gérer le clavier virtuel sous iOS et AndroidGérer le clavier virtuel sous iOS et Android
Gérer le clavier virtuel sous iOS et Androidpprem
 
Comment développer pour Linux avec Delphi
Comment développer pour Linux avec DelphiComment développer pour Linux avec Delphi
Comment développer pour Linux avec Delphipprem
 
Embarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilesEmbarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilespprem
 
Déploiement et débogage à distance
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distancepprem
 
Faire une interface adaptive avec la VCL
Faire une interface adaptive avec la VCLFaire une interface adaptive avec la VCL
Faire une interface adaptive avec la VCLpprem
 
Faire une interface adaptive avec FireMonkey
Faire une interface adaptive avec FireMonkeyFaire une interface adaptive avec FireMonkey
Faire une interface adaptive avec FireMonkeypprem
 
QR codes et codes à barres sous Delphi
QR codes et codes à barres sous DelphiQR codes et codes à barres sous Delphi
QR codes et codes à barres sous Delphipprem
 
Des solutions de synchronisation de données
Des solutions de synchronisation de donnéesDes solutions de synchronisation de données
Des solutions de synchronisation de donnéespprem
 
Découvrez FireDAC pour FMX
Découvrez FireDAC pour FMXDécouvrez FireDAC pour FMX
Découvrez FireDAC pour FMXpprem
 
Découvrez FireDAC pour la VCL
Découvrez FireDAC pour la VCLDécouvrez FireDAC pour la VCL
Découvrez FireDAC pour la VCLpprem
 
POC Notes de frais
POC Notes de fraisPOC Notes de frais
POC Notes de fraispprem
 
Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...
Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...
Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...pprem
 
Comment écrire des articles de blog à succès
Comment écrire des articles de blog à succèsComment écrire des articles de blog à succès
Comment écrire des articles de blog à succèspprem
 
Gagner de l'argent sur Internet
Gagner de l'argent sur InternetGagner de l'argent sur Internet
Gagner de l'argent sur Internetpprem
 

Plus de pprem (20)

Using FireMonkey as a game engine
Using FireMonkey as a game engineUsing FireMonkey as a game engine
Using FireMonkey as a game engine
 
Using Delphi as a no code development environment
Using Delphi as a no code development environmentUsing Delphi as a no code development environment
Using Delphi as a no code development environment
 
Easy coding a multi device game with FireMonkey
Easy coding a multi device game with FireMonkeyEasy coding a multi device game with FireMonkey
Easy coding a multi device game with FireMonkey
 
Utiliser FireMonkey comme moteur de jeux vidéo
Utiliser FireMonkey comme moteur de jeux vidéoUtiliser FireMonkey comme moteur de jeux vidéo
Utiliser FireMonkey comme moteur de jeux vidéo
 
Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?
 
Utilisation de git avec Delphi
Utilisation de git avec DelphiUtilisation de git avec Delphi
Utilisation de git avec Delphi
 
Gérer le clavier virtuel sous iOS et Android
Gérer le clavier virtuel sous iOS et AndroidGérer le clavier virtuel sous iOS et Android
Gérer le clavier virtuel sous iOS et Android
 
Comment développer pour Linux avec Delphi
Comment développer pour Linux avec DelphiComment développer pour Linux avec Delphi
Comment développer pour Linux avec Delphi
 
Embarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilesEmbarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobiles
 
Déploiement et débogage à distance
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distance
 
Faire une interface adaptive avec la VCL
Faire une interface adaptive avec la VCLFaire une interface adaptive avec la VCL
Faire une interface adaptive avec la VCL
 
Faire une interface adaptive avec FireMonkey
Faire une interface adaptive avec FireMonkeyFaire une interface adaptive avec FireMonkey
Faire une interface adaptive avec FireMonkey
 
QR codes et codes à barres sous Delphi
QR codes et codes à barres sous DelphiQR codes et codes à barres sous Delphi
QR codes et codes à barres sous Delphi
 
Des solutions de synchronisation de données
Des solutions de synchronisation de donnéesDes solutions de synchronisation de données
Des solutions de synchronisation de données
 
Découvrez FireDAC pour FMX
Découvrez FireDAC pour FMXDécouvrez FireDAC pour FMX
Découvrez FireDAC pour FMX
 
Découvrez FireDAC pour la VCL
Découvrez FireDAC pour la VCLDécouvrez FireDAC pour la VCL
Découvrez FireDAC pour la VCL
 
POC Notes de frais
POC Notes de fraisPOC Notes de frais
POC Notes de frais
 
Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...
Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...
Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...
 
Comment écrire des articles de blog à succès
Comment écrire des articles de blog à succèsComment écrire des articles de blog à succès
Comment écrire des articles de blog à succès
 
Gagner de l'argent sur Internet
Gagner de l'argent sur InternetGagner de l'argent sur Internet
Gagner de l'argent sur Internet
 

Delphi et les tests unitaires

  • 1. Delphi et les tests unitaires Webinaire du 3 novembre 2020
  • 2. PRÉSENTATEUR MVP Embarcadero Prestataire informatique freelance et formateur Delphi CV et contacts : https://www.linkedin.com/in/patrickpremartin/ Blog Delphi/Pascal : https://developpeur-pascal.fr
  • 3. Outils Embarcadero Les meilleurs outils de développement multi- plateformes. Créez une fois et déployez des applications modernes sur chaque plateforme. Support Technique Nos techniciens sont à votre service à tout moment pour répondre à vos questions et vous fournir des informations sûres. Distributeur Officiel Partenaire exclusif de Embarcadero Technologies, largement reconnu pour ses produits de programmation primés. B A R N S T E N QUI Site : https://www.barnsten.com – Contacts FR : equipe@barnsten.com
  • 4. NOTRE Société de prestations informatiques. Edition de sites Internet, logiciels, vidéos et livres. Centre de formation référencé sur Datadock. Infos et contacts : https://olfsoftware.fr Formations en entreprise : https://se-former-a-delphi.fr Formations en ligne : https://apprendre-delphi.fr O L F S O F T W A R E
  • 5. INTROD Le cycle de vie d’un logiciel ne s’arrête pas au développement, aux tests utilisateurs et à la mise en production/vente. Il y a aussi l’idée de départ, l’analyse des besoins, la conception, puis plusieurs étapes de tests si on veut faire les choses proprement et dans les règles de l’art (dépendant beaucoup de l’impact du logiciel et son public). © Patrick Prémartin / developpeur-pascal.fr
  • 6. INTROD Aujourd’hui nous allons nous concentrer sur le travail que peuvent produire les développeurs afin de limiter le travail des testeurs en aval. © Patrick Prémartin / developpeur-pascal.fr
  • 7. PHASES Différents types de tests : - Unit testing - Smoke testing - Integration testing - System testing - Regression testing - Performance, load et stress testing - Acceptance testing © Patrick Prémartin / developpeur-pascal.fr
  • 8. TESTS Ce qui nous intéresse aujourd’hui ce sont les tests unitaires, je vous laisse chercher pour les autres si vous ne savez pas à quoi ils correspondent. Petit tour sur Wikipédia pour la définition: https://fr.wikipedia.org/wiki/Test_unitaire © Patrick Prémartin / developpeur-pascal.fr
  • 9. TESTS En programmation informatique, le test unitaire (ou « T.U. », ou « U.T. » en anglais) ou test de composants est une procédure permettant de vérifier le bon fonctionnement d'une partie précise d'un logiciel ou d'une portion d'un programme (appelée « unité » ou « module »). Dans les applications non critiques, l'écriture des tests unitaires a longtemps été considérée comme une tâche secondaire. Cependant, les méthodes Extreme programming (XP) ou Test Driven Development (TDD) ont remis les tests unitaires, appelés « tests du programmeur », au centre de l'activité de programmation. © Patrick Prémartin / developpeur-pascal.fr
  • 10. TESTS En clair les tests unitaires sont des tests développés pour s’assurer que les modules développés pour le logiciel fonctionnent et restent fonctionnels durablement malgré les modifications qui leur sont apportées. Ils ne permettent pas de tester l’interface utilisateur. Ils ne sont là que pour le code. © Patrick Prémartin / developpeur-pascal.fr
  • 11. QUEL On pourrait voir les tests unitaires comme une perte de temps et dans certains cas ils le sont. En revanche ils sont vitaux dans notre monde ultra connecté où les logiciels dépendent de morceaux provenant d’un peu partout. C’est surtout vrai pour les applications en ligne, mais ça le devient pour les « vrais » logiciels. © Patrick Prémartin / developpeur-pascal.fr
  • 12. QUEL Les tests unitaires peuvent servir dans des équipes de développeurs afin de s’assurer que ce qui est nécessaire à l’un et développé par un autre sort bien le résultat attendu histoire de savoir d’où viennent les problèmes lorsqu’il y en a une fois le code synchronisé. © Patrick Prémartin / developpeur-pascal.fr
  • 13. QUEL Les tests unitaires permettent également de s’assurer que le code du logiciel de base est cohérent dans la durée, que les modifications apportées au code ne cassent rien ailleurs. Les tests unitaires sont à mettre dans la boite à outil des tests de non régression. © Patrick Prémartin / developpeur-pascal.fr
  • 14. QUEL Grâce aux tests unitaires on peut tester notre code mais aussi sa dépendance avec les frameworks, librairies et modules développés par des tiers. © Patrick Prémartin / developpeur-pascal.fr
  • 15. PREMIER Un programme contient une fonction permettant d’additionner deux valeurs numériques. function Ajoute(a, b: integer): integer; begin result := a + b; end; © Patrick Prémartin / developpeur-pascal.fr
  • 16. PREMIER Le test unitaire de cette fonction pourrait être sous cette forme: procedure TestAjoute; begin if 10 <> Ajoute(5, 5) then raise exception.Create('erreur'); if 0 <> Ajoute(0, 0) then raise exception.Create('erreur'); if 20 <> Ajoute(5, 15) then raise exception.Create('erreur'); if 65535 <> Ajoute(32768, 32767) then raise exception.Create('erreur'); end; © Patrick Prémartin / developpeur-pascal.fr
  • 17. PREMIER Dans ce cas peu de risque de se planter jusqu’au jour où la taille du type « integer » change selon le système d’exploitation ou le processeur sur lequel on travaille. Autant être prévenu par des tests automatisés plutôt que s’en apercevoir par hasard en production quand on le voit… © Patrick Prémartin / developpeur-pascal.fr
  • 18. DEUXIEME Prenons un autre cas typique des logiciels développés avec Delphi avant la version 2009. On utilise le type char au lieu de byte pour gérer des zones mémoires ou tableaux d’octets. Une fois passés à une version récente les caractères ne sont plus des octets puisque Unicode est devenu la norme. © Patrick Prémartin / developpeur-pascal.fr
  • 19. DEUXIEME Le programme fonctionne peut-être encore physiquement, mais les données traitées ne sont pas les bonnes. Un test unitaire vérifiant que la zone mémoire traitée fait la taille qu’on attend d’elle pourrait éviter des soucis. © Patrick Prémartin / developpeur-pascal.fr
  • 20. COMMENT L’exemple d’avant avec les exceptions permet de réaliser des tests unitaires, mais ce n’est pas hyper pratique à l’usage. On a d’autres solutions pour travailler proprement. © Patrick Prémartin / developpeur-pascal.fr
  • 21. COMMENT Voici quelques solutions disponibles pour les projets Delphi : - Les assertions - À la main - DUnit - DUnitm - DUnitX © Patrick Prémartin / developpeur-pascal.fr
  • 22. ASSERTIONS Les assertions sont gérées directement par le compilateur dans le projet que vous développez. Il suffit d’utiliser l’instruction assert() Elles sont actives par défaut dans toutes les configurations et toutes les plateformes. Vous pouvez le modifier dans les options de projet. © Patrick Prémartin / developpeur-pascal.fr
  • 23. ASSERTIONS L’avantage est que ça s’insère simplement dans le code, pas besoin de faire quoi que ce soit de plus. L’inconvénient, c’est qu’elles s’exécutent en même temps que le code, donc uniquement si on passe dessus à l’utilisation du logiciel. © Patrick Prémartin / developpeur-pascal.fr
  • 24. DEMONS Exemple d’un programme utilisant les assertions pour s’autotester en cours d’utilisation. © Patrick Prémartin / developpeur-pascal.fr
  • 25. METHODE Sur le principe des assertions vous pouvez aussi coder directement vos tests unitaires dans les unités de vos projets. Il suffit de les activer dans certains événements ou dans l’initialisation des unités. © Patrick Prémartin / developpeur-pascal.fr
  • 26. METHODE Evitez de les laisser s’exécuter dans la version de production de vos logiciels. Utilisez une définition conditionnelle ou directement DEBUG. Assurez-vous de récupérer les informations liées à vos tests qui échouent sous forme de log (fiche « log », fichier, mail, FTP, CodeSite, …) © Patrick Prémartin / developpeur-pascal.fr
  • 27. DEMONS Exemple d’un programme proposant des tests unitaires manuels. © Patrick Prémartin / developpeur-pascal.fr
  • 28. LIBRAIRIE DUnit est un projet open source qui date des années 199x. Il est considéré comme obsolète pour les projets récents mais fonctionne toujours très bien en environnement Windows. Plus d’infos sur http://dunit.sourceforge.net/ © Patrick Prémartin / developpeur-pascal.fr
  • 29. LIBRAIRIE Embarcadero la propose en option lors de l’installation de RAD Studio, Delphi et C++Builder. Elle n’est plus recommandée pour les projets Delphi mais sert toujours pour les projets C++Builder. © Patrick Prémartin / developpeur-pascal.fr
  • 30. LIBRAIRIE DUnit ajoute un assistant de création de projet de test et un assistant de création de cas de test. Le projet de test correspond à un ou plusieurs projets « réels ». C’est un projet Delphi. Le cas de test est une unité liée à un projet de test dans laquelle vous allez coder vos tests unitaires. © Patrick Prémartin / developpeur-pascal.fr
  • 31. LIBRAIRIE Vous trouverez plus d’infos sur son usage dans sa documentation sur http://docwiki.embarcadero.com/RADStudio/Syd ney/fr/Présentation_de_DUnit ou http://dunit.sourceforge.net/#Documentation Et à travers de nombreuses vidéos disponibles en ligne dont https://youtu.be/1KeQf1urVQ4 © Patrick Prémartin / developpeur-pascal.fr
  • 32. LIBRAIRIE Egalement open source, DUnitm n’est pas proposée par Embarcadero. Elle est disponible sur GitHub : https://github.com/glenkleidon/DelphiTips/wiki/ DUnitm---Mini-Test-Framework © Patrick Prémartin / developpeur-pascal.fr
  • 33. LIBRAIRIE L’objectif annoncé est de simplifier la création de tests unitaires sur vos projets. Ca reste dans tous les cas du codage à faire à la main. Vous trouverez des démos sur la page de présentation et dans cette playlist YouTube : https://www.youtube.com/playlist?list=PL42y13v A83auEzqLTzmkwnQuC6pyOxlQE © Patrick Prémartin / developpeur-pascal.fr
  • 34. LIBRAIRIE DUnitX est fournie par Embarcadero sous forme d’option lors de l’installation de Delphi, C++Builder et RAD Studio. C’est aussi une librairie open source dont le dépôt se trouve sur https://github.com/VSoftTechnologies/DUnitX Elle propose un assistant de projet DUnitX et d’unité DUnitX. © Patrick Prémartin / developpeur-pascal.fr
  • 35. LIBRAIRIE L’automatisation des tests se fait à l’aide d’attributs dans les déclaration des unités DUnitX comme nos jeux de données de test. Les tests sont codés une seule fois. DUnitX s’occupe de les appeler avec les paramètres déclarés en attributs. © Patrick Prémartin / developpeur-pascal.fr
  • 36. LIBRAIRIE Le mode d’emploi de base de DUnitX est disponible sur http://docwiki.embarcadero.com/RADStudio/Syd ney/fr/Présentation_de_DUnitX © Patrick Prémartin / developpeur-pascal.fr
  • 37. LIBRAIRIE Il y a également un mode d’emploi pour la conversion de projets de tests DUnit en projets DUnitX sur http://docwiki.embarcadero.com/RADStudio/Syd ney/fr/Comment_convertir_les_tests_DUnit_en_ DUnitX © Patrick Prémartin / developpeur-pascal.fr
  • 38. DEMONS Exemple de projet Delphi avec son projet de tests unitaires réalisés avec DUnitX. © Patrick Prémartin / developpeur-pascal.fr
  • 39. ALLER L’avantage des tests unitaires est qu’ils permettent dans certains cas de s’assurer que les versions transmises entre développeurs ou avant compilation automatisée sont fonctionnelles. Les outils d’intégration continue comme Jenkins peuvent gérer les résultats et agir en fonction d’eux. © Patrick Prémartin / developpeur-pascal.fr
  • 40. ALLER Plusieurs extensions sont disponibles pour l’IDE de Delphi afin de gérer les tests en direct sans lancer le programme de tests. Par exemple : - Test Grip : https://github.com/GDKsoftware/TestGrip - Test Insight : https://bitbucket.org/sglienke/testinsight/wiki /Home © Patrick Prémartin / developpeur-pascal.fr
  • 41. TestGrip C’est un projet open source disponible sur https://github.com/GDKsoftware/TestGrip Une vidéo de 2012 montre son fonctionnement : https://youtu.be/cgI-VOAVGd8 © Patrick Prémartin / developpeur-pascal.fr
  • 42. TestInsight Conçu et maintenu par Stefan Glienke, MVP Embarcadero allemand, Test Insight est disponibles sur https://bitbucket.org/sglienke/testinsight/wiki/H ome © Patrick Prémartin / developpeur-pascal.fr
  • 43. TestInsight L’installation se fait très simplement et fournit un assistant à activer sur les projets de tests DUnit ou DUnitX. Une fois activé on n’a plus à compiler le projet de test. L’assistant s’en occupe lui-même régulièrement et nous informe des résultats en temps réel. © Patrick Prémartin / developpeur-pascal.fr
  • 44. TestInsight Un très bon tuto a été rédigé par David Millington sur son blog à l’adresse https://parnassus.co/unit-testing-with- testinsight/ © Patrick Prémartin / developpeur-pascal.fr
  • 45. DEMONS Exemple de projet de tests unitaires DUnitX avec Test Insight activé. © Patrick Prémartin / developpeur-pascal.fr
  • 46. CONCL © Patrick Prémartin / developpeur-pascal.fr Nous avons vu plusieurs solutions pour faire des tests unitaires dans les projets Delphi. Choisissez la méthode qui vous convient le mieux et habituez-vous à en faire régulièrement au moins sur les fonctionnalités sensibles de vos projets.
  • 47. CONCL © Patrick Prémartin / developpeur-pascal.fr Utilisez les assertions en pensant à les désactiver sur les versions RELEASE pour ne pas perdre de temps CPU « inutile ». C’est simple et rapide à mettre en place pour les sessions de test développeur/utilisateur.
  • 48. CONCL © Patrick Prémartin / developpeur-pascal.fr Utilisez DUnitX pour les « vrais » tests unitaires exécutables en masse régulièrement avant de fournir des versions de vos logiciels à d’autres. Activez les dans votre système d’intégration continue si vous en avez un.
  • 49. CONCL © Patrick Prémartin / developpeur-pascal.fr Et n’oubliez pas que le travail nécessaire à la mise en place de tests unitaires peut permettre de gagner du temps et de la fiabilité sur les projets maintenus à plusieurs sur des années.
  • 50. PLUS © Patrick Prémartin / developpeur-pascal.fr Pour des ressources complémentaires, télécharger cette présentation et accéder aux exemples, rendez-vous sur : https://developpeur-pascal.fr/p/___00l- webinaire-du-3-novembre-2020-delphi-et-les- tests-unitaires.html
  • 51. (RE)VOIR © Patrick Prémartin / developpeur-pascal.fr La rediffusion de ce webinaire devrait être disponible sur la chaîne YouTube de Barnsten : https://www.youtube.com/c/BarnstenFrance/vid eos Vous y trouverez également d’autres vidéos dont une formation complète aux bases de la programmation avec Delphi VCL et FMX.
  • 52. PROCHAINS © Patrick Prémartin / developpeur-pascal.fr Prochains webinaires : - 24 novembre 2020 : Diffuser nos logiciels et gérer leurs mises à jour - 29 décembre 2020 : Utilisation de Git dans Delphi Rediffusions, détails et inscriptions depuis https://developpeur-pascal.fr/p/_6007- webinaires.html
  • 53. LIVRES © Patrick Prémartin / developpeur-pascal.fr Des livres sur le développement avec Delphi sortent régulièrement. Retrouvez en la liste sur https://delphi-books.com/ Le dernier en date est le très attendu « Delphi GUI programming with FireMonkey » d’Andrea Magni en vente sur https://amzn.to/3oOIoYD et sur commande en librairie.
  • 54. QUESTIONS © Patrick Prémartin / developpeur-pascal.fr