{"id":190,"date":"2012-05-12T09:14:35","date_gmt":"2012-05-12T08:14:35","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=190"},"modified":"2013-01-05T09:15:12","modified_gmt":"2013-01-05T08:15:12","slug":"cherchez-lerreur-22","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/cherchez-lerreur-22\/","title":{"rendered":"Cherchez l&rsquo;erreur (2\/2)"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1720\" title=\"qualerreur2r\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/05\/qualerreur2r.jpg\" alt=\"\" width=\"280\" height=\"405\" \/><\/a>Le bug pr\u00e9sent\u00e9 dans notre pr\u00e9c\u00e9dent <a href=\"http:\/\/qualilogy.com\/fr\/cherchez-lerreur-12\" target=\"_blank\">post<\/a> a attir\u00e9 un grand nombre de commentaires tous plus int\u00e9ressants les uns que les autres.<\/p>\n<p>Donc d\u2019abord, un grand merci \u00e0 tous ceux qui nous ont fait part de leur point de vue, puisque c\u2019\u00e9tait justement l\u2019objectif de cette publication.<\/p>\n<p>Mon exp\u00e9rience de consultant est plut\u00f4t orient\u00e9e \u2018best practices\u2019 en mati\u00e8re de cycle de vie de projet (ex-d\u00e9veloppeur, ex-chef de projet, puis dans le Configuration Management et la qualit\u00e9 de code). Je ne suis donc pas un expert en QA.<\/p>\n<p>Mais je travaille r\u00e9guli\u00e8rement avec de bons professionnels de QA et j\u2019\u00e9tais tr\u00e8s curieux de l\u2019opinion de personnes plus expertes que moi dans ce domaine \u2026 avant de formuler quelques hypoth\u00e8ses dans ce second post.<\/p>\n<p><!--more--><\/p>\n<p>Tout d\u2019abord, un rappel du bug en question.<\/p>\n<p>Un site web marchand propose \u00e1 la vente chaque jour diff\u00e9rents produits de diff\u00e9rentes marques, chacune repr\u00e9sentant un magasin virtuel dans lequel vous pouvez \u2018naviguer\u2019 et ajouter dans votre panier (virtuel) les articles qui vous int\u00e9ressent. Une fois vos achats valid\u00e9s par un paiement, vous pouvez s\u00e9lectionner une marque diff\u00e9rente et lorsque vous proc\u00e9dez \u00e0 de nouvelles acquisitions, le site vous propose de grouper ceux-ci avec vos achats pr\u00e9c\u00e9dents en une unique livraison. C\u2019est le fonctionnement par d\u00e9faut.<\/p>\n<p>Dans mon cas, j\u2019ai achet\u00e9 deux articles diff\u00e9rents d\u2019une m\u00eame marque, mais lorsque j\u2019ai voulu proc\u00e9der au paiement, un message m\u2019a averti que ces deux articles n\u00e9cessitaient deux transporteurs diff\u00e9rents et donc deux livraisons. Il me fallait r\u00e9aliser deux achats et deux paiements distincts. Le fonctionnement par d\u00e9faut ne s\u2019appliquait donc pas.<\/p>\n<p>J\u2019ai alors repris mes emplettes, effectu\u00e9 un premier achat pour le premier article (2 chaises de jardins), puis un second achat (un hamac portable) et lorsque j\u2019ai voulu valider celui-ci \u2026 je me suis vu proposer une livraison unique, c&rsquo;est-\u00e0-dire le process par d\u00e9faut qui ne devait pas s\u2019appliquer. Je dois confesser que je subodorais le bug, et que la curiosit\u00e9 m\u2019a pouss\u00e9 \u00e0 accepter, pour me retrouver avec :<\/p>\n<ul>\n<li>Une page d\u2019erreur g\u00e9n\u00e9rique tr\u00e8s impr\u00e9cise, absolument d\u2019aucune aide.<\/li>\n<li>Une session \u2018web\u2019 compl\u00e8tement instable, avec l\u2019impossibilit\u00e9 de r\u00e9initialiser mon panier et retrouver le processus normal qui m\u2019aurait permis de finaliser mes achats.<\/li>\n<\/ul>\n<p>Sortir du site pour y rentrer \u00e0 nouveau ne fut d\u2019aucun effet, il m\u2019a fallu clore mon browser et me logguer \u00e0 nouveau afin de pouvoir effectuer mes achats. J\u2019esp\u00e8re que les articles qui me seront livr\u00e9s seront \u00e0 la hauteur des difficult\u00e9s rencontr\u00e9es pour les acqu\u00e9rir.<\/p>\n<p>Si je tente de raisonner d\u2019un point de vue projet : le processus de livraison habituel ne s\u2019applique pas, et le d\u00e9veloppeur a correctement impl\u00e9ment\u00e9 un processus \u2018par exception\u2019. Mais l\u2019int\u00e9gration de cette nouvelle fonctionnalit\u00e9 avec le processus par d\u00e9faut existant aboutit \u00e0 un bug que j\u2019estime grave (au minimum) puisqu\u2019en tant qu\u2019utilisateur de ce site, je suis tomb\u00e9 dessus imm\u00e9diatement, et en suivant un processus normal d\u2019achat.J\u2019ai tent\u00e9 d\u2019imaginer quelle pouvait en \u00eatre la cause, et c\u2019est l\u00e0 que j\u2019ai d\u00e9cid\u00e9 d\u2019\u00e9crire un premier post afin de demandeur son opinion \u00e0 la communaut\u00e9 des sp\u00e9cialistes QA.<\/p>\n<p>Cherchez l\u2019erreur.<\/p>\n<p>Vos r\u00e9actions (en r\u00e9sum\u00e9) :<\/p>\n<ul>\n<li>Ce n\u2019est pas un d\u00e9faut de test : cette fonctionnalit\u00e9 n\u2019a tout simplement pas \u00e9t\u00e9 test\u00e9e.<\/li>\n<li>Ce n\u2019est pas un d\u00e9faut de test : c\u2019est un probl\u00e8me de design.<\/li>\n<li>Un bon testeur doit \u00eatre capable d\u2019abandonner la logique de tests et de passer de l\u2019autre c\u00f4t\u00e9 : se mettre \u00e0 la place de l\u2019utilisateur et tester avec une logique d\u2019utilisateurs. Je dois pr\u00e9ciser que cette opinion n\u2019a \u00e9t\u00e9 formul\u00e9e que par des testeurs \u2018hispanisants\u2019.<\/li>\n<li>Il s\u2019agit d\u2019une classique situation o\u00f9 la pression du time-to-market, le manque de ressources, etc. aboutit \u00e0 un d\u00e9faut de tests.<\/li>\n<\/ul>\n<p>L\u2019objet premier de tout test est de s\u2019assurer qu\u2019un produit \u2013 logiciel en l\u2019esp\u00e8ce \u2013 r\u00e9ponde correctement \u00e0 ce qu\u2019on en attend en termes de fonctionnement et de qualit\u00e9. Le test est un m\u00e9tier, une sp\u00e9cialit\u00e9 en soi, demandant un certain nombre de comp\u00e9tences et pas mal d\u2019exp\u00e9rience. Dans notre exemple, on peut consid\u00e9rer que le r\u00e9sultat n\u2019est pas atteint : cette fonctionnalit\u00e9 n\u2019a pas \u00e9t\u00e9 test\u00e9e, ou les tests n\u2019ont pas \u00e9t\u00e9 effectu\u00e9s correctement.<\/p>\n<p>Le fait que le site renvoie \u00e0 une unique page pour tous les probl\u00e8mes \u00e9ventuels m\u2019a laiss\u00e9 penser que le budget D\u00e9veloppement \/ QA n\u2019est pas forc\u00e9ment \u00e0 la hauteur de la croissance du site. J\u2019y vois l\u00e0 le signe d\u2019une certaine paresse ou d\u2019un manque de moyens. Un aveu d\u2019impuissance. La gestion des erreurs n\u2019est clairement pas une priorit\u00e9.<\/p>\n<p>Comment ? Je ne peux pas r\u00e9aliser un achat et ce n\u2019est pas une priorit\u00e9 ? Ce site web ne veut pas de mon argent ?<\/p>\n<p>J\u2019ai voulu en savoir plus et j\u2019ai appel\u00e9 un ami, consultant ind\u00e9pendant comme moi, avec une bonne connaissance de ce type de sites marchands et des difficult\u00e9s qu\u2019ils doivent affronter. Nous avons donc parl\u00e9 de priorit\u00e9s et de management. Voici ce que j\u2019ai appris :<\/p>\n<ul>\n<li>Ce site g\u00e8re plus de 100 000 connexions par jour, avec un temps de r\u00e9ponse optimal et sans jamais aucune interruption. Les ventes en 2011 ont port\u00e9es sur environ 1 500 marques.<\/li>\n<li>Le d\u00e9veloppement et la QA sont g\u00e9r\u00e9s en interne, par une soixantaine de personnes. Pas d\u2019outsourcing.<\/li>\n<li>Ce d\u00e9partement effectue ses propres d\u00e9veloppements mais utilise \u00e9galement diff\u00e9rents ERPs. . M\u00e9thodologies en V et Scrum.<\/li>\n<li>L\u2019entreprise a ouvert r\u00e9guli\u00e8rement des filiales dans diff\u00e9rents pays. Une rumeur circule sur un \u00e9ventuel projet d\u2019aller dans le Cloud et proposer une infrastructure type SaaS qui permettrait de disposer de sa propre boutique en ligne.<\/li>\n<\/ul>\n<p>Une anecdote fournie par cet ami. Tout acheteur peut demander \u00e0 se voir rembourser un achat si, une fois celui-ci re\u00e7u, il s\u2019aper\u00e7oit qu\u2019il ne correspond pas \u00e0 ses souhaits : produit d\u00e9fectueux, taille incorrecte, ou tout simplement, vous n\u2019en voulez plus. Dans ce cas, vous renvoyez le produit et vous demandez son remboursement. Il est arriv\u00e9 que tous les remboursements soient suspendus pendant plusieurs semaines \u00e0 cause d\u2019un bug. Le management avait tout simplement stopp\u00e9 les remboursements le temps de r\u00e9\u00e9crire l\u2019application ou d&rsquo;impl\u00e9menter un ERP avec la m\u00eame fonction. Vous imaginez la fureur des utilisateurs \/ acheteurs et la mauvaise publicit\u00e9 pour le site ?<\/p>\n<p>Ne pas faire de ses utilisateurs une priorit\u00e9 n\u2019est pas le choix d\u2019un simple d\u00e9veloppeur ou d\u2019un testeur paresseux : c\u2019est un choix de management. Et je ne connais qu\u2019une seule priorit\u00e9 au-dessus des utilisateurs, du point de vue du management : le budget.<br \/>\nCe qui n\u2019est pas le cas en l\u2019esp\u00e8ce. Ce site web est pionnier et leader sur son march\u00e9 des ventes priv\u00e9es, avec une croissance impressionnante. Je vous parle d\u2019une startup en train de conqu\u00e9rir le monde, pas d\u2019une entreprise centenaire sur un march\u00e9 en d\u00e9clin.<\/p>\n<p>Je pense donc que nous sommes en pr\u00e9sence d\u2019une informatique pour laquelle la priorit\u00e9 est de faire face \u00e0 la croissance du business, d\u2019\u00eatre pr\u00eat pour l\u2019ouverture de chaque nouvelle filiale, de pouvoir g\u00e9rer la logistique de 1 500 fournisseurs diff\u00e9rents pour des dizaines de milliers de clients, d\u2019\u00e9viter toute interruption de fonctionnement ou mauvaise perfornance du site, \u2026 L\u2019IT a pour ce faire accumul\u00e9 des strates de diff\u00e9rentes technologies : applications d\u00e9velopp\u00e9es en interne \u00e0 un rythme important, duplication \/ sp\u00e9cialisation des syst\u00e8mes en fonction de la r\u00e9glementation de chaque nouveau pays, int\u00e9gration de diff\u00e9rents ERPs, etc\u2026<\/p>\n<p>Il arrive alors un moment o\u00f9 l\u2019accumulation de dette technique est telle que :<\/p>\n<ul>\n<li>Un module entier \u2013 tel que celui des remboursements \u2013 peut cesser de fonctionner : on cesse de rembourser pendant plusieurs semaines, sans m\u00eame chercher \u00e0 trouver un palliatif, le temps de mettre en place un nouveau logiciel ou de r\u00e9\u00e9crire l\u2019application.<\/li>\n<li>Le nombre de bugs rencontr\u00e9s est trop important pour g\u00e9rer chacun de mani\u00e8re ind\u00e9pendante : on met en place une unique page d\u2019erreur g\u00e9n\u00e9rique et que l\u2019utilisateur se d\u00e9brouille.<\/li>\n<li>Et puisque l&rsquo;utilisateur n&rsquo;est pas une priorit\u00e9, et puisque toutes les erreurs possibles sont &lsquo;g\u00e9r\u00e9es&rsquo;, pourquoi perdre du temps en tests ?<\/li>\n<\/ul>\n<p>Il arrive un moment o\u00f9 il y a tellement de fuites qu\u2019on ne cherche plus \u00e0 colmater chacune d\u2019entre elles : on place un grand tonneau et on \u00e9cope.<\/p>\n<p>En tant que consultant Qualit\u00e9, mes recommandations seraient les suivantes :<\/p>\n<ul>\n<li>Une analysis syst\u00e9matique de la qualit\u00e9 du code sur l\u2019ensemble du porfefeuille d\u2019applications.<\/li>\n<li>V\u00e9rifier quels sont les syst\u00e8mes trop lourds \u00e0 maintenir, qui n\u2019autorisent plus aucune souplesse en termes de time-to-market, qui connaissent des retards de r\u00e9alisation, des efforts de QA importants, etc.<\/li>\n<li>Croiser ces donn\u00e9es de projet avec celles de la qualit\u00e9 de code afin de d\u00e9cider sur quelles parties du portefeuille d\u2019applications effectuer un refactoring.<\/li>\n<\/ul>\n<p>J\u2019en profiterais \u00e9galement pour v\u00e9rifier si la m\u00e9thodologie utilis\u00e9e \u2013 par exemple en V \u2013 peut expliquer certains mauvais r\u00e9sultats en termes de projet. Si la QA d\u00e9couvre trop de  bugs trop tard dans le cycle de vie de projet, il arrive un moment o\u00f9 l\u2019effort de correction est trop important pour le d\u00e9lai imparti.<\/p>\n<p>Si la rumeur est fond\u00e9e qui suppose de proposer le site en tant que Service as a Software, alors le refactoring est non seulement justifi\u00e9 mais imp\u00e9ratif. Il ne s\u2019agit pas simplement de remettre l\u2019utilisateur au centre de l\u2019IT, il s\u2019agit tout simplement de retrouver un niveau de qualit\u00e9 des applications qui permette \u00e0 ce site de poursuivre sa croissance.<\/p>\n<p>J&rsquo;ai d\u00e9j\u00e0 rencontr\u00e9 ce type de situations avec des Telcos. Ils ont du faire face \u00e0 une croissance tr\u00e8s forte et leurs d\u00e9partements informatiques ont exp\u00e9riment\u00e9s ces m\u00eames probl\u00e8mes, et doivent maintenant g\u00e9rer des syst\u00e8mes applicatifs de pi\u00e8tre qualit\u00e9, un nombre incalculable de bugs, &#8230; sauf que ces soci\u00e9t\u00e9s ne sont plus sur un march\u00e9 en croissance et que les budgets IT se r\u00e9duisent et qu&rsquo;aucun refactoring n&rsquo;est maintenant possible.<\/p>\n<p>Et c&rsquo;est alors que le management d\u00e9cide de replacer l&rsquo;utilisateur au centre de sa strat\u00e9gie parce qu&rsquo;en l&rsquo;absence de croissance, quand il n&rsquo;est plus possible de gagner de nouveaux clients, vous commencez \u00e0 soigner ceux que vous avez et \u00e9viter de les perdre devient la priorit\u00e9.<\/p>\n<p>Cherchez l\u2019erreur\u2026 avant qu&rsquo;il ne soit trop tard.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le bug pr\u00e9sent\u00e9 dans notre pr\u00e9c\u00e9dent post a attir\u00e9 un grand nombre de commentaires tous plus int\u00e9ressants les uns que les autres. Donc d\u2019abord, un grand merci \u00e0 tous ceux qui nous ont fait part de leur point de vue, puisque c\u2019\u00e9tait justement l\u2019objectif de cette publication. Mon exp\u00e9rience de consultant est plut\u00f4t orient\u00e9e \u2018best [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-190","post","type-post","status-publish","format-standard","hentry","category-qa"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/190"}],"collection":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/comments?post=190"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/190\/revisions"}],"predecessor-version":[{"id":191,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/190\/revisions\/191"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}