Estratto del documento

Ingegneria del software – Cimitile - A. 2018/2019

Parte introduttiva – Il software

Origine del termine software

Da chi fu introdotto il termine SW? Viene introdotto nell’anno 1958 da John Tukey (chimico, fisico e matematico statunitense che ebbe un ruolo fondamentale nel ’900 con la statistica).

Inizialmente era un termine usato per “gioco”; entrò a far parte del dizionario di Oxford dall’anno 1960, vocabolo a tutti gli effetti.

Il SW dello IEEE/ACM SW Engineering 2004 (Linee guida): il SW svolge un ruolo importante in quasi tutti gli aspetti della realtà moderna. Vengono spesi centinaia di miliardi per lo sviluppo SW.

Definizioni di software

Definizione dell’Oxford English Dictionary: programmi e procedure che permettono al computer di svolgere uno specifico task.

Definizione Devoto Oli 1971: il corredo dei linguaggi e dei programmi di cui è munito un sistema elettronico per l’elaborazione dei dati.

Definizione dizionario Sabatini Coletti 1970: insieme dei programmi che gestiscono e specializzano il funzionamento dell’elaboratore.

Definizione ISO/IEC/IEEE 24975 anno 2010:

  • Software: un insieme di procedure e programmi associate ad una documentazione e con dati pertinenti usati per le operazioni del sistema di elaborazione.
  • Computer Program: un insieme di istruzioni che servono per abilitare l’HW affinché possa svolgere elaborazioni e specifiche funzionalità logiche.
  • SW product: è il set completo di programmi, procedure e documentazione sviluppate e alla fine distribuite ad un customer richiedente.

Definizione ISO 9000-3 (anno 1997): software è una creazione dell’intelletto, che include programmi e procedure, con relativi dati e documentazione, che permettono all’HW di raggiungere un obiettivo.

Insieme prodotto SW di programmi e procedure rilasciate ad un utente.

Ogni componente SW è parte identificabile di un prodotto SW.

Il SW può essere solo prodotto? No, ma non è mai solo codice.

Che cos’è un prodotto SW? Sistema integrato di componenti SW.

Un prodotto SW è costruito sulla base dell’esigenza dell’utente.

Software item: una parte identificabile di un prodotto SW, nella fase di distribuzione.

Software component: una parte identificabile di un prodotto software in qualsiasi fase di sviluppo, quali moduli, unità, dati, documenti ecc.

Proprietà e tutela del software

Al prodotto SW è associato un diritto di proprietà:

  • Copyright: si possono implementare le componenti SW del prodotto estrapolandoli con la reverse-engineering.
  • Brevetto per il SW: garantisce maggior protezione, non si può fare come nel caso del Copyright.

Free SW: 1985, Richard Stallmann.

Open Source: 1991, Linus Torvald.

Esistono 4 libertà del SW: 0 / 1 / 2 / 3.

  • Livello 0 permette di eseguire soltanto il programma per qualsiasi scopo.
  • Livello 1 permette di modificare il programma per esigenze personali.
  • Livello 2 permette di ridistribuire copie del programma, inalterato, a supporto degli altri.
  • Livello 3 permette di ridistribuire copie del programma modificate.

Tipologie di software

  • Software on premises: SW memorizzato ed eseguito in locale, quindi sul nostro PC.
  • Software as a Service: SW memorizzato e/o eseguito in rete.

Definizione industria del software, o settore SW: è il settore della produzione e commercializzazione di beni e servizi SW.

Classificazione di software, adottata da Assintel e Assinform:

  • SW di sistema: S.O. e sistemi embedded.
  • Middleware: software di infrastruttura, fa da intermediario tra app e componenti.
  • SW applicativo.

N.B. Assintel è l’associazione di riferimento per le imprese.

Assinform è l’associazione delle aziende di ICT.

Servizi di cloud computing

Servizi di Cloud Computing: 3 fondamentali modelli di servizio.

  • IaaS: offerte vere e proprie infrastrutture SW.
  • PaaS: piattaforme offerte come servizio in rete.
  • SaaS: Software as a Service, caso più semplice.

Business: crescita del BPaaS, process as a Service; è una moderna variante del SaaS, lato Business.

Ingegneria del software

Quando nasce l’ingegneria del SW? Nel 1968 con una conferenza NATO in Germania, Fritz Bauer.

Perché ci si appoggia sempre all’Ingegneria del SW? Tre motivazioni:

  • Il SW artigianale, senza seguire step predefiniti e precisi, è costoso.
  • Tale SW non è per niente affidabile.
  • Può consumare tantissime risorse, poco efficiente.

