Come ingegneri, tutti "progettiamo" 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 progettare il nome sia un'entità diversa rispetto al manufatto stesso.
Un'attività chiave nel settore del software (in effetti, in qualsiasi attività in cui l'artefatto del prodotto risultante deve essere migliorato) è comprendere il "design (il-sostantivo)". Eppure, come comunità, sembriamo essere praticamente dei fallimenti completi nel registrarla, come evidenziato dalla quantità di sforzo che le persone fanno per riscoprire fatti sulla loro base di codice. Chiedi a qualcuno di mostrarti il design del suo codice e vedere cosa ottieni.
Penso a un design per 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 è semplice, tutti ce l'hanno)
- Una spiegazione di come ciascuna parte del codice serve a raggiungere la specifica (ad es. Una relazione tra frammenti di specifica e frammenti di codice)
- Una logica del perché il codice è così com'è (ad esempio, perché una scelta particolare 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 puoi derivare dal codice o, probabilmente, proprietà che desideri derivino dal codice. Ma come regola generale, non è possibile derivare il codice da UML.
Perché dopo oltre 50 anni di sviluppo di software, perché non abbiamo modi regolari per esprimerlo? (Sentiti libero di contraddirmi con esempi espliciti!)
Anche se lo facciamo, la maggior parte della comunità sembra così concentrata sull'ottenere "codice" che il design-the-noun si perde comunque. (IMHO, fino a quando il design non diventerà lo scopo dell'ingegneria, con l'artefatto estratto dal design, non riusciremo ad aggirare questo).
Cosa hai visto come mezzo per la registrazione di progetti (nel senso che l'ho descritto)? I riferimenti espliciti ai documenti sarebbero buoni. Perché pensi che i mezzi specifici e generali non abbiano avuto successo? Come possiamo cambiarlo?
[Ho le mie idee che rafforzano il punto di vista puntato sopra, ma sono interessato alle risposte degli altri ... 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. Immagino che dovrei chiarire che non ci credo. Gli strumenti CASE sono apparsi sulla scena a partire dagli anni '80, ma i primi strumenti hanno catturato principalmente pixel per i diagrammi di qualsiasi cosa tu abbia disegnato; mentre gli strumenti avevano probabilmente un successo commerciale, in realtà non erano molto utili. Un'intuizione chiave è stata che se gli artefatti di "progettazione" aggiuntivi non sono formalmente interpretabili, non è possibile ottenere alcun aiuto serio da parte degli strumenti. Credo che la stessa intuizione si applichi a qualsiasi forma utile a lungo termine di acquisizione del design: se non ha una struttura formale, non sarà di alcun utilità. I documenti di testo praticamente non superano questo test.