portrait PatBiker carré et bordure

Chercher

Le site du WLangage :: aaa.windev11

Accés rapide au contenu de la page

Tests autos - Gain de productivité extrême

WinDev 11 permet de créer des tests de validation et de non régression. C’est une fonctionnalité à découvrir absolument dans les versions 11. Directement inspirée de l’Extreme Programming, l’intégration de tests de régression dans le développement va nous simplifier la vie et rendre nos applications plus fiables.

Des tests pourquoi ?

Chaque fois que vous créez une fenêtre, un état, une procédure ou une classe, vous avez la possibilité de créer le test associé. Pas besoin de WinDev 11 pour cela pourrait-on répliquer. Effectivement, pour créer un test le développeur peut créer un bouton dans un coin de fenêtre. Ce bouton va appeler par exemple la procédure qu’il vient juste de coder.

Généralement ce bouton s’appelle “Bouton1” parce qu’on est pressé. Avec l’avancement du projet, des dizaines de boutons “Bouton1” fleurissent sur les fenêtres. On ne sait rapidement plus ce qu’ils font. Leur code devient vite obsolète. Finalement on les supprime tous quand il faut faire une présentation au client. Les tests sont perdus.

Il y a une alternative, bien sûr. Créer une fenêtre regroupant tous ces boutons. Cette fenêtre s’appelle généralement “Fenetre1”. La suivante sera “Fenetre2” et vous devinez la suite, un paquet de fenêtres rattachées à rien dont on ne sait rapidement plus ce qu’elles font.

Développer plus vite avec les tests

Paradoxalement même si créer un test consomme un peu de temps, on développe plus vite en procédant ainsi. Pourquoi ? le test va révéler des problèmes (qui écrit du code parfait du premier coup ?). Ces problèmes seront faciles à traiter car le développeur est bien dans le contexte. Une correction immédiate sera faite en 20 secondes, mais dans 3 mois on sait bien qu’elle pourrait demander des heures de débogage.

Parallèlement l‘élaboration des tests permet de mieux cibler le besoin, de penser aux cas limites.

Comment écrire un test ?

Ajouter un test est simplissime. Prenons l’exemple d’une procédure globale. Il suffit de faire un clic droit dessus et de choisir “Créer un test unitaire”. Le test minimal est généré automatiquement. Il s’agit d’un simple appel de la procédure. On peut l’enrichir, par exemple, pour tester plusieurs valeurs de paramètres. Voici à quoi ressemble le code d’un test.

Code WLangage d'un test automatique

Tout est automatique

Au fur et à mesure du développement, les tests s’accumulent. A tout moment il est possible de tous les jouer sans interaction de l’utilisateur. Il suffit ensuite de consulter le compte-rendu . Sur le tableau de bord du projet, une autre grande nouveauté de la version 11, un voyant vert ou rouge indique l‘état des tests. Vert c’est bon. Rouge indique soit que des tests ne sont pas passés, soit qu’il n’y a pas assez de tests.

feu vert sur les tests de couverture

La bonne couverture

La figure ci-dessous représente le nouveau Graal à atteindre pour les développeurs WinDev.

100 pourcent de couverture de test

100% des tests sont OK, la couverture des tests est de 100%. Ce dernier point garantie notamment qu’un test existe pour toutes les fenêtres, et tous les états de l’application. Au delà de la simple auto-satisfaction, c’est avant tout la garantie d’un niveau de qualité minimum pour vos utilisateurs.

Partage d'analyse dans le GDS

Le GDS de WinDev 11 permet de partager une analyse entre plusieurs projets. Tout est automatique dans le cas général.

Un assistant très simple

Quand 2 projets locaux, partageant la même analyse, sont intégrés dans le GDS, un assistant trés simple se déclenche et il suffit de cocher l’option “partage d’analyse”.

Assistant partage d'analyse

Partage manuel

Pour partager une analyse avec un projet déjà dans le GDS et qui n’a pas d’analyse, il n’y a pas d’assistant. La manipulation reste simple mais il faut la connaitre. C’est le but de cet article.

Situation de départ

Afin de rendre plus simple les explications, imaginons un projet p1 avec une analyse a1 et un projet p2 sans analyse. Ces 2 projets sont déjà dans le GDS.

