Ça sent mauvais parce qu'il y a probablement de nombreux cas où il pourrait être modifié ou amélioré.
La plupart de ces odeurs ne sont que des indices de quelque chose qui pourrait ne pas fonctionner. Par conséquent, ils ne sont pas tenus d'être corrigés en soi… (Vous devriez cependant y jeter un coup d'œil.)
Odeurs de code précédentes
Vous pouvez trouver toutes les odeurs de code précédentes (Partie I - XXXIII) ici .
Nous allons continuer...
Code Smell 166 - Erreurs de bas niveau sur l'interface utilisateur
Erreur fatale : Erreur non détectée : la classe 'logs_queries_web' est introuvable dans /var/www/html/query-line.php:78
Trace de la pile : #0 {main} lancé dans /var/www/html/query-line.php à la ligne 718
TL;DR : Attrapez vos erreurs. Même ceux auxquels vous ne vous attendez pas.
Problèmes
- Sécurité
- La gestion des erreurs
- Journalisation des erreurs
- Mauvaise expérience UX
Solutions
Utilisez un gestionnaire de niveau supérieur.
Évitez les langages favorisant les codes de retour .
Attendez-vous à des erreurs de base de données et de bas niveau.
Contexte
Même en 2022, nous pouvons voir des sites Web "sérieux" montrant aux utilisateurs occasionnels une pile ou un message de débogage.
Exemple de code
Faux
<? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9
Droite
<? // A user-defined exception handler function function myException($exception) { logError($exception->description()) // We don't show Exception to final users } // Set user-defined exception handler function set_exception_handler("myException");
Détection
- [x] Automatique
Nous pouvons utiliser des tests de mutation pour simuler des problèmes et voir s'ils sont traités correctement.
Mots clés
- Sécurité
Conclusion
Nous devons continuer à mûrir.
Nos solutions ne doivent pas être bâclées.
Nous devons améliorer notre réputation d'ingénieurs logiciels sérieux.
Rapports
Code Odeur 72 - Codes de retour
Plus d'informations
Clause de non-responsabilité
Code Smells n'est que mon avis .
Crédits
Photo de Jesse Orrico sur Unsplash
80 % de mes problèmes sont de simples erreurs de logique. 80 % des problèmes restants sont des erreurs de pointeur. Les problèmes restants sont difficiles.
Marc Donner
Excellentes citations de génie logiciel
Code Smell 167 - Comparaison de hachage
Le hachage garantit que deux objets sont différents. Non pas qu'ils soient pareils.
TL; DR : si vous vérifiez le hachage, vous devez également vérifier l'égalité
Problèmes
Solutions
- Vérifiez le hachage (rapide), puis vérifiez l'égalité (lent)
Contexte
Le 7 octobre 2022, l'une des plus grandes chaînes de blocs a dû être arrêtée.
Cette nouvelle était choquante puisque la plupart des blockchains sont décentralisées par définition.
Vous pouvez lire un article complet ici:
Comment un hacker a volé 566 millions de dollars en exploitant une odeur de code
Exemple de code
Faux
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return (int)(Math.random()*256); } // This is just an example of non-correlation // When using HashMaps we can make a mistake // and guess the object is not present in the collection }
Droite
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return name.hashCode(); } // This is just an example of non-correlation }
Détection
- [x] Semi-automatique
De nombreux linters ont des règles pour le hachage et la redéfinition de l'égalité.
Avec les tests de mutation, nous pouvons ensemencer différents objets avec le même hachage et vérifier nos tests.
- Identité
- Sécurité
Conclusion
Chaque amélioration des performances a ses inconvénients.
Les caches et les réplications en sont des exemples notables.
On peut (doit) les utiliser avec précaution.
Rapports
Code Smell 150 - Comparaison égale
Plus d'informations
Clause de non-responsabilité
Code Smells n'est que mon avis .
Cela surprendra certains de vos lecteurs, mais mon intérêt premier n'est pas la sécurité informatique. Je suis principalement intéressé par l'écriture de logiciels qui fonctionnent comme prévu.
Wietse Venema
Excellentes citations de génie logiciel
Code Smell 168 - Décisions non documentées
Nous devons faire quelques changements. Nous devons être clairs sur pourquoi
TL;DR : Soyez déclaratif sur vos décisions de conception ou de mise en œuvre.
Problèmes
- Commentaires sur les codes
- Manque de testabilité
Solutions
- Soyez explicite sur les raisons.
- Convertissez le commentaire en méthode.
Contexte
Parfois, nous trouvons des règles arbitraires qui ne sont pas si facilement testables.
Si nous ne pouvons pas écrire un test qui échoue, nous devons avoir une fonction avec un nom excellent et déclaratif au lieu d'un commentaire.
Exemple de code
Faux
// We need to run this process with more memory set_memory("512k) run_process();
Droite
increase_memory_to_avoid_false_positives(); run_process();
Détection
- [x] Semi-automatique
C'est une odeur sémantique.
Nous pouvons détecter les commentaires et nous avertir.
Mots clés
- commentaires
Conclusion
Le code est en prose. Et les décisions de conception doivent être narratives.
Rapports
Code Smell 05 - Agresseurs de commentaires
Code Smell 75 - Commentaires dans une méthode
Clause de non-responsabilité
Code Smells n'est que mon avis .
Crédits
Photo de Goh Rhy Yan sur Unsplash
Les programmes, comme les gens, vieillissent. Nous ne pouvons pas empêcher le vieillissement, mais nous pouvons comprendre ses causes, limiter ses effets et inverser certains des dommages.
Mario Fusco
Excellentes citations de génie logiciel
Code Smell 169 - Méthodes collées
Ne faites pas deux choses ou plus à la fois.
TL;DR : Essayez d'être aussi atomique que possible dans vos méthodes
Problèmes
- Code couplé
- Plus difficile à tester
- Plus difficile à lire
Solutions
- Casser la méthode
Refactorisations
https://maximilianocontieri.com/refactoring-002-extract-method
Contexte
Si vous nommez une méthode avec 'Et', vous manquez probablement une opportunité de méthode d'extraction et de rupture.
Exemple de code
Faux
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
Droite
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
Détection
- [x] Semi-automatique
Certains linters peuvent nous avertir des méthodes incluant le terme « et ».
Mots clés
- Couplage
Conclusion
Lors de l'élaboration de méthodes, il est très important de jouer une histoire de canard en caoutchouc et de nous dire si nous faisons les choses correctement.
Rapports
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
Clause de non-responsabilité
Code Smells n'est que mon avis .
Crédits
Photo de Scott Sanker sur Unsplash
Apprendre l'art de la programmation, comme la plupart des autres disciplines, consiste d'abord à apprendre les règles, puis à savoir quand les enfreindre.
Josué Bloch
Code Smell 170 - Refactor avec modifications fonctionnelles
Développer c'est super. le refactoring est incroyable. Ne le fais pas en même temps
TL;DR : Ne changez pas fonctionnellement et ne refactorisez pas en même temps.
Problèmes
- Des solutions difficiles à évaluer
- Conflits de fusion
Solutions
- Ne modifiez jamais les fonctionnalités lors de la refactorisation
Contexte
Parfois, nous détectons qu'une refactorisation est nécessaire pour un développement ultérieur.
Nous sommes des experts en apprentissage.
Nous devrions mettre notre solution en attente. Travaillez sur le refactoring, et continuez avec notre solution.
Exemple de code
Faux
getFactorial(n) { return n * getFactorial(n); } // Rename and Change factorial(n) { return n * factorial(n-1); } // This is a very small example // Things go works while dealing with huge code
Droite
getFactorial(n) { return n * getFactorial(n); } // Change getFactorial(n) { return n * getFactorial(n-1); } // Run the tests factorial(n) { return n * factorial(n-1); } // Rename
Détection
C'est une odeur de refactorisation.
- [x] Manuel
Mots clés
- Refactorisation
Conclusion
Nous devrions utiliser un jeton physique.
Soit nous sommes en phase de refactoring, soit en phase de développement.
Clause de non-responsabilité
Code Smells n'est que mon avis .
Crédits
Photo de Dannie Jing sur Unsplash
Lorsque j'étudie le code, la refactorisation me conduit à des niveaux de compréhension plus élevés que je manquerais autrement. Ceux qui rejettent la refactorisation de la compréhension comme une manipulation inutile du code ne réalisent pas qu'ils ne voient jamais les opportunités cachées derrière la confusion.
Martin Fowler
5 autres odeurs de code arrivent bientôt…