2008-09-23 17 views

Respuesta

12

Una de las cosas que busco en un código es la prueba de unidad. Esto dará la libertad de refactorizarlo. Entonces, si el código no tiene pruebas, lo considero un código heredado.

+1

Un programador pragmático que veo aquí. –

1

el término "código heredado" es subjetivo y probablemente es un término cargado. pero, en general, me suscribo a la opinión de que el código heredado no se puede probar por unidad y, como tal, es difícil de refactorizar.

5

Micheal Feathers, autor de la excelente "Trabajar eficazmente con Legacy Code", lo define como cualquier código que no tenga pruebas.

+0

Hmm ... ¿entonces de acuerdo a esto, el 40% del código que se está desarrollando hoy es el código Legacy ??? – AviD

+0

Sí. Según Feathers, si se escribe sin pruebas unitarias, se convierte en código heredado en el momento en que se escribe. –

+0

¡Oh, vamos! Sí, las pruebas unitarias son importantes, pero esta definición lo lleva demasiado lejos. Legacy significa obsoleto. Código sin pruebas no está desactualizado, es solo un dolor en el **** – Treb

0

Tal vez esté mal, pero no creo que haya una métrica establecida para esto.

Por lo general, un fragmento de código se considera heredado, cuando se han visto al menos 5-6 ciclos de liberación (tal vez más). La mayoría de las veces, el implementador original ya no está presente y el código se mantiene.

-1

No conozco ninguna métrica real que pueda usarse para determinar si algo es "código heredado" o no, pero cualquier cosa más antigua que la escrita podría considerarse heredada. El código heredado significa diferentes cosas para diferentes personas/organizaciones, por lo que realmente es algo subjetivo.

8

Si el código:

  1. ha sido sustituido por el código nuevo que implementa la misma o funcionalidad o mejor
  2. no está siendo utilizado por los sistemas actuales
  3. está pronto para ser sustituido por algo completamente distinto
  4. está archivado por razones históricas
  5. cuando los vendedores que dejar de apoyar
+0

¿No es eso lo que llamarías cruft? –

4

No creo que haya una respuesta definitiva, pero sí creo que la probabilidad de que el código sea código heredado aumenta con el número de personas que no quieren tocarlo y la probabilidad de que cambiarlo lo haga descanso.

0

Casi segundos después de que los desarrolladores salgan de las instalaciones. :)

Si ...

no hay dinero en el banco para las nuevas características

no se puede encontrar a alguien que admita a trabajar en el proyecto que necesita ser arreglado

el código fuente para el proyecto de su propiedad se ha convertido en MIA

... entonces está trabajando en el código heredado.

0
  • Cuando el código es lo suficientemente antiguo, nunca se encontró con el desarrollador que originalmente escribió el código.
  • Cuando las bibliotecas de terceros ya no son compatibles.
5

Una mejor pregunta sería probablemente lo que marca una pieza de código como no heredada.

Para mí, legacy significa incambiable. Entonces, tan pronto como ya no puedas cambiarlo, es un legado.

Ya sea que se elimine esa capacidad mediante requisitos fijos, el temor a la rotura, la pérdida de conocimiento o cualquier otro impacto es en gran medida irrelevante.

Una nota relacionada es que no creo que alguna vez use la palabra exacta heredada, ya que despierta demasiadas emociones para ser útil.

6

se utiliza el término "legado" para referirse a cualquier código, todavía en uso, desarrollado utilizando la tecnología que hemos dejado de desarrollo activo en.

Es código que preferimos volver a escribir usando herramientas más recientes de modificar en su estado actual.

1

En mi opinión, todo el código que se escribe es código heredado. Puede tomar algún tiempo antes de que se olvide la intención original y todas las decisiones tomadas sobre el código, pero tarde o temprano no podrá imaginar lo que estaban pensando mientras lo escriben. Nunca escribes código heredado por ti mismo, ¿verdad?

El uso de pruebas unitarias o algunas medidas como segundos desde que el desarrollador salió del edificio realmente no miden si el código es heredado o no. El código heredado puede tener un buen conjunto de pruebas y comentarios unitarios y puede haber sido sometido a una estricta revisión del código y otros análisis. Esto no significa que el código aún sea relevante para el programa en cuestión. Simplemente sugiere que el código podría estar escrito de manera comparable. Y si ya no es relevante, el código realmente dificultará la solución del problema para el que se desarrolló el programa.

+0

Yo mismo prefiero este enfoque. Una vez que se ha escrito el código, es "heredado" si hay pruebas que cubren el código o no. Puede tener pruebas que cubran el código que se escribió hace eones, no hay nadie cerca que esté familiarizado con el código y/o use tecnología "vieja" ... –

0

Por lo general, las personas se refieren a algo como código heredado cuando todavía no hay nadie familiarizado o que se siente cómodo manteniendo el código.

Las pruebas unitarias hacen que sea más fácil para las personas que no están familiarizadas con el código profundizar en él, por lo que la teoría es que ayuda a evitar que el código se vuelva "heredado".

0

A menudo, cuando el código es heredado se cambia de una manera diferente. Las personas son con miedo para cambiarlo, pero también los cambios tienden a ser rápido y sucio porque nadie entiende las consecuencias. Pueden surgir problemas de duplicación de código, porque las personas no desean asumir el riesgo asociado con cambios más profundos.

Por lo tanto, en tales circunstancias, la situación puede empeorar, a un ritmo creciente.

1

El código heredado se ha definido en muchos lugares como "código sin pruebas". No creo que sean específicos en los tipos de pruebas, pero en general, si no puedes cambiar tu código sin el temor de que algo desconocido ocurra, bueno, cambia rápidamente.

Ver "Working Effectively with Legacy Code"

Cuestiones relacionadas