La manipulation est relativement simple et se réalise dans l’administrateur du GDS.

  1. dans le projet p2 créer un répertoire pour l’analyse. Dans notre exemple, il s’agit du répertoire a1.wd11. Il faut bien sûr utiliser exactement le même nom que dans le projet p1.
  2. dans le projet p1, ouvrir le répertoire de l’analyse et sélectionner tous les fichiers.
  3. faire glisser tous les fichiers vers le répertoire nouvelle créé.

partage d'analyse dans le GDS - drag and drop des fichiers

Voilà c’est terminé pour la partie GDS. Quitter l’administrateur et ouvrir le projet p2 dans WinDev. Le GDS va tout synchroniser automatiquement.

Dernière étape

La dernière étape consiste à associer l’analyse a1 au projet p2 directement dans la description du projet.

Partage d'analyse dans le GDS - ajout de l'analyse

Le champ Carrousel

Depuis que j’avais assisté à la présentation de WinDev 11 à Lyon, je n’avais qu’une idée en tête : créer un champ Carrousel.

Je ne suis attelé à cette tâche dès que le téléchargement de la préversion a été terminée. Ca n’a pas été difficile en consultant l’aide. En fait, un exemple est livré : WD Carrousel. Il permet de bien comprendre comment cela fonctionne. Un carrousel, c’est aussi simple à gérer qu’une liste.

Fenêtre WinDev 11 avec carrousel

Juste un petit bémol, le champ Carrousel nécessite l’installation du framework .NET 3.0 . Cette version toute récente n’est pas très rapide et cela impacte malheureusement sur le champ Carrousel. MS nous promet d’ailleurs une version .NET 3.5 optimisée.

Sur ma machine personelle en tous cas, le carrousel est super fluide et vraiment joli à voir.

Comment détecter la présence du .NET 3.0 ?

Le champ Carrousel nécessite la présence du framework .NET 3.0, il est donc important de pouvoir détecter la présence de celui-ci sur la machine de l’utilisateur.

C’est réalisé très simplement avec la commande suivante :

SI RegistreExiste("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v3.0") ALORS ...

Les procédures stockées Hyper-File

Voilà une nouveauté de WinDev 11 qui était très attendue : les procédures stockées sur Hyper-File. Je les ai testées pour vous et c’est plutôt pas mal à part quelques manques dans l’aide (évidemment signalés à PCSOFT). Ce test a été réalisé avec la préversion.

Définition de la procédure stockée

Une procédure stockée se crée dans l’analyse. Directement sur le treeview par le menu contextuel. C’est la partie qui est peu documentée. On trouve quand même facilement son chemin à coup de clic droit. On va créer dans l’ordre une collection de procédure, puis une à une les procédures.

Copie d'écran de l'analyse avec une procédure stockée

Le code

Une fois la procédure créée, clic droit + code, ouvre la fenêtre d‘édition de code. La commande HExécuteProcédure() fait exactement ce que suggère son nom (c’est ça qui est extra avec le WLangage).

SI PAS HExécuteProcédure(MaConnexion1,“AgePlusUn”) ALORS HErreurInfo(hErrComplet)
FIN

Le code d'une procédure stockée

Copie de la procédure sur le serveur

Evidemment, avant d’exécuter la procédure stockée, il faut préalablement la copier sur le serveur. Ici encore, c’est un menu contextuel qui déclenche la copie.

Copie d'une procédure stockée sur le serveur

En résumé, une nouvelle fonctionnalité facile à mettre en oeuvre même sans lire l’aide (et pour cause) et qui ouvre de nouveaux horizons aux programmeurs WinDev utilisant des bases Hyper-File Client/Serveur (_rappelons au passage que cette base est totalement gratuite et totalement redistribuable_).

Division par zéro dans une procédure stockée

Que de passe-t-il quand une procédure stockée contient une erreur, par exemple une division par zéro ? Est-ce que cela va bloquer le serveur Hyper-File ?

J’ai tenté l’expérience avec la procédure stockée suivante :

PROCEDURE DBZ()
i est un entier
i = 1 / 0
RENVOYER "ok"

Hé bien rassurez-vous, le serveur n’est pas tombé. Une erreur de WLangage est renvoyée au programme. On peut l’intercepter classiquement avec un code de la forme suivante :

QUAND EXCEPTION DANS
	Info(HExécuteProcédure(MaConnexion1,"DBZ"))	
FAIRE
	Info(ExceptionInfo(errComplet))
FIN