Comment nous travaillons avec le code

Branches dans le référentiel

Dès le début, nous organisons nos référentiels pour répondre aux besoins de notre méthode de travail avec le code. Nous utilisons deux branches principales (master et development) et de nombreuses branches supplémentaires correspondant à des fonctionnalités et des correctifs. La branche master reflète le code de production, tandis que development est une référence à l'environnement de développement interne. Pour chaque nouvelle fonctionnalité, nous créons une branche distincte, en la connectant à un élément de backlog. Cette approche vous permet de mieux suivre vos progrès. Nous utilisons également une nomenclature standardisée pour mieux différencier les succursales et leurs objectifs. Nous gelons les étapes importantes sous forme de balises.

Branches dans le référentiel
479b9b2 Initial commit - aveneo <aveneo@aveneo.pl> 12349fb Add TypeScript - aveneo <aveneo@aveneo.pl> cc7789e Make it work. - aveneo <aveneo@aveneo.pl> b0f3479 Make it right. - aveneo <aveneo@aveneo.pl> 5bc0361 Make it fast. - aveneo <aveneo@aveneo.pl> features/feature-579_add-typescript 95365bc Merge branch features/feature-579_add-typescript - aveneo <aveneo@aveneo.pl> f6c03da Fix it. - aveneo <aveneo@aveneo.pl> bugs/bug-127_loader e4cae17 Merge branch bugs/bug-127_loader - aveneo <aveneo@aveneo.pl> 09b85ea Prepare v1 - aveneo <aveneo@aveneo.pl> development 8e7fe48 Merge branch development - aveneo <aveneo@aveneo.pl> master v1.0.0

la programmation

la programmation

Nous donnons toute liberté de choix à nos développeurs concernant l'IDE et l'éditeur de texte utilisés car nous avons des exigences de code bien standardisées. Nous suivons les normes internes concernant la dénomination, le formatage, la réutilisation du code, la structure du code, l'architecture et l'organisation des fichiers dans le projet. Tout cela nous permet de créer un code uniforme, propre et efficace. Nous utilisons principalement deux approches pour concevoir des solutions en fonction des besoins de conception : FDD (développement piloté par les fonctionnalités) ou TDD (développement piloté par les tests). Nous nous concentrons également fortement sur les modèles de conception. Enfin, nous refactorisons le code et utilisons des linters pour nous assurer qu'il reste optimal, répond à nos standards et répond à tous les besoins de la solution conçue.

Visual Studio Logo
Visual Studio
VS Code Logo
VS Code
Visual Studio for mac Logo
Visual Studio for mac
JetBrains Rider Logo
JetBrains Rider
Vim Logo
Vim
Notepad Logo
Notepad

Demandes d'extraction et révision du code

Chaque ligne de code que nous ajoutons à nos branches principales est revérifiée. Nous utilisons la vérification croisée par les développeurs. Nous vérifions le code sous de nombreux angles : des problèmes d'architecture aux fautes de frappe en passant par la structure, les mauvais modèles, les problèmes de nommage et de formatage. Grâce à cela, nous pouvons détecter les menaces potentielles dès la phase de conception, optimiser le code et le rendre plus sûr avant la phase de test. Il arrive parfois que nous devions annuler les modifications et réfléchir à la manière de résoudre le problème en supprimant la pull request. Mais il est préférable de le faire lors de la phase de révision du code plutôt que de créer des problèmes en production.

Vérification à plusieurs niveaux
Validation croisée
Tous les commentaires résolus
Minimum de deux évaluateurs
Demandes d'extraction et révision du code

Essais

La dernière étape, et la plus importante, consiste à tester. Pendant le développement, le code subit des tests unitaires et d'intégration. Ensuite, nous utilisons des tests automatiques à partir de scénarios préalablement préparés et des tests manuels. Si tout se passe bien, nous sommes prêts à fusionner le code avec la branche de développement et à préparer une deuxième pull request vers l'environnement de production, où le code de nombreuses branches sera à nouveau testé.

Célibataire
Manuel
Intégratif
Automatique
Essais

CI et CD

Pour chaque projet, nous créons des mécanismes entièrement automatisés pour une intégration continue et une mise en œuvre continue (en utilisant, entre autres, Azure Pipelines et Azure Artifacts). Depuis 2019, nous implémentons toutes nos solutions en utilisant des conteneurs compatibles avec Docker et Kubernetes.

Êtes-vous prêt à parler de votre projet ?