Blogue
Savoir-faire et technologie
Histoires, idées et perspectives sur la stratégie, la technologie et les solutions d’affaires.
Articles à la une
<h2>Qu'est-ce que la certification SOC 2 ?</h2><p>La certification SOC 2 (Service Organization Control 2) est une norme élaborée par l'American Institute of Certified Public Accountants (AICPA) qui évalue la capacité d'une organisation à gérer les risques liés à la sécurité, à la disponibilité, à l'intégrité du traitement, à la confidentialité et à la protection de la vie privée des données qu'elle traite pour le compte de ses clients.</p><p>La certification SOC 2 repose sur cinq principes, appelés critères de confiance, qui définissent les exigences minimales que doit respecter une organisation pour assurer la sécurité et la qualité de ses services. Ces critères sont les suivants :</p><ul> <li><strong>Sécurité</strong> : l'organisation protège les données contre les accès non autorisés, les modifications, les divulgations, les dommages ou la perte.</li> <li><strong>Disponibilité</strong> : l'organisation assure la disponibilité et le fonctionnement continu de ses services conformément aux accords conclus avec ses clients.</li> <li><strong>Intégrité du traitement</strong> : l'organisation traite les données de manière complète, valide, exacte, opportune et autorisée.</li> <li><strong>Confidentialité</strong> : l'organisation respecte les engagements et les obligations de confidentialité envers ses clients et les tiers concernant les données qu'elle traite.</li> <li><strong>Protection de la vie privée</strong> : l'organisation respecte les principes de protection de la vie privée définis par l'AICPA et les lois applicables en matière de collecte, d'utilisation, de conservation, de divulgation et d'élimination des données personnelles.</li></ul><p>« Obtenir et maintenir la certification SOC 2, je le vois comme un ultramarathon et non un sprint sur 100 mètres. C'est une première étape, dans un long processus en constante évolution. La cybersécurité, dans son ensemble, nécessite une rigueur et une attention aux détails constante auquel notre équipe est prête à s’attarder. »</p><p>– Vincent Huard, Vice-Président, gestion et analyse des données</p><p>Pour obtenir la certification SOC 2, une organisation doit faire l'objet d'un audit indépendant réalisé par un cabinet comptable qualifié qui vérifie qu’elle respecte les critères de confiance applicables à ses services. L'audit porte sur la conception et l'efficacité des contrôles mis en place par l'organisation pour assurer la conformité aux critères de confiance.</p><h2>Quelle est la différence entre la certification SOC 2 Type 1 et Type 2 ?</h2><p>Il existe deux types de certification SOC 2. C’est entre autres la durée de l’audit qui les distingue. SOC 2 Type 2 est couvert par l’audit le plus long et rigoureux.</p><ul> <li>La certification SOC 2 Type 1 atteste que l'organisation respecte les critères de confiance à une date donnée à une date précise. Elle évalue la conception des contrôles, mais pas leur efficacité dans le temps.</li> <li>La certification SOC 2 Type 2 atteste que l'organisation respecte les critères de confiance sur une période de temps définie, généralement de trois à douze mois. Elle évalue la conception, mais également l'efficacité des contrôles, en tenant compte de leur fonctionnement réel et de leur évolution.</li></ul><p>En d’autres mots, la certification SOC 2 Type 2 répond à des critères plus exigeants et rigoureux, car elle implique un suivi continu et une vérification régulière des contrôles. Elle offre une assurance plus élevée sur la qualité et la sécurité des services fournis par l'organisation.</p><h2>Quels sont les bénéfices pour nos clients ?</h2><p>En obtenant la certification SOC 2 Type 2, Spiria réaffirme sa posture de partenaire de confiance dans la réalisation de projets de développement de solutions numériques pour ses clients. Voici quelques bénéfices principaux qui permettent à nos clients de se lancer la tête tranquille dans des projets d’envergure avec Spiria :</p><ul> <li>La garantie que nous respectons les normes les plus élevées en matière de sécurité de l'information</li> <li>La garantie que nous protégeons les données de nos clients contre les menaces internes et externes.</li> <li>La confiance que nous assurons la disponibilité et la performance de nos services</li> <li>La confiance que nous sommes capables de réagir rapidement et efficacement en cas d'incident.</li> <li>La certitude que nous traitons vos données avec intégrité, en respectant les règles de validation, d'exactitude, de traçabilité et d'autorisation.</li> <li>La tranquillité d'esprit que nous respectons vos obligations de confidentialité et que nous ne divulguons pas vos données à des tiers non autorisés.</li> <li>La sécurité que nous respectons les principes de protection de la vie privée et que nous nous conformons aux lois applicables en matière de données personnelles.</li></ul><p>La certification SOC 2 Type 2 est un gage de confiance et de sécurité pour nos clients qui témoigne de notre engagement à fournir des services de qualité et à respecter les meilleures pratiques du secteur. Elle représente l’excellence en matière de sécurité des données dans le marché tout en étant de plus en plus prisée pour les projets de développement logiciels. Il était donc tout naturel pour Spiria d’être parmi les quelques firmes d’experts à s’y conformer en Amérique du Nord. Nous sommes fiers d’arborer cette certification et d'assurer à la fois l'excellence, la fiabilité et la rigueur de nos pratiques d’affaires.</p><p>Démarrez un projet en toute confiance : <a href="mailto:nouveauprojet@spiria.com">nouveauprojet@spiria.com</a>.</p>
<p>Les équipes de Spiria ont une longue et riche expérience avec les deux types de contrats, et nous vous dévoilons ici ce que nous avons appris au fil du temps sur le sujet et quels sont les critères de succès pour chaque option.</p><p>Clarifions tout d’abord ce que sont ces deux types de projets :</p><h3>Projets temps & matériel</h3><p>Projets dont la portée (activités, livrables, inclusions comme exclusions, etc.) peut être plus ou moins clairement définie. L’évaluation initiale des coûts présente une fourchette de prix probable pour la réalisation du dit projet. Les coûts sont facturés selon les heures réelles exécutées et le matériel/ressources (autres coûts, par exemple des licences logicielles ou des services infonuagiques) nécessaire. Cette approche est plus flexible, car elle permet des changements de spécifications tout au long du processus de développement. L’agilité est encouragée et les contrôles de gestion de projets sont mis de l’avant.</p><h3>Projets forfaitaires ou fixes</h3><p>Projets dont la portée est plus souvent bien ou très bien définie. Le niveau de confiance de l’évaluation initiale des coûts repose sur des informations plus claires que le précédent type de projet. Comme son nom l’indique, les coûts sont fixés au départ, peu importe les heures réellement exécutées et le coût en matériel et ressources. Par conséquent, les notions de risques et de profitabilité sont des considérations plus critiques à évaluer dans ce type de projet. Toute modification des spécifications est encadrée par un processus de demande de changement et est facturée en tant que travail supplémentaire.</p><p>Dans un premier scénario, pour un projet préalablement qualifié, le type de projet (temps/matériel vs fixe) peut être imposé par le client, les exigences internes des organisations ou encore des réglementations, par exemple dans le cas des appels d’offres (majoritairement fixes). Lorsque possible, Spiria peut proposer une approche pour mitiger les risques et mieux saisir la portée du projet, comme proposer au client un investissement initial dans une phase découverte, en mode temps/matériel ou forfaitaire, dans l’intention de pouvoir proposer par la suite les phases de développement et de déploiement en mode forfaitaire. Ceci n’empêche bien sûr pas le client de changer de priorité ou de modifier la portée à la suite de la phase de découverte. Notre flexibilité doit nous permettre de négocier avec le client la portée définie en variant les inclusions/exclusions, dans l’objectif de rester dans l’enveloppe budgétaire forfaitaire contractuelle entendue.</p><p style="text-align: center;"><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470cad54d506e6dad2ea43_process-fr.webp" style="width: 60%; border: none;" alt="Un cycle projet type." title="Un cycle projet type."></p><p style="text-align: center; font-style: italic;">Figure 1. Un cycle projet type.</p><p>Dans un deuxième scénario, si le type de projet n’est pas imposé, ceci nous donne la latitude du choix de la stratégie. Habituellement, les clients prévoient des sessions de rencontres avec les différents fournisseurs pour répondre à leurs questions. Une réflexion interne s’impose ensuite pour bien évaluer les facteurs décisionnels menant à la meilleure stratégie. À cet effet, le tableau ci-dessous présente une liste non exhaustive de points qui éclairent les équipes dans cette réflexion. Ces points sont pondérables (facilement identifiables, quantifiables ou mesurables) ou impondérables, en fonction des informations fournies lors des rencontres initiales, dans les cahiers de charge, ou pouvant être obtenues par des demandes au client. Les annotations des deux colonnes de droite sont simplement des suggestions de poids relatifs aux deux types de projets.</p><table cellpadding="0" cellspacing="0" style="width:100%"> <tbody> <tr> <td style="width:76%"><strong>Points</strong></td> <td style="width:12%"><strong>Fixe</strong></td> <td style="width:12%"><strong>T&M</strong></td> </tr> <tr> <td>Le plan d’affaires, les requis, les besoins et les attentes sont claires.</td> <td>➕➕</td> <td>➕</td> </tr> <tr> <td>Les processus et règles d’affaires sont nombreux et complexes.</td> <td>➕</td> <td>➕➕</td> </tr> <tr> <td>Le budget client est identifié et la planification budgétaire est cadrée.</td> <td>➕</td> <td>➖</td> </tr> <tr> <td>L’échéancier est strict ou critique en raison du contexte client ou d’affaires.</td> <td>➕</td> <td>➖</td> </tr> <tr> <td>Les expertises nécessaires sont identifiables.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>La structure organisationnelle et décisionnelle est grande et complexe.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>Les aspects légaux sont complexes.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>Les relations sont déjà établies (historique) ou des contacts sont nos promoteurs.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>Le calcul de risques, les incertitudes et la contingence sont élevés.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>Les risques de dérives sont probables.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>Le client détient une capacité en effectifs ou en connaissances internes<br> (designer, équipe de développement, AQ, etc.).</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>L’environnement technologique est connu.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>Les contraintes technologiques sont importantes (ex. : système hérité).</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>Les défis d’intégration sont nombreux et complexes.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>Les choix technologiques sont imposés.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>Les données sont disponibles pour faire l’assurance qualité fidèlement.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>La solution est assujettie à des certifications spéciales.</td> <td>➖</td> <td>➕</td> </tr> </tbody></table><p><br>Le résultat de cette réflexion peut amener vers différentes approches représentées dans le diagramme suivant :</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470cb0f4619dcfb509565b_strategies-fr.png" style="width: 100%; border-style:solid; border-width:1px;" alt="Les différentes stratégies (approches)." title="Les différentes stratégies (approches)."></p><p style="text-align: center; font-style: italic;">Figure 2. Les différentes stratégies. (Cliquer pour agrandir.)</p><p>La stratégie sélectionnée dicte la façon donc les ententes contractuelles sont conclues. Ce choix d’approche a des incidences sur tout le déroulement du projet et son succès final. La transparence du processus de choix et la justification des motifs auprès du client permettent de démarrer la relation sur des bases saines. Les objectifs ultimes sont de livrer un projet qui respecte nos valeurs spiriennes et qui apporte la valeur attendue au client.</p>
Tous les articles
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
<h2>Contexte</h2><p>En tant que directeur TI dans une entreprise de taille moyenne comme la nôtre, je dois accepter le fait que certains utilisateurs sont amenés à utiliser des produits Apple et qu’ils finiront très probablement par nous demander notre aide. Compte tenu de cela, nous devons disposer d’un appareil assez récent sur lequel est installé macOS, afin de pouvoir effectuer des tests ou des opérations de dépannage, mais la dernière fois que j’ai regardé, les conditions de licence d’Apple exigeaient que nous utilisions macOS à partir d’un produit Apple officiel. Récemment, j’ai récupéré un MacBook Pro 2015 lors d’une réparation gratuite pour un problème de batterie. Étant donné notre politique interne qui exige que nous remplacions le matériel tous les cinq ans, j’ai demandé à mon patron si je pouvais remplacer le disque interne du MacBook pour avoir une machine à triple démarrage à des fins TI (macOS, Microsoft et Linux). Il a accepté l’achat, à condition que je produise quelques articles de blogue sur mon expérience.</p><p>Mais après, j’ai commencé à réfléchir. Pourquoi pas quatre systèmes d’exploitation ? Et comme je manquais de sommeil ce jour-là, les choses ont fait boule de neige et j’ai fini par me convaincre d’avoir huit systèmes d’exploitation, parce que le mot “octuple” a un son plus cool et plus identifiable que le mot “nonuple” ou “septuple”. Alors, nous y voilà.</p><p><b>Avertissement !</b> Jouer avec les partitions, en particulier la partition de démarrage, n’est pas une activité pour les âmes sensibles ; cela peut même rendre votre appareil définitivement non démarrable. Ne faites pas ça à moins que vous ne soyez familier avec des trucs comme les partitions de disque, GRUB, EFI, etc.</p><p><b>Avertissement encore plus important !!!</b> Les gens de TI se parlent à eux-mêmes... beaucoup... Nous prétendons que c’est un processus, mais en fait, nous ne sommes que des épaves en manque de sommeil.</p><h2>Les bases</h2><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/6847073e686b311d13f44222_octobot.webp" style="width: 100%; border-style:solid; border-width:1px;" alt="Octo-boot." title="Octo-boot."></p><h3>Les grandes lignes du projet</h3><p>Officiellement, Apple supporte le double démarrage pour MacOS et Windows via Boot Camp, et la <a href="https://support.apple.com/en-us/HT201468">procédure</a> est assez simple. Cependant, lorsqu’il s’agit de triple démarrage avec une distribution Linux, les choses commencent à se gâter. Ceux qui font ce genre de choses recommandent d’utiliser un gestionnaire de démarrage appelé “<a href="http://www.rodsbooks.com/refind/">rEFInd</a>”. Il doit être installé manuellement à partir d’une clé USB pendant le processus. J’avais une liste de distributions Linux que je voulais installer, mais j’ai dû la modifier un peu en cours de route. Au moment de la rédaction, j’ai pratiquement atteint mon objectif d’avoir huit distributions sur la même machine grâce à un excellent article que j’ai trouvé <a href="https://robpickering.com/triple-boot-macbook-pro-macos-windows-10-linux/">ici</a>.</p><h3>Les systèmes d’exploitation</h3><p>En plus de Windows et de MacOS, nous avons installé une série de distributions Linux (ou distros en langage geek). Linux est le programme central, appelé noyau, auquel sont attachés une série d’outils et de programmes (environnement de bureau, système de fichiers, bibliothèques, etc.) afin de constituer un système d’exploitation complet.</p><p>Voici la liste des systèmes d’exploitation que j’ai fini par installer, avec la taille des partitions et la raison de l’installation :</p><ul style="list-style-type:disc;"> <li><b>macOS</b> <ul style="list-style-type: circle;"> <li>Taille : 256 Go.</li> <li>OS : Duh... (basé sur FreeBSD).</li> <li>Raison : en avoir un pour l’équipe et mettre à l’épreuve des outils de gestion d’entreprise prévus.</li> </ul> </li> <li><b>Windows 10 Pro</b> <ul style="list-style-type: circle;"> <li>Taille : 256 Go répartis entre le disque C: pour l’OS et le D: qui est partagé entre les OSs.</li> <li>Environnement de bureau : MS Windows.</li> <li>Raison : faire tourner Crysis.</li> </ul> </li> <li><b>Linux Mint</b> <ul style="list-style-type: circle;"> <li>Taille : 64 Go.</li> <li>Environnement de bureau : Cinnamon Desktop, basé sur Ubuntu.</li> <li>Raison : LinuxMint est généralement ma distribution de référence pour l’implémentation de l’environnement de bureau et, comme je la connais bien, c’est aussi ma “référence de contrôle” dans cette expérience.</li> </ul> </li> <li><b>Suse Linux</b> <ul style="list-style-type: circle;"> <li>Notes : <ul style="list-style-type: square;"> <li>J’avais l’intention d’utiliser une distro basée sur Gentoo, mais elles sont connues pour être difficiles à utiliser et plus orientées vers les serveurs. Sabayon ne voulait même pas lancer le processus d’installation et Redcore n’arrivait pas à faire fonctionner le Wi-Fi (sans compter les dépôts basés en Russie).</li> <li>Je suis passé à Suse Linux parce que sa principale base de développement se trouve en Allemagne et que tout le monde sait que tout ce qui est allemand est bien conçu (et cool).</li> </ul> </li> <li>Taille : 64 Go.</li> <li>Environnement de bureau : KDE Plasma, basé sur Slackware.</li> <li>Raison : l’Allemagne !!! Tester le système de fichiers <a href="https://en.wikipedia.org/wiki/Btrfs">Btrfs</a>.</li> </ul> </li> <li><b>Manjaro</b> <ul style="list-style-type: circle;"> <li>Taille : 64 Go.</li> <li>Environnement de bureau : KDE, basé sur Arch Linux.</li> <li>Raison : expérimentation de repo Arch (Pacman).</li> </ul> </li> <li><b>Fedora</b> <ul style="list-style-type: circle;"> <li>Taille : 64 Go.</li> <li>Environnement de bureau : Mate Desktop, basé sur Redhat.</li> <li>Raison : cette distro basée sur RedHat est l’une des plus importantes distributions de Linux et utilise la gestion de repos YUM.</li> </ul> </li> <li><b>Kali Linux</b> <ul style="list-style-type: circle;"> <li>Taille : 128 Go.</li> <li>Environnement de bureau : GNOME Desktop, basé sur Debian.</li> <li>Raison : les tests de sécurité. Cette distribution est préchargée avec un large éventail d’outils de sécurité pour le piratage éthique.</li> </ul> </li> <li><b>Ubuntu Studio</b> <ul style="list-style-type: circle;"> <li>Taille : 128 Go.</li> <li>Environnement de bureau : XFCE, basé sur Ubuntu, avec un noyau soi-disant à faible latence.</li> <li>Raison : avoir une distro orientée vers les trucs artistiques et tester la fonctionnalité du noyau à faible latence si possible.</li> </ul> </li></ul><h3>Objectifs d’après-installation</h3><p>Les objectifs qui en découlent sont les suivants :</p><ul style="list-style-type:disc;"> <li><i>Tester une variété de distributions et d’interfaces utilisateurs :</i> <ul style="list-style-type: circle;"> <li>Les distributions Linux sont plus ou moins réputées pour leur flexibilité.</li> <li>Cela peut rendre le support quelque peu difficile et aléatoire dans certains cas en raison de la grande variété de matériel disponible.</li> <li>Sur une distribution donnée, vous pouvez disposer d’un large éventail de gestionnaires de fenêtres.</li> <li>J’ai essayé de choisir l’assortiment le plus large possible d’environnements de de bureau et de prendre ceux qui étaient fournis “prêts à l’emploi” avec l’installation de la distro. <ul style="list-style-type: square;"> <li>Vous pouvez généralement choisir le bureau de votre choix après avoir installé le bureau “par défaut”.</li> <li>J’ai choisi de prendre ceux qui étaient “officiellement” pris en charge pendant la phase d’installation afin de réduire les problèmes.</li> </ul> </li> </ul> </li> <li><i>Disposer d’une partition de disque partagée par tous les systèmes d’exploitation :</i> <ul style="list-style-type: circle;"> <li>Je le fais généralement avec toute machine à double démarrage que j’utilise, afin de faciliter l’accès à divers fichiers tels que les photos, les fichiers musicaux, les vidéos, etc.</li> <li>Comme Windows n’a traditionnellement jamais pris en charge les systèmes de fichiers autres que FAT et NTFS, j’ai toujours partagé un disque “D:” formaté en NTFS.</li> </ul> </li> <li><i>Faire en sorte que les éléments suivants soient testés et fonctionnent :</i> <ul style="list-style-type: circle;"> <li>Caméra ;</li> <li>Emplacement pour carte SD ;</li> <li>Moniteur externe ;</li> <li>Gestion de l’alimentation ;</li> <li>Fonctions spéciales ; <ul style="list-style-type: square;"> <li>Grâce à une combinaison de touches contrôle, option et commande, vous pouvez contrôler divers aspects de la machine, tels que la luminosité et le volume.</li> <li>Toutes les fonctionnalités doivent être présentes dans tous les systèmes d’exploitation.</li> </ul> </li> <li>Casque externe USB ;</li> <li>Casque externe 3,5 ;</li> <li>Carte d’interface réseau filaire ;</li> <li>Réseau Wi-Fi ;</li> <li>Boîtier externe basé sur USB.</li> </ul> </li> <li><i>Tests de différentes applications et tests de charge :</i> <ul style="list-style-type: circle;"> <li>Navigateur Firefox. <ul style="list-style-type: square;"> <li>Trouver un site web/application qui soit exigeant en ressources et obtenir des statistiques.</li> </ul> </li> <li>Navigateur Chrome. <ul style="list-style-type: square;"> <li>Installer et lancer la version officielle de Google.</li> </ul> </li> <li>Système de fichiers. <ul style="list-style-type: square;"> <li>Copie de fichiers.</li> <li>“Zipper” avec NTFS et avec le système de fichiers propre à chaque OS.</li> <li>Documenter chaque système de fichiers.</li> </ul> </li> <li>Logiciel pour tests vidéo et audio. <ul style="list-style-type: square;"> <li>Afin de comparer les performances, trouver un outil qui convertit des fichiers vidéo/audio dans un autre format et qui peut être utilisé sur toutes les plateformes.</li> </ul> </li> <li>Outil de compilation. <ul style="list-style-type: square;"> <li>À déterminer. Idéalement, un outil multiplateforme accompagné de quelque chose à compiler qui soit assez lourd pour prendre au moins cinq minutes sous macOS.</li> <li>Je demanderai à mes collègues de m’aider sur ce point.</li> </ul> </li> <li>Wi-Fi/filaire, téléchargement/latence. <ul style="list-style-type: square;"> <li>Trouvez un outil qui peut être utilisé avec tous les systèmes d’exploitation et qui fournit une multitude de statistiques.</li> </ul> </li> <li>Outil de rendu 3d. <ul style="list-style-type: square;"> <li>Test avec Blender.</li> </ul> </li> </ul> </li></ul><h2>Matériel et installation initiale</h2><p>Le disque du Mac Pro 2015 est relativement facile à accéder et remplacer tant que vous disposez des bons outils. Je n’entrerai pas dans les détails ici, mais sachez que les vis sont du type “<a href="https://en.wikipedia.org/wiki/Pentalobe_security_screw">pentalobe</a>” et qu’elles sont faciles à enlever. J’ai commandé un disque NVMe chez <a href="https://www.macsales.com">OWC</a> parce que je m’attends à ce qu’un disque NVMe ordinaire ne fonctionne pas comme prévu, ce que je vérifierai à la fin du projet. Ma première (semi)surprise a été de trouver un disque NVMe Samsung à l’intérieur d’un ordinateur portable Apple. Cela montre que si les deux sont en désaccord en public, ils se retrouvent dans le même lit en privé. La réinstallation du logiciel macOS et l’installation de Windows qui a suivi se sont déroulées sans problème avec Boot Camp. Je ne vais pas passer en revue tout le processus ici, car il est amplement couvert dans de nombreux autres articles.</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470741090057c3ec206e44_samsung-ssd.webp" style="width: 100%; border-style:solid; border-width:1px;" alt="Samsung S4LN058A01-8030." title="Samsung S4LN058A01-8030."></p><p>NVMe SSD Samsung.</p><p>Le plaisir commence vraiment avec l’installation de Linux. En gros, chaque fois que vous installez une distribution Linux, elle installe GRUB (sauf SuSe), ce qui fait que macOS s’arrête de démarrer alors que tout le reste fonctionne encore. La solution que j’ai trouvée a été de réinstaller l’application rEFInd à chaque fois, mais j’ai ensuite réalisé que je devrais également réinstaller rEFInd à chaque fois qu’une distribution Linux reçoit un nouveau noyau dans sa mise à jour. J’ai essayé de trouver une solution en éditant manuellement le fichier GRUB avec quelques modifications suggérées par divers forums, mais en vain. Cela nécessitera quelques recherches. Un autre problème que j’ai rencontré était que Windows ne démarrait plus non plus, et j’ai dû désactiver la protection de l’intégrité du système (<a href="https://en.wikipedia.org/wiki/System_Integrity_Protection">SIP</a>).</p><p>En dehors de ces petits désagréments, j’ai été très surpris de constater que le Wi-Fi fonctionnait à peu près sans problème sur toutes les distros que j’ai fini par installer. C’était ma plus grande crainte. Les pilotes Wi-Fi sont généralement la composante la plus problématique dans l’installation d’une distribution Linux, étant donné que les puces Wi-Fi sont souvent liées à des pilotes fermés.</p><p>Le plus gros problème que j’ai rencontré a été l’affichage sur le portable, qui s’est avéré quelque peu inégal. Ça fonctionnait tout de suite dans certains cas, mais d’autres nécessitaient quelques réglages. Toutes les plateformes ont souffert de quelques bogues ici et là, provoqués par l’écran Retina de ce modèle de portable. Cet écran est certes très beau, mais quelques ajustements sont nécessaires pour qu’il soit utilisable. Habituellement, les problèmes ont été (principalement) résolus en cherchant sur Google les paramètres HiDPi pour les différentes plateformes. En fin de compte, le seul irritant qui restait était dans le gestionnaire de boot login de l’écran GRUB, sur lequel je ferai des recherches plus tard.</p><h2>Et maintenant ?</h2><p>Quelque part dans le processus, je me suis un peu emporté et j’ai oublié de prendre des notes sur les ajustements d’interface dans les environnements de bureau. Je crois que je vais simplement relancer les procédures d’installation et noter les détails de chaque distro dans la partie 2 ou 3 de cette série d’articles de blogue. Je dois faire quelques recherches sur la question de GRUB pour voir si je peux faire quelque chose à ce sujet ou si je dois simplement m’en tenir à “rEFInd”. Comme mentionné précédemment, jouer avec le bootloader est quelque peu risqué et la documentation sur le sujet est maigre. Chaque fois que je trouvais un article à ce sujet, il y avait toujours une restriction. Idéalement, j’aimerais avoir GRUB comme mon bootloader permanent et le faire fonctionner de manière continue et cohérente à travers les mises à jour du noyau Linux. Le plan B serait de supprimer l’installation par défaut de GRUB, puisque rEFInd peut détecter assez bien les nouveaux OS.</p>
Intelligence artificielle
5 min de lecture
Les 3 étapes essentielles de l’apprentissage automatique (Machine Learning)
<p>L’apprentissage automatique (<i>Machine Learning</i>) est utilisé en intelligence artificielle et en science et analyse des données (<i>Analytics and Data Science</i>).</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470c95786eb68751abd963_data_science_ai_fr.webp" style="width: 100%; " alt="Intelligence artificielle / Science des données." title="Intelligence artificielle / Science des données."></p><p>Il existe différents types d’apprentissage automatique : le supervisé, le non-supervisé et celui par renforcement.</p><p><b>Apprentissage supervisé</b> : pour cet apprentissage, nous avons des données en entrée (<i>Features</i>) et le résultat attendu (<i>Label</i>). Il nous permet de faire des prédictions basées sur un modèle<sup>*</sup> qui est obtenu à partir de données d’historique et de l’algorithme choisi.</p><p>L’apprentissage supervisé tente de répondre à deux questions :</p><ul> <li>Classification : « quelle classe ?";</li> <li>Régression : « combien ? ».</li></ul><p><b>Apprentissage non-supervisé</b> : avec cet apprentissage, vous avez toujours des <i>features</i>, mais pas de <i>label</i>, car nous n’essayons pas de prédire quoi que ce soit.</p><p>À partir des données historiques que nous avons, nous essayons de voir ce que nous pouvons apprendre des données, sans oublier de valider les conclusions obtenues avec des experts en la matière.</p><p>Ce type d’apprentissage automatique sert généralement à découvrir des structures et des modèles dans les données. Il peut également être utilisé pour l’ingénierie des caractéristiques (<i>Feature engineering</i>) lors du processus de préparation des données pour l’apprentissage supervisé (nous y reviendrons plus tard).</p><p><b>Apprentissage par renforcement</b> : avec ce type d’apprentissage, vous commencez avec un agent (algorithme) qui doit choisir parmi une liste d’actions. Ensuite, en fonction de l’action choisie, il recevra un retour de l’environnement (provenant d’un humain dans certaines situations ou d’un autre algorithme) : c’est soit une récompense pour un bon choix, soit une pénalité pour une mauvaise action. L’agent (l’algorithme) apprend quelle stratégie (ou choix d’actions) maximise le cumul de récompenses.</p><p>Ce type d’apprentissage est souvent utilisé dans le cadre de la robotique, de la théorie des jeux et des véhicules autonomes.</p><p>Les principales étapes sont :</p><h2>La préparation des données</h2><ul> <li><b>Récolte des données </b>: tout d’abord, rassemblez les données dont vous aurez besoin pour l’apprentissage automatique. Veillez à les rassembler sous une forme consolidée, afin qu’elles soient toutes contenues dans un seul tableau (<i>Flat Table</i>).</li> <li><b>Réconciliation (<i>Data Wrangling</i>) </b>: il s’agit de préparer les données afin de les rendre exploitables par les algorithmes d’apprentissage automatique. <ul style="list-style-type:circle;"> <li>Nettoyage des données : trouvez les « Null », les valeurs manquantes et les données dupliquées. Il faut remplacer les « Null » et les valeurs manquantes par d’autres valeurs (ou les supprimer) et s’assurer de ne pas avoir de doublons.</li> <li>Décomposition des données : les colonnes de texte contiennent parfois plus d’une information ; nous devons donc les diviser en autant de colonnes dédiées que nécessaire. Si certaines colonnes représentent des catégories, convertissez-les en colonnes de type catégorie.</li> <li>Agrégation de données : regroupez certaines informations ensemble quand c’est pertinent</li> <li>Mise à l’échelle (<i>Data Scaling</i>) : cela permettra d’obtenir des données à une échelle commune, si ce n’est déjà le cas. La mise à l’échelle des données ne s’applique pas au label ou aux colonnes de catégories. Elle est nécessaire lorsqu’il y a une grande variation dans les plages de <i>features</i>.</li> <li>Mise en forme et transformation (<i>Data Shaping & Transformation</i>) : de catégoriel à numérique.</li> </ul> </li> <li><b>Enrichissement des données </b>: parfois, vous devrez enrichir les données existantes par des données externes afin de donner à l’algorithme plus d’informations avec lesquelles travailler, ce qui améliore le modèle (par exemple, des données économiques ou météorologiques).</li></ul><h2>L’ingénierie des caractéristiques (<i>Feature Engineering</i>)</h2><ul> <li>Visualisez vos données dans leur ensemble pour voir s’il existe des liens entre les colonnes. En utilisant des graphiques (<i>Charts</i>), vous pouvez voir les caractéristiques/<i>features</i> côte à côte et détecter tout lien entre les <i>features</i>, et entre les <i>features</i> et les <i>labels</i>. <ul style="list-style-type:circle;"> <li>Les liens entre les <i>features</i> nous permettent de voir si une <i>feature</i> donnée est directement dépendante d’une autre. Si c’est le cas, il se peut que vous n’ayez pas besoin des deux <i>features</i>.</li> <li>Les liens entre une <i>feature</i> et le <i>label</i> nous permettent de voir si une <i>feature</i> aura un fort effet sur le résultat.</li> </ul> </li> <li>Parfois, vous devrez générer des <i>features</i> supplémentaires à partir de celles qui existent déjà dans une classification (par exemple, lorsque l’algorithme choisi est incapable de différencier correctement les classes).</li> <li>Vous pouvez vous retrouver avec un nombre énorme de colonnes. Dans ce cas, vous devez choisir les colonnes que vous utiliserez comme <i>features</i>, mais si vous avez des milliers de colonnes (c’est-à-dire des <i>features</i> potentielles), vous devrez appliquer une réduction dimensionnelle. Il existe plusieurs techniques pour ce faire, notamment l’analyse en composantes principales ou ACP (<i>Principal Component Analysis</i>, PCA en anglais). L’ACP est un algorithme d’apprentissage non-supervisé qui utilise les colonnes existantes pour générer de nouvelles colonnes, appelées composantes principales, qui peuvent être utilisées ultérieurement par l’algorithme de classification.</li></ul><h2>Le choix d’algorithme</h2><p>À cette étape, on peut commencer à entraîner les algorithmes, mais avant tout :</p><ul> <li>Divisez votre ensemble de données en trois parties : entraînement, test et validation. <ul style="list-style-type:circle;"> <li>Les <b>données d’entraînement</b> serviront à entraîner le ou les algorithmes choisis ;</li> <li>Les <b>données de test</b> seront utilisées pour vérifier la performance du résultat ;</li> <li>Les <b>données de validation</b> ne seront utilisées qu’à la toute fin du processus et ne seront, sauf nécessité, que très rarement examinées et utilisées avant afin d’éviter d’introduire un quelconque biais dans le résultat.</li> </ul> </li> <li>Choisissez le ou les algorithmes pertinents.</li> <li>Essayez les algorithmes avec différentes combinaisons de paramètres et comparez les performances de leurs résultats.</li> <li>Utilisez la procédure des hyperparamètres (<i>Grid-Search</i> en Python, par exemple) pour essayer de nombreuses combinaisons, et trouver celle qui donne le meilleur résultat (n’essayez pas de combinaisons manuelles).</li> <li>Dès que vous êtes raisonnablement satisfait d’un modèle, sauvegardez-le même s’il n’est pas parfait, car vous risquez de ne plus jamais retrouver la combinaison qui vous a permis de l’obtenir.</li> <li>Continuer les essais après chaque nouveau modèle. Si les résultats ne sont pas satisfaisants, vous pouvez recommencer : <ul style="list-style-type:circle;"> <li>Au stade des hyperparamètres, si vous avez de la chance.</li> <li>Il est également possible de devoir recommencer à partir du choix de <i>features</i> à inclure ou même revoir l’état de nos données (vérifiez s’il n’y a pas de problèmes de normalisation, de régularisation, d’échelle, de valeurs aberrantes…).</li> </ul> </li></ul><p>Lorsqu’on embarque dans un processus d’apprentissage automatique, il est important de garder à l’esprit qu’il se peut que nos données ne nous permettent peut-être pas d’arriver à un meilleur résultat que celui que nous obtenons déjà avec nos méthodes classiques déjà en place. Mais cela nous révèle assurément des informations intéressantes lors du processus d’analyse de données.</p><hr><p>(*) Modèle : le résultat obtenu en analysant les données avec un algorithme et toute combinaison donnée de paramètres, en supposant que le modèle est une fonction mathématique <i>y = f(x)</i>, où <i>x</i> est la <i>feature</i>, <i>y</i> est le <i>label</i> et <i>f(x)</i> le modèle.</p>
<p>Voici quelques conseils qui peuvent vous venir en aide :</p><p>Une contrainte très lourde peut souvent être considérée par les membres de l’équipe comme impossible à surmonter à première vue, ce qui entraîne des réactions négatives. <b>Rappeler à l’équipe votre confiance dans sa capacité à trouver une solution</b>, et passer en revue les différents processus et phases qui mènent à la découverte d’une solution aidera grandement l’équipe à vivre avec le doute et l’incertitude de la situation.</p><p>En tant que chef d’équipe, <b>votre rôle consiste à aider votre équipe à atteindre son objectif</b> et à tirer des leçons de l’expérience. Évitez d’imposer vos idées à l’équipe ; assurez-vous plutôt que chacun se sente à l’aise d’exprimer les siennes. Aucune idée ne devrait être passée sous silence par crainte d’être jugée ou de subir une pression des pairs.</p><p>Assurez-vous que <b>toutes les idées peuvent être remises en question par les membres de l’équipe</b> et que des résultats constructifs découlent de ces remises en question. La pensée critique permet d’éviter la <a href="https://fr.wikipedia.org/wiki/Pens%C3%A9e_de_groupe">pensée de groupe</a> au sein d’une équipe et aide à atteindre des sommets. L’équipe doit être consciente que ce qui peut être mis en question est l’idée et non la personne qui l’a proposée.</p><p>Le fait de ne pas imposer vos idées à l’équipe ne signifie pas que vous n’avez pas votre mot à dire sur ce que l’équipe propose. Si la solution ne répond pas à vos attentes, ou si vous croyez qu’il y a une meilleure façon de procéder, <b>vous pouvez mettre l’équipe au défi</b>. Une bonne façon de le faire est de poser des questions de fond pour amener le groupe à comprendre comment les choses pourraient être mieux faites et à apprendre à être plus critique à l’égard de leurs conclusions.</p><p><b>Les membres de l’équipe doivent savoir que vous et l’organisation êtes là pour les soutenir.</b> Ils doivent avoir confiance que vous vous occuperez de toutes les questions qui ne sont pas directement liées au problème qu’ils essaient de résoudre et que vous leur accorderez le temps, le budget, les talents et les ressources nécessaires.</p><p><b>La voie vers la solution optimale passe par les succès et les échecs.</b> Les conséquences d’un échec ne devraient jamais être l’amertume ou le blâme. L’échec est une occasion pour l’équipe de comprendre ce qui a mal tourné et ce qui a bien fonctionné, et de décider de la suite des opérations. L’échec est une source de connaissance et de meilleure compréhension du problème. Il est une nouvelle étape dans le voyage intellectuel vers la solution définitive. Utilisez l’échec comme une rampe de lancement pour atteindre un niveau supérieur.</p><p>Les accomplissements modestes comme les grandes victoires aident à <b>créer une énergie positive</b> et une attitude constructive.</p><p><b>Célébrez les accomplissements</b> tout au long du processus pour motiver l’équipe.</p><p>N’oubliez pas que la solution qui semble la plus simple est en fin de compte souvent celle qui a demandé le plus de travail et d’inventivité : <b>trouver des solutions simples est très difficile</b>.</p>
<p>Bonjour ! Aujourd’hui, j’ai pensé à partager mes meilleurs trucs pour gagner du temps avec Visual Studio.</p><p>Juste pour que vous le sachiez, je travaille généralement en C++ et C#, mais la plupart de ces conseils devraient s’appliquer aussi bien à d’autres langages.</p><p>On y va.</p><h2>Astuces d’édition</h2><p>1. <b>Aller n’importe où : Ctrl + ,</b></p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470713e2b570d7a6408d7c_01_go_to_all.png" style="width: 452px; border-style:solid; border-width:1px;" alt="Go to All" title="Go to All"></p><p>Cet outil vous permet de trouver rapidement tout et n’importe quoi (fichiers, classes, etc.) dans votre projet.</p><p>2. <b>Aller à l’emplacement de saisie précédent : Ctrl + -</b></p><p>3. <b>Passer à l’emplacement de saisie suivant : Ctrl + Shift + -</b></p><p>4. <b>Aller au début ou à la fin d’un bloc de code : Ctrl + [ et Ctrl + ]</b></p><p>5. <b>Aller à la définition : F12</b></p><p>Un outil de base, mais essentiel pour naviguer rapidement vers les définitions de classes et de méthodes.</p><p>6. <b>Mettre en commentaire le bloc de code sélectionné : Ctrl + K + C</b></p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470716aa91262c5d2ded6e_02_comment_block.png" style="width: 224px; border-style:solid; border-width:1px;" alt="Comment out the selected block of code" title="Comment out the selected block of code"></p><p>7. <b>Décommenter le bloc de code sélectionné : Ctrl + K + U</b></p><p>8. <b>Formater automatiquement le code sélectionné : Ctrl + K + F</b></p><p>Ceci corrige automatiquement les espaces et l’indentation du code en fonction de vos paramètres.</p><p>9. <b>Boîte de sélection verticale de texte : Alt + clic souris</b></p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/6847071927510e29db8943ea_03_alt_box_select.webp" style="width: 213px; border-style:solid; border-width:1px;" alt="Vertical text box-selection" title="Vertical text box-selection"></p><p>Cela est très utile pour supprimer les premiers caractères du texte sur plusieurs lignes de code.</p><p>10. <b>Basculer entre un en-tête et son fichier source (C++) : Ctrl + K + O</b></p><p>11. <b>Renommer une variable : Ctrl + R + R</b></p><p>C’est beaucoup plus rapide que de trouver manuellement chaque occurrence de la variable par vous-même.</p><p>12. <b>Afficher les espaces : Ctrl + R + W</b></p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/6847071c090057c3ec2068b8_04_whitespace.png" style="width: 195px; border-style:solid; border-width:1px;" alt="View whitespace" title="View whitespace"></p><p>C’est peut-être mon TOC, mais j’adore voir avec exactitude les espaces dans un document. Et je n’aime pas avoir à deviner si c’est une tabulation ou un espace.</p><p>13. <b>Extraits de codes <i>(snippets)</i></b></p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/6847071f378cc0db150a5182_05_code_snippets.png" style="width: 611px; border-style:solid; border-width:1px;" alt="Code snippets" title="Code snippets"></p><p>Si vous vous trouvez en train d’écrire les mêmes instructions à plusieurs reprises, envisagez d’utiliser des extraits de code.</p><p>Voici un exemple pour vous aider à démarrer : je travaille souvent en mode Release pour accélérer les choses dans le cadre d’un très gros projet client.</p><p>Lorsque j’ai besoin de déboguer une méthode de manière plus approfondie, je peux rapidement désactiver les optimisations en tapant le raccourci suivant : P + O + Tab.</p><p>Avant, je devais écrire encore et encore : <code>#pragma optimize("", off)</code>.</p><p>Pour cela, il me suffit d’associer un raccourci clavier (Outils -> Options -> Environment -> Clavier) à l’extrait de code suivant :</p><pre><code><?xml version="1.0" encoding="utf-8" ?><CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>Pragma Optimize Off</Title> <Shortcut>po</Shortcut> <Description>Code snippet to disable optimizations</Description> <Author>Me</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Code Language="cpp">#pragma optimize("", off)</Code> </Snippet> </CodeSnippet></CodeSnippets></code></pre><h2>Trucs de débogage</h2><p>14. <b>Actions de points d’arrêt <i>(breakpoints)</i></b></p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/6847072274580e67ceeb2dc9_06_breakpoint_action.png" style="width: 100%; border-style:solid; border-width:1px;" alt="Breakpoint Action" title="Breakpoint Action"></p><p>Utilisez des actions de points d’arrêt au lieu de <code>printf</code> ou <code>cout</code>. J’adore les actions : elles vous permettent d’ajuster rapidement vos logs temporaires sans recompiler à chaque fois et sans oublier de les nettoyer quand ils ne sont plus nécessaires.</p><p>15. <b>Points d’arrêt conditionnel</b></p><p>Un outil de débogage de base très utile. Il se trouve juste à côté des actions dans le panneau des options de points d’arrêt.</p><p>16. <b>Exécuter jusqu’au curseur : “Run execution to here”. Pas besoin de point d’arrêt !</b></p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470725e2b570d7a64095bb_07_run_execution_to_here.png" style="width: 231px; border-style:solid; border-width:1px;" alt="Run to cursor" title="Run to cursor"></p><p>Je sais que certains trouvent ce widget ennuyant, mais il n’a pas à n’être qu’un piège à curseur de souris. Essayez d’appuyer sur le petit bouton vert Play pour sauter rapidement à ce point du code pendant le débogage. Grâce à cet outil, il n’est plus nécessaire d’ajouter un point d’arrêt temporaire pour s’arrêter au point souhaité.</p><p>17. <b>Faire glisser le pointeur d’instruction</b></p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470728439a2a19ef2823d8_08_instruction_pointer.png" style="width: 100%; border-style:solid; border-width:1px;" alt="Drag the instruction pointer" title="Drag the instruction pointer"></p><p>Oui, vous pouvez déplacer la flèche jaune pendant le débogage. Il est très utile de pouvoir la déplacer vers le haut dans le code que vous déboguez pour répéter l’exécution de certaines instructions de code. Vous pouvez aussi facilement sauter des blocs de code pendant le débogage en les faisant glisser vers le bas. La beauté est ici que vous pouvez le faire sans redémarrer l’application à chaque fois.</p><h2>Pour conclure</h2><p>J’espère que vous avez découvert une astuce ou deux pour accélérer votre flux de travail quotidien de codage. Ajoutez vos propres favoris dans la section de commentaires ci-dessous !</p><p>À la prochaine !</p>
<p>Tout part d’une situation vécue. Comme moi, il vous est sans doute déjà arrivé lors d’une rencontre que tous les participants semblent en accord avec les éléments présentés en détail pour finalement vous rendre compte par la suite que personne n’avait compris la même chose ? Et bien, la cartographie des récits utilisateurs permet justement d’éviter cela !</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/684707ffbd0abd8d6ee10320_glad-we-all-agree.webp" style="width: 100%; border-style:solid; border-width:1px;" alt="I’m glad we all agree!" title="I’m glad we all agree!"></p><p>La compréhension partagée est l’un des objectifs du travail collaboratif. Illustration Jeff Patton / Luke Barret – CC <a href="https://creativecommons.org/licenses/by-nc-sa/1.0/">BY-NC-SA</a>.</p><h2>La cartographie des récits ou « The Big Picture »</h2><p>Ce que permet la cartographie des récits utilisateurs, c’est de voir la forêt dans son ensemble plutôt qu’un arbre seul. En approfondissant les discussions, elle permet de créer ensemble une vision commune de la solution à développer. Et plus concrètement, la cartographie permet de structurer le <i>backlog</i> de récits utilisateurs.</p><p>Qu’est-ce qu’un <i>backlog</i> ? Il s’agit avant tout de la liste de tâches à réaliser afin d’arriver au produit espéré.</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470802378cc0db150ade92_2d-backlog.webp" style="width: 100%; border-style:solid; border-width:1px;" alt="Flat backlog vs 2D backlog." title="Flat backlog vs 2D backlog."></p><p>Backlog plat (liste non structurée) vs backlog en 2D (cartographie des récits/“User Story Map”). Illustration Juliana Betancur/<a href="https://twitter.com/julibetancur/status/908513329794179073">Twitter</a>.</p><h2>Comment appliquer la cartographie des récits utilisateurs ?</h2><p>Durant l’atelier, nous avons eu mission d’organiser en équipe un voyage avec un crédit de 10 000 dollars.</p><p>L’organisation a été faite en 5 étapes.</p><h3>1. Écrire l’histoire, par étapes</h3><p><i>Sur des papillons repositionnables, inscrire les étapes de préparation faites lors d’un dernier voyage – tout ce qui vient à l’esprit. Une étape, un papillon.</i></p><p>À la manière d’un remue-méninges, chaque personne inscrit sur des papillons repositionnables les étapes à effectuer lors de la planification d’un voyage, et ce sans restriction. Par exemple, « faire le ménage de la maison ». Pour certaines personnes, il pourrait être essentiel de faire le ménage avant de partir en voyage.</p><h3>2. Organiser l’histoire</h3><p><i>Ordonner les papillons repositionnables de gauche à droite, puis raconter l’histoire en parcourant les papillons l’un après l’autre. Par exemple, « Pour me préparer j’ai fait ceci […] <b>ensuite</b>, j’ai fait cela […], etc. » et au besoin, ajouter des étapes manquantes.</i></p><p>Chaque personne ayant une vision différente de l’ordre souhaitable des activités, des discussions s’engagent alors sur l’ordonnancement de celles-ci, et ce, jusqu’à l’obtention d’un consensus.</p><h3>3. Explorer les histoires alternatives</h3><p><i>C’est-à-dire « Et si… » :</i></p><ul> <li><i>On partait en voyage au Québec ?</i></li> <li><i>On partait en voyage en Amérique du Sud ?</i></li> <li><i>On partait en voyage en amoureux ?</i></li></ul><p><i>Ajouter les nouvelles étapes de préparation nécessaires dans le cadre du nouveau scénario et les ajouter à notre histoire.</i></p><p>Et si on avait un animal ? Des enfants ? Et si c’était un voyage avec les beaux-parents ? Ou un voyage en sac à dos ? Et si le budget était restreint ? Etc.</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470c668ee2361c8aa4e508_story_mapping_01.png" style="width: 100%; border-style:solid; border-width:1px;" alt="Cartographie des récits utilisateurs." title="Cartographie des récits utilisateurs."></p><h3>4. Extraire et bâtir la structure</h3><p>Regrouper les tâches qui ont un objectif commun, tout en conservant la trame narrative. Associez des regroupements à un intitulé résumant l’étape. Autrement dit, à haut niveau, que dois-je faire ?</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470c69786eb68751abd015_story_mapping_02.png" style="width: 100%; border-style:solid; border-width:1px;" alt="Cartographie des récits utilisateurs." title="Cartographie des récits utilisateurs."></p><p>Il faut ajouter un papillon repositionnable au-dessus de chaque colonne afin de résumer l’objectif des activités de ce regroupement.</p><h3>5. Découper la cartographie par priorités pour atteindre un résultat spécifique</h3><p><i>Écrire le résultat spécifique à atteindre sur un papillon repositionnable que l’on place sur la gauche – Il représente en quelque sorte le produit minimum viable. Tracer une ligne et déplacer en dessous toutes les activités qui ne seront pas nécessairement faites.</i></p><p>Prétendons maintenant que la date de départ vient d’être devancée et proposons au groupe de partir ce soir. Spontanément, certaines activités devront passer sous la ligne étant donné le manque de temps pour les exécuter. Les grandes priorités deviennent alors très faciles à identifier.</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470c6c407a89d812ce9fa3_story_mapping_03.png" style="width: 100%; border-style:solid; border-width:1px;" alt="Cartographie des récits utilisateurs." title="Cartographie des récits utilisateurs."></p><p>Comme <a href="https://www.jpattonassociates.com/the-new-backlog/">le décrit</a> Jeff Patton, créateur de la méthode :</p><blockquote><p>« Nous passons beaucoup de temps à travailler avec nos clients. Nous travaillons dur pour comprendre leurs objectifs, leurs utilisateurs et les principales parties du système que nous pourrions leur bâtir. Ensuite, nous passons enfin aux détails – les éléments de fonctionnalités que nous aimerions construire. Dans ma tête, je vois un arbre où le tronc est fait des objectifs ou des avantages souhaités, ceux qui motivent le système ; les grandes branches sont des utilisateurs ; les rameaux sont les capacités dont ils ont besoin ; puis, les feuilles sont les récits des utilisateurs, assez petits pour se placer dans les itérations du développement.</p><p>« Après tout ce travail, après avoir établi cette compréhension commune, j’ai l’impression que nous arrachons toutes les feuilles de l’arbre et que nous les chargeons dans un sac de feuilles – puis, nous coupons l’arbre.</p><p>« C’est ce qu’est un backlog plat pour moi. Un sac de feuilles sans contexte. »</p></blockquote><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/6847080e513c65a40c3678aa_istock-908024826.jpg" style="width: 100%; border-style:solid; border-width:1px;" alt="Raking up user stories." title="Raking up user stories."></p><p>Ratissage automnal de récits utilisateurs. © iStock.</p><h2>Mettre l’accent sur le parcours.</h2><p>Une cartographie des récits permet de mettre en évidence visuellement le parcours d’un client avec le produit, y compris les activités et les tâches qu’il accomplit. Cette visualisation aidera l’équipe à se concentrer sur le développement, à contextualiser chaque élément et à offrir au client les résultats souhaités.</p><p>Il fournit un contexte à l’équipe en répondant aux questions suivantes :</p><ul> <li>Pourquoi construisons-nous cela ?</li> <li>Pour qui ?</li> <li>Quelle valeur ajoutée la solution apportera-t-elle au client et quand ?</li></ul><p>En résumé, la cartographie des récits utilisateurs est pertinente pour :</p><ul> <li>Identifier et implémenter les fonctionnalités basées sur les résultats espérés par le client.</li> <li>Faire vivre le parcours utilisateur en transformant le backlog en carte centrée sur le client.</li> <li>Mieux comprendre le parcours en fonction de ce qu’il veut et apprécie.</li> <li>Prioriser les actions en fonction de la valeur attendue.</li> <li>Obtenir de meilleurs résultats et réduire le gaspillage.</li></ul><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470811439a2a19ef28f315_flat-backlog-vs-story-map.webp" style="width: 100%; border-style:solid; border-width:1px;" alt="Flat backlog vs Story map." title="Flat backlog vs Story map."></p><p>Backlog plat vs cartographie des récits. © Nicholas Muldoon.</p><p>La cartographie des récits utilisateurs est-elle une méthode que vous utilisez ? Quel(s) outil(s) utilisez-vous ?</p>
<p>Il arrive qu’une entreprise ait identifié une problématique à résoudre sans avoir une idée précise de la solution à apporter. Il peut s’agir par exemple d’adapter l’entreprise à de nouvelles réalités de son marché, de gagner en vélocité, de moderniser des outils ou de trouver une réponse à un besoin de ses clients. Ça peut aussi être l’amélioration d’un produit existant ou la création d’un nouveau.</p><p>Inspiré du <i><a href="https://www.spiria.com/fr/blogue/design-uxui/innover-avec-le-design-sprint/">Design Sprint</a></i> de Google mais plus flexible dans sa formule et plus large dans son champ d’application, le processus Découverte a été développé par Spiria afin d’aider les entreprises à innover. Il consiste en une période de collaboration intense et interactive qui fait appel à différents outils suivant le type de problématique à résoudre.</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470541e2b570d7a63f66da_spiria-dev.webp" style="width: 100%; border-style:solid; border-width:1px;" alt="Spiria Montréal." title="Spiria Montréal."></p><p>Réunissant une équipe d’experts du numérique, les décisionnaires et diverses parties prenantes, le processus se déroule en 4 phases :</p><h2>1. Préparation</h2><p>Cette phase est consacrée à la compréhension du métier du client, de son écosystème et du défi à relever sous tous ses angles et perspectives. Nous parlons de développer une vision à 360°. Elle peut être accompagnée de divers travaux préparatoires comme la recherche de documentation, la réalisation d’un sondage auprès de futurs utilisateurs ou la réalisation d’une synthèse des chiffres clés du marché.</p><h2>2. Définition</h2><p>Après la phase préparatoire de compréhension, les participants s’attellent à circonscrire le problème central, à rassembler les attentes et à définir l’objectif central du processus. Ils établissent également les bonnes métriques du succès et recensent les éventuelles contraintes comme une architecture dans laquelle s’insérer.</p><h2>3. Idéation</h2><p>Le but de cette phase est de tracer les parcours utilisateurs et créer un story-board détaillé de la solution envisagée. Il inclut les caractéristiques et les fonctionnalités essentielles d’un produit minimum viable. Si nécessaire, on définira une maquette fonctionnelle (<i>wireframe</i>), on posera les bases d’une architecture de l’information et d’une approche méthodologique, on fera une revue technique afin de juger de la faisabilité.</p><h2>4. Création</h2><p>Le story-board est transformé en prototype par une équipe multidisciplinaire et on définit : la quantité de travail nécessaire, la pile technologique, la liste des fonctionnalités, le tout permettant d’estimer le coût de la solution numérique finale. Avec une feuille de route précise, il est alors possible de passer à la phase de production en ayant limité les impondérables et en assurant une productivité maximale.</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470544378cc0db1508eac5_healthpro.webp" style="width: 100%; border-style:solid; border-width:1px;" alt="HealthPRO website." title="HealthPRO website."></p><p>HealthPRO, un site corporatif conçu de A à Z dans des délais record grâce au processus Découverte. <a href="https://www.spiria.com/fr/realisations/healthpro/">En savoir plus</a>.</p><p>Suivant la problématique, différents documents peuvent être produits à la fin d’un processus Découverte : une feuille de route, des maquettes, un guide de style, un corpus rédactionnel (<i>copy deck</i>) structuré, des tests d’utilisabilité, etc.</p><p>Pour l’essentiel, qu’il s’agisse de répondre à un besoin de l’entreprise ou de concrétiser une idée aux contours plus ou moins flous, l’objectif du processus est de bâtir dans un délai minimum les solides fondations qui permettront de démarrer avec sérénité et efficacité une phase de développement. Un <a href="https://www.spiria.com/fr/services/strategie-de-croissance/processus-decouverte/">processus Découverte</a> ne laisse aucune zone d’ombre, produit une feuille de route détaillée et donne une vision précise du résultat final. Il diminue les risques inhérents à tout projet de développement logiciel, s’avérant ainsi un investissement immédiatement rentable.</p>
<p>Je ne travaille pas avec mes collègues.</p><p>Ce qui devrait être paradoxal, mais qui est en fait une réalité pour quiconque travaille dans une entreprise avec une grande variété de clients, comme une agence numérique ou une société de conseil. J’ai beaucoup de collègues, dont certains font partie de plus importantes équipes pour des clients plus importants, mais avec notre gamme de clients, il se trouve que mes coéquipiers directs ne sont pas à notre bureau de Gatineau. C’est un concept très nouveau pour moi.</p><p>J’ai travaillé pour des entreprises en démarrage, ce qui, à bien des égards, contraste fortement avec mon environnement actuel. Dans une jeune pousse, vous avez un groupe relativement restreint de personnes qui travaillent à la réalisation d’un objectif, d’un produit ou d’un seul projet. Jour après jour, la plupart d’entre nous se concentrent sur les mêmes tâches et sur la résolution des mêmes problèmes. L’effort commun nous unit.</p><p>Chez <a href="https://www.spiria.com/fr/">Spiria</a>, par contre, on pourrait supposer, comme je l’ai déjà fait, que ne pas travailler directement avec mes collègues m’éloignerait d’eux. Eh bien, je suis heureux de dire que c’est loin d’être le cas. Nous interagissons tous encore tous les jours, que ce soit lors de discussions techniques, de résolution collaborative de problèmes, de déjeuners d’équipe ou de parties de baby-foot à l’heure du dîner.</p><p>Un aspect intéressant de notre interaction, celui que j’aimerais souligner aujourd’hui, c’est qu’un grand nombre d’entre nous s’intéressent aux jeux de société. Mais contrairement aux jeux relativement ordinaires de notre enfance, comme <i>Monopoly</i> et <i>Clue</i>, nos jeux sont moins dépendants de la chance. Ils favorisent la stratégie, la tactique, la collaboration ou la compétition, et tirent profit de systèmes et de mécanismes complexes qui font marcher le jeu. C’est une activité qui fait travailler nos esprits, un peu comme notre emploi, mais dans un cadre amusant et social.</p><p>Nous avons maintenant au bureau un petit stock de jeux, apportés par ceux d’entre nous qui ont plus qu’un nombre raisonnable de jeux à la maison. Cela nous donne des activités impromptues à faire au déjeuner, après le travail, les fins de semaine, ou même lorsque les gens ont juste besoin de s’éloigner de leur moniteur et de s’engager dans quelque chose qui continue à faire travailler leur cerveau.</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/6847057d3af7acf9b68523e9_board-games.webp" style="width: 100%; border-style:solid; border-width:1px;" alt="Spirians playing Rising Sun." title="Spirians playing Rising Sun."></p><p>Des Spiriens jouent à <i>Rising Sun</i>.</p><p>Les jeux favorisent la pensée critique, une qualité dont nous avons besoin en tant que développeurs pour notre travail quotidien. Certains jeux nous demandent d’observer et de connaître les divers traits et personnalités des autres joueurs, nos collègues de travail. Cela nous aide à mieux les connaître et les comprendre, ce qui favorise la collaboration lorsque nous travaillons ensemble sur des projets.</p><p>Même si je suis nouveau ici, cette activité nous a déjà réunis à de nombreuses reprises en dehors du travail. Il a encouragé ceux d’entre nous qui sont plus introvertis à s’engager socialement avec leurs collègues de manière amusante et sans stress. À de nombreuses reprises, je suis descendu tard pour le déjeuner pour découvrir une partie déjà en cours, tandis que d’autres s’asseyaient autour, observant et discutant les différentes actions et stratégies en jeu.</p><p>Les mécanismes du jeu suscitent l’intérêt dans nos esprits et le lien créé par l’expérience commune nous rapproche.</p>
<p>Un plan de tests Agile est un document très important parce qu’il donne à votre équipe d’assurance qualité (AQ) la possibilité d’avoir en un seul endroit tous les scénarios de haut niveau, les exigences opérationnelles et les estimations. Votre analyste AQ ou votre testeur Agile doit remplir un plan de tests lors de chaque réunion de planification de sprint. Et comme le document est constamment mis à jour, il change et évolue en fonction des exigences du sprint et des échéanciers globaux.</p><p>Un plan de test Agile doit avoir une structure claire et appropriée, contenant les intrants métier et les tâches d’AQ.</p><p>Voyons comment ça marche.</p><h2>1. Introduction</h2><p>Les plans de tests commencent généralement par une introduction ; il s’agit d’une brève description du projet contenant des informations générales sur le processus de test pendant le sprint. Cette partie du document devrait comprendre deux sous-parties :</p><h3>1.1 Portée du document</h3><p>Le but de cette section est de préciser comment sera testée la livraison de la future application. Elle définit les éléments suivants :</p><ul> <li>Récits utilisateurs</li> <li>Environnement AQ</li> <li>Portée des tests</li> <li>Processus de test</li> <li>Risques et dépendances</li> <li>Estimations et critères de sortie</li></ul><h3>1.2. Description fonctionnelle</h3><p>Cette description clarifie les caractéristiques des fonctions nouvellement créées au sein de l’application et la manière dont elles peuvent être testées. Le fonctionnement est expliqué en termes généraux et non en détail. Par exemple : <i>« Une nouvelle fonction de géolocalisation est activée lorsque l’utilisateur se connecte à l’application web et est automatiquement désactivée après deux heures d’inactivité. Aussi, l’utilisateur peut désactiver manuellement la géolocalisation dans les paramètres du compte : Compte → Paramètres → Paramètres de géolocalisation → Localisation. »</i></p><h2>2. Récits utilisateurs</h2><p>Cette partie du plan de tests inclut toute nouvelle fonctionnalité accompagnée d’une explication ou d’un récit utilisateur (<i>User Story</i>). Les récits utilisateurs sont importants parce qu’ils montrent les besoins de l’entreprise. Si une nouvelle fonctionnalité vient du client sans être accompagnée d’un récit utilisateur, l’analyste qualité et le chef de projet doivent écrire ensemble les scénarios de haut niveau et créer ensuite une nouvelle tâche dédiée dans <i>Jira</i>.</p><h2>3. Environnement AQ</h2><p>Cette partie détaille habituellement tous les logiciels et outils destinés à être utilisés dans le processus de test lors du sprint, y compris les types de tests manuels et automatiques. Tout dépend des principales exigences du projet et des discussions pour éclaircissement avec le Product Owner ou avec le client.</p><ul> <li>Par exemple : une plate-forme logicielle, un système d’exploitation, un type d’appareil ;</li> <li>Quel outil d’automatisation : <i>Selenium WebDriver</i> ou <i>UFT</i> ;</li> <li><i>Appium Framework</i> ou <i>Express</i> pour l’automatisation sur mobile ;</li> <li><i>jMeter</i> ou <i>LoadRunner</i> pour les tests de performance.</li></ul><h2>4. Portée des tests</h2><p>La portée ou le périmètre des tests est une liste de tous les tickets et tâches d’assurance qualité, que le testeur consultera lors d’un sprint Agile. Le document contient tous les numéros des tickets <i>Jira</i>, des résumés des tickets, les durées estimées de travail d’AQ et les liens <i>Hiptest</i> (facultatif). Lors de la rédaction de la portée des tests, il est important de tout coordonner avec les développeurs, le chef d’équipe et le Product Owner.</p><p>Voyons un exemple pour un test :</p><blockquote><p>Référence du ticket : Jira 876.<br>Résumé : la géolocalisation doit être testée sur iPhone 7.<br>Build: app-staging-build-1.2.3.<br>OS : Android et iOS.<br>Temps estimé : 2,5 heures.<br>Lien Hiptest : https://app.hiptest.com/l/fo/765776.</p></blockquote><h2>5. Processus de test</h2><p>Un plan de tests doit indiquer quels types de tests seront utilisés lors du sprint Agile. Les processus manuels et automatisés permettent différents types de tests logiciels, tels que :</p><ul> <li><b>Tests fonctionnels</b> : seulement les tests positifs pour les principales fonctionnalités du logiciel ; pas de tests négatifs pendant le cycle de test.</li> <li><b>Tests de sécurité</b> : tests positifs et négatifs, ce qui signifie vérifier le fonctionnement de l’application pour les fonctionnalités « s’inscrire », « s’identifier » et « mot de passe oublié ».</li> <li><b>Test d’interfaces utilisateur</b> : tester la présence d’éléments particuliers de l’interface sur une page web ou une version mobile. Les tests d’interface vérifient généralement l’affichage, la taille et l’emplacement des éléments sur une page/un écran.</li> <li><b>Tests multinavigateurs</b> : tests sur les navigateurs les plus populaires (la liste dépend des exigences de l’entreprise cliente comme du pays d’utilisation).</li> <li><b>Tests de régression</b> : Il existe deux types de tests de régression : les tests de prérégression sur les versions candidates à la livraison et les tests de post-régression après le déploiement et les tests de fumée (<i>Smoke Tests</i>). Les tests de régression mobile impliquent la vérification d’une version précédente, puis l’installation d’une version actuelle et aussi le test de la version candidate.</li> <li><b><i>Smoke/Sanity Testing</i></b> : des tests simples et rapides des fonctions essentielles. Par exemple, l’application fonctionne-t-elle ou pas après la livraison ? Les tests de fumée se déroulent généralement après la livraison pour vérifier si le lancement est correct.</li></ul><h2>6. Risques et dépendances</h2><p>Avant de commencer un processus de tests Agile, l’analyste AQ doit décider s’il existe des bloquants ou de potentiels risques d’échec des tests. Si oui, s’agit-il de risques mineurs ou majeurs ? Par exemple, est-ce que les développeurs ont dû délaisser la programmation en raison d’un « gel du code » lors du précédent sprint ? La dernière version a-t-elle été publiée avec succès ? A-t-elle été approuvée par le client ? L’analyste AQ devrait discuter de tout cela avant que les développeurs ne commencent à coder.</p><h2>7. Estimations et critères de sortie</h2><p>Les estimations sont des prévisions générales pour la complétion des sprints et les livraisons. Combien d’heures l’AQ devrait-elle consacrer à différents types de tests ? Quand le feu vert sera-t-il donné pour le lancement d’une version web et/ou mobile ? Ces questions devraient aider à mettre l’accent sur les résultats essentiels.</p><p>Enfin, lorsque vous complétez toutes les parties du plan de tests, assurez-vous que tous les scénarios essentiels ont été créés dans <i>Jira</i> et Hiptest avec une description détaillée, incluant les critères d’entrée et de sortie, le nom du sprint, les estimations d’origine et un résumé approprié.</p><p>La création d’un plan de tests Agile détaillé et structuré aide à garantir un processus d’AQ complet, à être confiant dans son travail et à éviter d’importantes omissions. C’est une excellente habitude que de toujours se référer à ce document dans lequel tout est indiqué.</p>
<p>Autrement, c’est la capacité de chacun, quelle que soit sa condition, d’avoir accès à quelque chose. Regardons ce que les efforts d’accessibilité nous ont apporté au cours des dernières décennies, et leur utilité dans notre vie quotidienne. Et je ne parle pas seulement de gros boutons pour ouvrir automatiquement les portes dans de nombreux édifices ici au Canada, ceux que mon fils aime presser chaque fois qu’il en voit... ?</p><p>Il est évident que si vous voulez résoudre un problème, vous devez l’affronter. C’est pourquoi les personnes handicapées sont le moteur du développement de solutions qui font progresser la technologie. La carrière de <a href="https://fr.wikipedia.org/wiki/Vint_Cerf">Vint Cerf</a>, l’un des pères de l’Internet, illustre ce point. M. Cerf est malentendant et son handicap a eu un impact sur son travail de développement d’Internet. Dans les années 80, les sourds et les malentendants cherchaient une alternative à la communication par téléphone. M. Cerf a dirigé la création du premier service de courriel commercial (<a href="https://en.wikipedia.org/wiki/MCI_Mail">MCI Mail</a> en 1982), un outil destiné en premier lieu à lui permettre de communiquer plus facilement avec les membres de sa famille et ses collègues</p><p>Des designs ou des fonctionnalités accessibles permettent souvent d’améliorer l’expérience générale des utilisateurs et leur fidélité ; pour les personnes handicapées, ces améliorations sont essentielles à l’égalité d’accès. De plus en plus de solutions, conçues à l’origine pour les personnes handicapées, ont fini par être reprises, adoptées et aimées par les gens qu’ils soient handicapés ou non. À titre d’exemple : la synthèse vocale, la complétion automatique, les montres intelligentes, la commande vocale, le pilotage automatique, etc.</p><p>Un autre exemple est l’accessibilité du Web, vous ne remarquerez peut-être jamais que certains des sites Web que vous utilisez quotidiennement sont accessibles. Certaines recommandations en matière d’accessibilité dans la conception de sites Web, comme les styles, le contraste et d’autres caractéristiques, peuvent améliorer l’expérience générale et la satisfaction de tous les utilisateurs. Aussi, l’accessibilité du Web est en train de devenir une loi dans de nombreux pays.</p><p>Au moins 15 % de la population mondiale a un handicap reconnu et, dans des pays comme le Canada où l’espérance de vie dépasse 70 ans, les gens passent environ 12 % de leur vie à vivre avec un handicap.</p><p>Du point de vue commercial, les solutions d’accessibilité et les innovations permettent d’accroître la clientèle et d’élargir le marché. Mais au-delà des profits, les entreprises qui généralisent l’accessibilité sont plus susceptibles d’être innovatrices, ce qui stimule le développement, ce qui mène à des découvertes et des inventions. Et l’emploi des personnes handicapées est essentiel pour trouver les meilleures pratiques et solutions possibles en matière d’accessibilité dans différents environnements et domaines.</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/68470537a389942abe2a464b_accessibility-fail.webp" style="width: 56%; border-style:solid; border-width:1px;" alt="Problème d’accessibilité." title="Problème d’accessibilité."></p><p>Il est impossible de sous-estimer la contribution au développement de l’accessibilité par de grandes entreprises comme Google, Apple, Microsoft, etc.</p><blockquote><p>« L’accessibilité est une valeur fondamentale chez Apple et nous la considérons comme un droit humain fondamental. » – Sarah Herrlinger, directrice de la politique et des initiatives globales d’accessibilité, Apple.</p></blockquote><blockquote><p>« Les problèmes d’accessibilité d’aujourd’hui seront les grandes avancées de demain. » – Eve Andersson, directrice de l’ingénierie de l’accessibilité, Google.</p></blockquote><blockquote><p>« Concevoir des logiciels inclusifs permet d’améliorer l’utilisabilité et la satisfaction des clients. » – Guide du développeur d’applications de Microsoft.</p></blockquote><p>La plupart d’entre nous ont la chance de n’avoir jamais eu à considérer l’importance et la nécessité de l’accessibilité. De plus, je ne pense pas que beaucoup de gens aient eu à faire face à des désagréments en traitant avec des technologies et des fonctionnalités accessibles, d’ailleurs, nous aimons utiliser ces choses. Commençons donc à rendre les choses plus accessibles pour tout le monde, et qui sait, cela deviendra peut-être un jour une percée décisive, puis un courant dominant.</p>
<p>Certaines personnes se fâchent devant les mots <i>processus</i> ou <i>normes</i>, mais moi, et d’autres comme moi, nous avons tendance à apprécier une structure claire. Les processus sont partout autour de nous : à la maison, au travail et partout ailleurs. Même les enfants sont exposés aux processus et aux normes dès leur plus jeune âge. Que cela nous plaise ou non, nous suivons tous des processus dans notre vie quotidienne.</p><p>Je crois que les processus sont le ciment qui maintient tout ensemble, et que les normes sont ce qui nous aide tous à atteindre un objectif commun avec un haut niveau de qualité. L’expérience nous a montré que nous avons beaucoup plus de succès lorsque nous avons de formidables processus en place avec une pincée de normes. Voici quelques exemples que j’aimerais partager.</p><h3>Documenter les processus et les normes à la vue de tous</h3><p>Tout au long de ma carrière, j’ai vu des processus, des normes et des politiques documentés dans divers outils, et l’uniformité semble être la formule gagnante. Vous pouvez placer vos normes méticuleusement documentées sur Internet, les afficher au mur dans votre bureau, ou même <a href="https://developer.amazon.com/fr/blogs/alexa/post/2b4d2dc0-22d4-4e41-a51e-436adc687d7f/create-an-alexa-skill-for-your-organization-in-minutes-with-alexa-for-business-blueprints">créer des <i>skills</i> Alexa</a> pour votre organisation afin d’aider les employés à les trouver. Mais quoi que vous fassiez, assurez-vous simplement que les gens savent où les trouver et que cela demeure cohérent.</p><h3>Cohérence du projet</h3><p>Nous avons réalisé de nombreux projets au fil des ans, et bien que chaque projet soit différent, les processus et les normes ont toujours joué un rôle important dans le succès de chacun. Qu’il s’agisse du transfert en provenance des ventes, de la collaboration produit et production, du passage de la production à l’assurance de la qualité, un bon processus assure la cohérence de tous nos projets et aide tous les membres de l’équipe à savoir ce qui doit être fait et comment le faire.</p><h3>Réutilisabilité</h3><p>La réutilisation de code doit se faire avec discernement. La question que j’aime garder à l’esprit est la suivante : quelqu’un d’autre peut-il bénéficier de cette fonctionnalité, que ce soit dans mon entreprise ou dans le monde de l’open source ? Si la réponse est oui, vous devriez envisager de concevoir la fonction pour qu’elle soit réutilisable. La création de petits composants réutilisables, au code simple et partageable, vous permettra de :</p><ul> <li>fournir des estimations plus basses et plus précises pour les fonctionnalités communes ;</li> <li>réutiliser un code de qualité production qui a été rigoureusement testé ;</li> <li>consacrer vos efforts à une logique métier complexe qui ne peut pas être réutilisée.</li></ul><h3>Revues de code</h3><p>Les revues de code ont une valeur non négligeable, si vous les utilisez correctement. Chaque fonctionnalité que nous créons doit passer par le processus de révision du code par des pairs, ce qui nous aide à écrire un code plus propre et plus homogène, à réduire les bogues et à partager les connaissances entre tous les domaines du développement. Mon collègue, Claude Houle, a écrit un super article sur l’<a href="https://www.spiria.com/fr/blogue/methodes-et-bonnes-pratiques/la-revue-de-code-tout-simplement/">importance de la revue de code</a> qui vaut la peine d’être lu.</p><h3>Tests unitaires</h3><p>Les tests unitaires ne sont peut-être pas envisageables dans tous les projets, mais leur utilisation dans les bonnes circonstances a une valeur indéniable. Les tests unitaires peuvent aider à réduire le nombre de bogues pendant le développement, ce qui augmente efficacement votre capacité de production. L’ajout de tests unitaires pour une logique métier essentielle, pour des fonctionnalités complexes ou lorsqu’un problème de qualité est détecté devrait renforcer votre confiance à chaque déploiement. Si vous souhaitez en savoir un peu plus sur ces tests, n’hésitez pas à lire l’<a href="https://www.spiria.com/fr/blogue/applications-web/comprendre-la-difference-entre-un-test-unitaire-et-un-test-dintegration/">article de blogue</a> d’Anthony Giretti.</p><h3>Scalabilité</h3><p>La montée en charge est un aspect que vous ne devez pas ignorer si vous voulez que les utilisateurs aient la meilleure expérience possible avec votre site Web ou application mobile. Que vous attendiez 200 utilisateurs simultanés sur votre plate-forme ou 10 000 nouvelles inscriptions après un lancement marketing, essayez de vous poser les questions suivantes :</p><ul> <li>Cette fonctionnalité peut-elle se mettre à l’échelle avec de petits et grands ensembles de données ?</li> <li>Mes pages se chargeront-elles rapidement pour tous les utilisateurs (nouveaux et anciens) quelle que soit la quantité de données en jeu ?</li> <li>Est-ce que j’utilise des techniques comme la mise en cache, et est-ce que je me demande quand ces techniques pourraient compromettre la fonctionnalité ou les résultats escomptés ?</li></ul><h2>Parlez plus fort (lorsque tout le monde écoute)</h2><p>Je pourrais parler sans arrêt des différents normes et processus que nous utilisons quotidiennement chez Spiria, mais mon but était de partager quelques idées qui vous aideront à vous interroger et à voir comment vous pouvez faire une différence. Si vous avez l’impression que quelque chose est cassé, examinez vos processus et vos normes et tentez de faire une proposition d’amélioration.</p><p>Une chose que je garde toujours à l’esprit, c’est que nous ne pouvons pas faire porter l’échec sur un manque de processus. Nous devons plutôt travailler à la création, à la mise à jour et au partage des informations qui nous aident tous à progresser sur la voie du succès.</p><p>Je suis dans le camp du « verre est à moitié plein » et avec cela à l’esprit, tout le monde et chaque processus sont susceptibles de s’améliorer. Cela fait partie de la croissance, qu’elle soit personnelle, professionnelle ou celle de l’entreprise. Quand on arrête de pointer du doigt et qu’on commence à collaborer, tout le monde y gagne.</p>
<p>Souvent, l’être humain se contente de reproduire l’existant, ce qui est plus simple et limite les risques et efforts. Or, c’est lorsqu’il y a des contraintes fortes, qui nous sortent de notre zone de confort, que nous allons nous diriger vers des solutions originales et innovantes.</p><p>Mais comment trouver ces contraintes qui vont pousser à l’innovation, et comment être sûr que ce sont celles qui vont mener à une innovation génératrice d’une réelle valeur ? C’est une question que nous devons nous poser. Par exemple, nous avons vu beaucoup de fabricants de téléphones, dans leur course à l’innovation, ajouter des fonctionnalités qui étaient innovantes d’un point de vue technique, mais qui ne résolvaient pas de réels problèmes, ou offraient une solution inadéquate pour l’utilisateur. En d’autres mots, la réelle innovation se doit de résoudre un problème. Si l’on cherche à innover et ensuite à trouver le problème que cette innovation peut résoudre, l’innovation aura toutes les chances d’être inutile ou inadaptée.</p><p>Un exemple d’une telle fonctionnalité est le « 3D Touch » d’Apple. D’un point de vue technologique, c’était une innovation, mais du point de vue expérience utilisateur, cela ne résolvait pas de problème important et la solution proposée était inadaptée. Ce système permet de distinguer différents niveaux de pression sur la surface tactile de l’écran, mais cette fonction n’était pas essentielle et beaucoup d’utilisateurs ne savaient même pas qu’elle existait. Apple a fini par retirer cette fonctionnalité de ses <a href="https://www.theverge.com/circuitbreaker/2018/9/13/17854864/iphone%20-xs-max-3d-touch-waste-features-apple">modèles d’entrée de gamme</a> et devrait probablement la retirer de <a href="https://9to5mac.com/2019/07/09/digitimes-iphone-11-3d-touch/">tous les modèles</a> à sortir en 2019.</p><p>Le but de l’innovation est essentiellement de résoudre un problème. Le fait de vouloir le résoudre impose une contrainte, et cette contrainte génère de l’innovation. En d’autres termes : pour innover, identifiez en premier lieu le problème à résoudre. Ça peut être un problème majeur comme une petite chose agaçante du quotidien avec laquelle nous avons appris à vivre et que nous ne voyons plus.</p><p>L’innovation commencera lorsque nous mettrons des mots sur ce problème, le décrirons et le considérerons comme un bloquant pour lequel il faut trouver une solution. Ne plus pouvoir emprunter le chemin paraissant le plus simple, désormais bloqué par ce problème, impose une contrainte sur la solution à mettre en œuvre, et c’est cette contrainte qui va nous forcer à opter pour des cheminements que nous n’aurions pas envisagés en temps normal.</p><p>Cette partie d’identification et de verbalisation du problème, ainsi que la démarche pour trouver une solution sont les fondamentaux qui permettent l’innovation. Il est important qu’il y ait une compréhension de ce processus à tous les niveaux de responsabilité d’un projet afin de créer des conditions favorables à l’innovation. Il arrive parfois que la contrainte imposée à une équipe puisse paraître insurmontable, et il est important que les gestionnaires du projet soient prêts à gérer cette situation et à fournir les moyens, le support et les outils nécessaires à l’équipe pour avancer dans cette situation stressante, garder le moral et tendre vers l’excellence. Nous aborderons les différentes manières d’aider une équipe dans de telles conditions dans un futur article.</p><p>Un exemple d’innovation révolutionnaire, qui apparaît comme évidente aujourd’hui, mais qui ne l’était pas du tout à l’époque et qui a demandé un important travail, est l’interface utilisateur de l’iPhone. Lors de la création de l’iPhone, à l’époque des Pocket PC et autres téléphones pseudo intelligents, Steve Jobs ne voulait pas d’un stylet, car cela créait une mauvaise expérience utilisateur (et aussi parce qu’une personne de Microsoft qu’il détestait était en train de <a href="https://www.zdnet.com/article/steve-jobs-was-driven-to-create-iphone-by-obnoxious-microsoft-guy-with-stylus/">créer une tablette</a> avec un stylet). Dans un monde où tous les systèmes portables utilisaient des stylets pour pouvoir interagir sur un petit écran avec le plus d’informations possible, le fait de verbaliser le problème et de considérer qu’il fallait pouvoir utiliser uniquement ses doigts n’était pas du tout évident et posait une contrainte très forte sur les ingénieurs qui devaient trouver une solution efficace à ce problème.</p><p>La difficulté majeure ici était qu’il n’existait pas de solution connue afin de substituer, tout en offrant une meilleure expérience utilisateur, un système utilisant des doigts très imprécis à celui qui a recours à un stylet précis pour interagir avec de nombreuses données sur un petit écran. Les ingénieurs d’Apple ont dû imaginer un nouveau mode d’interaction homme-machine complet et créer un nouveau système d’exploitation autour de ce nouveau paradigme. Il fallait trouver comment faire défiler des données, comment se rendre compte qu’on arrive à la fin d’un défilement, comment présenter les données de façon efficace et facilement accessible tout en en affichant moins dans l’écran, comment les applications devraient se comporter, etc. Aujourd’hui, cela semble évident, mais à l’époque, quand le problème a été énoncé et la contrainte exposée, cela devait paraître irréalisable.</p><p>Cela nous montre que l’innovation, c’est aussi du courage, de la persévérance, beaucoup de travail et l’intuition qui nous dit qu’il existe une solution efficace et qu’on va la trouver.</p><p>Cependant, parfois, la contrainte qui résulte de la verbalisation d’un problème est relativement faible : une fois le problème verbalisé et la contrainte exposée clairement, la solution apparaît presque évidente. Combien de fois avez-vous découvert un petit logiciel qui résout un problème avec lequel vous vivez depuis des années sans réellement vous en rendre compte ou sans faire l’effort de le résoudre, et vous vous dites : « Mais bien sûr ! Comment n’y ai-je pas pensé avant, c’était pourtant si simple et évident ». Cela n’en reste pas moins une innovation.</p><p>Il ne faut pas cependant se laisser abuser par l’apparente simplicité d’une innovation, car comme nous l’avons vu avec l’interface utilisateur de l’iPhone, très souvent les meilleures innovations qui ont demandé beaucoup de travail apparaissent simples ou évidentes parce que la solution est brillante et efficace ; pourtant, la solution finale a demandé beaucoup d’efforts, d’essais et d’erreurs.</p><p>L’innovation est un sujet sans fin. Dans de prochains articles, nous aborderons certains sujets plus en profondeur, tel que :</p><ul> <li>Les moyens de générer des contraintes propices à l’innovation dans divers secteurs d’activité,</li> <li>La gestion du changement, des contraintes fortes dans une équipe,</li> <li>Comment détecter l’innovation qui apporte une vraie valeur à un produit,</li> <li>Etc.</li></ul>
<p>Le « console logging », c’est le pire. Certains peuvent contester mon opinion sur cet outil pratique, mais je pense que c’est une béquille qui est utilisée par beaucoup d’équipes malgré l’existence de meilleurs outils et méthodes de débogage.</p><p>Pour vous faire mieux comprendre ma pensée, je vais parler un peu de mon histoire. Mon premier langage de programmation professionnel a été Python. J’ai passé cinq ans et demi de ma carrière à développer des applications Python/Django, et l’une des choses que je préférais dans cet environnement était un outil appelé <a href="https://docs.python.org/3/library/pdb.html">PDB</a>, le Python Debugger.</p><p>Cet outil est à mon avis un rêve de développeur junior qui devient réalité. À tout moment, je pouvais stopper mon programme et inspecter son état du moment. Je pouvais observer le cycle de vie des variables. Je pouvais voir et suivre la pile des fonctions et des méthodes. En utilisant l’outil, non seulement j’ai pu résoudre les bogues et les problèmes plus rapidement, mais j’ai pu apprendre beaucoup de choses sur ce processus. J’avais l’impression d’avoir une vision à rayons X. Je me sentais comme un superhéros.</p><p>Avance rapide d’un certain nombre d’années, et j’ai commencé à travailler plus avec JavaScript. Mon bien-aimé PDB n’était plus là, mais j’ai rapidement appris à utiliser le débogueur et la console <a href="https://developers.google.com/web/tools/chrome-devtools/">DevTools</a> de Chrome. Ces outils ont répondu à tous mes besoins de débogage, proposant aussi un moyen facile et visuel d’ajouter des points d’arrêt à mon code. Je me suis une fois de plus senti comme un superhéros.</p><p>Dans ma fonction actuelle chez <a href="https://www.spiria.com/fr/">Spiria</a>, les applications sur lesquelles je travaille sont toutes en TypeScript. Nous utilisons Node et Express en back-end, avec une application React côté client. Du côté client, les choses vont toujours bien. Nous utilisons <a href="https://webpack.js.org">WebPack</a> pour transpiler le code TypeScript et générer les source maps, et nous sommes capables de déboguer dans Chrome comme nous l’avons toujours fait. En ce qui concerne le back-end, cependant, l’équipe dépendait exclusivement pour le débogage de l’enregistrement de la console. Notre processus de développement et de débogage consistait à faire des changements, à ajouter un tas de journaux de débogage, à exécuter le code, puis à analyser le journal de sortie pour essayer d’avoir une idée de ce qui se passait. C’était un processus lourd qui, à mon avis, produisait plus de bruit qu’il ne donnait des idées. Ma vision à rayons X avait disparu, et je ne me sentais plus du tout comme un superhéros.</p><p>De plus, contrairement à notre code front-end, le processus de compilation pour transpiler le code de back-end reposait sur une commande à lancer de façon manuelle. Le process de serveur ne surveillait pas non plus les changements et devait être redémarré manuellement si nous voulions que le dernier code transpilé soit reconnu. Après avoir passé quelques mois avec cet état de fait, je me sentais de plus en plus embourbé dans le processus, et j’aspirais à retrouver mes super-pouvoirs. Heureusement, je n’étais pas seul à me sentir ainsi, et notre équipe a été privilègiée de pouvoir prendre le temps d’améliorer ces processus.</p><p>Dans le cadre d’un projet qui impliquait un plus grand volume de travail en back-end, j’ai cherché à améliorer notre situation de débogage du mieux que j’ai pu. La première étape a été de récupérer des pouvoirs de débogage corrects. Heureusement, Node est livré avec un drapeau <code>--inspect</code>, qui ouvre un WebSocket sur un port particulier, exposant le processus Node pour le débogage. Chrome peut s’y connecter et ouvrir une instance de ses DevTools qui fonctionnent avec Node. Il y a même des extensions bien pratiques ; j’en utilise une appelée <a href="https://chrome.google.com/webstore/detail/nodejs-inspector-manager/bnmjajghllhhhgiaeipaibfmnjnponhd?hl=en">Node Inspect Manager</a> (NiM), pour ouvrir automatiquement DevTools quand un débogueur est exposé à un port prédéfini. Pouvoirs des rayons X revenus !</p><p>Cependant, j’étais toujours insatisfait du processus dans son ensemble. Chaque fois que j’apportais des modifications au code, je devais tuer mon process serveur, reconstruire le code du serveur et démarrer le process serveur. Il y avait là aussi une solution facile. Le transpileur TypeScript est livré avec un drapeau <code>--watch,</code> qui lui permet de retranspiler chaque fois qu’il détecte des changements de code. Pouvoirs métamorphes, ok !</p><p>Enfin, je voulais que mon process serveur redémarre chaque fois qu’il détectait des changements dans le code transpilé. Ce fut relativement facile aussi, avec un outil appelé <a href="https://nodemon.io">Nodemon</a>. C’est un wrapper léger autour de Node, qui redémarre le process lorsque des changements de code sont détectés. Il supporte les mêmes drapeaux que la commande Node ; notre processus de débogage était donc constamment actif. Vitesse de l’éclair, ok aussi !</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/684705c4513c65a40c3560a2_wow.png" style="width: 60%; border: none; " alt="Wow." title="Wow."></p><p>Je me sentais à nouveau comme un superhéros. J’ai été capable d’écrire efficacement du code et de le déboguer à la volée. Nous n’avions plus à faire le travail de rebuild du code et de redémarrage manuel des process. Il y avait cependant un dernier élément qui m’embêtait encore, je devais lancer toutes ces commandes séparées pour voir les changements de code, et démarrer séparément Nodemon. Je me suis souvenu d’un outil que j’avais utilisé dans un projet précédent appelé <a href="https://www.npmjs.com/package/npm-run-all">npm-run-all</a>, qui est un excellent petit outil qui peut être utilisé pour exécuter un certain nombre de scripts distincts, en série ou en parallèle. Maintenant, nous entrons une commande, et npm lance <code>watch:server</code> ; le reste se fait comme par magie.</p><p>Des processus convenables pour le débogage sont cruciaux pour toute équipe. Tous les développeurs peuvent apprendre beaucoup en inspectant correctement leur code et leurs workflows, quel que soit leur niveau d’expérience. Il en résulte des applications plus performantes et sans bogues, pour satisfaire à la fois les développeurs, les différents intervenants et les clients.</p><p><img src="https://cdn.prod.website-files.com/67c06f07cfba9b0adb43e16c/684705c7e2b570d7a63fce6f_yeah.webp" style="width: 60%; border: none; " alt="Wow." title="Wow."></p>