Panoramica sull'ingegneria del software

Cerchiamo prima di capire cosa significa ingegneria del software. Il termine è composto da due parole, software e ingegneria.

Software è più di un semplice codice di programma. Un programma è un codice eseguibile, che ha uno scopo computazionale. Il software è considerato una raccolta di codice di programmazione eseguibile, librerie associate e documentazioni. Viene chiamato il software, se creato per un requisito specificosoftware product.

Engineering d'altra parte, si tratta di sviluppare prodotti, utilizzando principi e metodi scientifici ben definiti.

Software engineeringè una branca dell'ingegneria associata allo sviluppo di prodotti software utilizzando principi, metodi e procedure scientifici ben definiti. Il risultato dell'ingegneria del software è un prodotto software efficiente e affidabile.

Definizioni

IEEE definisce l'ingegneria del software come:

(1) l'applicazione di un approccio sistematico, disciplinato e quantificabile allo sviluppo, al funzionamento e alla manutenzione del software; cioè l'applicazione dell'ingegneria al software.

(2) Lo studio degli approcci come nella dichiarazione di cui sopra.

Fritz Bauer, uno scienziato informatico tedesco, definisce l'ingegneria del software come:

L'ingegneria del software è la creazione e l'uso di solidi principi di ingegneria al fine di ottenere software economicamente affidabile e che funzioni in modo efficiente su macchine reali.

Evoluzione del software

Il processo di sviluppo di un prodotto software utilizzando principi e metodi di ingegneria del software è indicato come software evolution. Ciò include lo sviluppo iniziale del software e la sua manutenzione e aggiornamenti, fino allo sviluppo del prodotto software desiderato, che soddisfa i requisiti previsti.

L'evoluzione parte dal processo di raccolta dei requisiti. Dopo di che gli sviluppatori creano un prototipo del software previsto e lo mostrano agli utenti per ottenere il loro feedback nella fase iniziale dello sviluppo del prodotto software. Gli utenti suggeriscono modifiche, su cui continuano a cambiare anche diversi aggiornamenti e manutenzioni consecutivi. Questo processo passa al software originale, fino a quando il software desiderato non viene completato.

Anche dopo che l'utente ha desiderato il software in mano, la tecnologia avanzata e le mutevoli esigenze costringono il prodotto software a cambiare di conseguenza. Ricreare il software da zero e andare uno contro uno con i requisiti non è fattibile. L'unica soluzione fattibile ed economica è aggiornare il software esistente in modo che soddisfi i requisiti più recenti.

Leggi sull'evoluzione del software

Lehman ha dato leggi per l'evoluzione del software. Ha diviso il software in tre diverse categorie:

  • S-type (static-type) - Questo è un software, che funziona rigorosamente secondo specifiche e soluzioni definite . La soluzione e il metodo per ottenerlo, entrambi sono immediatamente compresi prima della codifica. Il software di tipo s è meno soggetto a modifiche, quindi questo è il più semplice di tutti. Ad esempio, programma di calcolatrice per calcoli matematici.
  • P-type (practical-type) - Questo è un software con una raccolta di procedure. Questo è definito esattamente da ciò che le procedure possono fare. In questo software, le specifiche possono essere descritte ma la soluzione non è immediatamente evidente. Ad esempio, software di gioco.
  • E-type (embedded-type) - Questo software funziona da vicino come requisito dell'ambiente del mondo reale. Questo software ha un alto grado di evoluzione in quanto ci sono vari cambiamenti nelle leggi, tasse ecc. Nelle situazioni del mondo reale. Ad esempio, software di trading online.

Evoluzione del software E-Type

