En mi experiencia, el olor más malo es: los desarrolladores tienen miedo de cambiar el código.
//
// Estimado mantenedor:
//
// Una vez que hayas terminado de tratar de “optimizar” esta rutina,
// y me he dado cuenta del terrible error que fue,
// incremente el siguiente contador como advertencia
// al siguiente chico:
//
// total_hours_wasted_here = 42
//
Trabajé como consultor durante 4 años. Durante este tiempo, trabajé en docenas de diferentes equipos y diferentes compañías. Por lo general, cuando me uní a un nuevo equipo, los conocí en el momento de la parada, luego me presenté y escuché sus actualizaciones. Cuando escuché algo como “Esa parte del código es complicada, así que tuve que …”, “No estoy seguro de si mi cambio es correcto, porque no hubo pruebas …”, “Necesitaré ayuda para cambiar esta parte del código”. código, porque no es legible … “ . Sabía que mi trabajo los ayudaría a refactorizar su código.
- ¿Los editores de software como Microsoft, Adobe, etc. permiten / fomentan intencionalmente la piratería de software o se oponen estrictamente?
- ¿Cuáles son algunos tipos de lenguajes de programación?
- ¿Cómo se siente trabajar como ingeniero de software en Factset?
- Cómo seleccionar un proveedor de outsourcing de desarrollo ágil
- ¿Qué libro educativo o libro de texto cambió tu vida?
Volviendo a su pregunta, describiré algunos olores con ejemplos (¡no haga eso en casa!):
- El código no es legible . Algunos problemas que puede encontrar son, muchas variables de una sola letra, nombres de clase y método que no describen lo que hacen, el método es demasiado largo, número mágico en todas partes. Algunas personas podrían decir que no hay comentarios también es un problema. Creo que si el código es legible, no necesita comentarios. Sin embargo, a veces está cambiando un código existente y el código en sí no es legible. Entonces es útil agregar comentarios para aclarar qué hace ese código.
public Integer somethingSome (int x, int y) {
int z = (x * y * 3000) – 500
devuelve z * z;
}
¿Qué demonios hace eso?
- Grandes métodos Idealmente, un método debe hacer solo una cosa y su nombre debe representar lo que hace esta cosa. Es por eso que los nombres de los métodos deben tener verbos para describir lo que hacen. Desafortunadamente, no es difícil encontrar métodos grandes que hagan varias cosas al mismo tiempo, especialmente en sistemas antiguos. Es un método de cambio bastante desafiante que tiene muchas responsabilidades, sin romper nada más. Por lo general, el método grande también se acompaña de varios parámetros, lo que conduce al siguiente olor
public Integer somethingSome (int x, int y) {
int z = (x * y * 3000) – 500
// 150 líneas de código aquí
devuelve z * w + 234;
}
Oh bueno, está empezando a complicarse
- Métodos complejos Si un método es grande, por lo general, también tiene muchos parámetros, dependencias e integraciones. Realmente se entiende cuál es el resultado de una entrada específica. ¡Hace las pruebas realmente difíciles!
public Integer somethingSome (int x, int y, String a, long d, List l) {
int z = (x * y * 3000) – 500
// 150 líneas de código aquí
si (x == 123) {
return z * aClass.thatDoesSomething (w) + 234;
}
if (z> y || a == null) {
return Integer.valueOf (l.get (5)) + anotherClass.thatIntegratesWithSomethingElse (2);
}
// más 10 si y elses aquí
}
This.is.not.from.this.world
- No hay pruebas ¡Las pruebas son una buena fuente de documentación! Describen perfectamente cómo se comporta un método cuando especifica una entrada y espera una salida. Desafortunadamente, la mayoría de las veces, estos métodos complejos no tienen pruebas en absoluto. ¿Por qué alguien crearía pruebas para semejante bestia?
// ¿dónde están las pruebas? : ‘(
- Bonus: comentarios divertidos. Por lo general, este tipo de código desordenado tiene muchos comentarios divertidos. Bueno, la gente necesita divertirse, ¿verdad? https://stackoverflow.com/questi…
/ **
* Para las almas valientes que llegan tan lejos: ustedes son los elegidos,
* los valientes caballeros de la programación que trabajan sin descanso,
* arreglando nuestro código más horrible. Para ustedes, verdaderos salvadores, reyes de los hombres,
* Digo esto: nunca te rendiré, nunca te decepcionaré,
* Nunca correré y te abandonaré. Nunca te haré llorar
* Nunca voy a decir adiós. Nunca diré una mentira y te lastimaré. * /
Bueno, también hay otros olores, pero esos son los más frecuentes que encontré. Afortunadamente, hay esperanza! Hay un libro que tiene algunas técnicas sobre cómo refactorizar este tipo de código. Trabajo efectivo con código heredado: Michael Feathers: 0076092025986: Amazon.com: Libros
Buena suerte y no olvides el comentario anterior. ¡Nunca te rindas!