Normes de qualité

Nous avons établi des normes de qualité qui nous permettent d'assurer une architecture de projet fiable et cohérente, un code solide, réutilisable et une expérience utilisateur exceptionnelle.

Chez Jasoren, le contrôle qualité de nos produits et services est un processus continu.

Il n’est pas limité uniquement au département QA. Chaque membre de l’équipe participant à un projet est impliqué dans le contrôle de la qualité dans une certaine mesure.

 

Révision du code au sein de l’équipe

Chaque développeur a son propre style de codage qui peut sembler difficile à comprendre pour les autres.

De plus, si le code n’est jamais révisé par d’autres, son auteur peut ne jamais savoir s’il y a des problèmes avec le code.

C’est quelque chose que nous voulons éviter, et notre politique est que nous assignons au moins deux développeurs à chaque projet pour revoir le code et pour nous assurer que le code qualité est validé.

Nous effectuons la révision du code chaque fois que nous complétons un composant logique, tel qu’une fonctionnalité ou une fonction, ou que nous corrigeons un bug, implémentons une amélioration, etc. Pour la révision de code, nous utilisons les requêtes de fusion GitLab.

Grâce à la révision du code, nous pouvons détecter les bugs et les erreurs à un stade précoce et les corriger avant d’entrer dans le code validé.

De plus, nos développeurs apprennent à connaître le code créé par leurs collègues et peuvent également partager quelques astuces et connaissances utiles qui peuvent améliorer la qualité du code.

Lorsque tous les membres de l’équipe connaissent le code du projet, il n’y a pas d’interruption si l’un des membres de l’équipe prend des vacances ou un congé de maladie.

 

Flux de travail simplifié

Nous basons notre flux de travail sur les principes de L’intégration Continue et établissons les normes du code source qui doit être utilisé dans chaque projet.

– Intégration continue
Avec l’intégration continue, le code est assez fréquemment intégré dans un référentiel partagé avec un outil unique pour la vérification automatique. De cette façon, nous évitons la plupart des problèmes d’intégration qui peuvent affecter le développement du projet.

Chaque build livré au référentiel peut être revu et testé avant que les autres composants ne soient complétés.

Nous pouvons tester notre code plusieurs fois au sein de chaque itération, ce qui garantit une correction rapide et efficace des erreurs. Les bugs et les erreurs sont détectés avant qu’ils puissent avoir un impact sur d’autres parties du projet.

Bien que les pratiques d’intégration continue n’effacent pas tous les bugs automatiquement, elles permettent leur détection et leur suppression faciles.

– Code standard et Gitflow
Nous voulons que notre code source soit aussi transparent et cohérent que possible. Par conséquent, le code de chaque projet est écrit selon une norme unique.

La norme de codage est sélectionnée, discutée et finalisée lors de la réunion de planification de projet de notre équipe de développement.

Tous nos projets sont développés avec le modèle GitFlow qui est spécifiquement destiné à la collaboration de projet.

Il garantit la conformité avec la norme de codage sélectionnée et permet des opérations de référentiel de haut niveau où tous les développeurs ont une idée claire des processus de branchement et de fusion dans le flux de développement.

Si une modification est apportée, chaque membre de l’équipe reçoit une notification. Avec GitFlow, un projet est développé selon un modèle clair et facile à suivre.

Le code source résultant nécessite moins de corrections de bugs, est engagé dans les délais définis et est clair et cohérent.

 

Tests unitaires

Le test unitaire est une méthodologie de test puissante où le code source est testé par des unités individuelles représentant des fonctions ou des procédures complètes.

Son efficacité réside dans sa capacité à détecter rapidement les bugs et à permettre leur fixation rapide. Chaque bug ou erreur peut être retracé jusqu’à son origine pour éliminer le facteur qui l’a causé.

Ce processus n’affecte pas les autres parties du code. Comme les tests unitaires sont effectués en même temps que le développement, l’équipe n’a pas à attendre que tous les composants du produit soient complets pour commencer à rechercher des bugs.

Grâce aux tests unitaires, nous pouvons réaliser des démonstrations des composants finis avant même que le produit ne soit complet. De plus, les tests unitaires permettent un refactoring de code efficace.

 

Mise à jour automatique de la bibliothèque

Nous avons mis en place des services spéciaux pour mettre à jour automatiquement toutes nos bibliothèques et frameworks – Carthage et CocoaPods pour iOS et Gradle pour Android.

Ces services créent des dépendances automatiquement tout en gardant le contrôle sur la configuration et la structure du projet. Avec ces outils, les bibliothèques nécessitent moins de maintenance et le flux de mise à jour est plus simple.

 

