¿Refactorizaría esto y, de ser así, le cobraría a su cliente?

7

Estoy trabajando en un trabajo independiente en casa. El cliente quiere que escriba alguna nueva funcionalidad para su CMS, pero me está costando mucho tiempo averiguar qué está haciendo el código, porque está escrito en un estilo muy ilegible.

A continuación hay un ejemplo de lo que quiero decir. El programador anterior hizo un uso extensivo de las funciones anónimas, de eval (), usa operadores ternarios profundamente anidados, no indentó el código, no usó comentarios y usa construcciones divertidas como el uso indebido del comportamiento de los operadores lógicos || y & & para crear las condiciones de if / else (la segunda condición de & & solo se prueba si la primera es verdadera, lo que abre la posibilidad de usar & & como una construcción if / else). En general, es un código insano y me cuesta mucho tiempo descubrir cómo funciona el código actual.

return ($this->main->context != "ajax" || in_array($this->type, $this->definition->ajax)) ? eval('return method_exists($this,"Show'.ucfirst($this->type).'") ? $this->Show'.ucfirst($this->type).'('.(count($args) ? join(",",array_map(create_function('$a','return (is_numeric($a) || preg_match("/^array/",$a)) ? $a : "\"".$a."\"";'),$args)) : "").') : null;') : '';

¿Refactorizaría este código y cómo manejaría este tipo de cosas con su cliente, quiero decir financieramente?

    
pregunta Julius 29.11.2012 - 01:11

4 respuestas

10

Usted "posee" lo que cambia con respecto a la responsabilidad por reparar defectos y comportamientos indeseables ... tal vez pueda salir de él a veces, pero el cliente dirá "Lo cambió, está roto, lo arregla. Demasiados de estos, y él no será un cliente feliz.

Si lo refactorizas y lo rompes, es tuyo.

Si lo refactorizas, y se rompió antes, y luego es tuyo.

Si refactorizas y arreglas un "defecto", pero cambias el comportamiento, cuando se usó el comportamiento "roto", es tuyo.

A menos que tenga excelentes pruebas de unidad, la refactorización cambiará el comportamiento, y ahora es responsable de solucionarlo si se rompe.

Depende de usted si está preparado para asumir ese riesgo de forma gratuita. Yo no. Por lo tanto, debe discutir esto con su cliente y preguntarles cuánto están dispuestos a pagar por ello. Asegúrese de que comprendan el riesgo de que rompa algo y tenga un acuerdo sobre cómo se paga eso.

A propósito, no he abordado la cuestión del tiempo / costo directo para refactorizar, como ya comenté, la mayoría de los clientes dirán "¿Qué valor obtengo por pagarle tanto dinero?", esa es la parte fácil de la discusión.

    
respondido por el mattnz 29.11.2012 - 02:09
4

Podría realizar una limpieza para mantener mi propia cordura, pero no incluiría mi limpieza en el conjunto de cambios final que pruebo y presento al cliente. Las otras respuestas están justo en ese punto. No quiere arriesgarse a romper algo porque hizo algo que no fue solicitado.

Si cree que el código en su forma actual será difícil de modificar y mantener, infórmelo al cliente tan pronto como sea posible. Si llevo mi auto a un mecánico para cambiar el aceite, no espero que él pretenda no ver que mis líneas de freno están dañadas solo porque no es lo que contraté para que las arregle. Espero que sugiera reparaciones y mantenimiento razonables.

Puede ser muy útil para su cliente saber que el código es malo. Pueden decidir que no quieren volver a trabajar con el autor. Pueden decidir que no vale la pena arreglarlo. O podrían tener que arreglarlo. Te están pagando por tu experiencia. ¡Suminístrelo!

    
respondido por el PeterAllenWebb 29.11.2012 - 03:05
3

El código trucosy de refactorización siempre es peligroso. El riesgo de omitir alguna suposición que estaba presente en el original es demasiado alto, y es posible que termine haciendo más daño que bien, por muy bien intencionado que esté al principio.

Si no necesita para hacerlo como parte de este trabajo, entonces no lo toque con un poste de 10 pies. Por muy horrible que parezca, una vez que haya cumplido con el requisito, puede retirarse cuando termine y el problema ya no sea suyo.

Por otra parte, si necesita hacerlo, entonces tal vez es hora de renegociar los términos con el cliente. Después de todo, ha sido objeto de un montón de basura que no estaba en el acuerdo original, por lo que no es realista esperar que cumpla con los términos acordados originalmente, dadas las circunstancias (lo cual no podía esperarse razonablemente haber sido consciente de cuando tomaste el trabajo). El cliente también puede estar en posición de hacerse con el desarrollador original y, al menos, aclarar las cosas un poco mejor de lo que podría imaginar por su cuenta, por lo que es lo mejor para usted.

    
respondido por el Maximus Minimus 29.11.2012 - 02:20
0

Si es algo fácil (en mi definición toma menos de una hora), entonces lo haría para preservar mi salud mental.

Sin embargo, cualquier cosa más grande que eso necesita un poco de pensamiento.

¿Cuánto tiempo le llevará terminar su trabajo (el que le está pagando) sin refactorizar? Llamemos a esto A.

¿Cuánto tiempo le llevará terminar su trabajo después de refactorización, más la cantidad de tiempo de la refactorización real y probando (para asegúrate de no haber roto nada). Llamemos a esto B.

Solo lo haría si B es significativamente menor que A. De lo contrario, pediría una compensación al cliente.

    
respondido por el System Down 29.11.2012 - 01:20

Lea otras preguntas en las etiquetas