¿Cuál es el estándar para modelar aplicaciones modernas antes del desarrollo?

9

Estoy tomando mi primera aplicación de nivel empresarial y quiero que mi equipo modele toda la aplicación ASP.NET MVC C # incluso antes de que toquemos una línea de código.

ACTUALIZACIÓN: Esto no pretendía ser una discusión filosófica sobre cuándo documentar / modelar una aplicación. Solo proporcione respuestas para "cómo" documentar / modelar.

La verdad es que siempre he escatimado en este departamento y nunca antes había modelado una aplicación. ¿Cuál es la forma estándar de hacer esto? ¿Qué tipo de diagramas deberían usarse y cómo se vería la documentación? Se agradecen los enlaces a diagramas de muestra y documentación.

Cuando busco, puedo encontrar numerosas cosas en la red, pero quería ver si existe un consenso moderno actual sobre cómo hacerlo.

¡Gracias por adelantado!

Frase de cierre

No tenía idea de que este era un tema tan difícil. Gracias a todos los que pudieron dejar de lado la controversia obvia y proporcionar respuestas útiles. Fue una discusión interesante por decir lo menos :)

Otro enlace útil que descubrí es este: /programming/61487/do-you-use-uml-in-agile-development-practices/61519#61519

Chev
fuente
66
¿Quieres hacer cascada?
Etienne de Martel
1
@ Etienne, cascada? Si se trata de algún tipo de referencia sarcástica, no lo entiendo. Se agradecen las críticas constructivas / sugerencias. ¿Qué tal si en lugar de votar un comentario inútil, agregas tus propios comentarios para ayudarme a entender el problema?
66
"Quiero que mi equipo modele toda la aplicación ASP.NET MVC C # incluso antes de que toquemos una línea de código". Odio decir esto, pero casi te estás comprometiendo con el fracaso incluso antes de comenzar. El alcance completo de la usabilidad, los requisitos del usuario y la mantenibilidad son totalmente invisibles hasta que realmente comienza a escribir código; Si insiste en un gran diseño por adelantado, pasará mucho más tiempo actualizando sus diseños que escribiendo su aplicación. Los diseños de alto nivel están bien , pero ¿documentan toda la aplicación? Absolutamente no.
Julieta
3
@Chevex: Waterfall es un método de desarrollo que implica mucho diseño inicial. Parece bastante aceptado en la comunidad de desarrollo de software que este método de desarrollo funciona mal en el mejor de los casos.
quentin-starin
1
touche @Chevex, touche ... se aleja en silencio
mcgrailm

Respuestas:

6

un consenso moderno actual

La verdad es que, actualmente, eso es algo de lo que carece el desarrollo moderno de software: un consenso sobre el modelado. UML parece ser algún tipo de divisor común más pequeño, pero en realidad solo hay consenso sobre la notación, no sobre la semántica. Existen docenas de opiniones diferentes sobre cómo se debe interpretar UML para crear código (tal vez pueda encontrar una interpretación que esté bien para su equipo).

Por otro lado, hay una guerra santa entre esas personas "ágiles" que dicen "no hagas modelos formales, mejor escriban código de trabajo" y esas personas "BDUF" (gran diseño por adelantado) que piensan en herramientas como " MDA "(arquitectura basada en modelos) son la solución.

Otras personas (re) descubrieron la programación basada en flujo para el diseño de software moderno como una alternativa para UML. Lea aquí y aquí para obtener más información al respecto.

Doc Brown
fuente
¡Gran Scott! Esta es, con mucho, la respuesta más excelente a esta pregunta hasta ahora. Una buena descripción sucinta del modelado en la industria y su posición. Gracias doc! +1.21 jiggawatts!
7

Quiero que mi equipo modele toda la aplicación ASP.NET MVC C # incluso antes de que toquemos una línea de código

El problema que generalmente encuentro con este enfoque es que mi comprensión de la solución siempre es incompleta al principio. Solo a través del refinamiento a medida que avanza el trabajo, llego a una solución final.

Tratar de diseñar toda la aplicación por adelantado, antes de que cualquier código (en todas las aplicaciones, excepto las más simples) sea generalmente una locura.

¿Realmente cree que puede diseñar cada clase y método y estructura de datos en detalle de antemano?

Solo quiero saber algunas buenas soluciones de modelado.

En cuanto a las herramientas reales para hacer modelos, he probado algunas y siempre termino en Microsoft Visio.

De todos los productos que he probado, parece el más sencillo y, de hecho, estable (mi experiencia con las herramientas de modelado es que tienen muchos errores). Para ser justos, hago muy poco modelado, así que tome esta recomendación con un grano de sal.

EDITAR: En realidad, debería decir que la mayor parte de mi modelado se realiza en un bloc de notas que se encuentra en mi escritorio. Debido a que modelo poco, trato de mantenerlo ligero y al grano. Dibujar un diagrama con lápiz y papel es mucho más eficiente para mí que usar un software.

Puede encontrar diagramas escritos a mano útiles para formar sus ideas, antes de presentarlas en un software de diagramación.

¿Qué tipo de diagramas deberían usarse y cómo se vería la documentación?

