Sviluppare un software

Quando si costruisce una soluzione software, di qualsiasi complessità essa sia, si dovrebbero percorrere una serie di passi con lo scopo di individuare tutte le complessità e gestire tutti gli imprevisti che, volenti o nolenti, si troveranno durante lo sviluppo del progetto.

Questo percorso è chiamato processo di sviluppo software e serve per minimizzare il numero di bug e incoerenze all’interno del prodotto finito.
Esistono diverse tipologie di processo e il metodo più semplice prevede una serie di attività da sviluppare una dietro l’altra, fino al termine del progetto.

Questo metodo, noto come waterfall, consiste in cinque passi successivi, dove ogni passo consegna un deliverable alla fase successiva:

  1. Analisi e stesura delle specifiche

  2. Progettazione

  3. Sviluppo del software

  4. Test e avviamento del software

  5. Manutenzione del software

Gli imprevisti da evitare più comuni

La semplicità del metodo waterfall non è in grado di individuare i problemi più comuni e di evitarli adeguatamente:

Errore di analisi o di specifica del software

L’analisi è frutto di comunicazione tra cliente e fornitore e di incontri con il cliente al fine di carpire le necessità da soddisfare con il software.

I sistemi complessi sono, per definizione, difficili da studiare ed è possibile che non si riesca ad interpretare la criticità di alcune parti del sistema, che risulteranno in seguito necessarie.

Questi errori richiedono modifiche più o meno impattanti nel software, che allungano i tempi e creano malumori tra cliente e fornitore.

Mancata progettazione

Ritenere un software semplice e quindi saltarne la progettazione è un errore tipico di chi non ha esperienza di analisi.

A volte, anche i sistemi più semplici nascondono insidie che possono essere individuate solo con la fase di progettazione. Ad esempio potrebbe essere necessario un dato di input non presente, che per essere ottenuto richiede numerose altre componenti. O molto più semplicemente, la mole di dati sulla quale effettuare una semplice operazione è maggiore della quantità disponibile di memoria, costringendo ad un cambio di paradigma e quindi ad una complessità estremamente più elevata.

Mancata progettazione significa allungare i tempi e aumentare i costi di sviluppo.

Mancanza di test

Quando un software è funzionalmente completo (feature complete) lo si vorrebbe vedere in produzione quanto prima, soprattutto se è una componente importante o migliora drasticamente la versione corrente della soluzione.

Meglio non avere fretta quando si sviluppa un nuovo software, al termine del ciclo di sviluppo dovranno essere effettuati tutti i test del caso, con dati reali e con moli di dati adeguate ed equivalenti alla produzione.

Non testare significa individuare i bug in produzione e potenzialmente causare disastri. Ci spiace dirvelo ma no, non esistono software senza bug.

Cambiamento di specifiche in corso d’opera

Capita di accorgersi di una funzionalità mancante o di non essere soddisfatti da una certa funzionalità. Cambiare idea fa parte della bellezza degli esseri umani ma reagire al cambiamento può essere problematico se il software è in avanzato stato di sviluppo.

Cambiare le specifiche in corso d’opera, con l’approccio waterfall, risulta spesso notevolmente dannoso e aumentando tempi e costi.

Il processo di sviluppo software 3DGIS

Il dilemma è quindi come evitare gli imprevisti pur seguendo un processo di sviluppo software? A 3DGIS seguiamo una approccio interattivo nei confronti del cliente e basato sulle tecniche di sviluppo agili (metodologia agile).

Nello sviluppo dei nostri progetti cerchiamo di seguire il concetto ” consegna presto / consegna frequentemente“, che corrisponde alla scomposizioni in fasi di un progetto complesso al fine di minimizzare gli imprevisti di cui sopra.

Il progetto viene scomposto di più sprint all’interno dei quali convogliare le funzionalità rilasciare in un dato periodo, in funzione del valore che questa hanno per il cliente. Ad ogni sprint corrisponde un rilascio e un’avvio dei test: in questo modo il cliente può verificare l’andamento dello sviluppo, l’aderenza delle specifiche e identificare eventuali problemi trascurati nell’analisi.

Questa metodologia di sviluppo lavora fianco a fianco con il cliente, coinvolgendolo nelle decisioni e verificando puntualmente che quanto in sviluppo sia conforme a quanto atteso.

Più il cliente collaborerà più si otterranno risultati migliori e soddisfacenti.

Gestione delle versioni del codice

I prodotti software sono il risultato della compilazione e dell’assemblaggio del codice sorgente, insieme alle altre risorse dati che compongono l’applicazione. Ogni soluzione ha un ciclo di vita composto da versioni, rilasciate in date diverse per clienti diversi e che devono essere mantenute nel tempo in modo efficace e privo di errori.

3DGIS adotta un sistema di gestione delle versioni, o Control Version System, al fine di:

  • tracciare l’evoluzione di un progetto e poter lavorare con le versioni precedenti
  • permettere la collaborazione di più persone allo stesso progetto
  • organizzare e semplificare l’andamento del progetto, grazie ai branch di sviluppo di nuove funzionalità.

Utilizziamo il sistema di gestione del versioning adottato dal kernel Linux noto come GIT, il quale ci permette di avere una gestione decentrata dei sorgenti e condividere anche agevolmente i progetti con i clienti.

Gestione dei progetti e delle attività (issue tracking)

Un progetto è composto da molteplici attività, scandite da risorse necessarie, rapporti di dipendenza e scadenze temporali.

Tenere sotto controllo tutti gli aspetti del progetto, le sue fasi e le varie attività da svolgere è molto difficile ed è necessario affidarsi a strumenti che permettano la migliore organizzazione possibile.

3DGIS utilizza una combinazione di strumenti che ci permettono di gestire molti progetti contemporanei nel rispetto delle procedure definite attraverso il sistema di gestione e delle tecnologie agili adottate per lo sviluppo.

In ogni momento possiamo conoscere lo stato di avanzamento di un progetto, le attività da terminare prima del prossimo rilascio e quali problematiche restano ancora da risolvere.

Continuous Integration

3DGIS implementa l’integrazione continua (continuous integration) nei suoi processi di sviluppo.

Si tratta di un processo per il quale il codice sorgente sul quale gli sviluppatori stanno lavorando viene assimilato al branch principale e su questo vengono effettuate dei test di integrazione e di unità al fine di stabilirne la correttezza, sintattica e funzionale.

Il codice sorgente viene quindi validato secondo numerose metriche, guadagnandone in qualità e facilitando l’individuazione di potenziali errori non individuati durante lo sviluppo.

La continuous integration consente inoltre di automatizzare i rilasci e di facilitare quindi la distribuzione di anteprime al cliente, oltre di consentire una maggiore efficienza della procedura di release del software.

Trouble ticketing

A 3DGIS facciamo in modo che tutte le vostre segnalazioni siano tracciate, identificate da un numero progressivo univoco e con una priorità assegnata in funzione di vari parametri tra cui tipologia di errore e di contratto.

Ogni giorno queste vengono assegnate ad un responsabile che le correggerà nel minor tempo possibile e comunicherà tempestivamente al cliente gli aggiornamenti del caso o la risoluzione della segnalazione.

I clienti che lo richiederanno riceveranno accesso al portale cliente, capace di interfacciarsi al sistema di segnalazioni. L’accesso garantirà la possibilità di visualizzare lo stato delle segnalazioni, inviare documenti e creare nuovi ticket, nel caso sia necessario.