¿Existe un estándar para documentar la arquitectura de alto nivel de un programa?

10

Soy un desarrollador aficionado y todos mis programas hasta ahora eran lo suficientemente simples como para documentarse en el código. Mientras leía el código, estaba claro lo que estaba haciendo tal y tal acción (mi prueba estándar fue mirar el código 6 meses después y entender todo a la primera lectura, y tengo un corto espacio de memoria).

Ahora me enfrento a un programa que está superando mis capacidades para recordar las diversas interacciones entre

  • el código en sí
  • los índices en la base de datos
  • las interacciones entre varios módulos (código central "trabajador" y "biblioteca")

Mi documentación actual es una pizarra donde tengo todo tipo de cuadros y flechas que apuntan al código, a los índices de la base de datos, a las acciones que se ejecutan, al cambio de estado, etc. Solo como referencia, un fragmento del desastre:

ingrese la descripción de la imagen aquí

Mi pregunta es si existe un conjunto estándar o nombrado de mejores prácticas (nombrado en el sentido de que este es un conjunto de prácticas que se agruparon bajo un nombre específico) para la documentación de productos más complejos.

¿Cuáles son las palabras clave que debo buscar? (Los intentos generales de "documentar estándares de arquitectura de software" y variaciones similares generalmente condujeron a software para flujos de trabajo o sistemas CAD de arquitectura de edificios).

También espero que no haya mejores prácticas generales para descripciones de alto nivel y que cada uno construya su propia filosofía.

WoJ
fuente
um UML y algo de texto viejo y llano usualmente
jk.
Si puede leer alemán, eche un vistazo a arc42.de/template/index.html. Muestran algunas pautas para documentar la arquitectura del software.
Bernhard Hiller
8
"No molestarse en hacerlo" es probablemente el más cercano a un estándar.
whatsisname

Respuestas:

13

No hay un estándar al que todos se adhieran. Los proyectos de software pueden variar mucho (piense: helloworld.py vs el código en el transbordador espacial).

Un método muy común es usar el modelo 4 + 1 . En lugar de tratar de agrupar todo en un solo estilo de documento, esta metodología divide el diseño en cinco componentes:

  • La vista de desarrollo
  • La vista lógica
  • La vista fisica
  • La vista de proceso
  • Escenarios

Las diversas vistas describen el producto desde cuatro perspectivas diferentes. Los escenarios son donde viven los casos de uso y describen la interacción de las otras vistas.

Nota: Este es un modelo conceptual y no está vinculado a ninguna herramienta específica.

Usted puede leer más aquí:

  1. Modelo de vista arquitectónica 4 + 1 (wikipedia)
  2. Planos arquitectónicos: el modelo de vista de arquitectura de software “4 + 1” (documento IEEE - pdf)
Bryan Oakley
fuente
Este es un muy buen enfoque, gracias. Al retroceder, uno podría pensar que es bastante obvio, pero ayuda mucho desconectar las diversas piezas 4 + 1 que tenía en un gráfico.
WoJ
4

En mi humilde opinión, UML no es una herramienta que funcione bien para documentar la arquitectura de software del mundo real. Los diagramas de clases son útiles, pero utilizan un nivel de abstracción que a menudo es demasiado bajo para este propósito. Los diagramas de casos de uso suelen ser demasiado "de alto nivel" y pierden ciertos aspectos. Otros tipos de diagramas UML tienen problemas similares (para ser justos, los diagramas de paquetes, diagramas de implementación, diagramas de componentes pueden documentar ciertos aspectos arquitectónicos, pero personalmente nunca los encontré muy útiles).

Si está buscando una forma práctica y pragmática de documentar arquitecturas de alto nivel, le sugiero que se familiarice con los diagramas de flujo de datos . Estos son fáciles de entender y tienen la ventaja de que pueden escalar a diferentes niveles de abstracciones. Los he encontrado más útiles para documentar diferentes tipos de sistemas. Lástima que no hayan encontrado el camino hacia UML, pero de todos modos encontrarás muchas herramientas, incluso gratuitas, como Dia o DrawIO , para hacer estos diagramas.

Como nota al margen, ¿por qué necesita "índices en la base de datos" en una documentación de alto nivel? Creo que son un detalle de implementación de su modelo de datos (¿relacional?), Y si los agrega o no es, según mi experiencia, más una cuestión de rendimiento y optimización.

Doc Brown
fuente
Diagramas de paquetes? Diagramas de implementación? Diagramas de componentes?
Nick Keighley
3
Honestamente, un montón de cajas con flechas pueden hacer maravillas para comunicar una serie de características de diseño. Supongo que los diagramas de componentes pertenecen a esa categoría, pero mis clientes entienden el flujo de datos con cuadros que representan los bits principales. Estoy de acuerdo con Doc Brown. La formalidad de UML pierde la marca con su propósito previsto.
Berin Loritsch
@ NickKeighley: mira mi edición.
Doc Brown
@BerinLoritsch: En mi humilde opinión, "un montón de cajas con flechas" caracteriza los tipos de diagrama mencionados por Nick Keighley. Sin embargo, los diagramas de flujo de datos hacen una clara distinción formal entre datos o grupos / grupos de datos, y procesos o componentes que transfieren o transforman estos datos. Eso no es nada que pueda expresar fácilmente con ninguno de los diagramas UML.
Doc Brown
1
Tengo que admitir que a veces recurro a los diagramas de flujo de datos, particularmente los que permiten tiendas. De hecho, el diagrama de nivel superior que describe nuestro sistema es esencialmente un DFD. Todavía encuentro útiles los diagramas de clase y el paquete hasta cierto punto. No presto mucha atención a las partes "formales" de UML.
Nick Keighley
0

El lenguaje de modelado unificado (UML) es un lenguaje de modelado de desarrollo general en el campo de la ingeniería de software, que está destinado a proporcionar una forma estándar de visualizar el diseño de un sistema.


fuente
La especificación formal se puede encontrar en omg.org/spec/UML/2.5 pero hay muchos tutoriales más amigables en la web.
Simon B
2
Esta respuesta es solo una parte de la pregunta, UML es definitivamente la herramienta correcta para modelar, pero esto no constituye una documentación completa en sí misma
Walfrat
3
¿Alguien usa UML muy a menudo?
Panzercrisis
garabatos Ingeniería inversa.
Nick Keighley el
1
@Walfrat. ¿Lo es? De Verdad? Tengo mis dudas.
Doc Brown
-3

Creo que solíamos hacerlo mejor. UML parecía arrojar al bebé con agua del baño. Al proporcionar un lenguaje de modelado unificado, abolió la distinción entre arquitectura e implementación. O si no tenía la intención de que esto pareciera ser efectivo.

He visto algunos modelos UML monstruosos y, francamente, no hacen nada por mí que el código no pueda hacer, y lo hacen mejor.

Nick Keighley
fuente
3
no responde la pregunta, probablemente mejor como un comentario sobre la respuesta de SuperGirl.
Newtopian
1
Aborda la pregunta. Estoy argumentando que la respuesta a la pregunta es más "No" de lo que solía ser.
Nick Keighley el