# Revue de conception technique et revue de code
Le logiciel Mojaloop est conçu pour constituer lâĂ©pine dorsale de schĂ©mas de paiements instantanĂ©s inclusifs Ă lâĂ©chelle nationale. Ces schĂ©mas sont des Ă©lĂ©ments majeurs dâinfrastructure financiĂšre nationale rĂ©glementĂ©e qui soutiennent des activitĂ©s quotidiennes vitales pour de nombreuses personnes, comme lâachat de nourriture ou dâeau potable. Les adoptants et utilisateurs du logiciel Mojaloop exigent et mĂ©ritent un niveau trĂšs Ă©levĂ© de qualitĂ©, sĂ©curitĂ©, fiabilitĂ© et rĂ©silience.
Pour prĂ©server ces qualitĂ©s et attĂ©nuer les risques, la Fondation Mojaloop applique un processus dâingĂ©nierie produit structurĂ©, fondĂ© sur les meilleures pratiques Ă©prouvĂ©es du secteur pour les logiciels financiers rĂ©glementĂ©s, incluant : contrĂŽle des changements et traçabilitĂ©, revues de conception et de code, seuils de tests Ă©levĂ©s et plusieurs niveaux dâassurance qualitĂ©.
Ces processus aident les contributeurs à identifier et réduire les risques tout en améliorant les produits.
Veuillez lire attentivement les informations suivantes pour vous assurer de bien comprendre nos dĂ©finitions et la façon dont ces processus sâappliquent au travail que vous souhaitez rĂ©aliser, avant de commencer.
Si vous ne suivez pas ces processus, il pourra vous ĂȘtre demandĂ© de refaire le travail, ou la contribution pourra ĂȘtre purement et simplement rejetĂ©e si elle ne respecte pas nos normes, avec des retards importants pour une release officielle Mojaloop. Veuillez consulter nos explications sur le processus de don externe.
# Quâest-ce que la revue de conception technique ?
La « revue de conception technique » est un processus par lequel un ou plusieurs ingĂ©nieurs seniors experts du domaine, membres de la Design Authority Mojaloop, familiers des zones du systĂšme concernĂ©es, discutent des changements proposĂ©s avec les contributeurs et les reprĂ©sentants produit avant le dĂ©but de lâimplĂ©mentation, pour :
- Gestion des risques
- Identifier et atténuer les risques techniques et/ou métier pour les parties prenantes, utilisateurs ou autres contributeurs.
- Ăvaluation dâimpact
- RepĂ©rer dâautres zones du systĂšme, Ă©quipes et parties prenantes impactĂ©es et faciliter la communication.
- Normes et cohérence
- Orienter vers les normes Mojaloop (outils, composants tiers, motifs de conception) pour préserver la cohérence de la base de code.
Pour les changements non triviaux, le processus consiste Ă collaborer avec la Design Authority pour produire un document de conception dĂ©taillant le changement. AprĂšs implĂ©mentation, ce document vient enrichir la documentation communautaire et aide Ă comprendre le raisonnement derriĂšre les dĂ©cisions de conception prises au fil de lâĂ©volution du logiciel.
# Quâest-ce que la revue de code ?
La « revue de code » est un processus par lequel un ou plusieurs ingénieurs examinent des changements de code proposés avant fusion dans la branche principale, pour :
- Assurance qualité
- Les revues de code contribuent Ă garantir la qualitĂ© de la base de code en permettant aux autres membres de lâĂ©quipe dâidentifier les problĂšmes potentiels, bugs ou pistes dâamĂ©lioration avant la fusion. Cela peut conduire Ă un logiciel de meilleure qualitĂ©, avec moins de dĂ©fauts.
- Partage des connaissances
- Apprendre des approches des pairs, bonnes pratiques et motifs ; diffusion de lâexpertise.
- Cohérence
- Maintenir style, normes et conventions ; base de code homogĂšne.
- Réduction des risques
- Plusieurs regards pour risques, sécurité et performances avant la production.
- Retours et amélioration
- Feedback constructif, alternatives, discussion des choix de conception ; amélioration continue.
- Propriété collective du code
- ResponsabilitĂ© partagĂ©e plutĂŽt quâindividuelle.
# Types de changement
Le processus dépend de la nature du changement et de son impact sur les utilisateurs et le systÚme.
Identifiez la catĂ©gorie ci-dessous et suivez le processus correspondant. En tant que contributeur, il est de votre responsabilitĂ© dâappliquer le processus appropriĂ© ; vous devrez signer un accord de contributeur attestant de votre engagement Ă respecter ces exigences.
En cas de doute, consultez la Design Authority sur Slack : #design-authority (opens new window). Veuillez noter quâil est important dâengager tout processus de revue de conception requis avant de procĂ©der Ă des modifications de code, afin dâĂ©viter de gaspiller vos propres efforts si la Design Authority venait Ă demander un travail Ă refaire.
# Changements non conséquentiels
# Définition et caractéristiques
Un changement de code non consĂ©quentiel est une modification petite et trĂšs isolĂ©e sur du code existant. Il nâaffecte pas la structure interne ou externe ni la fonctionnalitĂ© au niveau local (entrĂ©es/sorties) ; il vise souvent la lisibilitĂ©, le style ou de petites optimisations. Les changements non consĂ©quentiels sont simples Ă traiter et prĂ©sentent un faible risque.
Il ne modifie pas les interfaces externes, la fonctionnalitĂ© ou le comportement observable externe dâun ou plusieurs composants.
Il ne modifie pas la structure interne des composants.
Note importante : si votre changement est une optimisation qui modifie lâimplĂ©mentation dâun algorithme, Ă©valuez si une revue de conception ou une revue de code renforcĂ©e est nĂ©cessaire. Mieux vaut solliciter plus de regards quâintroduire une rĂ©gression.
# Exemples
- Renommer des variables
- Ajuster lâindentation
- Ajouter des commentaires
- Supprimer des imports inutilisés
- Optimiser de petits algorithmes
# Processus de revue de conception et de code requis
- Aucune revue de conception nâest obligatoire, mais elle peut ĂȘtre entreprise si vous avez le moindre doute quant aux consĂ©quences de vos changements.
- Au moins une approbation dâun « code owner » sur tous les fichiers modifiĂ©s.
- Sâil nây a pas de code owners pour certains fichiers, ouvrez un ticket auprĂšs de {coordonnĂ©es} pour en dĂ©finir. Tous les fichiers de lâorganisation GitHub Mojaloop devraient avoir des code owners.
- Revues par les pairs supplĂ©mentaires souhaitĂ©es ; plus il y a de regards, mieux câest.
# Changements conséquents
# Définition et caractéristiques
Les changements consĂ©quents modifient le comportement, la fonctionnalitĂ©, les caractĂ©ristiques opĂ©rationnelles ou les performances dâun sous-systĂšme ou du systĂšme dans son ensemble : logique mĂ©tier, nouvelles fonctionnalitĂ©s, correctifs, dĂ©pendances, refactorings importants. Ils exigent rĂ©flexion et coordination en amont en raison de lâimpact potentiel sur la stabilitĂ© et les fonctionnalitĂ©s. Risque plus Ă©levĂ©.
Note importante : si vous pensez ĂȘtre dans les changements consĂ©quents, vĂ©rifiez aussi la catĂ©gorie « Changements critiques ».
# Exemples
- Modifier lâimplĂ©mentation dâune mĂ©thode dâAPI interne existante
- Ajouter une nouvelle mĂ©thode dâAPI interne
- Modifier la dĂ©finition ou le comportement dâune interface interne
- Changer une dépendance de service de fond (ex. type de SGBDR)
- Changer une dépendance de code (ex. remplacer un parseur YAML)
- Refactorings sur plusieurs fichiers
- Changements de configuration de déploiement (ex. Infrastructure as Code)
# Processus de revue de conception et de code requis
Les changements conséquents doivent suivre le processus des changements conséquents.
# Changements critiques
# Définition et caractéristiques
Dans Mojaloop, les « changements critiques » recouvrent en grande partie la mĂȘme dĂ©finition que les changements consĂ©quents, mais sâappliquent aux zones considĂ©rĂ©es comme critiques pour les fonctionnalitĂ©s cĆur et les cas dâusage principaux.
Ils impactent le comportement, la fonctionnalitĂ©, les caractĂ©ristiques opĂ©rationnelles ou les performances dâun sous-systĂšme critique, du systĂšme ou dâautres artefacts. Ils impliquent souvent la logique dâun composant ou service critique (nouvelles fonctionnalitĂ©s, bugs, dĂ©pendances, refactoring). Coordination importante en amont ; risque trĂšs Ă©levĂ©.
Un changement est critique sâil touche notamment :
- APIs externes :
- Toute modification de spĂ©cification dâAPI externe, chemins nominaux ou dâerreur, y compris validation et correctifs.
- Toute modification de lâimplĂ©mentation de gestion des requĂȘtes dâAPI externe, chemins nominaux ou dâerreur, y compris validation et correctifs.
- « API externe » : toute API exposée hors du périmÚtre du switch (ex. FSPIOP API, etc.).
- APIs dâadministration :
- Tout changement de spĂ©cification dâAPI dâadministration.
- Tout changement dâimplĂ©mentation des requĂȘtes dâAPI dâadministration (chemins nominaux ou dâerreur, validation, correctifs).
- Phase de découverte du flux de transfert :
- Tout changement dans la gestion des requĂȘtes de la phase de dĂ©couverte, ex. :
- Gestion des requĂȘtes de recherche de compte et flux vers des « oracles » internes ou externes.
- Tout changement dans la gestion des requĂȘtes de la phase de dĂ©couverte, ex. :
- Phase dâaccord du flux de transfert :
- Tout changement dans la gestion des requĂȘtes de la phase dâaccord, ex. :
- Stockage, rĂ©cupĂ©ration, traitement ou affichage des donnĂ©es ou mĂ©tadonnĂ©es dâaccord.
- ImplĂ©mentations et flux dâappels vers des entitĂ©s internes ou externes.
- Tout changement dans la gestion des requĂȘtes de la phase dâaccord, ex. :
- Phase de transfert (compensation) :
- Tout changement dans la gestion des requĂȘtes de la phase de compensation, ex. :
- Décision de compenser ou rejeter selon la liquidité disponible (contrÎle de liquidité).
- Calcul, stockage, récupération, traitement ou affichage des plafonds de débit net des participants.
- Calcul, stockage, récupération, traitement ou affichage de la liquidité disponible.
- Calcul, stockage, récupération, traitement ou affichage de toute valeur monétaire.
- Calcul, stockage, récupération, traitement ou affichage des données ou métadonnées de transfert.
- Tout changement dans le pipeline de préparation de transfert.
- Tout changement dans le pipeline dâexĂ©cution de transfert.
- Tout changement dans la gestion des requĂȘtes de la phase de compensation, ex. :
- RĂšglement :
- Toute modification de spĂ©cification dâAPI de rĂšglement interne ou externe (chemins nominaux ou dâerreur, validation, correctifs).
- Toute modification dâimplĂ©mentation de gestion des requĂȘtes de rĂšglement (idem).
- Tout changement concernant lâinclusion ou lâexclusion de transferts pour le batch de rĂšglement.
- Tout changement sur le calcul, stockage, récupération, traitement ou affichage des données ou métadonnées de rÚglement.
# Exemples
- Corriger un bug dans une mĂ©thode de validation de lâAPI FSPIOP
- Ajouter une fonctionnalitĂ© Ă une API dâadministration
- Modifier le format dâaffichage des devises dans un portail web
- Mettre Ă niveau une dĂ©pendance externe (ex. paquet npm dâun service liĂ© au grand livre)
- Optimiser les appels au stockage pendant le traitement dâune requĂȘte dâAPI externe
# Processus de revue de conception et de code requis
Les changements critiques doivent suivre le processus des changements critiques.
