IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Test Discussion :

Tests unitaires & base de données


Sujet :

Test

  1. #1
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut Tests unitaires & base de données
    Bonjour,


    Je voudrais savoir comment vous faites pour effectuer une batterie de tests unitaires sur une application bases de données ?

    Quand on a des fonctions/procédures stockées qui ne manipulent pas de tables, vues... c'est très facile, il suffit de comparer les entrées et les sorties.

    Mais quand on doit accéder à des données dans une table, en modifier ou supprimer d'autres comment procéder ?

    J'avais pensé créer un clône de chaque table avec deux colonnes supplémentaires :
    * test_id qui est l'identifiant du test unitaire.
    * une colonne qui contient I, O ou IO suivant que la ligne doit se retrouver en entrée, en sortie ou les deux
    Avant de lancer un test, je supprime toutes les lignes de toutes les tables. j'insère ensuite chaque ligne de chaque table les lignes I ou IO.
    Je lance mon traitement.
    Je compare ensuite les lignes O et IO avec celles présentes en table et je vérifie que les lignes I ont bien disparu !

    C'est un peu compliqué mais je ne vois pas comment faire plus simple.

    Peux être connaissez vous des outils permettant d'automatiser ce processus ?


    Merci par avance pour vos réponses.

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  2. #2
    Membre habitué
    Inscrit en
    Août 2004
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 113
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    Une manière simple pour les TUs : extraire les résultats dans un fichier et comparer avec les résultats attendus (commande diff ou autre).
    - préparer une *toute petite* base de test,
    - lancer quelques tests,
    - extraire les tables dans des fichiers.
    vérifier une fois les fichiers, qui servent ensuite pour la non régression : diff suffit.

    => pas besoins de nouveaux schémas de bases.

    Alexandre

  3. #3
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Je te remercie Alex00 pour ta réponse. Le pb est que je devrais alors utiliser des outils externes à la base alors que j'aurais tout souhaité faire de l'intérieur de la base.
    En plus il faudrait que je charge dans ma base toutes les données de tous mes TU alors que je souhaite les tester en "isolation".

    Je sais qu'il existe tout un ensemble d'outils permettant de faire des tests mais je ne sais pas s'il y en a un qui permettrait de répondre simplement à mon besoin.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  4. #4
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Le pratiquement seul outil complet du marché et l'outil RelationalTools de Princeton Softech.
    Mais c'est une usine à gaz car le pb que tu as est complexe à gérer et RelationalTools l'adresse complètement et correctement.

    Si tes besoins ne sont pas énormes et que tu ne peux te payer ce formidable outil, la solution d'Alex n'est pas très différente de la tienne. Il utilise simplement des outils simples !! (le diff) pour pouvoir comparer 2 paquets de données. La solution tout en base de données est aussi valable mais le diff est plus complexe à mettre en oeuvre.

  5. #5
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Merci pour ta réponse, je vais me documenter sur cet outil.


    C'est vrai que la réponse d'Alex semble plus simple, mais il faut que je gère tous les dumps, purge, export en format texte. Je vais quand même tenter, ca me semble plus simple que la mienne.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  6. #6
    Membre actif Avatar de tipiak
    Inscrit en
    Juillet 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2003
    Messages : 205
    Points : 253
    Points
    253
    Par défaut
    +1 avec la méthode de Alex00

    pour ce qui est de l'automatisation de la procedure,

    pour ma part j'utilise JUnit (sous Java)
    avec une procédure de pré-requis du test ou j'attaque direct la Bd pour charger un fichier SQL contenant mon jeu de test concernant les tables concernées pour charger mon jeu d'essai

    et une procédure de post-requis qui netoie la Bd après le test (le plus souvent je recharge les données qui étaient dans la base avant l'exécution du test)

    et pendant l'exécution du test proprement dit je mets des points de controle en extrayant le contenu de la base que je compare avec un fichier de référence (résultat attendu comme l'explique Alex00)

    par contre le coup de charger et décharger le jeu d'essai, implique de charger que ce qui est utile sinon tes tests durent des heures inutilement...


    Sinon il y a DBUnit qui spécialise JUnit pour les Bds en proposant de bosser sur les tables en XML (pour les chargements et déchargement des jeux d'essais ainsi que pour les extractions pour comparer l'état des données), mais je ne l'ai jamais mis en oeuvre....

    sinon le seul moyen d'éviter de recharger les jeux d'essais, c'est d'avoir une base complete de référence pour les tests unitaires
    que tu charge avant de lancer une baterie de tests
    mais si tu fais de l'automatisation, cela implique d'avoir une très bonne gestion de config de cette base.
    ainsi que de répertorier toutes les modifs réalisées sur la BD. pour pouvoir la ramener dans son état de référence suite à l'exécution des tests (surtt quand un test echoue...)
    Ce qui selon moi n'est pas adapté aux tests unitaires, qui sont le plus souvent réalisés par les développeur sur un serveur de développement (donc plusieurs personnes sur le même serveur... ca fait une gestion de config dificile...)
    par contre c'est plus adaptés pour les tests d'intégration et de recette interne (avec un serveur dédié dont on maitrise parfaitement la gestion de configuration...)

  7. #7
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour,


    Je te remercie pour les infos sur ces deux outils; je vais aussi voir si ca peut correspondre à mon besoin.

    Je parle de tests unitaires mais en fait c'est des tests de non-régression que je souhaite mettre en place : on identifie un "bug" fonctionnel (cas qui n'avait pas été pris en compte) lors de la recette et on modifie ensuite la routine pour intégrer cette évolution du besoin. Malheureusement, souvent en faisant ca, on découvre soit de nouveaux bug fonctionnel, soit ca perturbe le fonctionnement d'une autre partie du système qui fonctionnait très bien jusqu'à présent... On est un peu dans un cauchemar sans fin en ce moment où chaque nouvelle évolution introduit de nouveaux pbs et la recette ne se termine pas

    Pour éviter ca, je pensais mettre en place une batterie de tests permettant d'identifier rapidement l'impact d'une modification plutôt que de la découvrir trop tard...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  8. #8
    Membre habitué Avatar de Eowyn
    Femme Profil pro
    Project Manager PMP, Administratrice Project Server 2007/2010/2013
    Inscrit en
    Juillet 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Project Manager PMP, Administratrice Project Server 2007/2010/2013
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 107
    Points : 136
    Points
    136
    Par défaut
    Un outil - cher mais performant - pour les tests de non-régression :
    Quick Test Pro de chez Mercury.

    On est en train de l'essayer, c'est assez le rêve. Mais ça prend beaucoup de temps à mettre en place - création de tous les cases.
    Il semble que tu sois un peu à la bourre pour les délais donc c'est peut-être la solution pour ton problème actuel; par contre pour la suite ?
    Be the change you wish to see in the world. Gandhi

  9. #9
    Membre actif Avatar de tipiak
    Inscrit en
    Juillet 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2003
    Messages : 205
    Points : 253
    Points
    253
    Par défaut
    donc pour la non regression effectivement ca ne se gère plus au niveau de l'Unitaire

    surtout si tu fais des tests fonctionnels

    comme le dit Eowyn Quick test pro permet de faire ca

    mais tout ce qui est tests intégration, test de recette et non regression
    je les différencie bien des TU
    (car TU chez nous c'est les developpeurs qui les font)
    alors que tout le reste c'est une activité a part entiere
    avec (qd ca sera fini) Quick test Pro pour l'automatisation
    et surtout Quality Center (de Mercury aussi) pour toute la gestion de l'activité (gestion de config, exécution des test, plan de tests ainsi que tout les reporting...)

    et la pour la non regression, c'est des campagnnes de tests à part
    sur un serveur dédié à ca
    avec un jeu de donnés dédié aussi
    et justement avec de bon outils tel que Quality Center tu peux aisément voir quels module fonctionnel est impacté par une Evolution
    dans le but de sélectionner tes tests de non regression (pour faire tourner que le minimum de test)

    enfin c'est des outils lourds performands et cher
    donc il faut quand même avoir de quoi justifier l'achat dérriere
    (genre c'est plus rentable sur une maintenance applicative que sur un forfait poncuel....)

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par tipiak
    surtout si tu fais des tests fonctionnels
    C'est quoi pour toi un test fonctionnel ?
    Franckintosh, penseur différent.

  11. #11
    Membre actif Avatar de tipiak
    Inscrit en
    Juillet 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2003
    Messages : 205
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par Franckintosh
    Citation Envoyé par tipiak
    surtout si tu fais des tests fonctionnels
    C'est quoi pour toi un test fonctionnel ?
    c'est un test qui permet de valider un process métier
    donc en gros un test ou tu simules l'utilisation par un utilisateur
    genre paramétrer un module de l'application
    ou établir une commande, raliser une facturation d'un certain type ...
    (ca intervient essentiellement dans la phase de recette interne)
    c'est le meme genre de tests que ceux fait en recette (par le client), sauf que en recette client, on travail plus sur des cas rare (ce qui nécessite d'avoir une parfaite connaissance du process métier)

    par opposition à des tests plus techniques (genre fuite de mémoire, connexion multiples sur la base....)

  12. #12
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Points : 220
    Points
    220
    Par défaut
    Ce que tu décris pour moi ça s'appelle des tests de recette (tu le dis toi même que tu fais ça en recette). Avec ou sans client présent c'est une recette que tu fais.
    Franckintosh, penseur différent.

  13. #13
    Membre actif Avatar de tipiak
    Inscrit en
    Juillet 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2003
    Messages : 205
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par Franckintosh
    Ce que tu décris pour moi ça s'appelle des tests de recette (tu le dis toi même que tu fais ça en recette). Avec ou sans client présent c'est une recette que tu fais.
    oui c'est exactement ca c'est les tests de recette interne ou de recette client...

    mais j'aime bien utiliser le terme fonctionnel car ca rappel que les objectifs sont de valider les process métiers et non valider des aspects techniques....

    en fait je considerre : recette comme le nom de la phase
    et fonctionnel comme un type de tests...

    enfin bon après c'est qu'une question de vocabulaire, peut importe comment on appel les choses du moment qu'on est comprit de nos interlocuteurs...

  14. #14
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Points : 220
    Points
    220
    Par défaut
    Pour moi "fonctionnel" a une connotation technique ;-). Un test fonctionnel évoque de tester des fonctions (au sens général, pas celles des langages informatique), et une fonction est déjà pour moi au délà du scope de la réponse au besoin exprimé, car pour répondre à un besoin il faut parfois plusieurs fonctions qui ne sont pas forcément visibles depuis le besoin. Tester les fonctions et tester (en fait vérifier que cela existe) la réponse au besoin sont deux choses différentes.
    Ce n'est que ma perception, je pense peut être trop (comme d'habitude) et tout va bien parce qu'on parle de la même chose. En fait si on devait travailler ensemble maintenant je sais de quoi tu parles avec "test fonctionnel" ;-).
    Franckintosh, penseur différent.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    J'ai exactement le même besoin sur une base de données sybase qui plus est un Infocentre alimenté quotidiennement et qui fait l'objet d'extraction pour les reportings
    J'aimerai mettre en place un mécanisme de test de non regression après chaque évolution de cette base de données. C'est vrai que je n'avais pas pensé à la solution du diff sur les fichiers.

    Donc concrètement avant l'évolution : je lance toutes les procédures d'alimentations et d'extraction de la base de données et les stocks dans des fichiers et je fais de même après intégrations des évolutions.
    Puis je diff sur chaque fichier correspondant. Les différences qu'il pourrait y avoir seront dues aux évolutions si tant est qu'elles impactes les procédures d'alimentation/extractions deja existantes.

    Est-ce donc une solution vraiment fiable ou avez vous opté pour d'autre alternatives depuis 2005

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    allo?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tests unitaires et chargement des données
    Par Mat1664 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/07/2009, 22h23
  2. Faire des tests sur la base de données
    Par yasmina13 dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 25/02/2009, 00h36
  3. XMLRAD 8 - pb test connexion à la base de données
    Par Jean-Edouard Couderc dans le forum XMLRAD
    Réponses: 4
    Dernier message: 02/02/2007, 18h10
  4. Faire des test dans une base de donnée
    Par kj_83 dans le forum C++Builder
    Réponses: 15
    Dernier message: 06/07/2006, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo