Based on a list Michael Azerhad published on linkedin.
- La portée des variables/méthodes/classes
- Les traces de muabilité là où l'immuabilité est plus adéquate
- L'indentation
- Le nommage des méthodes, classes et variables
- L'orthographe et la grammaire => très important
- Les duplications de code
- Les violations de couplage (du métier dans un contrôleur par exemple)
- La consommation mémoire (si on peut éviter N appels, des instances inutilement créées à la volée, ou bien transposer une logique de filtrage à la BDD plutôt qu'au code)
- La Big O Notation des algorithmes, toujours choisir la plus optimiale lorsque cela n'est pas insurmontable et est significatif par le contexte
- Les nature de params/typage de méthodes/fonctions
- Une nécessité de multithreading quand le jeu en vaut la chandelle
- La qualité des différents types de test (unitaires/intégration/acceptation/end2End)
- La qualité du respect du mindset TDD, avec quelques discussions avec le dev, voire un coup de mutation testing
- Les violations du concept SOLID
- Le respect de la spécification du besoin, avec une exécution sur une branche Git temporaire du code complet
- La présence des transactions (queries)
- Le choix des collections
- L'overkillité
- Incorrect Typecasting
- Useless de/serilization
- Hardcoded values and configuration parameters
- Long boolean operations