Definizione di Ingegneria del SW di Stephen Schach (1988): la disciplina che ha lo scopo di produrre del SW di qualità, a tempo debito, con un budget prestabilito e in grado di soddisfare dei requirements, requisiti.

Per quali attività fondamentali viene chiamata in causa l’ingegneria? Progettazione del SW, realizzazione del SW, modifica del SW.

Definizione di Ingegneria del SW di IEEE: consiste nell’usare un approccio sistematico, disciplinato e quantificabile nelle 3 attività fondamentali dell’IS: progettazione, realizzazione e modifica.

Chi è la società SQS, SW Quality System? Produce ogni anno un Report dei Top Ten Fallimenti SW.

Le proprietà del SW – La complessità

Le 5 proprietà essenziali del SW furono individuate per la prima volta da Fred Brooks, ingegnere informatico statunitense, nell’anno 1987.

  • Complessità.
  • Invisibilità.
  • Changeability.
  • Conformità.
  • Discontinuità.

Tutte queste proprietà essenziali sono raccomandate da ACM/IEEE nelle “linee guida”.

Complessità

Un aspetto della complessità del SW è sicuramente il numero di linee di codice, LOC. Tuttavia la complessità non è rispecchiata dal LOC: a parità di LOC due programmi possono avere anche complessità abbastanza differente.

Definizione di complessità ciclomatica: v(G) = e-n+1; è una misurazione effettuata tramite una prima rappresentazione fatta con grafi orientati, grafo di controllo del flusso del programma.

  • e: numero di archi del grafo.
  • n: numero di nodi del grafo.
  • v(G): “complessità ciclomatica del grafo”.

Alcune strategie per affrontare la complessità: astrazione, decomposizione, modularizzazione, lo slicing, il riuso.

Astrazione

Lo strumento cognitivo di gran lunga più utilizzato per la gestione della complessità.

L’ingegnere si concentra attraverso l’astrazione soltanto sulle caratteristiche di rilievo, evitando ciò che non è importante.

Una definizione di astrazione: è una vista o una rappresentazione del sistema che include solo le caratteristiche di rilievo per la prospettiva di un particolare osservatore. Poiché esistono vari osservatori, esisteranno vari punti di vista del sistema ad essi associati.

Il processo di astrazione è l’insieme delle operazioni logico-funzionali che porta alla definizione dell’astrazione.

Tre primitive per l’astrazione: la classificazione, l’aggregazione, la generalizzazione.

Schema dei livelli di astrazione: nella piramide abbiamo 3 livelli di astrazione chiamati LOA. Per il livello più in basso, LOA3, abbiamo un insieme di elementi che saranno astratti da un elemento del livello soprastante, LOA2, e così via: si genera quindi una gerarchia di astrazioni.

Una definizione di livello di astrazione: il grado di complessità con cui è visto il sistema.

Un livello di astrazione non è altro che un set di proprietà definite “osservabili”. Tale set cambia al variare del livello di astrazione.

La gerarchia LOA: più è alto il livello LOA, meno sono i dettagli. Al livello più basso ci sono tutti i dettagli del sistema.

Quando si parla di tracciabilità verticale ai livelli? Quando è possibile per ogni elemento dell’astrazione a livello n associare i dettagli tralasciati e presenti al livello n+1.

Metodi di attraversamento delle gerarchie di astrazione:

  • Metodo Bottom-Up: dal livello più basso a quello più alto.
  • Metodo Top-Down: dal livello più alto al livello più basso.

Rappresentare la clessidra delle astrazioni: mondo reale verso infrastrutture informatiche.

  • Mondo reale: attraversamento Bottom-Up.
  • Infrastrutture informatiche: attraversamento Top-Down.

Decomposizione

Decomposizione: un approccio di David Parnas, anno 1970, è un approccio per affrontare la complessità in maniera tale da suddividere il problema in sottoproblemi più semplici.

La decomposizione deve garantire 2 proprietà:

  • Massimizzazione della coesione, interazione interna al sistema.
  • Minimizzazione dell’accoppiamento, interazione tra le varie parti suddivise, i vari moduli.

Come si effettua la decomposizione? In 3 step:

  • Una prima suddivisione in sottosistemi SW sulla base del dominio reale.
  • Una seconda suddivisione di tipo architetturale, modelli e schemi, patterns.
  • Una terza suddivisione in base ai livelli di astrazione, LOA.

C) Suddivisione in base ai livelli di astrazione: ogni parte, modulo, deve incapsulare necessariamente un’astrazione. Deve realizzare l’Information Hiding.

N.B. Ogni modulo può suddividersi in altri sottomoduli.

La decomposizione è una strategia fondamentale per la progettazione del SW.

