2009-01-27 22 views

Respuesta

18

¿Cuál es su definición de código de espagueti? Para mí, el código de espagueti es un método/función demasiado larga, desestructurada y caótica. Esto no sucede debido a los requisitos cambiantes, sino a la pereza de los desarrolladores. Si tiene que volver a escribir un método porque las cosas han cambiado, también puede limpiarlo directamente sin demasiada sobrecarga.

Si se refiere a una estructura de objeto mal diseñada en su lugar, puede estar en lo cierto. Si los requisitos cambian demasiado rápido, terminará fácilmente con clases que ya no hacen para lo que estaban destinadas, jerarquías de objetos defectuosos y similares.

Hay algunos tips sobre el tema para evitar esto:

  • No overdesign en el principio. Trate de mantener sus métodos, clases y jerarquías de clase lo más simple posible para que los cambios sean menos difíciles.

  • Después de un requisito de cambios, no empiece a implementar en ese mismo momento, pero dar un paso atrás y mirar si su estructura de código debe ser cambiado antes de la nueva característica puede encajar.

  • comunicar a sus cliente, que el cambio requiere algo de tiempo. Si sabe que saben que cambiar el requisito también implica cambios en la estructura de su código, tendrá menos presión para exprimir su código en las estructuras existentes.

  • Siempre refactor durante la codificación. En mi experiencia, las pequeñas refactorizaciones como mover código redundante desde varios lugares a un único método o clase son las más efectivas para mantener tu código limpio.Esté siempre atento a los olores de código y elimínelos lo más rápido posible para facilitar su trabajo. Esto requiere un poco de experiencia, pero ahora es el momento adecuado para comenzar a entrenar esto :-)

  • Como dijo krosenvold, juega seguro añadiendo casos de prueba a tu código para alejar tu miedo a los grandes cambios. Después de haber trabajado en un gran sistema heredado, conozco este miedo y lo que se siente trabajar sin una red de seguridad. Cuando trabajas en tu red de seguridad primero, se vuelve menos aventurado hacer los cambios necesarios.

+1

+1 @ código de reestructuración antes de implementar ng una nueva característica es una práctica muy sensata para hacer – Spoike

+0

Enfrentando el mismo problema que el OP, tengo que decir que esta fue una respuesta muy útil y bien pensada. – rcampbell

4

Creo que uno de los puntos clave es escribir código que se puede cambiar fácilmente. Esto normalmente favorece lo específico en lugar de lo abstracto. También hay algunos patrones de diseño que tienden a construir pilares muy grandes a través de su código. Dichos pilares tienen una tendencia a hacer que los cambios sucedan en los lugares equivocados porque tienes miedo de cambiar esas monumentales piezas centrales de tu código que realmente deberías cambiar.

La cobertura de prueba es realmente una gran ayuda al permitirle realizar una refactorización sin miedo. Es el paracaídas el que hace la diferencia entre el loco y el práctico piloto de avión de prueba.

2

La buena cobertura de prueba es la mejor defensa contra cambios frecuentes.

0

Catering para requisitos frecuentes cambia es el propósito de los siguientes:

diseño orientado
  • de objetos (abstracción Dominio del negocio y la división en conceptos orientados a propósito gestionables)
  • Los patrones de diseño (la reutilización de soluciones de codificación establecidos) desarrollo basado en MVC
  • (separación de los datos, lógica de negocio y Vista/presentación)
  • arquitectónico de desarrollo basado en marco (a diseñar un marco arquitectónico primero antes de cometer cualquier proyecto específico diseño y desarrollo)

Así que si quiere evitar el espagueti, aprenda y aplique los conceptos mencionados anteriormente.

0

Para cualquier requerimiento, diseñe su código para los cambios máximos posibles. Esto se puede hacer separando la parte invariable de la parte variable. Esto no llevará mucho tiempo antes del desarrollo. El código de espagueti aparece la mayor parte del tiempo debido al cambio de requisitos, y su diseño y programación deberían ser capaces de soportarlo.

