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.