Sentry Code Review
Suivez ces directives lors de l'examen du code des projets Sentry.
Checklist d'examen
Identifier les problèmes
Recherchez ces problèmes dans les modifications de code :
- Erreurs d'exécution : Exceptions potentielles, problèmes de pointeur null, dépassement de limites
- Performance : Opérations O(n²) non bornées, requêtes N+1, allocations inutiles
- Effets secondaires : Changements de comportement involontaires affectant d'autres composants
- Compatibilité descendante : Changements d'API cassants 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 du design
- Les interactions entre composants ont-elles du sens logiquement ?
- 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 end-to-end pour les chemins utilisateur critiques
Vérifiez que les tests couvrent les exigences réelles et les cas limites. Évitez les ramifications ou boucles excessives dans le code de test.
Impact à long terme
Signalez pour examen par un ingénieur senior quand les changements impliquent :
- Modifications du schéma de base de données
- Changements de contrat d'API
- Adoption d'une nouvelle framework ou bibliothèque
- Chemins de code critiques pour la performance
- Fonctionnalité sensible à la sécurité
Directives de rétroaction
Ton
- Soyez poli et empathique
- Fournissez des suggestions actionnables, pas des critiques vagues
- Formulez sous forme de questions quand vous êtes incertain : « Avez-vous envisagé... ? »
Approbation
- Approuvez quand seuls des problèmes mineurs subsistent
- Ne bloquez pas les PR pour des préférences stylistiques
- Rappelez-vous : l'objectif est la réduction des risques, pas un code parfait
Motifs courants à signaler
Python/Django
# Bad: N+1 query
for user in users:
print(user.profile.name) # Separate query per user
# Good: Prefetch related
users = User.objects.prefetch_related('profile')
TypeScript/React
// Bad: Missing dependency in useEffect
useEffect(() => {
fetchData(userId);
}, []); // userId not in deps
// Good: Include all dependencies
useEffect(() => {
fetchData(userId);
}, [userId]);
Sécurité
# Bad: SQL injection risk
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
# Good: Parameterized query
cursor.execute("SELECT * FROM users WHERE id = %s", [user_id])