đŸ‡«đŸ‡· Construire Cardano : fusion des mĂ©thodes formelles et du dĂ©veloppement agile

Auteur : Philipp Kant, directeur des méthodes formelles chez I.O.H.K., présente notre méthodologie pour construire des logiciels avec souplesse et précision

Traduction : The Stakhanovite Stake Pool - STKH

Forme et fonction

I.O.H.K. est en train de faire de Cardano un systĂšme d’exploitation pour le monde financier et social Ă  l’échelle globale. Cette tĂąche Ă©norme exige Ă  la fois une itĂ©ration rapide et une prĂ©cision absolue. C’est pourquoi I.O.H.K. a choisi de combiner la rapiditĂ© du dĂ©veloppement agile du code avec des mĂ©thodes formelles de haute assurance. Cette fusion a conduit nos ingĂ©nieurs Ă  ĂȘtre les pionniers de cette philosophie de dĂ©veloppement moderne.

I.O.H.K. croit fermement Ă  la recherche, aux mĂ©thodes formelles, Ă  la programmation fonctionnelle et Ă  la construction rigoureuse. En tant que concurrent dans l’industrie du dĂ©veloppement de la blockchain, nous devons Ă©galement faire preuve de progrĂšs constants et crĂ©er de la valeur pour notre communautĂ© mondiale. Cela signifie que nous ne pouvons pas faire de compromis sur la robustesse ou sur la vitesse et la flexibilitĂ© du dĂ©veloppement. Dans un marchĂ© en constante Ă©volution, c’est un dĂ©fi, et nos dĂ©veloppeurs doivent donc trouver le bon Ă©quilibre.

Méthode agile contre méthode formelle

Jusque lĂ , la norme pour dĂ©velopper une technologie a Ă©tĂ© de construire rapidement un produit minimal et viable, puis d’itĂ©rer continuellement jusqu’à ce qu’il soit prĂȘt pour le marchĂ© de masse. C’est ce qu’on appelle un processus agile. C’est un excellent moyen de montrer qu’un projet progresse tout en construisant au final un produit pleinement fonctionnel. Cependant, une mĂ©thodologie agile suppose qu’il y aura des ‘bugs’ et des faiblesses Ă  chaque Ă©tape du dĂ©veloppement qui pourront ĂȘtre Ă©liminĂ©s plus tard. C’est trĂšs bien si personne ne risque rien - mais, avec les monnaies virtuelles, il y a une Ă©norme somme d’argent et la confiance des parties prenantes en jeu.

La construction d’un actif numĂ©rique sur une blockchain prĂ©sente plusieurs dĂ©fis Ă  surmonter pour ce qui est de l’organisation du processus de dĂ©veloppement. En tant que cryptomonnaie basĂ©e sur la preuve d’enjeu, Cardano est un systĂšme distribuĂ© qui Ă©volue dans un environnement rempli d’adversaires et oĂč les performances sont essentielle. Le protocole doit maintenir la sĂ©curitĂ© face Ă  des acteurs malveillants qui tentent de saboter le systĂšme. Cela signifie que personne ne peut se permettre de construire rapidement et de traiter les problĂšmes plus tard.

La confiance est essentielle pour qu’une monnaie soit acceptĂ©e et les preuves d’exactitude sont un bon moyen d’augmenter la vĂ©racitĂ© d’un systĂšme. C’est pourquoi le code ne doit pas seulement ĂȘtre correct, mais il doit y avoir des preuves de son exactitude, comme des tests et des preuves mathĂ©matiques. Dans une industrie jeune comme celle des cryptomonnaies, les ingĂ©nieurs de I.O.H.K. doivent anticiper l’ajout de nouvelles fonctionnalitĂ©s tout en maintenant les garanties d’exactitude Ă©tablies dans les versions initiales. La plateforme ne peut s’étendre Ă  l’échelle mondiale que si elle est capable de se dĂ©velopper tout en maintenant la sĂ©curitĂ© et l’utilitĂ© pour tous. C’est pourquoi les dĂ©veloppeurs de Cardano ont rationalisĂ© leur mĂ©thodologie, en combinant une variĂ©tĂ© d’outils allant des tests basĂ©s sur les propriĂ©tĂ©s jusqu’aux preuves vĂ©rifiables par la machine, afin de crĂ©er des logiciels de haute assurance mĂȘme en prĂ©sence d’exigences changeantes.

La recherche pour coder

