{"id":37495,"date":"2019-10-31T22:17:57","date_gmt":"2019-10-31T19:17:57","guid":{"rendered":"https:\/\/prohoster.info\/blog\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\/"},"modified":"2019-10-31T22:17:57","modified_gmt":"2019-10-31T19:17:57","slug":"unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","title":{"rendered":"Tests unitaires dans les bases de donn\u00e9es \u2014 comment nous le faisons chez Sportmaster, partie un","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Salut, Habr !<\/p>\n<p>Je m'appelle Maksim Ponomarenko et je suis d\u00e9veloppeur chez Sportmaster. J'ai dix ans d'exp\u00e9rience dans le secteur des TI. J'ai commenc\u00e9 ma carri\u00e8re dans le domaine des tests manuels, puis j'ai \u00e9volu\u00e9 vers le d\u00e9veloppement de bases de donn\u00e9es. Au cours des quatre derni\u00e8res ann\u00e9es, en accumulant les connaissances acquises en test et en d\u00e9veloppement, je me consacre \u00e0 l'automatisation des tests au niveau de la SGBD.<\/p>\n<p>Je fais partie de l'\u00e9quipe de Sportmaster depuis un peu plus d'un an et sur l'un des grands projets, je travaille au d\u00e9veloppement de tests automatis\u00e9s. En avril, mon \u00e9quipe de Sportmaster Lab a pr\u00e9sent\u00e9 \u00e0 une conf\u00e9rence \u00e0 Krasnodar, ma pr\u00e9sentation s'intitulait \u00abTests unitaires dans les SGBD\u00bb, et maintenant je souhaite la partager avec vous. Il y aura beaucoup de texte, donc j'ai d\u00e9cid\u00e9 de diviser la pr\u00e9sentation en deux articles. Dans le premier, nous parlerons des autotests et des tests en g\u00e9n\u00e9ral, et dans le second, je d\u00e9taillerai notre syst\u00e8me de tests unitaires et les r\u00e9sultats de son application.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/464335\/\"><img decoding=\"async\" alt=\"Tests unitaires dans les bases de donn\u00e9es \u2014 comment nous le faisons chez Sportmaster, partie un\" src=\"\/wp-content\/uploads\/2019\/08\/4e521cc85eb3a3806860a40ab2e4050f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Commen\u00e7ons par un peu de th\u00e9orie ennuyeuse. Qu'est-ce que le test automatis\u00e9 ? C'est un test effectu\u00e9 par des moyens logiciels, et dans le secteur moderne des TI, il est de plus en plus utilis\u00e9 lors du d\u00e9veloppement de logiciels. Cela est li\u00e9 au fait que les entreprises grandissent, leurs syst\u00e8mes d'information se d\u00e9veloppent et par cons\u00e9quent, le nombre de fonctionnalit\u00e9s \u00e0 tester augmente \u00e9galement. Il devient de plus en plus co\u00fbteux d'effectuer des tests manuels.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nJ'ai travaill\u00e9 dans une grande entreprise dont les versions sortent tous les deux mois. Dans ce cas, un mois entier \u00e9tait consacr\u00e9 \u00e0 la v\u00e9rification des fonctionnalit\u00e9s par une dizaine de testeurs manuellement. Gr\u00e2ce \u00e0 l'impl\u00e9mentation de l'automatisation par une petite \u00e9quipe de d\u00e9veloppeurs, nous avons r\u00e9ussi \u00e0 r\u00e9duire le temps de test \u00e0 deux semaines en un an et demi. Nous avons non seulement augment\u00e9 la vitesse de test, mais \u00e9galement am\u00e9lior\u00e9 sa qualit\u00e9. Les tests automatis\u00e9s sont ex\u00e9cut\u00e9s r\u00e9guli\u00e8rement et ils effectuent toujours l'int\u00e9gralit\u00e9 des contr\u00f4les qu'ils contiennent, c'est-\u00e0-dire que nous excluons le facteur humain. <\/p>\n<p>Dans l'IT moderne, il est courant que le d\u00e9veloppeur soit \u00e9galement amen\u00e9 \u00e0 \u00e9crire non seulement le code du produit, mais aussi les tests unitaires qui v\u00e9rifient ce code. <\/p>\n<p>Mais que faire si votre syst\u00e8me est principalement bas\u00e9 sur la logique serveur ? Il n'existe pas de solution universelle ni de bonnes pratiques sur le march\u00e9. En g\u00e9n\u00e9ral, les entreprises r\u00e9solvent ce probl\u00e8me en cr\u00e9ant leur propre syst\u00e8me de test sur mesure. C'est un syst\u00e8me de test automatis\u00e9 sur mesure qui a \u00e9t\u00e9 cr\u00e9\u00e9 pour notre projet, et j'en parlerai dans ma pr\u00e9sentation. <\/p>\n<p><img decoding=\"async\" alt=\"Tests unitaires dans les bases de donn\u00e9es \u2014 comment nous le faisons chez Sportmaster, partie un\" src=\"\/wp-content\/uploads\/2019\/08\/fee34f7214fb2075ee50fa0f4af14a44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Testons la fid\u00e9lit\u00e9<\/h2>\n<p>\nPour commencer, parlons du projet o\u00f9 nous avons d\u00e9ploy\u00e9 le syst\u00e8me de test automatis\u00e9. Notre projet est le syst\u00e8me de fid\u00e9lit\u00e9 de Sportmaster (d'ailleurs, nous en avons d\u00e9j\u00e0 parl\u00e9 dans <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/453252\/\">ce post<\/a><\/noindex>).<\/p>\n<p>Si votre entreprise est suffisamment grande, votre syst\u00e8me de fid\u00e9lit\u00e9 aura trois caract\u00e9ristiques standards : <\/p>\n<ul>\n<li>Votre syst\u00e8me sera tr\u00e8s sollicit\u00e9<\/li>\n<li>Votre syst\u00e8me contiendra des processus de calcul complexes<\/li>\n<li>Votre syst\u00e8me sera activement am\u00e9lior\u00e9. <\/li>\n<\/ul>\n<p>\nAllons-y dans l'ordre\u2026 Au total, si l'on consid\u00e8re toutes les marques de Sportmaster, nous avons plus de 1000 magasins sur le territoire de la Russie, de l'Ukraine, de la Chine, du Kazakhstan et de la Bi\u00e9lorussie. Dans ces magasins, environ 300 000 achats sont effectu\u00e9s quotidiennement. Cela signifie qu'une \u00e0 quatre transactions entrent dans notre syst\u00e8me chaque seconde. Par cons\u00e9quent, notre syst\u00e8me de fid\u00e9lit\u00e9 est fortement sollicit\u00e9. Et comme il est utilis\u00e9 activement, nous devons offrir les normes de qualit\u00e9 les plus \u00e9lev\u00e9es, car toute erreur dans le logiciel entra\u00eene de grandes pertes financi\u00e8res, r\u00e9putationnelles et autres. <\/p>\n<p>En m\u00eame temps, plus d'une centaine de promotions diff\u00e9rentes sont en cours chez Sportmaster. Les promotions sont diverses : il y a des promotions sur les produits, des promotions li\u00e9es aux jours de la semaine, des promotions sp\u00e9cifiques \u00e0 certains magasins, des promotions bas\u00e9es sur le montant du ticket et sur le nombre de produits. En r\u00e9sum\u00e9, ce n'est pas trivial. Les clients disposent de bonus et de codes promo utilis\u00e9s lors des achats. Tout cela fait que le calcul de toute commande est une t\u00e2che plut\u00f4t complexe. <\/p>\n<p>L'algorithme qui impl\u00e9mente le traitement des commandes est vraiment horrible et complexe. Toute modification de cet algorithme est assez risqu\u00e9e. M\u00eame les modifications qui semblent insignifiantes peuvent entra\u00eener des effets assez impr\u00e9visibles. Ces processus de calcul complexes, surtout lorsqu'ils mettent en \u0153uvre des fonctionnalit\u00e9s critiques, sont les meilleurs candidats \u00e0 l'automatisation. V\u00e9rifier manuellement des dizaines de cas identiques repr\u00e9sente une charge de travail consid\u00e9rable. \u00c9tant donn\u00e9 que le point d'entr\u00e9e dans le processus reste inchang\u00e9, une fois que nous l'avons d\u00e9crit, nous pouvons rapidement g\u00e9n\u00e9rer des tests automatis\u00e9s et \u00eatre certains du bon fonctionnement de la fonctionnalit\u00e9.<\/p>\n<p>Comme notre syst\u00e8me est utilis\u00e9 activement, les entreprises s'attendront \u00e0 ce que vous leur apportiez quelque chose de nouveau, \u00e0 \u00e9voluer avec le temps et \u00e0 \u00eatre orient\u00e9 client. Dans notre syst\u00e8me de fid\u00e9lit\u00e9, des mises \u00e0 jour sortent tous les deux mois. Cela signifie que tous les deux mois, nous devons effectuer un test de r\u00e9gression complet de tout le syst\u00e8me. De plus, comme dans toute entreprise informatique moderne, le d\u00e9veloppement ne passe pas directement du d\u00e9veloppeur \u00e0 la production. Il na\u00eet sur l'environnement du d\u00e9veloppeur, puis traverse successivement l'environnement de test, l'environnement de mise en production, l'acceptation, et ce n'est qu'ensuite qu'il se retrouve en production. Au minimum, nous devons effectuer un test de r\u00e9gression complet sur les environnements de test et de mise en production. <\/p>\n<p>Les propri\u00e9t\u00e9s d\u00e9crites sont standard pour pratiquement tout syst\u00e8me de fid\u00e9lit\u00e9. Parlons des particularit\u00e9s de notre projet.<\/p>\n<p>Techniquement, 90 % de la logique de notre syst\u00e8me de fid\u00e9lit\u00e9 est c\u00f4t\u00e9 serveur et est impl\u00e9ment\u00e9e sur Oracle. Il existe un client sur Delphi qui remplit la fonction d'administrateur APM. Il existe des services web pour des applications externes (comme un site web). Il est donc tout \u00e0 fait logique que si nous d\u00e9ployons un syst\u00e8me de test automatis\u00e9, nous le fassions sur Oracle.<\/p>\n<p>Le syst\u00e8me de fid\u00e9lit\u00e9 chez Sportmaster existe depuis plus de 7 ans et a \u00e9t\u00e9 d\u00e9velopp\u00e9 par des d\u00e9veloppeurs uniques... Le nombre moyen de d\u00e9veloppeurs sur notre projet au cours de ces 7 ann\u00e9es \u00e9tait de 3 \u00e0 4 personnes. Mais au cours de la derni\u00e8re ann\u00e9e, notre \u00e9quipe a consid\u00e9rablement augment\u00e9, et maintenant 10 personnes travaillent sur le projet. Cela signifie que des personnes arrivent sur le projet qui ne sont pas famili\u00e8res avec les t\u00e2ches, les processus et l'architecture classiques. Il y a un risque accru que nous passons \u00e0 c\u00f4t\u00e9 d'erreurs.<\/p>\n<p>Le projet se caract\u00e9rise par l'absence de testeurs d\u00e9di\u00e9s en tant qu'unit\u00e9s \u00e0 temps plein. Il y a bien des tests, mais ce sont les analystes qui s'en charge, en plus de leurs autres responsabilit\u00e9s : en communiquant avec les clients, les utilisateurs, en \u00e9laborant les exigences du syst\u00e8me, etc. Malgr\u00e9 le fait que les tests soient r\u00e9alis\u00e9s de mani\u00e8re tr\u00e8s qualitative (surtout pertinent \u00e0 mentionner car l'un des analystes peut lire ce rapport), l'efficacit\u00e9 de la sp\u00e9cialisation et de la concentration sur un seul \u00e9l\u00e9ment n'est pas \u00e0 n\u00e9gliger.<\/p>\n<p>Compte tenu de tout ce qui pr\u00e9c\u00e8de, pour am\u00e9liorer la qualit\u00e9 du produit livr\u00e9 et r\u00e9duire les d\u00e9lais de d\u00e9veloppement, l'id\u00e9e d'automatisation des tests dans le projet semble tout \u00e0 fait logique. \u00c0 diff\u00e9rentes \u00e9tapes de l'existence du syst\u00e8me de fid\u00e9lit\u00e9, certains d\u00e9veloppeurs ont tent\u00e9 de couvrir leur code par des tests unitaires. Cela a en g\u00e9n\u00e9ral \u00e9t\u00e9 un processus assez \u00e9clat\u00e9, o\u00f9 chacun utilisait sa propre architecture et ses m\u00e9thodes. Les r\u00e9sultats finaux des tests unitaires \u00e9taient communs : les tests \u00e9taient d\u00e9velopp\u00e9s, utilis\u00e9s pendant un certain temps, stock\u00e9s dans un d\u00e9p\u00f4t de fichiers versionn\u00e9, mais \u00e0 un moment donn\u00e9, ils n'\u00e9taient plus ex\u00e9cut\u00e9s et ont \u00e9t\u00e9 oubli\u00e9s. Cela se produisait principalement parce que les tests \u00e9taient davantage li\u00e9s \u00e0 un ex\u00e9cuteur sp\u00e9cifique qu'au projet.<\/p>\n<h2>utPLSQL vient \u00e0 la rescousse.<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Tests unitaires dans les bases de donn\u00e9es \u2014 comment nous le faisons chez Sportmaster, partie un\" src=\"\/wp-content\/uploads\/2019\/08\/f21dfcb085aace687566dc51cb9b5613.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSavez-vous quelque chose sur Steven Feuerstein ? <\/p>\n<p>C'est un homme brillant qui a consacr\u00e9 une grande partie de sa carri\u00e8re \u00e0 travailler avec Oracle et PL\/SQL, et a \u00e9crit un nombre consid\u00e9rable d'ouvrages sur le sujet. L'un de ses livres les plus connus s'intitule : \u00ab Oracle PL\/SQL. Pour les professionnels \u00bb. C'est \u00e0 Stephen que l'on doit le d\u00e9veloppement de la solution utPLSQL, ou, comme son nom l'indique, le cadre de test unitaire pour Oracle PL\/SQL. La solution utPLSQL a \u00e9t\u00e9 cr\u00e9\u00e9e en 2016, mais elle continue d'\u00eatre activement d\u00e9velopp\u00e9e et de nouvelles versions sont r\u00e9guli\u00e8rement publi\u00e9es. Au moment de la pr\u00e9sentation, la derni\u00e8re version date du 24 mars 2019.<br \/>\nQu'est-ce que c'est donc ? C'est un projet open source distinct. Il p\u00e8se quelques m\u00e9gaoctets, y compris des exemples et de la documentation. Il repr\u00e9sente physiquement un sch\u00e9ma s\u00e9par\u00e9 dans la base de donn\u00e9es ORACLE avec un ensemble de paquets et de tables pour organiser les tests unitaires. L'installation ne prend que quelques secondes. La simplicit\u00e9 d'exploitation est l'une des caract\u00e9ristiques distinctives d'utPLSQL. <br \/>\nGlobalement, utPLSQL constitue un m\u00e9canisme pour ex\u00e9cuter des tests unitaires, o\u00f9 un test unitaire d\u00e9signe des proc\u00e9dures de paquet Oracle ordinaires, dont l'organisation respecte certaines r\u00e8gles. En plus de l'ex\u00e9cution, utPLSQL conserve un journal de tous vos lancements de tests, ainsi qu'un syst\u00e8me de reporting interne.<\/p>\n<p>Regardons un exemple pour voir \u00e0 quoi ressemble le code d'un test unitaire, impl\u00e9ment\u00e9 selon cette m\u00e9thodologie.<\/p>\n<p><img decoding=\"async\" alt=\"Tests unitaires dans les bases de donn\u00e9es \u2014 comment nous le faisons chez Sportmaster, partie un\" src=\"\/wp-content\/uploads\/2019\/08\/6fc8cc2d84c6c32a8b5269ebad1d2381.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAinsi, \u00e0 l'\u00e9cran appara\u00eet le code d'une sp\u00e9cification typique de paquet avec des tests unitaires. Quelles sont les exigences obligatoires ? Le paquet doit avoir le pr\u00e9fixe \u00ab utp_ \u00bb. Toutes les proc\u00e9dures de test doivent avoir le m\u00eame pr\u00e9fixe. Le paquet doit imp\u00e9rativement inclure deux proc\u00e9dures standard : \u00ab utp_setup \u00bb et \u00ab utp_teardown \u00bb. La premi\u00e8re proc\u00e9dure est appel\u00e9e avant chaque test unitaire, la seconde apr\u00e8s son ex\u00e9cution.<\/p>\n<p>\u00ab utp_setup \u00bb pr\u00e9pare g\u00e9n\u00e9ralement notre syst\u00e8me pour l'ex\u00e9cution du test unitaire, par exemple en cr\u00e9ant des donn\u00e9es d'essai. \u00ab utp_teardown \u00bb \u2014 au contraire, ram\u00e8ne tout aux param\u00e8tres d'origine et r\u00e9initialise les r\u00e9sultats de l'ex\u00e9cution.<\/p>\n<p>Voici un exemple du test unitaire le plus simple, qui v\u00e9rifie la normalisation du num\u00e9ro de t\u00e9l\u00e9phone du client au format standard de notre syst\u00e8me de fid\u00e9lit\u00e9. Il n'existe pas de normes obligatoires concernant la r\u00e9daction de proc\u00e9dures avec des tests unitaires. En g\u00e9n\u00e9ral, un appel est effectu\u00e9 \u00e0 une m\u00e9thode du syst\u00e8me test\u00e9, et le r\u00e9sultat retourn\u00e9 par cette m\u00e9thode est compar\u00e9 \u00e0 une r\u00e9f\u00e9rence. Il est important que la comparaison entre le r\u00e9sultat de r\u00e9f\u00e9rence et le r\u00e9sultat obtenu se fasse via les m\u00e9thodes standards d'utPLSQL.<\/p>\n<p>Un test unitaire peut comporter un nombre quelconque de v\u00e9rifications. Comme on peut le voir dans l'exemple, nous effectuons quatre appels cons\u00e9cutifs \u00e0 la m\u00e9thode test\u00e9e pour la normalisation du num\u00e9ro de t\u00e9l\u00e9phone, et apr\u00e8s chaque appel, nous \u00e9valuons le r\u00e9sultat. Lors de l'\u00e9laboration d'un test unitaire, il faut tenir compte du fait qu'il existe des v\u00e9rifications qui n'ont aucun impact sur le syst\u00e8me, tandis que certaines n\u00e9cessitent un retour \u00e0 l'\u00e9tat initial du syst\u00e8me. <br \/>\nPar exemple, dans le test unitaire pr\u00e9sent\u00e9, nous formatons simplement le num\u00e9ro de t\u00e9l\u00e9phone d'entr\u00e9e, ce qui n'a aucun impact sur le syst\u00e8me de fid\u00e9lit\u00e9. <\/p>\n<p>Mais si nous \u00e9crivons des tests unitaires pour la m\u00e9thode de cr\u00e9ation d'un nouveau client, alors apr\u00e8s chaque v\u00e9rification, un nouveau client sera cr\u00e9\u00e9 dans le syst\u00e8me, ce qui peut influencer le lancement des tests suivants.<\/p>\n<p><img decoding=\"async\" alt=\"Tests unitaires dans les bases de donn\u00e9es \u2014 comment nous le faisons chez Sportmaster, partie un\" src=\"\/wp-content\/uploads\/2019\/08\/7d649b354776c15d8a70a0d9a05363b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'est ainsi que les tests unitaires sont lanc\u00e9s. Deux options de lancement sont acceptables : lancer tous les tests unitaires d'un package sp\u00e9cifique ou lancer un test unitaire donn\u00e9 dans un package sp\u00e9cifique.<\/p>\n<p><img decoding=\"async\" alt=\"Tests unitaires dans les bases de donn\u00e9es \u2014 comment nous le faisons chez Sportmaster, partie un\" src=\"\/wp-content\/uploads\/2019\/08\/46628b60eb0fe0d20df822ddca914947.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVoici \u00e0 quoi ressemble un exemple de syst\u00e8me interne de reporting. \u00c0 la suite du travail des tests unitaires, utPLSQL g\u00e9n\u00e8re un petit rapport. Dans celui-ci, nous voyons le r\u00e9sultat de chaque v\u00e9rification sp\u00e9cifique et le r\u00e9sultat global de l'ex\u00e9cution du test unitaire. <\/p>\n<h2>6 r\u00e8gles des tests automatis\u00e9s<\/h2>\n<p>\nAvant de commencer la cr\u00e9ation d'un nouveau syst\u00e8me de tests automatis\u00e9s pour le syst\u00e8me de fid\u00e9lit\u00e9, nous avons d\u00e9fini avec la direction les principes auxquels nos futurs tests automatis\u00e9s doivent se conformer.<\/p>\n<p><img decoding=\"async\" alt=\"Tests unitaires dans les bases de donn\u00e9es \u2014 comment nous le faisons chez Sportmaster, partie un\" src=\"\/wp-content\/uploads\/2019\/08\/84be59663203abb373e7074b9a6cd4e4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Les tests automatis\u00e9s doivent \u00eatre efficaces et apporter une r\u00e9elle valeur ajout\u00e9e. Nous avons d'excellents d\u00e9veloppeurs dont il est imp\u00e9ratif de parler, car certains d'entre eux verront s\u00fbrement cette pr\u00e9sentation, et ils \u00e9crivent un code remarquable. Mais m\u00eame leur code exceptionnel n'est pas parfait et contenait, contient et contiendra des erreurs. Les tests automatis\u00e9s doivent d\u00e9tecter ces erreurs. Si ce n'est pas le cas, alors soit nous \u00e9crivons de mauvais tests automatis\u00e9s, soit nous sommes dans un domaine mort qui n'est de toute fa\u00e7on pas am\u00e9lior\u00e9. Dans les deux cas, nous faisons quelque chose de mal, et notre approche devient tout simplement inutile.<\/li>\n<li>Les tests automatis\u00e9s doivent \u00eatre utilis\u00e9s. Il est absurde de consacrer \u00e9norm\u00e9ment de temps et d'efforts \u00e0 la cr\u00e9ation d'un produit logiciel, de le livrer dans un d\u00e9p\u00f4t et d'oublier ensuite son existence. Les tests doivent \u00eatre ex\u00e9cut\u00e9s, et aussi r\u00e9guli\u00e8rement que possible.<\/li>\n<li>Les tests automatis\u00e9s doivent fonctionner de mani\u00e8re stable. Quelle que soit l'heure, l'environnement de test ou d'autres param\u00e8tres du syst\u00e8me, les ex\u00e9cutions des tests doivent mener au m\u00eame r\u00e9sultat. En g\u00e9n\u00e9ral, cela est garanti par le fait que les tests automatis\u00e9s utilisent des donn\u00e9es de test sp\u00e9ciales avec des param\u00e8tres syst\u00e8me fix\u00e9s.<\/li>\n<li>Les tests automatis\u00e9s doivent s'ex\u00e9cuter \u00e0 une vitesse acceptable pour votre projet. Ce temps est d\u00e9termin\u00e9 individuellement pour chaque syst\u00e8me. Certains peuvent se permettre de fonctionner toute la journ\u00e9e, tandis que pour d'autres, il est crucial de respecter des limites de quelques secondes. Je vous parlerai plus tard des performances que nous avons atteintes dans notre projet.<\/li>\n<li>Le d\u00e9veloppement de tests automatis\u00e9s doit \u00eatre flexible. Il est ind\u00e9sirable de renoncer \u00e0 v\u00e9rifier une fonctionnalit\u00e9 simplement parce que nous ne l'avons pas encore fait ou pour d'autres raisons. utPLSQL n'impose aucune restriction au d\u00e9veloppement, et Oracle permet en principe de r\u00e9aliser des choses tr\u00e8s diverses. La plupart des t\u00e2ches ont une solution, la question n'est que du temps et des efforts investis.<\/li>\n<li>D\u00e9ployabilit\u00e9. Nous avons plusieurs environnements qui n\u00e9cessitent le lancement de tests. \u00c0 tout moment, une copie de donn\u00e9es sur chaque environnement peut \u00eatre mise \u00e0 jour. Il est n\u00e9cessaire de g\u00e9rer le projet avec des tests automatis\u00e9s de mani\u00e8re \u00e0 pouvoir installer compl\u00e8tement ou partiellement sans douleur.<\/li>\n<\/ol>\n<p>Et dans le deuxi\u00e8me post dans quelques jours, je vous parlerai de ce que nous avons r\u00e9alis\u00e9 et des r\u00e9sultats que nous avons obtenus.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/464335\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 4 \u0433\u043e\u0434\u0430, \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u0438\u0440\u0443\u044f \u0437\u043d\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0421\u0423\u0411\u0414. \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u044f \u0441\u043e\u0441\u0442\u043e\u044e \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u043e\u0434\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28136,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37495","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Unit-\u0442\u0435\u0441\u0442\u044b \u0432 \u0421\u0423\u0411\u0414 \u2014 \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435, \u0447\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:57+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Tests unitaires dans les SGBD \u2014 comment nous faisons cela chez Sportmaster, premi\u00e8re partie | ProHoster","description":"Bonjour, Habr ! Je m'appelle Maxim Ponomarenko et je suis d\u00e9veloppeur chez Sportmaster. J'ai 10 ans d'exp\u00e9rience dans le secteur IT. J'ai commenc\u00e9 ma carri\u00e8re dans le domaine des tests manuels, puis je me suis tourn\u00e9 vers le d\u00e9veloppement de bases de donn\u00e9es.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Unit-\u0442\u0435\u0441\u0442\u044b \u0432 \u0421\u0423\u0411\u0414 \u2014 \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435, \u0447\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:57+00:00","article:modified_time":"2019-10-31T19:17:57+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37495","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:06:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:25:27","updated":"2026-01-23 18:06:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=37495"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37495\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/28136"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=37495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=37495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=37495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}