paint-brush
Comment trouver les parties puantes de votre code [Partie XXXIV]par@mcsee
725 lectures
725 lectures

Comment trouver les parties puantes de votre code [Partie XXXIV]

par Maximiliano Contieri7m2023/04/07
Read on Terminal Reader

Trop long; Pour lire

Ç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 n'ont pas besoin d'être corrigés en soi… (Vous devriez cependant y jeter un coup d'œil.) Odeurs de code précédentesVous pouvez trouver toutes les odeurs de code précédentes (Partie I - XXXIII) ici.
featured image - Comment trouver les parties puantes de votre code [Partie XXXIV]
Maximiliano Contieri HackerNoon profile picture

Ç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

  1. Utilisez un gestionnaire de niveau supérieur.


  2. Évitez les langages favorisant les codes de retour .


  3. 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

Échec rapide

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

  1. 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 Odeur 49 - Caches

Code Smell 150 - Comparaison égale

Plus d'informations

Égalité et hachage

Code de hachage en Java

Code de hachage vs égal

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

  1. Soyez explicite sur les raisons.
  2. 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

  1. 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

  1. 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…