Progettare un software: perché è più complesso di quanto si creda
Con progettazione e ingegneria del software si intendono due processi fondamentali, che concorrono alla realizzazione di un’applicazione. Esistono altri step come la scrittura del codice, il collaudo e la manutenzione, ma i due sopra citati sono i più cruciali, poiché ne determinano l’efficienza e la qualità.
Delineare dei corretti parametri logici alla base di un software, le sue funzionalità e come esse interagiscono fra loro, non è certo una cosa facile. Per questo motivo l’ingegneria del software può essere vista come quella disciplina che studia e determina le varie fasi della progettazione.
Descrizione del problema e analisi dei requisiti
Prima di cominciare lo sviluppo di qualunque software (sia esso un programma, una app o un sito web), è imperativo descrivere il problema da risolvere. Fatto ciò bisogna poi delineare delle specifiche iniziali e identificare i requisiti, che consentono all’applicativo di trovare soluzioni concrete al problema stesso.
In questa fase gli ingegneri cercano di determinare le caratteristiche più importanti per lo svolgimento delle funzionalità principali. Per darsi un ordine logico da seguire le suddividono in:
- specifiche funzionali, per tutti quei requisiti che devono essere tassativamente presenti all’interno del software;
- specifiche non funzionali, che costituiscono un opzione extra, non cruciale per il raggiungimento dell’obiettivo per cui è stato sviluppato l’applicativo.
Il metodo più facile per fare ciò è attraverso la tabella di MosCow. Si tratta di un semplice elenco, in cui i parametri funzionali vengono associati al concetto “Must Have”, mentre quelli opzionali a “Should Have”.
A tale fase preparatoria segue poi una delle fasi più importanti nella progettazione e ingegneria del software: l’analisi dei requisiti. Dato che un errore in questo frangente può determinare perdite di tempo e denaro non indifferenti, è bene prestare quanta più attenzione possibile.
Stilare il documento dei requisiti fondamentali del software, significa fornire dati importanti su tutti i suoi aspetti (una vera e propria descrizione dettagliata). I più significativi si possono riassumere in:
- domini di applicazione del programma;
- dati informativi sull’applicazione;
- funzionalità;
- prestazioni che ci si possono aspettare;
- interfacce che utilizza il software.
Esistono vari diagrammi e schemi logici ideati per aiutare gli sviluppatori a identificare i requisiti più facilmente, delineandone al contempo caratteristiche e relazioni. I più noti sono i diagrammi UML e i sistemi Alloy e Gellish.
Progettazione di un software
Una volta determinati i requisiti, si passa alla progettazione vera e propria del software. In questa fase si definiscono le strutture dati, le funzioni e i comportamenti che i singoli elementi devono avere, nel pieno rispetto dei vincoli precedentemente stabiliti. Gli strumenti più utilizzati sono il diagramma delle classi, il linguaggio OCL e le reti di Petri.
Nello specifico, il linguaggio di progettazione OCL (Object Constraint Language) risulta ideale per facilitare la scrittura del codice. Si basa sulla rappresentazione degli oggetti che compongono il sistema, definendone i relativi attributi, comportamenti e vincoli.
Le reti di Petri sono considerate uno degli strumenti più potenti a disposizione della progettazione e dell’ingegneria dei software. Il loro scopo principale è quello di mostrare la logica del programma nella sua totalità, attraverso elementi specifici quali posti, transizioni, archi e token.
Con questo speciale diagramma è possibile avere un’idea più concreta di come ogni parte del software interagisce con le altre. Con tutti gli elementi ben definiti si può passare alla fase di scrittura del codice, seguita poi dal collaudo e dalla manutenzione.
