# 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

  1. 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.
  2. Au moins une approbation d’un « code owner » sur tous les fichiers modifiĂ©s.
    1. 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.
  3. 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.
  • 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.
  • 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.
  • 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.