http://www.dreamsongs.org/Files/DesignBeyondHumanAbilitiesSimp.pdf sería útil.

2
  1. anticipar los cambios, si/cuando se puede, y generalizar los requisitos, si es posible
  2. más importante, anticipar el tiempo entre los cambios
  3. trozo el trabajo/rasgos/iteraciones para que puedan ser completadas en el tiempo entre cambios
  4. voila! que ahora está haciendo ágil sobre la marcha y el cambio constante parece normal de 8-P
  5. toman aspirina, zumbido en jefe, bucle de nuevo a # 1 ;-)
2

cambios frecuentes a los requisitos de un proyecto, incluyendo la adición o eliminar características, no necesariamente conducen al código de espagueti, pero probablemente lo hará si no escribe software modular (consulte Modular Programming). Las cosas hay que luchar son los siguientes:

  • Cada módulo (si se trata de una función, clase, biblioteca, o la aplicación completa) tiene un propósito bien definido.
  • Cada módulo es idealmente no más grande de lo que necesita ser para cumplir con su propósito definido.
  • Los módulos son ligeramente acoplados, lo que significa que pueden sustituirse por otros módulos sin causar la ruptura del software.
  • Los módulos pueden ser probado individualmente para verificar que cumplen su función sin error.
  • Los módulos son organizados de una manera que ayuda a que el dominio del problema sea intuitivo para otros programadores.

Dado que los módulos están bien organizados (una vez más, pueden ser funciones, clases, bibliotecas y aplicaciones completas) que trabajan juntos sin mucha conexión, la forma de lidiar con los cambios es escribir nuevos módulos, expandir en módulos existentes, y conecta módulos de nuevas maneras.

En cuanto a cómo se llega a una situación de tener estos buenos módulos de software en primer lugar, refactoring es la clave.Otras prácticas como unit testing y una metodología de desarrollo (como Scrum) también son útiles, pero la refactorización es lo que más te gusta, y es una cosa que muchos entornos empresariales no tienen suficiente tiempo.

Para obtener buenos consejos sobre la escritura de código ligeramente acoplado, investigue un poco en dependency injection.

0

arrastramiento del alcance/mal análisis de los requisitos (siempre cambiante):

evitar como la peste es el mejor consejo que se puede dar para garantizar cualquier calidad (código o de otro tipo), siempre va a tener efectos negativos (sobre todo lados) independientemente de qué tan bien intente planificar sus proyectos de desarrollo.

La mejor solución es establecer hitos y saber cuándo mostrar this link a quien cambie los requisitos.

Puede ser súper humano en su enfoque, pensando de la caja y haciendo que el código sea tan fácil de cambiar como sea posible, pero aún fallará horriblemente si solo dice sí a todas las características sin entender cómo eso debería afectar el pirámide de Calidad-Tiempo-Alcance del proyecto.

0

frecuentes cambiantes requisitos es un problema que se desarrollaron métodos ágiles para manejar - que se crearon al menos en parte, en el reconocimiento del problema que los requisitos hacer el cambio, a menudo por muy buenas razones.

Si cambia un requisito que aún no ha implementado, entonces el impacto debería ser mínimo si no invierte demasiado esfuerzo en el diseño inicial sino que gestiona la evolución del diseño mediante pequeñas iteraciones, pruebas constantes y refactorización.

Si un requisito que ya se ha implementado cambia y no puede mover su fecha de finalización, tiene tres opciones: trabajar más horas para recuperar el tiempo perdido, eliminar requisitos (reducir alcance) para pagar el trabajo extra, o reducir la calidad del producto (que podría ser la opción "spaghetti" ")

0

Si va a salir con un consejo:.!! Refactor, refactor, refactorizar menudo

Todo lo demás es detalles acerca facilitando la refactorización.

Cuestiones relacionadas