Assurance qualité

Nous appliquons des tests approfondis et détaillés permettant de vérifier les nouvelles constructions et le produit fini dans toutes les conditions et tous les scénarios.

– Cas de test et plan de test
Nous testons nos produits à l’aide de diverses techniques de test et d’un grand nombre d’appareils différents afin de vérifier qu’il fonctionne comme prévu sur chaque plateforme. Nous fixons le calendrier des tests dans le plan de test qui est préparé avant le début du projet.

Le plan de test indique quand chaque fonctionnalité ou composant doit être testé et indique la date limite pour chacun d’entre eux.

En outre, le plan de test détermine les environnements de test (périphériques et systèmes d’exploitation) à utiliser et les types de tests à appliquer.

Au début de chaque sprint, nous préparons également les cas de test. Ils contiennent la description de toutes les étapes de test à suivre selon une liste spéciale. La liste de contrôle comprend les procédures de test nécessaires pour vérifier chaque composant fonctionnel.

Pour différents types de composants, nous avons développé des techniques de test spéciales – par exemple, nous avons un moyen spécifique de tester la fonction de validation des informations d’identification qui est effectuée lors de l’enregistrement et de la connexion de l’utilisateur.

– Tests continus
Nos produits sont testés non seulement lorsqu’ils sont entièrement développés. Nous effectuons également des tests continus pour vérifier que nos estimations et hypothèses faites lors de la planification du projet et du développement effectif sont valides.

Nous testons également les modules terminés à la fin de chaque itération et effectuons également les tests des fonctionnalités et fonctions individuelles développées au cours de l’itération.

De cette façon, nous pouvons résoudre les problèmes immédiatement et nous assurer qu’aucun bug majeur ou critique ne pénètre dans la version livrée.

– Tests d’intégration
Les tests d’intégration vérifient les relations entre les composants fonctionnels. Lors des tests d’intégration, nous pouvons détecter les problèmes causés par l’implémentation d’une nouvelle fonctionnalité dans le module déjà complété.

Grâce aux tests d’intégration, les connexions et les relations entre les différents composants sont établies et vérifiées pour détecter d’éventuelles erreurs.

De cette façon, nous pouvons résoudre tous les problèmes de connexion avant que le système ne devienne trop complexe.

Après les tests d’intégration, nous procédons à des tests de régression ciblés, et tous les bugs détectés pendant la phase de test sont corrigés par la suite.

– Les tests de régression
Chaque fois qu’une nouvelle version est livrée, ou qu’un bug est corrigé, il y a toujours une chance que cette version ou correctif affecte quelque chose qui a été implémenté avec succès auparavant. C’est là que les tests de régression peuvent aider – ils révèlent les bugs dans les anciens composants qui ont été causés par de nouveaux.

Après les tests de régression, nous effectuons une vérification pour nous assurer qu’aucun bug ne subsiste et nous finissons le flux avec des smoke tests pour nous assurer que nos dernières actions n’ont pas affecté les autres composants du produit.

– Crashlytics
Malgré les tests rigoureux en plusieurs étapes et la correction des bugs, nous pouvons encore manquer à trouver des bugs complexes qui pénètrent dans le produit fini.

Ou une mise à jour du système d’exploitation, ou un nouveau périphérique peut entraîner des dysfonctionnements de notre produit.

Pour surveiller de tels cas, nous utilisons Crashlytics, un service de rapports de plantage qui suit les problèmes survenant après le lancement de l’application.

Une fois un problème trouvé, Crashlytics envoie une trace de pile, qui est un rapport montrant la séquence de panne étape par étape.

Avec ce rapport, nous pouvons tracer le problème jusqu’à son origine. Les rapports Crashlytics contiennent également d’autres informations utiles – périphérique, version de l’application, langue, pays d’utilisation, etc.

– Tests de compatibilité
Avec les tests de compatibilité, nous vérifions que la version actuelle de l’application est compatible avec différents navigateurs, versions du système d’exploitation, périphériques, etc.

Elle empêche l’application de se bloquer lorsqu’elle est installée sur des versions plus anciennes ou utilisée dans divers navigateurs. Cela augmente le taux de rétention et permet aux utilisateurs de profiter de l’application.

Nous sommes toujours fiers de fournir des produits de qualité supérieure.

C’est pourquoi nous accordons tant d’attention à l’assurance qualité, aux tests et à la correction des bugs.

Le contrôle qualité est toujours l’une des principales priorités de notre équipe.