sviluppo software

Agile Software Development

Software development life-cycleLo sviluppo Agile di  software si riferisce ad un gruppo di metodologie basate su un approccio iterativo, all'interno del quale i requisiti e le soluzioni evolvono attraverso la collaborazione ed il coinvolgimento del committente.
Ad oggi sono riconosciuti 5 problemi comuni che affliggono lo sviluppo del software:
  1. Povertà dei requisiti: se le specifiche sono poco chiare, incomplete, troppo generali e non testabili, l'insuccesso del software è più che assicurata 
  2. Progettazione irrealistica: spesso l'inesperienza porta ad azzardare una stima dei tempi inattendibile. Una previsione incongruente espone la conduzione del processo ad un alto rischio di fallimento. 
  3. Inadeguatezza dei test: senza un robusto test planning nessuno sarà in grado di sapere come e quando il sistema del cliente andrà in crash. L'unica cosa che gli è dato sapere è che prima o poi lo farà.
  4. Mancanza di versatilità: che la capacità di evoluzione delle esigenze dei clienti sia estremamente dinamica è cosa ormai nota. Un software rigido, che non sia in grado di evolvere con le richieste degli utenti finali, corre il rischio di non essere accettato. 
  5. Miscommunication: se il team di sviluppo non acquisisce la dovuta conoscenza e padronanza del dominio a causa della mancanza di comunicazione, il risultato finale non rispecchierà le peculiarità del risultato atteso. 

Le metodologie agili costituiscono un valido framework utile ad evitare di imbattersi in una delle suddette problematiche. 

Ciò che oggi individuiamo con il termine "agile" è l'attitudine a rendere prioritaria ed efficiente la conduzione del processo di sviluppo software malgrado gli improvvisi cambiamenti di specifiche, di tecnologie o addirittura di entità coinvolte.

Il framework e le modologie agili per le quali offriamo consulenza (coaching e development) includono le seguenti aree tematiche:

  • Scrum
  • eXtreme Programming (XP)
  • Lean Software Practices
  • Test-Driven Development (TDD)
  • Continuous Integration (CI)

 

Test & QA

testing lyfe-cicleIl software testing è una prassi che impiega un insieme di procedure mirate all'individuazione dei malfunzionamenti e difetti. Scopo del test è quello di simulare l'esecuzione di parte del software, valutarne i risultati e confrontarli con i valori attesi (ossia verificare che siano aderenti alle specifiche), segnalandone eventualmente ogni possibile discordanza. L'approccio utilizzato durante la fase di test planning dovrebbe essere orientato all'individuazione dei bug, ossia si dovrebbero scrivere i test cercando, intenzionalmente, di evidenziare delle vulnerabilità o difetti. Un'inadeguata pianificazione del software testing porta inevitabilmente al fallimento dell'intero processo. 

Malgrado le controversie, il testing può essere visto come un'importante parte della software quality assurance (SQA). La SQA coinvolge l'intero processo di sviluppo software, nel tentativo di monitorare e migliorare il processo stesso, assicurandosi, attraverso test funzionali e di accettazione, il mantenimento di elevati livelli di standard attraverso l'utilizzo di procedure consolidate nel tempo.

Analizziamo e moduliamo il vostro processo di sviluppo software, con l'obiettivo di ridurre il defect rate (numero di fallimenti) e, indirettamente, i tempi di consegna, certificando la solidità e la stabilità del prodotto finale.

Di seguito alcune delle metodologie di test da noi adottate:

  • Integration test: lo scopo dei test di integrazione è quello di verificare la conformità dei componenti secondo i criteri dettati durante la fase di progettazione.
  • Regression test: la regressione è il fenomeno in cui, a seguito di modifiche di scarsa rilevanza, il software smette di funzionare correttamente? Scopo dei test di regressione è quello di stabilire il livello di funzionalità preesistente.  
  • Acceptance test: il test di accettazione, effettuato dall'utente finale, è utile a verificare la copertura e l'aderenza delle esigenze originariamente manifestate.
  • Performance test: simulano ingenti quantità di traffico al fine di testare la scalabilità del software.
  • Usability test: il cui scopo è quello di verificare la semplicità di utilizzo del software da parte degli stackholders.
  • Security test: necessario per software che processano dati confidenziali allo scopo di prevenire rischi di intrusioni al sistema.