La progettazione del SW si divide in 2 attività:

  • HLD: High Level Design o Architectural Design.
  • LLD: Low Level Design o progetto di dettaglio.

I 3 tipi di attraversamento delle componenti SW del sistema, nella piramide delle astrazioni implementata dai moduli:

  • Orizzontale: dove parti di componenti allo stesso livello di astrazione concorrono a comporre ciò che ci interessa.
  • Verticale: ci interessa una parte di una componente ad un livello più altra parte di componente a livello successivo.
  • Orizzontale + verticale: più parti di più componenti dello stesso livello più quelle del livello successivo.

Definizione di slicing

Partendo da un sottoinsieme di comportamenti di un sistema, lo slicing permette di ottenere una riduzione alla minima configurazione possibile mantenendo i comportamenti inalterati.

Può essere definito su qualsiasi componente SW.

Il risultato di un’operazione di slicing è detta slice.

Riuso

In un sistema SW abbiamo 2 parti:

  • Candidate per il riuso.
  • Non riutilizzabili.

Esistono 2 tipologie di riuso:

  • Riuso accidentale e opportunistico: è una forma di riuso spontaneo per necessità.
  • Riuso deliberato e pianificato: è una forma di riuso che deriva dal precedente con un approccio più organizzato e sistematico.

Esistono 2 impedimenti al riuso:

  • Impedimenti strutturali, legati alle caratteristiche strutturali del sistema.
  • Impedimenti di processo, legati alle operazioni e funzionalità del sistema.

Che cos’è l’Application Framework? È una piattaforma SW che viene usata per il riuso; comprende aspetti logici e di controllo di base, comuni a una tipologia varia di applicazioni, che possono essere usate come “fondamenta” di una nuova applicazione. Inoltre offre linee guida sullo sviluppo delle parti che specializzano la nuova applicazione, le parti accessorie al framework.

Che cos’è il COTS? Component Off the Shelf: sono delle componenti SW che possono essere acquistate da parte di soggetti o organizzazioni che sviluppano SW e che possono essere usate nei sistemi che stanno producendo.

Che cos’è il pattern? È la descrizione di una soluzione generale ad un problema ricorrente.

Che cos’è il Legacy System Wrapping? È una strategia che porta all’ottenimento di sistemi e moduli derivanti da componenti SW prese da sistemi preesistenti e che sono state adattate per renderle compatibili in nuovi ambiti operativi.

N.B. Le prime forme di riuso si ebbero con le librerie dei sottoprogrammi.

Application framework e design patterns

Application Framework: c’è un’applicazione di base sempre presente con caratteristiche generali. Lo sviluppatore deve successivamente usare componenti, moduli ecc., per dettagliare la base attraverso specializzazioni. Le parti di base sono dette “Frozen Spots”. Le parti aggiuntive sono dette “Hot Spots”.

Design Patterns: sono degli schemi predefiniti che possono essere riutilizzati nella progettazione di un sistema SW.

N.B. Un Design Pattern non è un progetto finito e direttamente implementabile in codice.

N.B. Descrive solo una soluzione di progetto che dovrà successivamente essere specializzata in un particolare contesto.

Le proprietà del SW – Invisibilità e conformità

Invisibilità

Perché il SW è invisibile? Non è un’entità fisica, non è visualizzabile e non ci si può rapportare con esso attraverso i sensi.

Come affrontare il problema dell’invisibilità?

Gli ingegneri del SW, per far fronte all’invisibilità, fanno ricorso a 3 tipi di rappresentazione dei concetti e delle astrazioni:

  • Linguaggi.
  • Grafi.
  • Modelli, Modeling Language.

Linguaggi

Esistono 3 categorie di linguaggi:

  • Linguaggi informali: un subset del linguaggio naturale.
  • Linguaggi formali: con lessico, sintassi e semantica ben definite, fondate su logica-matematica.
  • Linguaggi semiformali: ben definite in lessico o sintassi ma non nella semantica, la semantica è libera e non univocamente definita.

N.B. Un programma permette di rappresentare una astrazione attraverso l’uso di un linguaggio.

Linguaggio Objective-C: sviluppato da Brad Cox negli anni ’80, fu rilasciato da Apple nella seconda metà del 2000; è un superset del linguaggio C con caratteristiche O.O. e un runtime dinamico usato per iOS e OS-X.

PERL / ASSEMBLY: PERL è un linguaggio di alto livello di tipo General Purpose nato nel 1987.

Che cos’è IEEE Spectrum? È una rivista curata da IEEE che propone annualmente una classifica dei linguaggi.

SWIFT è il linguaggio inventato da Apple nel 2014, per iOS e OS-X, con caratteristiche simili a C++ e Objective-C.

