Cómo implementar código de una manera que reduzca la posibilidad de reelaboraciones completas [cerrado]

StackOverflow https://stackoverflow.com/questions/937457

  •  06-09-2019
  •  | 
  •  

Pregunta

Se descartó un trabajo debido a un único cambio menor en las especificaciones que resultó no haber sido especificado correctamente.Si se hubiera hecho desde el inicio del proyecto, la mayor parte de ese trabajo En primer lugar, nunca habría sido necesario..

¿Cuáles son algunos buenos consejos/principios de diseño que evitan que estas cosas sucedan?

¿O para reducir la cantidad de reelaboración del código que se necesita para implementar solicitudes de funciones o cambios de diseño a mitad de la implementación?

¿Fue útil?

Solución

modularizar. Hacer pequeños bloques de código que pueden hacer bien su trabajo. Sin embargo, eso es sólo el principio. Su generalmente una gran combinación de factores que contribuyen a codificar tan malo que necesita una reanudación completa. Todo, desde los requisitos altamente inestables, mal diseño, la falta de propiedad del código, la lista sigue y sigue.

La adición a lo que otros han criado. Communication Francia La comunicación entre usted y el cliente, y la gestión, y que los otros desarrolladores, usted y su departamento de control de calidad, la comunicación entre todos es la clave. Asegúrese de que la gerencia entiende plazos razonables y asegúrese de que tanto usted como el cliente entienda exactamente qué es lo que su edificio.

Otros consejos

Tómese el tiempo para mantener la comunicación abierta con el cliente para el que está creando el producto.Establezca hitos y configure un tiempo para mostrar el proyecto al cliente en cada hito.Incluso si el cliente está completamente decepcionado con un hito cuando se lo muestras, puedes tachar lo que tienes y empezar de nuevo desde el último hito.Esto también requiere que su trabajo se construya en bloques que funcionen independientemente uno del otro, como afirmó Csunwold.

Puntos...

  1. Mantenga una comunicación abierta
  2. Sea abierto y honesto con el progreso del producto.
  3. Esté dispuesto a cambiar diariamente según las necesidades del negocio del cliente y las especificaciones para el cambio del producto.

Requisitos de software cambian, y no hay mucho que se puede hacer al respecto excepto por una interacción más frecuente con los clientes.

Uno puede, sin embargo, crear código que es más robusto ante el cambio. No te va a salvar de tirar código que cumple con el requisito de que nadie necesita más, pero puede reducir el impacto de dichos cambios.

Por ejemplo, cada vez que esto se aplica, utilizar interfaces en lugar de clases (o el equivalente en su idioma), y evitar la adición de las operaciones de la interfaz a menos que esté absolutamente seguro de que los necesite. Con la construcción de sus programas de esa manera es menos probable que se basan en el conocimiento de una aplicación específica, y que es menos probable para poner en práctica las cosas que usted no necesita.

Otra ventaja de este enfoque es que se puede cambiar fácilmente una aplicación a otra. Por ejemplo, a veces vale la pena escribir el más tonto (en la eficiencia), pero la más rápida de escribir y prueba de aplicación para su prototipo, y sólo reemplazarlo con algo más inteligente al final, cuando el prototipo es la base del producto y el rendimiento realidad asuntos. Me parece que esta es una forma muy efectiva para evitar optimizaciones prematuros, y por lo tanto tirar cosas.

modularidad es la respuesta, como se ha dicho. pero puede ser una respuesta difícil de utilizar en la práctica. sugiero centrándose en:

  • pequeñas bibliotecas que hacen cosas así predefinidas
  • dependencias mínimas entre módulos

interfaces de escritura primera es una buena manera de lograr ambas cosas (con interfaces necesarias para las dependencias). escribir pruebas siguiente, contra las interfaces, antes de que el código está escrito, a menudo pone de relieve las opciones de diseño que son no-modular.

No sé si su aplicación es IU-intensiva; que puede hacer que sea más difícil para ser modular. aún así es por lo general vale la pena el esfuerzo, pero si no, entonces asume que va a ser desechado después de poco tiempo y sigue el principio iceberg, que el 90% de la obra no está ligado a la interfaz de usuario y por lo tanto más fácil de mantener modular.

Por último, recomiendo "el programador pragmático" por Andrew Hunt y Dave Thomas como lleno de consejos. mi favorito personal es seco - "no repita a sí mismo." - cualquier código que dice la misma cosa dos veces huele

  • iterar pequeña

  • iterar a menudo

  • prueba entre iteraciones

  • obtener un producto de trabajo sencilla a cabo lo antes posible para que el cliente puede dar entrada.

Básicamente asumir cosas obtendrá expulsado, por lo código de forma apropiada , y no te lo suficiente en algo que tenga que ser desechado cuesta mucho tiempo.

Buen día,

Mirando a través de las otras respuestas aquí noto que todo el mundo está mencionando qué hacer para su próximo proyecto.

Una cosa que parece faltar, aunque está teniendo un washup para averiguar por qué la especificación. estaba fuera de sincronización. con las necesidades reales que necesita el cliente.

Me preocupa que si no lo hace, no importa qué enfoque que está tomando para la implementación de su próximo proyecto, si todavía tienes ese desajuste entre las necesidades reales y la especificación. para su próximo proyecto entonces usted una vez más estar en la misma situación.

Puede ser algo tan simple como la mala comunicación o tal vez fluencia requerimientos del cliente.

Sin embargo, al menos si se conoce la causa y se puede tratar de ayudar a minimizar las posibilidades de que vuelva a ocurrir.

No tocar lo que opinan otras respuestas y hay algunas grandes cosas allí, pero por favor, aprender de lo ocurrido para que usted no está condenado a repetirla.

HTH

aplausos,

A veces una reescritura es la mejor solución!
Si va a escribir software para una cámara, se puede asumir que la próxima versión también hará vídeo o de vídeo estéreo o escaneo láser 3D e incluyen todos los ganchos de toda esta funcionalidad, o se podría escribir una arquitectura astronauta extensible versátil tal que podría hacer frente a la próxima cámara, incluyendo motores a reacción -. pero le costará tanto en dinero, recursos y el rendimiento que podría haber sido mejor de no hacerlo

Una reescritura completa de nuevas funcionalidades en un nuevo papel no es siempre una mala idea.

Al igual que csunwold dijo, modularización de su código es muy importante. Escribirlo de manera que si una pieza cae propenso a errores, no arruinar definitivamente el resto del sistema. De esta manera, puede depurar una sección con errores sola mientras que ser capaz de confiar con seguridad en el resto.

Más allá de esto, la documentación es la clave. Si el código se anota manera clara y ordenada, volver a trabajar en el futuro será infinitamente más fácil para usted o cualquiera que esté depuración.

El uso de control de código fuente puede ser útil también. Si encuentra una pieza de código no funciona correctamente, siempre existe la oportunidad de volver a un pasado iteración robusto.

A pesar de que no se aplica directamente a su ejemplo, al escribir código Trato de mantener un ojo para las formas en que puedo ver el software en evolución en el futuro.

Básicamente trato de anticipar donde el software se irá, y críticamente, me resisto a la tentación de poner en práctica cualquiera de las cosas que puedo imaginar sucediendo. Todo lo que estoy después está tratando de hacer que las API e interfaces compatibles con los futuros posibles sin la aplicación de esas características, sin embargo, con la esperanza de ayudar a estos posibles escenarios '' me vienen con una interfaz mejor y más preparada para el futuro.

no siempre funciona por supuesto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top