La mĂ©thodologie commence par la recherche scientifique. À ce jour, l.O.H.K. a publiĂ© plus de 60 documents de recherche qui ont contribuĂ© Ă  la crĂ©ation de la plate-forme. Chaque document examine un aspect critique de la technologie des blockchain Ă  partir de principes de base. Comment parvenir Ă  un consensus de maniĂšre dĂ©centralisĂ©e ? Comment concevoir un contrat intelligent ? Quelle est la bonne structure de rĂ©compense pour encourager un bon comportement ? Les chercheurs d’ l.O.H.K. examinent ces questions et soumettent leurs rĂ©ponses Ă  des revues scientifiques et Ă  des confĂ©rences. Ces articles contiennent des preuves qui doivent ĂȘtre soumises Ă  un examen rigoureux par les pairs. Ensuite, pour s’assurer que la qualitĂ© de nos logiciels rend justice Ă  la science, ces derniers sont dĂ©veloppĂ©s selon des mĂ©thodes formelles.

Cela signifie essentiellement que les ingĂ©nieurs d’ l.O.H.K. spĂ©cifient ce que le code doit faire mathĂ©matiquement. De cette façon, ils peuvent s’assurer que lorsque le code est exĂ©cutĂ©, il contient les propriĂ©tĂ©s souhaitĂ©es. Le code est Ă©crit en Haskell, un langage de programmation fonctionnel trĂšs sĂ»r, avec un systĂšme de ‘types’ fort. Bien que Haskell soit un excellent outil pour mettre en Ɠuvre des logiciels fiables, il n’est pas infaillible, de sorte que le code doit encore ĂȘtre testĂ©. Une excellente façon d’écrire des tests est d’utiliser QuickCheck. Cela permet aux dĂ©veloppeurs d’indiquer les propriĂ©tĂ©s qui devraient toujours ĂȘtre prĂ©sentes dans un programme. QuickCheck gĂ©nĂšre ensuite des scĂ©narios de test et recherche les contre-exemples minimaux qui violent ces propriĂ©tĂ©s.

Dans le code qui interagit avec le monde extĂ©rieur, en particulier les applications rĂ©seau, il peut ĂȘtre difficile de trouver des contre-exemples minimaux. En effet, l’ordre d’exĂ©cution n’est pas dĂ©terministe : il peut changer Ă  chaque fois que le logiciel est exĂ©cutĂ©. Le mĂȘme code peut ĂȘtre exĂ©cutĂ© des centaines de fois, et ne peut Ă©chouer qu’une seule fois. Nous pouvons contourner ce problĂšme en utilisant des simulations avec un ordre d’exĂ©cution dĂ©terministe. L’exĂ©cution de tests en simulation nous permet de trouver et de corriger de maniĂšre fiable une classe de bugs dans les tests, qui autrement ne se produiraient qu’au hasard en production.

Construire un pont

Pour avoir une idĂ©e de la mĂ©thodologie de dĂ©veloppement employĂ©e pour Cardano, considĂ©rons la mĂ©taphore de la construction de ponts. Lorsqu’un ingĂ©nieur civil construit un pont, il passe une grande partie de son temps derriĂšre un bureau. Il planifie une conception, fait ses calculs et commande des relevĂ©s gĂ©ographiques et gĂ©ologiques. Pendant ce temps, il ne se passe rien sur le chantier. Un observateur ne pourrait pas voir les progrĂšs rĂ©alisĂ©s. Pour la construction de ponts, c’est la bonne approche. La planification n’est pas prĂ©cise et il est difficile et coĂ»teux de corriger les problĂšmes Ă  un stade ultĂ©rieur. En fin de compte, le choix se rĂ©sume en un pont retardĂ© Ă  un coĂ»t plus Ă©levĂ© ou alors un pont qui s’effondrerait. L’absence de progrĂšs visibles est un prix raisonnable Ă  payer pour un pont fonctionnel et sĂ»r.