Che cos’è il linguaggio Python? È un linguaggio nato ad Amsterdam di tipo Free-SW, interpretato, multiparadigma, procedurale, O.O. e funzionale allo stesso tempo, con una potente libreria standard, 200 moduli, e con librerie della comunità.

Grafi

Definizione G(N,A) con A=(NxN).

Sono sicuramente lo strumento più usato per affrontare l’invisibilità del SW.

Due ragioni di successo dei grafi:

  • La grande flessibilità: si può con facilità esprimere concetti attraverso nodi e archi.
  • La possibilità di usare delle basi teorico-matematiche che offrono tecniche di analisi utilizzabili dagli sviluppatori.

Sono composti quindi da nodi: concetti, fatti, astrazioni; archi: relazione tra concetti, fatti, astrazioni.

Perché l’ingegneria del SW usa i grafi? Per rappresentare i processi di lavorazione con relative relazioni.

Modello

La modellazione fornisce all’ingegnere del SW un approccio organizzato e sistematico per rappresentare gli aspetti significativi del SW sotto studio, facilitando le decisioni su SW o su elementi di esso e permettendo la comunicazione facilitata di tali decisioni al mondo di stakeholders di riferimento.

Il modello è un’astrazione di una componente software.

Tre proprietà dei modelli:

  • Deve essere essenziale: deve catturare solo gli aspetti significativi dell’astrazione, solo quelli che vogliamo esplorare, eliminando tutto ciò che è ininfluente.
  • Deve garantire la prospettiva desiderata: deve essere composto attraverso regole e notazioni necessarie a rappresentare struttura, comportamento e organizzazione del SW.
  • Il Modeling Language deve associare ai diagrammi l’uso di vocabolari e semantiche familiari per garantire comunicazione ai vari stakeholders.

La modellazione si appoggia a linguaggi di modellazione: formali o semiformali.

UML: uno dei linguaggi di modellazione sicuramente più utilizzato al mondo.

  • La prima versione nasce nell’anno 1996 grazie al lavoro dei 3 amigos: Grady Booch, Jim Rumbaugh e Ivar Jacobson.

OMG Object Management Group è un consorzio di standardizzazione, organizzazione no profit, che cura anche l’evoluzione dello Standard UML.

Conformità

Il SW è sempre una “parte” di un intero e ben più ampio sistema nel quale svolge un ruolo ben preciso.

Il ruolo che svolge il SW è determinato dal sistema in cui esso è inserito, ambiente operativo.

Definizione di conformità: è la capacità da parte di un prodotto SW di aderire a standard, convenzioni, regole in riferimento al settore applicativo a cui vengono applicati.

N.B. Un prodotto SW deve conformarsi ad un insieme di requisiti, requirements.

N.B. Una delle difficoltà sostanziali allo sviluppo di un prodotto SW è la definizione stessa dei requisiti.

N.B. I SW Failures dipendono per il 50% da problemi legati alla definizione dei requisiti.

Quattro tipi di errori con i requisiti:

  • Requisiti incompleti.
  • Requisiti sbagliati.
  • Requisiti non convalidati: il SW non fa quello che è espresso dai requisiti.
  • Requisiti non verificati se i requisiti s
Anteprima
Vedrai una selezione di 8 pagine su 31
Appunti corso completi per superare esame di Ingegneria del Software Pag. 1 Appunti corso completi per superare esame di Ingegneria del Software Pag. 2
Anteprima di 8 pagg. su 31.
Scarica il documento per vederlo tutto.
Appunti corso completi per superare esame di Ingegneria del Software Pag. 6
Anteprima di 8 pagg. su 31.
Scarica il documento per vederlo tutto.
Appunti corso completi per superare esame di Ingegneria del Software Pag. 11
Anteprima di 8 pagg. su 31.
Scarica il documento per vederlo tutto.
Appunti corso completi per superare esame di Ingegneria del Software Pag. 16
Anteprima di 8 pagg. su 31.
Scarica il documento per vederlo tutto.
Appunti corso completi per superare esame di Ingegneria del Software Pag. 21
Anteprima di 8 pagg. su 31.
Scarica il documento per vederlo tutto.
Appunti corso completi per superare esame di Ingegneria del Software Pag. 26
Anteprima di 8 pagg. su 31.
Scarica il documento per vederlo tutto.
Appunti corso completi per superare esame di Ingegneria del Software Pag. 31
1 su 31
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/01 Elettronica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher giuscobebbo di informazioni apprese con la frequenza delle lezioni di Ingegneria del software e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi del Sannio o del prof Cimitile Aniello.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community