Como ingenieros, todos "diseñamos" artefactos (edificios, programas, circuitos, moléculas ...). Esa es una actividad (design-the-verb) que produce algún tipo de resultado (design-the-noun).
Creo que todos estamos de acuerdo en que designar el sustantivo es una entidad diferente al artefacto en sí.
Una actividad clave en el negocio del software (de hecho, en cualquier negocio donde el artefacto del producto resultante necesita ser mejorado) es comprender el "diseño (el sustantivo)". Sin embargo, parece que, como comunidad, tenemos fallas bastante completas al grabarlo, como lo demuestra la cantidad de esfuerzo que las personas ponen en redescubrir hechos sobre su base de código. Pídale a alguien que le muestre el diseño de su código y vea lo que obtiene.
Pienso en un diseño para software que tiene:
- Una especificación explícita de lo que se supone que debe hacer el software y qué tan bien lo hace.
- Una versión explícita del código (esta parte es fácil, todos la tienen)
- Una explicación de cómo cada parte del código sirve para lograr la especificación (por ejemplo, una relación entre fragmentos de especificación y fragmentos de código)
- Una justificación de por qué el código es como es (por ejemplo, por qué una elección particular en lugar de otra)
Lo que NO es un diseño es una perspectiva particular del código. Por ejemplo, [no elegir específicamente] los diagramas UML no son diseños. Más bien, son propiedades que puede derivar del código, o posiblemente, propiedades que desearía poder derivar del código. Pero como regla general, no puede derivar el código de UML.
¿Por qué después de más de 50 años de desarrollo de software, por qué no tenemos formas regulares de expresar esto? (¡No dudes en contradecirme con ejemplos explícitos!)
Incluso si lo hacemos, la mayoría de la comunidad parece estar tan enfocada en obtener "código" que el diseño del sustantivo se pierde de todos modos. (En mi humilde opinión, hasta que el diseño se convierta en el propósito de la ingeniería, con el artefacto extraído del diseño, no vamos a evitar esto).
¿Qué ha visto como medio para grabar diseños (en el sentido que lo he descrito)? Las referencias explícitas a los documentos serían buenas. ¿Por qué crees que los medios específicos y generales no han tenido éxito? ¿Cómo podemos cambiar esto?
[Tengo mis propias ideas que desarrollan el punto de vista con viñetas anterior, pero estoy interesado en las respuestas de otras personas ... y es difícil implementar mi esquema [[y tal vez ese es el verdadero problema: -]]]
EDITAR 2011/1/3: Uno de los hilos de respuesta insinúa que la "documentación" (presumiblemente textual, en particular no formal) podría ser adecuada. Creo que debería aclarar que no creo esto. Las herramientas CASE aparecieron en la escena a partir de los años 80, pero las primeras herramientas en su mayoría solo capturaron píxeles para los diagramas de lo que dibujaste; Si bien las herramientas fueron comercialmente exitosas, realmente no fueron muy útiles. Una idea clave fue que si los artefactos adicionales de "diseño" no son formalmente interpretables, no puede obtener ninguna ayuda seria de la herramienta. Creo que la misma idea se aplica a cualquier forma útil de captura de diseño a largo plazo: si no tiene una estructura formal, no será de ningún uso real. Los documentos de texto prácticamente no pasan esta prueba.