Legacy Trash (I)

How'd y'all!
Me cayó un proyecto legacy en PHP para que estime el tiempo que me llevaría agregar un par de funcionalidades nuevas a la codebase actualmente en producción. Tl;dr: demasiado tiempo. El código tiene tanta deuda técnica que adecentarlo no será negocio para nadie. Creo que lo único productivo que se puede hacer con el código es analizarlo para encontrar malas prácticas y pensar en porque uno debe evitarlas. Esta es la primera entrada de una serie de entradas que tiene ese fin: desenmascarar malas prácticas tratando de mantenernos lo más calmos posibles para ver que podemos aprender. Ojalá ese aprendizaje no solo sea respecto a lo que hace enojar a un dev que toma un proyecto legacy sino que nos haga reflexionar un poquito.

Acción oculta


if ($accion=='oculta')
{
   shell_exec("rm -r /var/www/html/A/B/");
   mkdir("../B/");
}


¿Vieron eso? Un operador de comparación no-estricta (==) para comparar strings. Si $accion valiera 0 la condición sería true de cualquier manera. Para comparar strings uno debiera siempre usar strcmp() o un operador de comparación estricta (===). Para continuar supongamos que "oculta" es un buen valor para una acción. Entonces ¿qué más tenemos? que no solo es confuso usar paths absolutos y relativos de manera arbitraria sino que es tonto borrar una carpeta para volver a crearla inmediatamente. Está bien, entendemos que quería borrar el contenido de la carpeta, pero hubiera bastado un


 shell_exec("rm /var/www/html/A/B/*");



Not invented here


function entero($num)
{
  $num=(int)($num)
  return $num;
}


Este fragmento de código no sólo se encuentra en un archivo "funciones.php" que posee todas las funciones usadas por todos los scripts de la aplicación, si no que hace exactamente lo mismo que la función floor() que es parte de la API estándar de PHP desde su versión 4.

Culto cargo
Cerca del 15% del código son comentarios cuyo único sentido de existencia es el miedo a la amnesia del desarrollador.

You give devolverDato() a bad name
Intentaré no perder el tiempo hablando de los nombres inauditos que tienen algunas variables. Pero para las funciones, ya no puedo resistirme. Hasta el momento los nombres de funciones candidatos son devolverDato() y devolverNum().

Complemento
Existen 2 scripts con nombres casi idénticos, la diferencia es que lo que está descomentado en uno está comentado en otro y viceversa. No aventuraré hipótesis porque ni siquiera puedo estar seguro de cuál es el que está funcionando actualmente.

Acoplamiento, después de tantos años
Tener código CSS en los atributos de los elementos HTML ya es un poco doloroso. Tenerlos este código CSS saliendo por un echo desde el script PHP es homicida.

Comentarios

Publicar un comentario

Entradas populares de este blog

Introduccion a x86 ASM - Registros

JS: Triángulo de Pascal

Legacy Trash (II)