Lors de la fabrication d’un logiciel, il est beaucoup plus facile d’apporter des modifications Ă  un stade ultĂ©rieur que lors de la construction d’un pont. C’est ce qui rend l’approche de dĂ©veloppement agile commune. Si un dĂ©veloppeur agile construisait un pont, il construirait un pilier dans un sprint rapide, puis le suivant dans un second sprint. L’écart entre les piliers serait comblĂ© lors d’un sprint final et, si les choses ne tenaient pas, les dĂ©veloppeurs ajouteraient un sprint supplĂ©mentaire pour rĂ©soudre les problĂšmes. Si les progrĂšs sont visibles sur le chantier, le produit final risque de prĂ©senter de nombreux problĂšmes. Cela crĂ©e un travail de nettoyage Ă  la fin du projet qui aurait pu ĂȘtre Ă©vitĂ© par une meilleure planification Ă  un stade plus prĂ©coce. En outre, le produit viable minimum serait probablement donnĂ© Ă  un petit groupe de personnes pour un essai en conditions rĂ©elles, en espĂ©rant qu’il Ă©choue, afin d’alerter les dĂ©veloppeurs sur d’éventuels bugs. Il va sans dire qu’il est prĂ©fĂ©rable que les ponts autoroutiers ne soient pas conçus de cette maniĂšre.

En entendant les mots “mĂ©thodes formelles”, beaucoup de personnes travaillant dans le dĂ©veloppement de logiciels pensent Ă  l’approche du gĂ©nie civil, qui est surnommĂ©e “cascade” et cette dernĂšre est gĂ©nĂ©ralement rejetĂ©e. Il s’agit d’un malentendu courant mais regrettable. En effet, l’utilisation de techniques formelles appropriĂ©es nous permet d’avoir le beurre et l’argent du beurre : avoir une conception globale (une conception dĂ©libĂ©rĂ©e, et non accidentelle par l’assemblage de piĂšces dĂ©veloppĂ©es au cours de sprints), montrer des progrĂšs en permanence, et conserver la capacitĂ© de rĂ©agir Ă  des exigences changeantes.

Une technique clĂ© utilisĂ©e par les dĂ©veloppeurs d’I.O.H.K. est celle des spĂ©cifications exĂ©cutables. Ce sont des conceptions de haut niveau, qui font abstraction de dĂ©tails de bas niveau, Ă©crites dans un langage que l’ordinateur peut comprendre et exĂ©cuter. Les spĂ©cifications exĂ©cutables peuvent ĂȘtre utilisĂ©es comme des prototypes pour montrer les progrĂšs rĂ©alisĂ©s, obtenir les rĂ©actions des utilisateurs et tester des hypothĂšses. De plus, des dĂ©tails de plus bas niveau peuvent ĂȘtre ajoutĂ©s par des raffinements successifs. Nos dĂ©veloppeurs construisent d’bord le pont pour rĂ©soudre les plus gros problĂšmes en premier lieu, puis ajoutent des piliers pour le renforcer ultĂ©rieurement. Dans un systĂšme logiciel, les piliers seraient des fonctionnalitĂ©s comme la sauvegarde de donnĂ©es sur disque ou l’utilisation d’algorithmes performants, qui sont nĂ©cessaires pour un produit final, mais qui ne sont pas essentiels pour dĂ©montrer la fonctionnalitĂ© globale.

En utilisant des spĂ©cifications exĂ©cutables, on obtient les avantages d’une planification adĂ©quate sans sacrifier la flexibilitĂ©. Les dĂ©veloppeurs d’I.O.H.K. peuvent fixer ce Ă  quoi le systĂšme devrait ressembler Ă  grande Ă©chelle, puis mettre en Ɠuvre les composants appropriĂ©s selon les besoins. Des tests continus garantissent que chaque composant s’adapte Ă  la conception globale. Cela permet d’éviter des problĂšmes qui sont courants dans une approche d’intĂ©gration tardive. Avec cette mĂ©thodologie, nous obtenons le meilleur des deux mondes : nous pouvons utiliser une conception de haut niveau (en Ă©vitant les problĂšmes d’intĂ©gration tardive, en ayant une bonne maĂźtrise de la conception globale Ă  tout moment), et disposer d’un code qui fonctionne relativement tĂŽt (en dĂ©montrant les progrĂšs, et en permettant des tests et des retours d’information tout au long du processus).

À l’épreuve du temps

En fin de compte, la mĂ©thode de construction doit ĂȘtre dĂ©terminĂ©e par ce qui est construit. I.O.H.K. construit un systĂšme de fonctionnement social et financier mondial qui exige rigueur et rapiditĂ©. Opposer mĂ©thodes formelles contre dĂ©veloppement agile est une fausse dichotomie. Au lieu de cela, nous continuons Ă  dĂ©velopper notre mĂ©thodologie qui fusionne le meilleur des deux approches : des techniques formelles dans un cadre de livraison rapide, avec un code d’assurance solide et plus Ă©levĂ© sur lequel nous pouvons construire pour tous les futurs possibles.