¿Diseña / dibuja / dibuja una solución de desarrollo primero y luego la desarrolla? ¿Si es así, cómo? [cerrado]

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Trabajo mucho con los tomadores de decisiones que buscan usar mejor la tecnología en sus negocios. Descubrí que una imagen vale más que mil palabras y crear prototipos de un sistema en un diagrama de algún tipo siempre presta mucha atención a una discusión. He utilizado Visio, UML (algo), mapas mentales, diagramas de flujo y simulacros de WinForms para iniciar la visión de estos patrocinadores para garantizar que todos estén en la misma página. Parece que siempre estoy buscando un proceso común que pueda usarse para unir la visión empresarial al proceso de desarrollo para que todos terminemos en el mismo extremo, " Algo funcional que resuelva un problema ". .

Estoy buscando sugerencias o notas de Cliff sobre cómo abordar el proceso de diseño, de modo que funcione para aplicaciones que pueden tardar una semana en desarrollarse, pero que también pueden usarse para abarcar proyectos más grandes.

Sé que esto se adentra en el área de UML, pero descubrí que me cuesta mucho encontrar una guía para usar adecuadamente los distintos tipos de diagramas, y mucho menos para ayudar a los usuarios de negocios a entender los diagramas y relacionarse con ellos.

¿Qué utiliza para capturar una visión de un sistema / aplicación para luego presentarla a los patrocinadores de un proyecto? (todo antes de escribir una sola línea de código) ...

¿Fue útil?

Solución

¡Papel o pizarra!

Para el desarrollador solitario, recomiendo el papel. Al menos al principio, es posible que desees formalizarlo con UML, pero no creo que sea necesario.

Para un grupo de desarrolladores que trabajan juntos (físicamente), recomendaría una pizarra. De esa manera es visible para todos y todos pueden mejorar y contribuir. Una vez más, es posible que desee formalizarse en este momento, pero todavía no creo que sea necesario

Cuando empecé a hacer OOP (o diseñando un algoritmo), lo hacía todo en mi cabeza mientras programaba. Pero después de hacer algunos proyectos complejos razonables, definitivamente veo el beneficio de extraer las interacciones entre diferentes objetos en un sistema.

Hago proyectos por mi cuenta, así que uso muchas tarjetas de índice para diseñar clases y papel para sus interacciones. El punto es que tiene que ser fácil de cambiar. He jugado con Dia, un editor de diagramas, para hacer UML, pero hacer cambios es demasiado difícil. Quiero poder hacer cambios rápidos, para poder descubrir qué funciona mejor.

Vale la pena mencionar que TDD y hacer proyectos de " spike " [1] también pueden ayudar en el diseño de un sistema.

[1] De Extreme Programming Adventures en C #, página 8:

  

" Spike " es un término de programación extrema   que significa "experiencia". Usamos la palabra   porque pensamos en un pico como   Experimento rápido, casi de fuerza bruta.   dirigido a aprender una sola cosa.   Piensa en clavar un gran clavo a través de un   junta.

Otros consejos

Para tareas pequeñas o muy limitadas, creo que los desarrolladores casi están de acuerdo en que cualquier tipo de diagrama es un paso innecesario.

Sin embargo, cuando se trata de un sistema más grande y complicado, especialmente cuando dos o más procesos tienen que interactuar o se necesita una lógica de negocios compleja, Los diagramas de actividad del proceso pueden ser extremadamente útiles. Usamos métodos ágiles bastante puros en el desarrollo y encontramos que estos son casi el único tipo de diagramas que utilizamos. Es sorprendente cuánto puede optimizar un diseño de alto nivel con solo tener todas las piezas grandes frente a usted conectándolas con líneas de flujo. No puedo enfatizar lo importante que es adaptar el diagrama a su problema, no al revés, así que mientras el enlace proporciona un buen punto de partida, simplemente agregue lo que tenga sentido para representar su sistema / problema.

En cuanto al almacenamiento, la pizarra puede ser excelente para la lluvia de ideas y cuando la idea aún se está refinando, pero diría que la electrónica y la wiki son mejores una vez que la idea está tomando una forma definitiva (OmniGraffle es el rey de los diagramas Si tienes la suerte de poder usar una Mac en el trabajo :). Tener un área donde volcar todos estos diagramas puede ser extremadamente útil para que alguien nuevo obtenga una comprensión rápida de una parte general del sistema sin tener que revisar el código. Además, como los diagramas de actividad representan bloques lógicos más grandes, no se trata de tener que mantenerlos siempre actualizados. Cuando realice un cambio importante en un sistema, entonces sí, pero es probable que utilice el diagrama existente para planificar el cambio de todos modos.

