Come ingegneri, progettiamo tutti "artefatti" (edifici, programmi, circuiti, molecole ...). Questa è un'attività (design-the-verb) che produce un qualche tipo di risultato (design-the-noun).
Penso che siamo tutti d'accordo sul fatto che design-the-noun è un'entità diversa rispetto al manufatto stesso.
Un'attività chiave nel business del software (in effetti, in qualsiasi attività in cui è necessario potenziare l'artefatto del prodotto risultante) è comprendere il "design (the-noun)". Tuttavia, sembriamo, come comunità, di essere fallimenti quasi completi nel registrarlo, come dimostra la quantità di sforzi che la gente ha messo nella riscoperta dei fatti sulla loro base di codice. Chiedi a qualcuno di mostrarti il design del codice e vedere cosa ottieni.
Penso a un design per il software che abbia:
- Una specifica esplicita per ciò che il software dovrebbe fare e quanto bene lo fa
- Una versione esplicita del codice (questa parte è facile, tutti ce l'hanno)
- Una spiegazione del modo in cui ciascuna parte del codice serve per raggiungere la specifica (ad es. una relazione tra frammenti di specifiche e frammenti di codice)
- Una motivazione sul motivo per cui il codice è così com'è (ad es. perché una particolare scelta piuttosto che un'altra)
Ciò che NON è un design è una prospettiva particolare sul codice. Ad esempio [non scegliere specificamente] i diagrammi UML non sono progetti. Piuttosto, sono proprietà che è possibile ricavare dal codice, o discutibilmente, proprietà che si potrebbero derivare dal codice. Ma come regola generale, non puoi derivare il codice da UML.
Perché dopo oltre 50 anni di software di costruzione, perché non abbiamo modi regolari per esprimere questo? (Sentiti libero di contraddirmi con esempi espliciti!)
Anche se lo facciamo, la maggior parte della comunità sembra così concentrata nell'ottenere "codice" che design-il-nome si perde comunque. (IMHO, fino a quando il design non diventerà lo scopo dell'ingegneria, con l'artefatto estratto dal progetto, non riusciremo a risolverlo).
Che cosa hai visto come mezzo per registrare disegni (nel senso che l'ho descritto)? I riferimenti espliciti ai documenti sarebbero buoni. Perché pensi che i mezzi specifici e generali non siano stati di successo? Come possiamo cambiare questo?
[Ho le mie idee personali che arricchiscono il punto di vista puntato sopra, ma sono interessato nelle risposte altrui ... ed è difficile implementare il mio schema [[e forse questo è il vero problema: -]]]
EDIT 2011/1/3: Uno dei thread di risposta suggerisce che la "documentazione" (presumibilmente testuale, in particolare non formale) potrebbe essere adeguata. Credo che dovrei chiarire che non ci credo. Gli strumenti CASE sono apparsi sulla scena a partire dagli anni '80, ma i primi strumenti erano per lo più solo pixel catturati per i diagrammi di qualunque cosa si disegnasse; anche se gli strumenti hanno avuto un successo commerciale, non sono stati di grande aiuto. Un'intuizione chiave è stata che, se gli artefatti "di progettazione" aggiuntivi non sono formalmente interpretabili, non è possibile ottenere alcun aiuto serio sugli strumenti. Credo che la stessa intuizione si applichi a qualsiasi forma utile a lungo termine di acquisizione del progetto: se non ha una struttura formale, non sarà di alcun reale utilizzo. I documenti di testo praticamente non hanno superato questo test.