Lehman ha fornito otto leggi per l'evoluzione del software E-Type:

  • Continuing change - Un sistema software di tipo E deve continuare ad adattarsi ai cambiamenti del mondo reale, altrimenti diventa progressivamente meno utile.
  • Increasing complexity - Man mano che un sistema software di tipo E si evolve, la sua complessità tende ad aumentare a meno che non si lavori per mantenerlo o ridurlo.
  • Conservation of familiarity - La familiarità con il software o la conoscenza di come è stato sviluppato, perché è stato sviluppato in quel particolare modo ecc. Devono essere mantenute ad ogni costo, per implementare i cambiamenti nel sistema.
  • Continuing growth- Affinché un sistema di tipo E destinato a risolvere alcuni problemi aziendali, la sua dimensione di implementazione dei cambiamenti cresce in base ai cambiamenti dello stile di vita dell'azienda.
  • Reducing quality - Un sistema software di tipo E diminuisce in qualità a meno che non venga mantenuto e adattato rigorosamente a un ambiente operativo in evoluzione.
  • Feedback systems- I sistemi software di tipo E costituiscono sistemi di feedback multi-loop e multi-livello e devono essere trattati come tali per essere modificati o migliorati con successo.
  • Self-regulation - I processi di evoluzione del sistema di tipo E si autoregolano con la distribuzione di misure di prodotto e processo vicine alla normalità.
  • Organizational stability - Il tasso di attività globale medio effettivo in un sistema di tipo E in evoluzione è invariante per tutta la durata del prodotto.

Paradigmi software

I paradigmi software si riferiscono ai metodi e ai passaggi che vengono eseguiti durante la progettazione del software. Ci sono molti metodi proposti e sono in funzione oggi, ma dobbiamo vedere dove si trovano questi paradigmi nell'ingegneria del software. Questi possono essere combinati in varie categorie, sebbene ciascuna di esse sia contenuta l'una nell'altra:

Il paradigma di programmazione è un sottoinsieme del paradigma di progettazione del software che è ulteriormente un sottoinsieme del paradigma di sviluppo del software.

Paradigma dello sviluppo del software

Questo paradigma è noto come paradigmi di ingegneria del software in cui vengono applicati tutti i concetti di ingegneria relativi allo sviluppo del software. Comprende varie ricerche e raccolta di requisiti che aiutano a costruire il prodotto software. Consiste in -

  • Raccolta dei requisiti
  • Progettazione di software
  • Programming

Paradigma di progettazione del software

Questo paradigma fa parte dello sviluppo software e include:

  • Design
  • Maintenance
  • Programming

Paradigma di programmazione

Questo paradigma è strettamente correlato all'aspetto della programmazione dello sviluppo del software. Ciò comprende -

  • Coding
  • Testing
  • Integration

Necessità di ingegneria del software

La necessità dell'ingegneria del software nasce a causa della maggiore velocità di variazione dei requisiti dell'utente e dell'ambiente su cui il software sta lavorando.

  • Large software - È più facile costruire un muro che una casa o un edificio, allo stesso modo, poiché le dimensioni del software diventano grandi, l'ingegneria deve intervenire per dargli un processo scientifico.
  • Scalability- Se il processo del software non fosse basato su concetti scientifici e ingegneristici, sarebbe più facile ricreare un nuovo software che scalarne uno esistente.
  • Cost- Poiché l'industria dell'hardware ha dimostrato le sue capacità e l'enorme produzione ha abbassato il prezzo dei computer e dell'hardware elettronico. Ma il costo del software rimane elevato se il processo corretto non viene adattato.
  • Dynamic Nature- La natura in continua crescita e adattamento del software dipende enormemente dall'ambiente in cui l'utente lavora. Se la natura del software cambia continuamente, è necessario apportare nuovi miglioramenti a quello esistente. È qui che l'ingegneria del software gioca un buon ruolo.
  • Quality Management- Un migliore processo di sviluppo del software fornisce un prodotto software migliore e di qualità.

Caratteristiche di un buon software

Un prodotto software può essere giudicato in base a ciò che offre e al modo in cui può essere utilizzato. Questo software deve soddisfare i seguenti motivi:

  • Operational
  • Transitional
  • Maintenance

Il software ben progettato e realizzato dovrebbe avere le seguenti caratteristiche:

Operativo

Questo ci dice come funziona bene il software nelle operazioni. Può essere misurato su:

  • Budget
  • Usability
  • Efficiency
  • Correctness
  • Functionality
  • Dependability
  • Security
  • Safety

Di transizione

Questo aspetto è importante quando il software viene spostato da una piattaforma all'altra:

  • Portability
  • Interoperability
  • Reusability
  • Adaptability

Manutenzione

Questo aspetto riassume quanto bene un software abbia le capacità di mantenersi in un ambiente in continua evoluzione:

  • Modularity
  • Maintainability
  • Flexibility
  • Scalability

In breve, l'ingegneria del software è una branca dell'informatica, che utilizza concetti di ingegneria ben definiti necessari per produrre prodotti software efficienti, durevoli, scalabili, in-budget e puntuali.