recommandations (doc)
This commit is contained in:
parent
2c9599128c
commit
9081f8de19
@ -1,28 +1,46 @@
|
||||
# Code
|
||||
|
||||
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
|
||||
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
|
||||
|
||||
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
|
||||
|
||||
## 2. <a name='Tabledesmatires'></a>Table des matières
|
||||
|
||||
<!-- vscode-markdown-toc -->
|
||||
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
|
||||
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
|
||||
* 2. [Table des matières](#Tabledesmatires)
|
||||
* 3. [Documents de référence](#Documentsderfrence)
|
||||
* 4. [Gestion des erreurs](#Gestiondeserreurs)
|
||||
* 5. [Journalisation et monitoring](#Journalisationetmonitoring)
|
||||
* 6. [Tests](#Tests)
|
||||
* 6.1. [Stratégie de test](#Stratgiedetest)
|
||||
* 6.2. [Plan pour les tests unitaires](#Planpourlestestsunitaires)
|
||||
* 6.3. [Plan d'intégration](#Plandintgration)
|
||||
* 6.4. [Plan de charge](#Plandecharge)
|
||||
* 7. [Outils et les librairies à utiliser](#Outilsetleslibrairiesutiliser)
|
||||
* 8. [Critères d'acceptation](#Critresdacceptation)
|
||||
* 9. [CI/CD](#CICD)
|
||||
* 10. [Maintenance](#Maintenance)
|
||||
* 11. [Exemples de Code](#ExemplesdeCode)
|
||||
* 12. [Todo](#Todo)
|
||||
* 4. [Choix des formats de données](#Choixdesformatsdedonnes)
|
||||
* 4.1. [Strings](#Strings)
|
||||
* 4.2. [Hexadécimales](#Hexadcimales)
|
||||
* 4.3. [Tableaux de bytes](#Tableauxdebytes)
|
||||
* 4.3.1. [8 Bytes (64 bits)](#Bytes64bits)
|
||||
* 4.3.2. [16 Bytes (128 bits)](#Bytes128bits)
|
||||
* 4.3.3. [32 Bytes (256 bits)](#32Bytes256bits)
|
||||
* 4.3.4. [64 Bytes (512 bits)](#64Bytes512bits)
|
||||
* 4.3.5. [Précautions générales pour la manipulation des tableaux de bytes](#Prcautionsgnralespourlamanipulationdestableauxdebytes)
|
||||
* 4.4. [Format Base64](#FormatBase64)
|
||||
* 4.5. [Différence entre Bytes et Bits](#DiffrenceentreBytesetBits)
|
||||
* 4.6. [Little Endian et Big Endian](#LittleEndianetBigEndian)
|
||||
* 4.7. [Conversions de données](#Conversionsdedonnes)
|
||||
* 4.7.1. [Conversion entre Strings et Hexadécimales](#ConversionentreStringsetHexadcimales)
|
||||
* 4.7.2. [Conversion entre Tableaux de Bytes et Format Base64](#ConversionentreTableauxdeBytesetFormatBase64)
|
||||
* 4.7.3. [Conversion entre Bytes et Bits](#ConversionentreBytesetBits)
|
||||
* 4.7.4. [Gestion de Little Endian et Big Endian](#GestiondeLittleEndianetBigEndian)
|
||||
* 4.7.5. [Bonnes Pratiques Générales](#BonnesPratiquesGnrales)
|
||||
* 5. [Gestion des erreurs](#Gestiondeserreurs)
|
||||
* 6. [Journalisation et monitoring](#Journalisationetmonitoring)
|
||||
* 7. [Tests](#Tests)
|
||||
* 7.1. [Stratégie de test](#Stratgiedetest)
|
||||
* 7.2. [Plan pour les tests unitaires](#Planpourlestestsunitaires)
|
||||
* 7.3. [Plan d'intégration](#Plandintgration)
|
||||
* 7.4. [Plan de charge](#Plandecharge)
|
||||
* 8. [Outils et les librairies à utiliser](#Outilsetleslibrairiesutiliser)
|
||||
* 9. [Critères d'acceptation](#Critresdacceptation)
|
||||
* 10. [CI/CD](#CICD)
|
||||
* 11. [Maintenance](#Maintenance)
|
||||
* 12. [Exemples de Code](#ExemplesdeCode)
|
||||
* 13. [Todo](#Todo)
|
||||
|
||||
<!-- vscode-markdown-toc-config
|
||||
numbering=true
|
||||
@ -34,9 +52,9 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
|
||||
|
||||
Voir [_Doc_references.md](_Doc_references.md).
|
||||
|
||||
## Choix des formats de données
|
||||
## 4. <a name='Choixdesformatsdedonnes'></a>Choix des formats de données
|
||||
|
||||
### Strings
|
||||
### 4.1. <a name='Strings'></a> Strings
|
||||
|
||||
Les chaînes de caractères (String et &str) sont utilisées pour stocker du texte. String est une collection dynamique, modifiable, possédant une allocation sur le tas, tandis que &str est une vue immuable d'une séquence de caractères.
|
||||
|
||||
@ -46,7 +64,7 @@ Cas d'usage commun :
|
||||
* Traitement de données formatées comme le JSON ou le XML.
|
||||
* Communication réseau où les protocoles basés sur le texte sont utilisés (HTTP, SMTP).
|
||||
|
||||
### Hexadécimales
|
||||
### 4.2. <a name='Hexadcimales'></a> Hexadécimales
|
||||
|
||||
Les valeurs hexadécimales sont souvent utilisées pour représenter des données binaires de manière lisible, notamment dans le contexte de l'adressage mémoire, du débogage, ou de la représentation de couleurs en informatique.
|
||||
|
||||
@ -56,7 +74,7 @@ Cas d'usage commun :
|
||||
* Définition de couleurs dans les standards web (CSS).
|
||||
* Représentation compacte d'adresses mémoire ou de grandes valeurs binaires.
|
||||
|
||||
### Tableaux de bytes
|
||||
### 4.3. <a name='Tableauxdebytes'></a> Tableaux de bytes
|
||||
|
||||
Les tableaux de bytes (```Vec<u8v>``` ou ```[u8]``` en Rust) sont utilisés pour manipuler des données binaires. Ils servent à stocker et transmettre des données dans un format qui n'est pas nécessairement du texte.
|
||||
|
||||
@ -66,7 +84,65 @@ Cas d'usage commun :
|
||||
* Communication réseau, en envoyant et recevant des données binaires sur les sockets.
|
||||
* Cryptographie, où les clés, les hash, et les signatures sont souvent manipulés sous forme de bytes.
|
||||
|
||||
### Format Base64
|
||||
Les tableaux de bytes sont au cœur de nombreuses opérations en informatique, en particulier dans les domaines nécessitant un traitement direct des données à bas niveau. La taille de ces tableaux varie en fonction de leur usage. Voici quelques tailles communes de tableaux de bytes, leurs usages typiques et des précautions à prendre lors de leur manipulation.
|
||||
|
||||
#### 4.3.1. <a name='Bytes64bits'></a>8 Bytes (64 bits)
|
||||
|
||||
Souvent utilisé pour des nombres entiers longs, des adresses mémoire en architecture 64 bits, ou des timestamps. Tailles spécifiques à des protocoles ou formats de fichier : De nombreux formats de fichiers (comme les images, l'audio, la vidéo) et protocoles de communication ont des tailles de blocs ou de trames spécifiques qui ne suivent pas nécessairement un schéma basé sur la sécurité.
|
||||
|
||||
Précaution :
|
||||
|
||||
* La compréhension des spécifications techniques et des contraintes de chaque format ou protocole est essentielle pour manipuler efficacement ces tailles de données.
|
||||
* Dans le contexte des formats de fichier et des protocoles de communication, assurez-vous de respecter les standards pour garantir la compatibilité et l'interopérabilité.
|
||||
|
||||
#### 4.3.2. <a name='Bytes128bits'></a>16 Bytes (128 bits)
|
||||
|
||||
Usage :
|
||||
|
||||
* Clés de cryptographie AES-128.
|
||||
* UUIDs (Universally Unique Identifiers).
|
||||
|
||||
Précaution :
|
||||
|
||||
* Lors de l'utilisation pour la cryptographie, assurez-vous que la génération des clés est suffisamment aléatoire.
|
||||
* Pour les UUIDs, utilisez des bibliothèques éprouvées pour garantir l'unicité.
|
||||
|
||||
#### 4.3.3. <a name='32Bytes256bits'></a> 32 Bytes (256 bits)
|
||||
|
||||
Usage :
|
||||
|
||||
* Clés de cryptographie AES-256, souvent recommandées pour une sécurité accrue.
|
||||
* Empreintes SHA-256, couramment utilisées dans la sécurisation des données et la vérification d'intégrité.
|
||||
|
||||
Précaution :
|
||||
|
||||
* Comme pour les clés de 128 bits, l'aléatoire dans la génération des clés est crucial.
|
||||
* Pour le SHA-256, être conscient de son utilisation appropriée et des limites dans les contextes de sécurité.
|
||||
|
||||
#### 4.3.4. <a name='64Bytes512bits'></a> 64 Bytes (512 bits)
|
||||
|
||||
Usage :
|
||||
|
||||
* Empreintes SHA-512, utilisées pour une sécurité accrue dans certains contextes.
|
||||
* Certains schémas de cryptographie asymétrique peuvent utiliser des clés de cette taille pour la signature numérique.
|
||||
|
||||
Précaution :
|
||||
|
||||
* Les coûts en performance pour le traitement de telles tailles doivent être pris en compte, en particulier sur des appareils à ressources limitées.
|
||||
|
||||
#### 4.3.5. <a name='Prcautionsgnralespourlamanipulationdestableauxdebytes'></a> Précautions générales pour la manipulation des tableaux de bytes
|
||||
|
||||
* **Sécurité** : Lors de la manipulation de données sensibles (comme les clés de cryptographie), assurez-vous que le stockage et le transfert des bytes soient sécurisés pour éviter les fuites d'informations.
|
||||
|
||||
* **Initialisation** : Faites attention à l'initialisation des tableaux de bytes, en particulier pour les clés cryptographiques ou les données sensibles, pour éviter les valeurs prévisibles ou par défaut.
|
||||
|
||||
* **Performance** : Les opérations sur les grands tableaux de bytes peuvent être coûteuses en termes de performance. Envisagez l'utilisation de buffers ou de streaming pour traiter de grandes quantités de données.
|
||||
|
||||
* **Interopérabilité** : Lors du partage de données entre différents systèmes, assurez-vous que l'endianess et le format des données soient correctement gérés pour éviter les erreurs d'interprétation.
|
||||
|
||||
* **Libération de ressources** : Pour les données sensibles, pensez à effacer (zeroize) les tableaux de bytes de la mémoire une fois qu'ils ne sont plus nécessaires, pour réduire le risque d'exposition.
|
||||
|
||||
### 4.4. <a name='FormatBase64'></a> Format Base64
|
||||
|
||||
Le format Base64 est une méthode d'encodage qui permet de représenter des données binaires sous forme de chaînes de caractères ASCII. Il est couramment utilisé pour encoder des données binaires dans des contextes où les données textuelles sont préférées, comme dans le XML, le JSON, ou les courriels.
|
||||
|
||||
@ -76,7 +152,7 @@ Cas d'usage commun :
|
||||
* Transmission de données binaires dans des protocoles de communication qui ne supportent que le texte.
|
||||
* Stockage sécurisé d'informations sensibles sous une forme encodée.
|
||||
|
||||
### Différence entre Bytes et Bits
|
||||
### 4.5. <a name='DiffrenceentreBytesetBits'></a> Différence entre Bytes et Bits
|
||||
|
||||
Un byte est une unité de stockage informatique qui contient 8 bits. Un bit est la plus petite unité de données en informatique et peut prendre la valeur de 0 ou 1.
|
||||
|
||||
@ -85,7 +161,7 @@ Cas d'usage commun :
|
||||
* Les bits sont utilisés pour les opérations au niveau le plus basique de l'informatique, comme les calculs binaires ou le stockage de valeurs booléennes.
|
||||
* Les bytes sont utilisés pour presque toutes les formes de stockage et de manipulation de données, comme le texte, les images, et les instructions de programme.
|
||||
|
||||
### Little Endian et Big Endian
|
||||
### 4.6. <a name='LittleEndianetBigEndian'></a>Little Endian et Big Endian
|
||||
|
||||
Ce sont deux manières différentes de stocker ou d'interpréter des séquences de bytes qui composent des nombres plus grands dans l'ordinateur. En Big Endian, le byte le plus significatif est stocké en premier. En Little Endian, c'est le byte le moins significatif qui est stocké en premier.
|
||||
|
||||
@ -97,35 +173,35 @@ Cas d'usage commun :
|
||||
|
||||
Cette vue d'ensemble donne une idée de l'importance et de la polyvalence de ces concepts en programmation Rust et plus largement en informatique. Chaque élément a des cas d'usage spécifiques où il brille particulièrement bien, aidant les développeurs à choisir la meilleure approche pour leurs besoins.
|
||||
|
||||
### Conversions de données
|
||||
### 4.7. <a name='Conversionsdedonnes'></a> Conversions de données
|
||||
|
||||
Aborder les conversions entre différents formats de données est essentiel dans le développement de logiciels, notamment en Rust, où la gestion de la mémoire et des types est centrale.
|
||||
|
||||
#### Conversion entre Strings et Hexadécimales
|
||||
#### 4.7.1. <a name='ConversionentreStringsetHexadcimales'></a>Conversion entre Strings et Hexadécimales
|
||||
|
||||
* **Préconisation** : Utilisez des bibliothèques éprouvées pour convertir les chaînes de caractères en hexadécimales et vice versa. Ces opérations peuvent sembler simples, mais gérer correctement tous les cas d'erreur potentiels peut être délicat.
|
||||
|
||||
* **Retour d'expérience** : La conversion directe peut être tentante, mais attention aux données non représentables en hexadécimal directement (comme les caractères spéciaux ou non ASCII). La validation des entrées est cruciale pour éviter les erreurs.
|
||||
|
||||
#### Conversion entre Tableaux de Bytes et Format Base64
|
||||
#### 4.7.2. <a name='ConversionentreTableauxdeBytesetFormatBase64'></a>Conversion entre Tableaux de Bytes et Format Base64
|
||||
|
||||
* **Préconisation** : Lors de la conversion de données binaires (comme des tableaux de bytes) en Base64, assurez-vous de comprendre l'impact sur la taille des données. La représentation en Base64 augmente la taille des données d'environ 33%. Cela peut être important pour les performances réseau et le stockage.
|
||||
|
||||
* **Retour d'expérience** : L'utilisation de Base64 est très pratique pour intégrer des ressources binaires dans des formats textuels (comme des images en HTML/CSS). Cependant, cette facilité d'utilisation doit être équilibrée avec la considération de l'augmentation de la taille des données.
|
||||
|
||||
#### Conversion entre Bytes et Bits
|
||||
#### 4.7.3. <a name='ConversionentreBytesetBits'></a>Conversion entre Bytes et Bits
|
||||
|
||||
* **Préconisation** : Soyez conscient de l'endianess lorsque vous travaillez avec des conversions de bits à bytes et vice versa. Des erreurs dans ces conversions peuvent entraîner des bugs subtils et difficiles à détecter, surtout lors de l'interopérabilité entre différents systèmes ou protocoles.
|
||||
|
||||
* **Retour d'expérience** : Dans les applications bas niveau ou embarquées, ces conversions sont courantes. L'utilisation explicite de types de données et de fonctions de conversion aide à maintenir la clarté du code et à éviter les erreurs.
|
||||
|
||||
#### Gestion de Little Endian et Big Endian
|
||||
#### 4.7.4. <a name='GestiondeLittleEndianetBigEndian'></a>Gestion de Little Endian et Big Endian
|
||||
|
||||
* **Préconisation** : Lorsque vous travaillez dans un environnement hétérogène (différentes architectures de machines ou réseaux), il est essentiel d'être explicite sur l'endianess des données lors de leur envoi, réception, ou stockage. Utilisez des fonctions de conversion dédiées pour modifier l'ordre des bytes lorsque nécessaire.
|
||||
|
||||
* **Retour d'expérience** : Les erreurs d'endianess sont parmi les plus déroutantes à diagnostiquer. Documenter clairement l'endianess attendue pour chaque interface peut sauver des heures de débogage.
|
||||
|
||||
#### Bonnes Pratiques Générales
|
||||
#### 4.7.5. <a name='BonnesPratiquesGnrales'></a>Bonnes Pratiques Générales
|
||||
|
||||
* **Validation des données** : Toujours valider les données en entrée lors des conversions pour éviter des erreurs inattendues ou des vulnérabilités de sécurité.
|
||||
* **Performance** : Soyez conscient de l'impact sur les performances des conversions, surtout dans des boucles critiques ou pour des données volumineuses.
|
||||
@ -133,7 +209,7 @@ Aborder les conversions entre différents formats de données est essentiel dans
|
||||
|
||||
Les conversions entre différents formats de données sont omniprésentes en programmation. Une compréhension approfondie de ces opérations et une attention particulière aux détails peuvent grandement améliorer la robustesse et l'efficacité de vos applications.
|
||||
|
||||
## 4. <a name='Gestiondeserreurs'></a>Gestion des erreurs
|
||||
## 5. <a name='Gestiondeserreurs'></a>Gestion des erreurs
|
||||
|
||||
Les processus doivent continuer malgré des "sous" traitements/threads en échec et les fonctions doivent être `catch` si il y a une possiblité d'interuption.
|
||||
|
||||
@ -147,7 +223,7 @@ Les arrêts des membres dans les `ItemProcess` dans leur ensemble n'entraînent
|
||||
|
||||
Les parties prenantes ont tous les moyens organisationnels dans les process, pour procéder au bon redémarrage des services en cas de dégradations et de situations inattendues, avec le versionning des relais et des membres des rôles; ainsi que des conditions contractuelles avec leurs implications opérationnelles et possiblement économiques.
|
||||
|
||||
## 5. <a name='Journalisationetmonitoring'></a>Journalisation et monitoring
|
||||
## 6. <a name='Journalisationetmonitoring'></a>Journalisation et monitoring
|
||||
|
||||
Tous les utilisateurs reçoivent les mêmes flux qu'ils se relaient et se restituent au démarrage, tous les flux ont une empreinte horodatée sur une timechain et peuvent être demandés unitairement entre parties, avec le même niveau de confidentialité par rôles. Les `Pcd` sont les listes à jour de l'état de validation de tous les éléments échangés, et les `Prd` sont toutes les signatures échangées sur les flux; en mémoire côté utilisateur, par "session" sur un nœud, pour un `ItemProcess` (possible de segmenter par zones et services).
|
||||
|
||||
@ -155,27 +231,27 @@ Le monitoring comme la journalisation, ne sont pas possibles et pas pertinents s
|
||||
|
||||
La timechain permet de monitorer l'activité générale sur la side chain avec un nombre de jetons échangés (le même nombre à chaque message) et des ancrages critiques sont monitorables sur le mainnet publiquement par n'importe qui (mais non exploitable fonctionnellement). Ainsi seul le bon fonctionnement est monitorable, par tous, facilement, sans métadonnées exploitables pour ce qui est des usages qui restent donc confidentiels.
|
||||
|
||||
## 6. <a name='Tests'></a>Tests
|
||||
## 7. <a name='Tests'></a>Tests
|
||||
|
||||
### 6.1. <a name='Stratgiedetest'></a>Stratégie de test
|
||||
### 7.1. <a name='Stratgiedetest'></a>Stratégie de test
|
||||
|
||||
À l'issue du développement en ScrumBan, chaque ticket fait l'objet d'une revue de code, et d'un test par un testeur.
|
||||
|
||||
### 6.2. <a name='Planpourlestestsunitaires'></a>Plan pour les tests unitaires
|
||||
### 7.2. <a name='Planpourlestestsunitaires'></a>Plan pour les tests unitaires
|
||||
|
||||
Les tests unitaires seront ajoutés par un testeur, ainsi toutes les fonctionnalités reçues auront un test unitaire.
|
||||
|
||||
### 6.3. <a name='Plandintgration'></a>Plan d'intégration
|
||||
### 7.3. <a name='Plandintgration'></a>Plan d'intégration
|
||||
|
||||
L'intégration se réalise par sprint hebdomadaire.
|
||||
|
||||
L'ensemble des fonctionnalités livrées dans le sprint doivent être testées dans un parcours d'intégration écrit et testé par un testeur en fin de sprint.
|
||||
|
||||
### 6.4. <a name='Plandecharge'></a>Plan de charge
|
||||
### 7.4. <a name='Plandecharge'></a>Plan de charge
|
||||
|
||||
Tous les 2 sprints, des tests aux limites sont définis et mis en œuvre par un testeur depuis la simulation des comportements des utilisateurs.
|
||||
|
||||
## 7. <a name='Outilsetleslibrairiesutiliser'></a>Outils et les librairies à utiliser
|
||||
## 8. <a name='Outilsetleslibrairiesutiliser'></a>Outils et les librairies à utiliser
|
||||
|
||||
Respect des normes de syntaxe Rust.
|
||||
|
||||
@ -193,7 +269,7 @@ Utilisation de Visual Studio (pour le partage de configurations).
|
||||
|
||||
* **Librairies de tests** : Cargo test
|
||||
|
||||
## 8. <a name='Critresdacceptation'></a>Critères d'acceptation
|
||||
## 9. <a name='Critresdacceptation'></a>Critères d'acceptation
|
||||
|
||||
Critères de validation pour que le système puisse être considéré comme prêt pour la production :
|
||||
|
||||
@ -207,15 +283,15 @@ Critères de validation pour que le système puisse être considéré comme prê
|
||||
* Documentation manquante clairement précisée.
|
||||
* Autres tests manquants clairement précisés.
|
||||
|
||||
## 9. <a name='CICD'></a>CI/CD
|
||||
## 10. <a name='CICD'></a>CI/CD
|
||||
|
||||
GitLab CI : TBD
|
||||
|
||||
## 10. <a name='Maintenance'></a>Maintenance
|
||||
## 11. <a name='Maintenance'></a>Maintenance
|
||||
|
||||
La liste des dépendances doit être maintenue dans le readme des projets, mise à jour à chaque fin de sprint.
|
||||
Les tests de fin de sprint doivent intégrer une revue des dernières versions et alertes sur les librairies en dépendance.
|
||||
|
||||
## 11. <a name='ExemplesdeCode'></a>Exemples de Code
|
||||
## 12. <a name='ExemplesdeCode'></a>Exemples de Code
|
||||
|
||||
## 12. <a name='Todo'></a>Todo
|
||||
## 13. <a name='Todo'></a>Todo
|
||||
|
Loading…
x
Reference in New Issue
Block a user