Software - Problemi e prospettive

La disciplina denominata Software Engineering è circa i metodi, tools e tecniche utilizzati per sviluppare software.

Tipi di software:

  • software di sistema;

  • software applicativo;

All'interno del software applicativo, può essere utile identificare le seguenti categorie di software:

  • giochi;

  • sistemi informativi;

  • sistemi real-time;

  • sistemi embedded;

  • software di office automation;

  • software scientifico;

La costruzione del software è un compito impegnativo, essenzialmente perché il software è complesso.

I problemi percepiti (criticità) e gli scopi da raggiungere nello sviluppo software sono:

  • raggiungimento delle necessità degli utenti;

  • basso costo di produzione;

  • alte performance;

  • portabilità;

  • basso costo di mantenimento;

  • alta affidabilità;

  • rilascio nei tempi previsti;

Ogni scopo è anche considerato un problema perché il software engineering ha avuto generalmente poco successo nel raggiungere questi scopi:

Vedremo in seguito come questi scopi sono tra loro collegati.

Raggiungimento delle necessità dell'utente

Costi della produzione del software

Da cosa è dovuto il costo?

E' interessante vedere quali parti dello sviluppo software di un progetto costano di più.

Costi relativi delle varie fasi dello sviluppo software:

Si vede che il costo del testing è enorme, mentre il coding costituisce solo una piccola parte del software development.

Se gli errori sono il problema maggiore, quando sono fatti?

I numeri relativi di errori fatti durante le differenti fasi di sviluppo del software:

Tuttavia questo dato può essere fuorviante. A noi interessa il costo per correggere l'errore. E più a lungo l'errore rimane scoperto, di più costa correggerlo. Errori fatti durante le prime fasi del progetto tendono essere più costosi, a meno che non siano scoperti quasi subito.

Vediamo quindi i costi relativi per correggere i differenti tipi di errore:

Un errore di design può non essere scoperto, ipoteticamente, fino alla fase dei test e tutto ciò comporterebbe molto lavoro per correggerlo. Viceversa un errore di sintassi nello sviluppo del codice, può essere subito rivelato dal compilatore e corretto dallo sviluppatore.

Maintenance

La maintenance è la parola che indica lo sforzo messo in un componente software dopo che è stato scritto e messo in produzione. E' due tipi principalmente:

  • remedial maintenance, che è il tempo speso per correggere i fault nel codice (attività di bug-fixing)

  • adaptive maintenance, che significa le modifiche fatte perché sono cambiati i requisiti del cliente

Remedial maintenance, è conseguenza di insufficiente testing. Come vedremo un testing efficace è difficile da eseguire e richiede tempo, così è accettato come normale nel software engineering un'attività di maintenance è inevitabile.

E' spesso difficile predirre i futuri utilizzi del software, così la adaptive maintenance è pratica comune.

Si parla spesso del 'fardello della maintenance'.

Affidabilità

Un pezzo di software è detto essere affidabile se esso funziona e continua a funzionare senza crash e senza fare qualcosa di indesiderato. Noi diciamo che il software ha un bug o un fault se non si comporta correttamente. Si presume che lo sviluppatore sappia cosa era richiesto e così il comportamento non aspettato non è intenzionale. E' comune parlare di bug nel software, ma è inoltre opportuno definire alcuni altri termini più chiaramente:

  • errori - decisioni sbagliate fatte durante lo sviluppo del software;

  • fault - un problema che può causare nel software uno scostamento rispetto al comportamento atteso;

  • failure - un evento generato (conseguenza) di quando il software si discosta dal comportamento desiderato;

In questa terminologia, un fault è sinonimo di un bug. Le failure accadono mentre il sistema è testato o quando, poi, è in utilizzo. Le failure sono i sintomi che l'utente sperimenta, mentre i fault sono i problemi con cui lo sviluppatore ha a che fare.

La crisi del software

Abbiamo discusso alcuni problemi percepiti con il software:

  • non fa quello che l'utente si aspetta;

  • è costoso;

  • non è sempre sufficientemente veloce;

  • non può essere trasferito su un altra architettura facilmente;

  • è costoso da mantenere;

  • è inaffidabile;

  • è spesso in ritardo;

  • non è sempre facile da utilizzare;

Di questi, soddisfare le aspettative dell'utente (validazione), la riduzione del costo del software, migliorare l'affidabilità (verification) e rilascio in tempo, sono probabilmente i quattro problemi al momento più importanti.

Uno degli ostacoli per cercare di risolvere i problemi sul software e che questi ultimi molto spesso sono in conflitto tra loro. Per esempio, il prezzo basso per l'opera e l'alta affidabilità confliggono. Ancora, alte prestazioni e portabilità sono in conflitto.

Un rimedio - l'ingegneria del software?

Come abbiamo visto, è riconosciuto che c'è un grande problema nello sviluppo del software in modo da avere successo. Un certo numero di idee è stato suggerito per migliorare questa situazione. Questi metodi e tool (strumenti) sono conosciuti come software engineering (ingegneria del software).

Alcune delle principali idee sono:

  • maggiore sforzo nel portare avanti tutte le fasi dello sviluppo in modo sistematico;

  • assistenza di strumenti nello sviluppo software - tools;

  • un'enfasi a trovare cosa esattamente l'utente del sistema realmente vuole (requirements engineering - validation - validazione);

  • dimostrazione al cliente di prime versioni del prodotto (prototyping - creazione di prototipi);

  • utilizzo di nuovi e moderni linguaggi di programmazione;

  • grande sforzo nel tentativo di garantire che il software è immune da errori (verification - verifica);

  • sviluppo incrementale, dove il progetto procede in piccoli gestibili step;

Last updated