Al diseñar una aplicación (principalmente creo aplicaciones web, pero esto se aplica a otras), normalmente creo historias de usuario para determinar exactamente lo que realmente necesita el usuario final. Estos forman los "requisitos comerciales típicos".

Una vez que las historias de usuario se han definido, creo diagramas de flujo para trazar los caminos que las personas tomarán cuando utilicen la aplicación.

Después de ese paso (que a veces recibe un proceso de aprobación) creo bocetos de interfaz (lápiz / lápiz y papel de gráfico), y comienzo el diseño de las bases de datos. Este y el siguiente paso suelen ser los procesos que consumen más tiempo.

El siguiente paso es tomar los bocetos y convertirlos en esquemas de alambre limpios. Utilizo OmniGraffle para este paso: está a años luz de Visio.

Después de esto, es posible que desee hacer diagramas UML típicos u otros diseños de objetos / organización funcional, pero a la gente de negocios no le importará mucho ese tipo de detalle :)

Cuando estoy armando un diseño, me preocupa transmitir las ideas de manera limpia y sencilla al público. Esa audiencia está formada por (típicamente) personas diferentes con diferentes orígenes. Lo que no quiero hacer es entrar en " modo de enseñanza " para un modelo de diseño particular. Si tengo que dedicar un tiempo considerable a decirle a mi cliente qué significa la flecha con la cabeza sólida y en qué se diferencia de la que está hueca o qué significa un cuadrado en lugar de un círculo, no estoy progresando, al menos no el progreso Quiero.

Si es razonablemente informal, lo dibujaré en una pizarra o en un papel: bloques y flechas simples a lo sumo. El punto del diseño aproximado en este punto es asegurarse de que estemos en la misma página. Sin embargo, variará según el cliente.

Si es más formal, podría sacar una herramienta UML y armar algunos diagramas, pero la mayoría de mis clientes no escriben software y probablemente solo tienen un poco de interés en las entrañas. Lo mantenemos en la " burbuja y línea " nivel y podría juntar algunas listas con viñetas donde se necesita una aclaración. Mi cliente no quiere ver diagramas de clase o algo así, normalmente.

Si necesitamos mostrar alguna interacción con la GUI, presentaré algunos prototipos de ventanas simples en Visual Studio: es rápido y fácil. Descubrí que el cliente puede relacionarse con eso fácilmente.

En pocas palabras, produzco dibujos simples (en algún formato) que pueden comunicar el diseño a las partes interesadas y los interesados. Me aseguro de saber lo que quiero que haga y, lo que es más importante, qué NECESITAN que haga y hablar con eso. Por lo general, no entra en la maleza porque la gente se pierde allí y no encuentro el tiempo bien empleado para hacer un diagrama de todo al noveno grado. En última instancia, si el cliente y yo (y todas las demás partes interesadas) estamos en la misma página después de analizar el diseño, soy un tipo feliz.

Soy un chico ágil, así que tiendo a no dedicar mucho tiempo a hacer diagramas. Ciertamente, hay momentos en los que dibujar algo en una pizarra blanca o en una servilleta lo ayudará a asegurarse de que comprende un problema o un requisito en particular, pero no hay nada mejor que hacer funcionar un software delante de un cliente para que puedan ver cómo funciona. Si se encuentra en una situación en la que sus clientes aceptarían iteraciones y demostraciones frecuentes en comparación con el diseño inicial, le digo que vaya. Es incluso mejor si están bien obtener comentarios tempranos en forma de pruebas de unidad o de integración aprobadas (algo como Fit funciona bien aquí).

Por lo general, no me gustan los prototipos, porque con demasiada frecuencia el prototipo se convierte en el producto final. Tuve la desgracia de trabajar en un proyecto que básicamente extendía una oferta comercial que resultó ser una "prueba de concepto". que se empacó y se vendió. El proyecto se canceló después de que se registraron más de 1000 defectos en la aplicación principal (sin contar las mejoras o personalizaciones en las que estábamos trabajando actualmente).

Intenté usar UML y descubrí que, a menos que la persona que mira los diagramas entienda UML, es de poca ayuda. Las simulaciones de pantalla generalmente no son una mala idea, pero solo muestran el lado de la aplicación que afecta directamente al usuario, por lo que no obtiene mucho kilometraje por nada que no sea de presentación. Por extraño que sea, herramientas como el diseñador de flujo de trabajo en Visual Studio producen diagramas bastante claros que son fáciles de entender para los desarrolladores, por lo que es una buena herramienta para generar un flujo de trabajo de la aplicación central, si su aplicación es lo suficientemente compleja como para beneficiarse de ella.

