Huele porque es probable que haya muchos casos en los que podría editarse o mejorarse.
La mayoría de estos olores son solo indicios de algo que podría estar mal. Por lo tanto, no es necesario que se arreglen per se... (Sin embargo, debe investigarlo).
Olores de código anteriores
Puedes encontrar todos los olores del código anterior (Parte i - XXXIII) aquí .
Continuemos...
Code Smell 166 - Errores de bajo nivel en la interfaz de usuario
Error fatal: error no detectado: clase 'logs_queries_web' no encontrada en /var/www/html/query-line.php:78
Rastreo de pila: #0 {main} lanzado en /var/www/html/query-line.php en la línea 718
TL; DR: Atrapa tus errores. Incluso los que no esperas.
Problemas
- Seguridad
- Manejo de errores
- Registro de errores
- Mala experiencia UX
Soluciones
Utilice un controlador de nivel superior.
Evite idiomas que favorezcan los códigos de retorno .
Espere errores de base de datos y de bajo nivel.
Contexto
Incluso en 2022, podemos ver sitios web "serios" que muestran a los usuarios ocasionales un mensaje de pila o depuración.
Código de muestra
Equivocado
<? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9
Bien
<? // 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");
Detección
- [x] Automático
Podemos usar pruebas de mutación para simular problemas y ver si se manejan correctamente.
Etiquetas
- Seguridad
Conclusión
Tenemos que seguir madurando.
Nuestras soluciones no deben ser descuidadas.
Necesitamos mejorar nuestra reputación como ingenieros de software serios.
Relaciones
Code Smell 72 - Códigos de retorno
Más información
Descargo de responsabilidad
Code Smells es solo mi opinión .
Créditos
Foto de jesse orrico en Unsplash
El 80 por ciento de mis problemas son simples errores lógicos. El 80 por ciento de los problemas restantes son errores de puntero. Los problemas restantes son difíciles.
marca donner
Grandes citas de ingeniería de software
Code Smell 167 - Comparación de hashing
Hashing garantiza que dos objetos son diferentes. No es que sean iguales.
TL; DR: si verifica el hash, también debe verificar la igualdad
Problemas
Soluciones
- Verifique el hash (rápido) y luego verifique la igualdad (lento)
Contexto
El 7 de octubre de 2022, una de las cadenas de bloques más grandes tuvo que detenerse.
Esta noticia fue impactante ya que la mayoría de las cadenas de bloques están descentralizadas por definición.
Puedes leer un artículo completo aquí:
Cómo un pirata informático robó $ 566 millones de dólares explotando un olor de código
Código de muestra
Equivocado
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 }
Bien
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 }
Detección
- [x] Semiautomático
Muchos linters tienen reglas para la redefinición de hash y de igualdad.
Con las pruebas de mutación, podemos sembrar diferentes objetos con el mismo hash y verificar nuestras pruebas.
- Identidad
- Seguridad
Conclusión
Toda mejora del rendimiento tiene sus inconvenientes.
Los cachés y las replicaciones son ejemplos notables.
Podemos (debemos) usarlos con cuidado.
Relaciones
Code Smell 150 - Comparación igual
Más información
Descargo de responsabilidad
Code Smells es solo mi opinión .
Esto sorprenderá a algunos de sus lectores, pero mi principal interés no es la seguridad informática. Estoy principalmente interesado en escribir software que funcione según lo previsto.
Wietse Venema
Grandes citas de ingeniería de software
Code Smell 168 - Decisiones no documentadas
Tenemos que hacer algunos cambios. Tenemos que tener claro por qué
TL; DR: sea declarativo en sus decisiones de diseño o implementación.
Problemas
- Código Comentarios
- Falta de capacidad de prueba
Soluciones
- Sea explícito acerca de las razones.
- Convierta el comentario en un método.
Contexto
A veces encontramos reglas arbitrarias que no son tan fácilmente comprobables.
Si no podemos escribir una prueba fallida, necesitamos tener una función con un nombre excelente y declarativo en lugar de un comentario.
Código de muestra
Equivocado
// We need to run this process with more memory set_memory("512k) run_process();
Bien
increase_memory_to_avoid_false_positives(); run_process();
Detección
- [x] Semiautomático
Este es un olor semántico.
Podemos detectar comentarios y avisarnos.
Etiquetas
- Comentarios
Conclusión
El código es prosa. Y las decisiones de diseño deben ser narrativas.
Relaciones
Code Smell 05 - Abusadores de comentarios
Code Smell 75 - Comentarios dentro de un método
Descargo de responsabilidad
Code Smells es solo mi opinión .
Créditos
Foto de Goh Rhy Yan en Unsplash
Los programas, como las personas, envejecen. No podemos prevenir el envejecimiento, pero podemos comprender sus causas, limitar sus efectos y revertir parte del daño.
mario fusco
Grandes citas de ingeniería de software
Code Smell 169 - Métodos pegados
No hagas dos o más cosas a la vez.
TL; DR: Trate de ser lo más atómico posible en sus métodos
Problemas
- Código acoplado
- Más difícil de probar
- más difícil de leer
Soluciones
- romper el método
Refactorizaciones
https://maximilianocontieri.com/refactoring-002-metodo-extraccion
Contexto
Si nombra un método con 'Y', probablemente esté perdiendo una oportunidad de método de extracción y ruptura.
Código de muestra
Equivocado
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
Bien
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
Detección
- [x] Semiautomático
Algunos linters pueden advertirnos sobre métodos que incluyen el término 'y'.
Etiquetas
- Acoplamiento
Conclusión
A la hora de crear métodos, es muy importante jugar a la historia del patito de goma y decirnos a nosotros mismos si estamos haciendo las cosas bien.
Relaciones
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
Descargo de responsabilidad
Code Smells es solo mi opinión .
Créditos
Foto de Scott Sanker en Unsplash
Aprender el arte de la programación, como la mayoría de las otras disciplinas, consiste en aprender primero las reglas y luego aprender cuándo romperlas.
Josué Bloch
Code Smell 170 - Refactor con cambios funcionales
El desarrollo es genial. la refactorización es increíble. No lo hagas al mismo tiempo
TL; DR: No cambie funcionalmente y refactorice al mismo tiempo.
Problemas
- Soluciones difíciles de revisar
- Fusionar conflictos
Soluciones
- Nunca cambie la funcionalidad durante la refactorización
Contexto
A veces detectamos que se necesita una refactorización para un mayor desarrollo.
Somos expertos en aprender.
Deberíamos poner nuestra solución en espera. Trabaje en la refactorización y continúe con nuestra solución.
Código de muestra
Equivocado
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
Bien
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
Detección
Este es un olor de refactorización.
- [x] manuales
Etiquetas
- refactorización
Conclusión
Deberíamos usar un token físico.
O estamos en la etapa de refactorización o en la etapa de desarrollo.
Descargo de responsabilidad
Code Smells es solo mi opinión .
Créditos
Foto de Dannie Jing en Unsplash
Cuando estoy estudiando código, la refactorización me lleva a niveles más altos de comprensión que de otro modo me perdería. Aquellos que descartan la refactorización por comprensión como un jugueteo inútil con el código no se dan cuenta de que nunca ven las oportunidades ocultas detrás de la confusión.
Martín Cazador
Próximamente llegarán 5 olores de código más...