In una classe di ingegneria del software, abbiamo avuto l'incarico di leggere il documento seminale di Parnas sulla modularizzazione [0]. In questo articolo vengono discussi due approcci di divisione di un software in moduli:
- Approccio tradizionale: viene disegnato un diagramma di flusso per elaborare le singole fasi di elaborazione e il flusso di alto livello del programma. Quindi ogni passaggio di elaborazione viene trasformato in un modulo. Questo approccio non produce ottimi risultati.
- Nuovo approccio: ogni decisione progettuale verrà trasformata in un modulo mediante l'occultamento delle informazioni. Questo approccio porta a risultati molto migliori.
La mia interpretazione personale del termine decisione progettuale è che i moduli sono identificati come strutture dati piuttosto che come fasi di elaborazione di un algoritmo . Questo ha senso, perché le strutture dati sono molto più adatte per nascondere le informazioni e quindi elaborare i passaggi di un algoritmo. (Le informazioni all'interno di una struttura dati sono nascoste dietro le funzioni, mentre una funzione nasconde solo passaggi di elaborazione più dettagliati e nessuna informazione, le informazioni vengono effettivamente passate come argomenti.)
Perché il secondo approccio funziona molto meglio del primo approccio? Ecco la mia seconda interpretazione: le singole fasi di elaborazione di un algoritmo non sono sostituibili (e quindi non riutilizzabili), mentre è possibile convertire strutture di dati in altre strutture di dati.
Ed ecco la mia domanda: potrebbe essere questa la ragione per cui lo sviluppo di software che utilizzava motori di workflow (basati su BPMN, ad esempio) non è mai decollato?
La mia esperienza personale è che le attività create in questi flussi di lavoro non sono quasi mai riutilizzate, ma spesso le grandi strutture di dati passano attorno a tutte le attività coinvolte, anche se la maggior parte delle attività utilizza solo uno o due di esse.
La mia domanda è esagerata: potremmo sbarazzarci di tutti quei goffi motori del flusso di lavoro dando ai manager la carta di Parnas da leggere?
[0]: sui criteri da utilizzare nei sistemi in decomposizione in moduli (Parnas 1972)