Site Compass
Reivernet Group est un intégrateur de systèmes réseau avec plus de 20 ans d'expérience internationale. Ils construisent, configurent et gèrent des réseaux de données complexes pour les secteurs de l'hôtellerie, de l'éducation et du gouvernement. Ils fournissent également des services de surveillance, de dépannage et de sécurité 24h/24 et 7j/7.
Tous les clientsRevue de code
Notre examen d'un produit logiciel de Reivernet Group a identifié des problèmes critiques et de gravité moyenne aux côtés de code bien approuvé. Bien que l'architecture soit évolutive et solide, la qualité et la couverture du code nécessitaient des améliorations.
En savoir plusAutomatisation des processus métiers
Nous avons examiné le code d'une application de cartographie réseau conçue pour simplifier la planification budgétaire, les appels d'offres et la gestion des actifs. Notre examen impartial a aidé le client à lancer son produit en toute confiance, sachant que tous les problèmes critiques avaient été résolus.
En savoir plusDéfi
Reivernet Group a engagé Redwerk pour l’aider à auditer l’un de ses produits logiciels avant sa sortie officielle. Le logiciel en question était Site Compass, une application de cartographie réseau. Site Compass s’adresse aux entreprises de construction qui souhaitent améliorer leur rentabilité.
Site Compass aide les utilisateurs à gérer les chantiers en centralisant toutes les données nécessaires associées à la planification budgétaire, aux appels d’offres et à la gestion des actifs. L’application simplifie également la génération de rapports, y compris la création de rapports d’audit et de nomenclatures.
Il était crucial pour Reivernet Group qu’une partie indépendante effectue la revue du code. Ils avaient besoin d’une évaluation précise et impartiale de la qualité de leur produit. Notre périmètre de travail comprenait :
- Revue de l’architecture. À cette étape, nous devions nous assurer que les fondations du système étaient bien conçues, répondaient aux exigences et pouvaient s’adapter à la croissance future.
- Revue de la base de données. Ici, nous nous assurons que la base de données est optimisée en termes de performances, de sécurité et d’intégrité des données.
- Revue de la qualité du code. Cette partie comprend l’évaluation de la lisibilité, de la maintenabilité, de la cohérence du code et de son respect des normes de codage modernes. Nous avons été invités à examiner uniquement le code backend.
- Revue de la couverture des tests. Ici, nous nous assurons que le code est adéquatement testé et identifions les domaines où des tests supplémentaires sont nécessaires.
- Revue de sécurité. Notre objectif était d’évaluer l’application par rapport aux 10 principales vulnérabilités Web OWASP et de proposer des stratégies d’atténuation.
En plus de signaler les problèmes trouvés, nous fournissons des recommandations détaillées sur la manière de les résoudre et le temps nécessaire pour refactoriser le code.
Solution
Site Compass est développé en C# avec Uno Platform, ce qui permet d’avoir des applications iOS, Android et Windows dans un seul et même jeu de code. Nous avons des années d’expérience avec toutes les technologies utilisées dans ce projet, ce qui a rendu la tâche assez simple pour nous.
Pour accélérer le processus et nous assurer de détecter chaque erreur, nous avons complété le contrôle manuel par l’automatisation, en utilisant des outils spécialisés tels que NDepend et PVS-Studio. Voici un bref aperçu des problèmes rencontrés à chaque étape.
Examen de l’architecture
L’application possède une architecture en couches avec des couches de présentation, de code et de base de données distinctes. Cette approche est efficace pour les solutions multiplateformes comme Site Compass, grâce à son code partagé qui réduit le temps et le coût de développement. Cependant, elle peut entraîner que certains types ou classes du code deviennent trop génériques et difficiles à maintenir.
Concernant les problèmes critiques, nous avons constaté que certains espaces de noms étaient mutuellement dépendants. Les dépendances circulaires rendent difficile la modification ou le test d’un espace de noms sans affecter l’autre. Ce couplage fort peut nuire à la flexibilité du code et augmenter le temps de développement.
Une solution consisterait à déplacer un ou plusieurs types des espaces de noms de bas niveau vers celui de haut niveau, ou vice versa. Une autre option consiste à utiliser l’inversion de contrôle (IoC) pour introduire une couche d’abstraction entre les composants dépendants et promouvoir un couplage lâche.
Nous avons également constaté que certaines classes étaient trop profondément imbriquées dans l’arbre d’héritage, avec une profondeur d’héritage atteignant 5 à 8 niveaux. Cela s’écarte de la programmation orientée objet qui privilégie la composition à l’héritage.
Les longues chaînes d’héritage sont problématiques car elles violent le principe d’encapsulation, signifiant que les classes « parentes » peuvent exposer des détails d’implémentation aux « enfants ». Ce dernier va à l’encontre de l’objectif d’avoir des couches distinctes, car n’importe qui peut manipuler la structure interne, entraînant une instabilité.
Corriger cela nécessiterait d’analyser les fonctionnalités étroitement couplées et de modifier leur conception en utilisant la composition.
Structure de la base de données
Nous n’avons trouvé aucun problème avec l’architecture et l’évolutivité de la base de données. Azure Cosmos DB offre suffisamment de flexibilité pour l’adapter et résoudre les problèmes de performance. Le seul aspect qui pourrait affecter les performances de l’application est un scénario où la région de l’utilisateur diffère de la région du cloud, entraînant des temps de chargement lents.
Qualité du code backend
Nous avons signalé plusieurs problèmes critiques et de gravité moyenne concernant la qualité du code backend.
Nous avons identifié 38 méthodes avec 7 à 14 paramètres. C’est trop de paramètres. Les méthodes comportant trop de paramètres sont pénibles à appeler et peuvent dégrader les performances.
Une solution consiste à ajouter plus de propriétés/champs au type déclarant pour gérer de nombreux états. Une alternative consiste à fournir une classe ou une structure dédiée à la gestion du passage des arguments.
Le problème suivant concerne les types trop volumineux, résultant du phénomène dit de « classe-dieu » (god class). Une classe-dieu ou objet-dieu est une seule classe qui tente de tout faire. Elle exerce un contrôle excessif sur les autres classes du système, devenant souvent si volumineuse qu’elle est responsable de l’exécution de toutes les tâches. Il en résulte un code difficile à comprendre, à maintenir et à tester.
La correction d’une classe-dieu nécessite de la diviser en classes plus petites avec une responsabilité unique et des limites bien définies. Essayez d’abord de maintenir l’interface de la classe-dieu et déléguez les appels aux nouvelles classes extraites. Finalement, la classe-dieu devrait être une façade pure sans sa propre logique. Vous pouvez alors la conserver par commodité ou la supprimer et commencer à utiliser uniquement les nouvelles classes.
Un autre problème affectant la maintenabilité et la testabilité du code est l’utilisation de champs statiques non immuables (non-readonly). Si la valeur ne change jamais, rendez-la immuable et définissez-la directement dans le constructeur statique ou en ligne avec sa déclaration. Si la valeur change occasionnellement, nous devrions utiliser un champ d’instance à la place. Chaque objet aura sa propre « boîte », évitant les problèmes d’état partagé.
Nous avons également signalé des méthodes trop complexes, potentiellement mortes, mal commentées, ou avec des noms excessivement longs.
Couverture des tests
Seul un faible pourcentage du code était couvert par des tests. Une faible couverture de tests signifie que de larges portions du code restent non testées, ce qui entraîne l’apparition de bugs en production.
Une assurance qualité précoce et continue est vitale car les bugs trouvés en production sont plus coûteux et plus longs à corriger, perturbant les plannings de publication et nécessitant des correctifs urgents. De plus, un test initial inadéquat rend le test de régression moins efficace, car il est difficile de déterminer le comportement original des zones non testées.
Examen de la sécurité
Notre examen de sécurité a inclus la vérification du code pour les vulnérabilités d’injection, telles que les injections NoSQL, LDAP et OS.
Nous nous sommes assurés qu’il n’y avait pas d’occurrences d’authentification brisée, d’exposition de données sensibles, d’analyseurs XML mal configurés, et de configurations par défaut, incomplètes ou ad hoc.
Nos examinateurs ont également recherché des failles permettant des menaces persistantes. Celles-ci permettraient aux attaquants de rester indétectés en cas de violation, compromettant davantage de systèmes et de données.
Résultat
Avec notre aide, Reivernet Group a obtenu une image claire de la qualité de Site Compass et un plan d’action pour les améliorations avant le lancement. La mise en œuvre de nos recommandations a entraîné une augmentation de 90 % de la maintenabilité du code, réduisant ainsi les coûts de futures mises à jour.
En refactorisant tout le code problématique, Reivernet Group a également réduit le temps d’intégration des développeurs et protégé l’intégrité de ses données.
Besoin d'une évaluation impartiale de la qualité de votre code ?
Parlez à des expertsCommentaire de l'équipe Redwerk
Dmytro
Développeur et chef d'équipe
En plus de l'examen manuel, j'ai utilisé des outils spécialisés tels que NDepend et PVS-Studio. Ces outils ont permis d'accélérer le processus et de signaler les sections de faible qualité difficiles à détecter manuellement. Notre examen a montré que le projet est généralement stable et sans problèmes majeurs. Cependant, quelques aspects pourraient compliquer la maintenance future, tels que de très grandes méthodes ou des méthodes comportant de nombreux paramètres.
Articles similaires dans le blog
Architecture monolithique ou microservices pour .NET
Cet article est une introduction au développement d'applications basées sur les microservices et à leur gestion. Il décrit les approches de conception architecturale et d'implémentation utilisant .NET Core et les conteneurs Docker. Cet article a été rédigé pour les développeurs ....
En savoir plus
Spécification en développement logiciel et estimation de projet
Il est essentiel que votre équipe de développement logiciel dispose d'un maximum d'informations sur votre futur produit afin de fournir des estimations précises. Parfois, une fonctionnalité qui semble mineure et insignifiante peut avoir un impact énorme sur votre budget et...
En savoir plusImpressionné ?
Engagez-nousAutres études de cas
Project Science
Audit et sécurisation de l'API backend de ce logiciel, ce qui a augmenté sa maintenabilité de 80 %
Current
Développement de cette application SaaS 100 % conforme aux normes ADA, utilisée par les services sociaux à travers les États-Unis
KillerBee
Transformation de décennies d'expertise en matériaux de construction en la solution de tarification intelligente automatisée n°1 utilisée dans le monde entier
