Les problèmes de qualité levés par Claude #32
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Audit qualité logicielle - Sisyphe
Ce document identifie les défauts de conception et les écarts aux bonnes pratiques des bibliothèques utilisées (Flask, SQLAlchemy, WTForms).
Problèmes critiques (sécurité/autorisation)
1. Absence de contrôle d'accès basé sur les rôles
Fichier :
sisyphe/summary.py:446-482N'importe quel utilisateur connecté peut modifier les temps facturés. Pas de distinction admin/utilisateur pour les opérations sensibles.
Bonne pratique : Implémenter un système RBAC ou des décorateurs
@admin_required.Impact : Tout utilisateur peut manipuler les données financières.
2. Session trop longue
Fichier :
sisyphe/__init__.py:121Bonne pratique : Sessions de 7-30 jours avec mécanisme de refresh.
Impact : Fenêtre d'attaque élargie pour le vol de session.
3. Coercition non sécurisée
Fichier :
sisyphe/summary.py:451Bonne pratique : Utiliser la validation de formulaire ou
try/except.Impact : Un input malformé provoque un crash (DoS).
Problèmes d'architecture SQLAlchemy
4. Problème N+1 dans les agrégations
Fichier :
sisyphe/models.py:458-503Bonne pratique : Eager loading avec
selectinload()oujoinedload().Impact : Dégradation de performance proportionnelle au volume de données.
5. Requêtes
.all()sans limiteFichiers :
projects.py:27,summary.py:130, etc.Bonne pratique : Pagination avec
.limit()et.offset().Impact : Consommation mémoire excessive avec montée en charge.
6. Cascades non définies
Fichier :
sisyphe/models.py:68-71Bonne pratique : Définir
cascade="all, delete-orphan"explicitement.Impact : Risque d'enregistrements orphelins si un parent est supprimé.
7. Logique métier dans les modèles
Fichier :
sisyphe/models.py:79-87Bonne pratique : Requêtes dans une couche service ou repository.
Impact : Modèles difficiles à tester en isolation, couplage fort.
Problèmes WTForms
8. Validation hors du framework
Fichier :
sisyphe/contracts.py:71-74Bonne pratique : Validateurs WTForms au niveau des champs ou du formulaire.
Impact : UX dégradée, erreurs non associées aux champs concernés.
9. Conversion manuelle des types
Fichier :
sisyphe/contracts.py:57-67Bonne pratique : Créer un champ WTForms personnalisé qui retourne directement un
Decimal.Impact : Code verbeux et répétitif.
Problèmes de tests
10. Pas de tests d'autorisation
Les tests vérifient les fonctionnalités mais pas les frontières d'autorisation (ex: "un utilisateur ne peut pas modifier les données d'un autre").
Bonne pratique : Tests exhaustifs des contrôles d'accès pour chaque route.
Impact : Vulnérabilités de sécurité non détectées.
11. CSRF désactivé dans les tests
Fichier :
tests/conftest.py:109Bonne pratique : Activer CSRF et tester avec des tokens valides.
Impact : Bugs CSRF non détectés par la suite de tests.
Problèmes de qualité de code
12. Duplication de logique d'agrégation
Fichier :
sisyphe/summary.py:255-260, 349-354Le même code de groupement est répété dans
yearly()etcustom():Bonne pratique : Extraire dans une fonction utilitaire.
Impact : Maintenance dupliquée, risque de divergence.
13. Fonctions views trop longues
Fichier :
sisyphe/summary.py:108-220monthly()fait 112 lignes avec logique complexe de groupement, calcul de temps facturés et statistiques.Bonne pratique : Découper en fonctions plus petites et testables.
Impact : Difficile à comprendre et à tester.
14. Gestion de timezone incohérente
Fichier :
sisyphe/models.pyMélange de datetimes timezone-aware (
datetime.now(UTC)) et de champsdatesans timezone.Bonne pratique : Utiliser systématiquement des datetimes UTC timezone-aware.
Impact : Bugs potentiels liés aux changements d'heure.
Tableau récapitulatif
Priorités recommandées