Examen du Code Sentry
Suivez ces directives lors de l'examen du code des projets Sentry.
Liste de Contrôle d'Examen
Identification des Problèmes
Recherchez ces problèmes dans les modifications de code :
- Erreurs d'exécution : Exceptions potentielles, problèmes de pointeur nul, accès hors limites
- Performance : Opérations O(n²) non bornées, requêtes N+1, allocations inutiles
- Effets secondaires : Changements comportementaux involontaires affectant d'autres composants
- Compatibilité rétroactive : Modifications d'API cassantes sans chemin de migration
- Requêtes ORM : Django ORM complexe avec performance de requête inattendue
- Vulnérabilités de sécurité : Injection, XSS, lacunes de contrôle d'accès, exposition de secrets
Évaluation de la Conception
- Les interactions entre composants ont-elles un sens logique ?
- Le changement s'aligne-t-il avec l'architecture existante du projet ?
- Y a-t-il des conflits avec les exigences ou objectifs actuels ?
Couverture de Test
Chaque PR doit avoir une couverture de test appropriée :
- Tests fonctionnels pour la logique métier
- Tests d'intégration pour les interactions entre composants
- Tests de bout en bout pour les chemins utilisateur critiques
Vérifiez que les tests couvrent les exigences réelles et les cas limites. Évitez les branchements ou boucles excessifs dans le code de test.
Impact à Long Terme
Signalez pour examen par un ingénieur senior lorsque les modifications impliquent :
- Modifications du schéma de base de données
- Modifications du contrat d'API
- Adoption de nouveaux frameworks ou bibliothèques
- Chemins de code critiques pour les performances
- Fonctionnalités sensibles à la sécurité
Directives de Rétroaction
Ton
- Soyez poli et empathique
- Fournissez des suggestions exploitables, pas des critiques vagues
- Formulez sous forme de questions en cas d'incertitude : « Avez-vous considéré... ? »
Approbation
- Approuvez quand seuls des problèmes mineurs subsistent
- Ne bloquez pas les PR pour des préférences stylistiques
- N'oubliez pas : l'objectif est de réduire les risques, pas d'avoir du code parfait
Motifs Courants à Signaler
Python/Django
# Mauvais : requête N+1
for user in users:
print(user.profile.name) # Requête séparée par utilisateur
# Bon : Prefetch related
users = User.objects.prefetch_related('profile')
TypeScript/React
// Mauvais : dépendance manquante dans useEffect
useEffect(() => {
fetchData(userId);
}, []); // userId pas dans deps
// Bon : inclure toutes les dépendances
useEffect(() => {
fetchData(userId);
}, [userId]);
Sécurité
# Mauvais : risque d'injection SQL
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
# Bon : requête paramétrée
cursor.execute("SELECT * FROM users WHERE id = %s", [user_id])