Aún así, de todos los enfoques que he usado a lo largo de los años, nada le gana a un usuario que tenga en sus manos algo que le permita saber qué tan bien entiende el problema.

Sugiero leer los artículos de Joel sobre " Especificaciones funcionales indoloras " ;. La Parte 1 se titula " ¿Por qué molestarse? & Quot; .

Utilizamos Pantallas de maquetas en el trabajo (" Prototipos de pantalla fáciles y rápidos "). Es fácil alterar las pantallas y los detalles dejan claro que esto es solo un diseño.

Las maquetas se incluyen en un documento de Word que contiene la especificación.

De Blockbusting conceptual: Una guía para mejores ideas por James L. Adams:

  

Los bloques intelectuales dan como resultado una   ineficiente elección de tácticas mentales   o una escasez de intelectuales   munición. . . . 1. Resolviendo el   problema usando un lenguaje incorrecto   (verbal, matemática, visual) - as   tratando de resolver un problema   matemáticamente cuando puede más fácilmente   ser realizado visualmente

(pág. 71, 3ª edición)

No hace falta decir que si elige usar diagramas para capturar ideas que pueden ser mejor capturadas con las matemáticas, es igualmente malo. El truco, por supuesto, es encontrar el lenguaje correcto para expresar tanto el problema como la solución. Y, por supuesto, puede ser apropiado usar más de un idioma para expresar tanto el problema como la solución.

Lo que quiero decir es que estás asumiendo que los diagramas son la mejor manera de hacerlo. No estoy seguro de estar dispuesto a hacer esa suposición. Puede obtener una mejor respuesta (y el cliente puede estar más contento con el resultado) a través de algún otro método de enmarcar los requisitos y los diseños propuestos.

Por cierto, Conceptual Blockbusting es una lectura altamente recomendada.

El consejo de UML funciona bien si estás trabajando en un gran & amp; Proyecto averso al riesgo con muchas partes interesadas y con muchos colaboradores. Incluso en esos proyectos, realmente ayuda a desarrollar un prototipo para mostrar a los tomadores de decisiones. Por lo general, recorrerlos a través de la interfaz de usuario y una historia de usuario típica es suficiente. Dicho esto, debe tener en cuenta que el enfoque en la IU para los tomadores de decisiones tenderá a hacer que descuiden algunos problemas importantes del servidor, como validaciones, reglas comerciales e integridad de los datos. Tendrán a escribir estas cuestiones como " técnicas " problemas en lugar de decisiones de negocios.

Si, por otro lado, estás trabajando en un proyecto Agile en el que es posible realizar cambios de código rápidamente (y revertir errores rápidamente), puedes crear un prototipo evolutivo con todos los trabajos. La arquitectura de su aplicación debe ser lo suficientemente flexible y flexible como para admitir un cambio rápido (por ejemplo, un patrón de diseño de objetos desnudos o un MVC al estilo de Rails). Ayuda tener una cultura de desarrollo que fomente la experimentación y reconoce que BDUF no es un factor predictivo de que el software funcione correctamente.

4 + 1 vistas son buenas solo para personas técnicas. Y solo si les interesa lo suficiente. ¿Recuerda esas últimas docenas de veces que tuvo dificultades para discutir los diagramas de casos de uso con el cliente?

Lo único que encontré que funciona con todo el mundo es, de hecho, mostrarles pantallas de su aplicación. Usted mismo lo dijo: una imagen vale más que mil palabras.

Curiosamente, hay dos enfoques que funcionaron para mí:

  1. Presente a los usuarios un manual de usuario completo (antes de que incluso se inicie el desarrollo), O
  2. Use maquetas que no se parecen en nada a las aplicaciones terminadas: discuta primero las pantallas principales de su aplicación. Cuando esté satisfecho, continúe discutiendo las maquetas pero un escenario a la vez.

Para la opción (1) puedes usar lo que quieras, en realidad no importa.

Para la opción (2) es completamente correcto comenzar con lápiz y papel. Pero pronto estará mejor usando una herramienta de maquetas especializada (en cuanto necesite editar, mantener u organizar sus maquetas)

Terminé escribiendo mi propia herramienta de maqueta en 2005, se volvió bastante popular: MockupScreens

Y aquí está la lista más completa de herramientas de maquetas que conozco. Muchos de ellos son gratuitos: http://c2.com/cgi/wiki?GuiPrototypingTools

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