La mayoría de lo que modelo en estos días son diagramas de interacción. Nuevamente, no hago mucho modelado, solo donde realmente siento que el ejercicio de dibujar el modelo ayuda a consolidar mi comprensión.

quentin-starin
fuente
Podemos ajustar nuestro modelado a medida que avanzamos. Ese no es el punto de todos modos, solo quiero conocer algunas buenas soluciones de modelado.
Por lo tanto, tiene la intención de intentar mantener sus modelos y código sincronizados. Esto no funciona para la mayoría. Inevitarán inevitablemente y las discrepancias causarán problemas. Además
, pasarás una
Por favor lea la pregunta actualizada.
@Chevex: agregué todo lo que pude con respecto a su pregunta editada.
quentin-starin
@qes, mi punto es que estás respondiendo una pregunta que no tenía la intención de hacerte. Consulte la sección "ACTUALIZACIÓN" de la pregunta.
3

Los diagramas UML son un buen lugar para comenzar, hay muchas maneras fáciles de hacerlo con software gratuito o de pago. Un ejemplo simple de una herramienta para hacer un UML es algo así como dibujos de Google Docs, los paquetes más avanzados serían Visio u OmniGraffle.

EDITAR: Como mencionan muchos, si tuviera que seguir el camino de UML, eso no significa que tenga que modelar completamente todo, pero puede llegar a un consenso sobre lo que está modelando y qué tan detallados necesitan los modelos para ser. Los diagramas UML simples a menudo pueden ayudar a diseñar su código antes de escribirlo, y aclarar algunos problemas potenciales antes de que surjan.

Brett
fuente
He oído hablar de UML. ¿Tiene alguna recomendación sobre un lugar para comenzar? ¿Alguna buena herramienta que recomiendas?
@Chevex: acabo de hacer una búsqueda rápida en Google y encontré esto: agilemodeling.com/artifacts/classDiagram.htm Parece ser un buen punto de partida
Brett,
@qes: dependiendo de cuánto tiempo / interés / inversión tenga para seguir un camino como este, podría ser una buena experiencia de aprendizaje y tal vez ayudarlo a comprender algunas de las piezas de su código antes de escribirlo (incluso si es solo un simple UML) ... Pero estoy de acuerdo, probablemente debería tener suficiente tiempo e interés personal para hacer esto.
Brett
@qes, lea la pregunta actualizada.
2
@Chevex: probablemente desee comenzar leyendo un poco sobre los tipos de diagramas y lo que pretenden comunicar. UML es un lenguaje de modelado que puede ser muy descriptivo, pero también tiene muchos matices. UML in a Nutshell me ayudó bastante ( oreilly.com/catalog/9781565924482 ). Dicho esto, a menudo puedes pasar con versiones reducidas del conjunto de diagramas completo. Mientras las personas que crean los diagramas y las personas que leen los diagramas estén de acuerdo en lo que significan.
2

Como sugirió @Brett, los diagramas UML son los mejores. Con UML es bueno tener diagramas de clase y diagramas de flujo de trabajo. Estos dos cubrirían la mayoría de las necesidades de diseño.

Con el diagrama de clases, puede modelar los miembros de cada entidad, su nivel de seguridad, etc.

Con el diagrama de flujo de trabajo, puede modelar qué método llama a qué llamadas, cuál es el resultado del flujo de trabajo y cuál sería la excepción que puede aparecer.

SaravananArumugam
fuente
Gracias por esta respuesta ¿Recomienda alguna herramienta útil? ¿Visual Studio admite UML de alguna manera?
Visual Studio proporciona ayuda para hacer un diagrama de clase. No es bueno para el flujo de trabajo. Las herramientas racionales son las mejores para tal diseño / modelado UML. Rational software modeler es con lo que estoy familiarizado. He oído que Rational Rose sería otra gran herramienta.
2

Si bien creo firmemente en hacer algunos dibujos arquitectónicos básicos antes de escribir el código, creo que hacer un dibujo detallado de toda la aplicación es demasiado trabajo.

Por lo general, creo algunas imágenes de esquema en Visio, a menudo utilizando los bloques de construcción del "diagrama de flujo" para visualizar lo que quiero decir. El uso de UML a menudo se siente formalizado e invita a demasiados detalles. Los dibujos de Visio muestran los componentes básicos de la aplicación y qué tipo de funcionalidad va a dónde. Si está utilizando el marco MVC, la mayoría de las veces se realiza con solo tomar un dibujo de muestra de la web y copiarlo.

Una buena idea es hacer algunos dibujos desde otros puntos de vista. En lugar de dibujar todo, a menudo prefiero tomar una función específica del sistema y luego visualizarla como:

  • Diagrama de caso de uso (UML)
  • Diagrama de flujo o UML Swim-lane (nivel muy alto)
  • Resumen de componentes arquitectónicos.

Entonces comenzamos a codificar. Mientras codifico, uso doxygen con la integración de puntos para obtener diagramas de clase sobre la marcha, herencia, etc. Ver la descripción general generada por doxygen es a menudo una muy buena manera de ver la estructura del código.

Anders Abel
fuente