Scarica Ingegneria del Software: Corso e Materiali, Anno Accademico 2020/2021 - A. Staiano e più Appunti in PDF di Ingegneria dei Materiali solo su Docsity!
Ingegneria del Software,Ingegneria del Software, a.aa.a. 2020/2021. 2020/2021 – – A.A. StaianoStaiano
INGEGNERIA DEL
SOFTWARE
INTRODUZIONE
ANTONINO STAIANO E-MAIL: [email protected] Ingegneria del Software, a.a. 2020/2021 – A. Staiano
ORARIO LEZIONI
- MS TEAMS
- LUNEDÌ 09:00 – 11:
- MERCOLEDÌ 09:00 – 11:
MATERIALE DIDATTICO
- LIBRO DI TESTO
- B. BRUEGGE, A.H. DUTOIT, “OBJECT-ORIENTED SOFTWARE
ENGINEERING – USING UML, PATTERNS, AND JAVA”, 3A^ ED.,
PEARSON
- I. SOMMERVILLE, “INGEGNERIA DEL SOFTWARE”, 10A^ ED.,
PEARSON
- ALTRO MATERIALE
- SLIDE DEL CORSO E MATERIALE DIDATTICO
MODALITÀ D’ESAME
- Progetto obbligatorio (durante il corso)
- Gruppi costituiti da 2-3 persone
- Analisi, progettazione e documento di testing per un sistema software
- Prova orale
Ingegneria del Software, a.a. 2020/2021 – A. Staiano OBIETTIVI DEL CORSO
- Apprendere ed applicare metodologie, tecniche, flussi di lavoro e strumenti per trasformare la definizione di un problema fornita da un cliente in un sistema software usato dagli utenti finali Learn and apply methodologies, techniques, workflows and tools to transform a problem statement given by the customer into a software system used by end users Learning goals modelsUML^ Source code^4 NFR1: Usability: All interactions should be completed in less than three clicks. The app should be intuitive to use and the user interface should be easy to understand. Requirements The following functional requirements (FR) and nonfunctional^ Problem Statement requirements (NFR) have to be addressed in the project. FR2: Check course details: a course such as the course times, the location of the lecture hall on a map and other course attendees including their name and picture. FR3: Update profile: settings and his profile picture. He can also change the A student can update his profile A student can see details about notification settings. NFR1: Usability: user interface should be easy to understand. All interactions should be completed in less than three clicks.^ FR4: Add comments:^ course and thus start a discussion. Others can like the^ comment and write follow-up comments. The app should be intuitive to use and the^ A student can add comments about a FR1: Search for available courses: courses of the current semester in his major and minor subject. He is able to join the C course list. He can also drop a course.ourse which saves it into his A Student can see all Problem statement Customer Development Team Software system
Cliente User
Team di sviluppo
Utente
Definizione problema Diagrammi UML Codice sorgente Sistema software Ingegneria del Software, a.a. 2020/2021 – A. Staiano SIETE IN GRADO DI SVILUPPARE IL SISTEMA? SIETE IN GRADO DI SVILUPPARE IL SISTEMA? SIETE IN GRADO DI SVILUPPARE IL SISTEMA?
Ingegneria del Software, a.a. 2020/2021 – A. Staiano TECNICHE, METODOLOGIE E STRUMENTI
- Tecniche
- Procedure formali per la produzione di risultati usando una qualche
notazione ben definita
- Metodologie:
- Raccolta di tecniche applicate durante lo sviluppo del software e unificate
da un approccio filosofico
- Tool:
- Strumento o sistemi automatizzati per realizzare una tecnica
- CASE = Computer Aided Software Engineering Ingegneria del Software, a.a. 2020/2021 – A. Staiano 20 Sfida: trattare con la complessità ed il cambiamento INGEGNERIA DEL SOFTWARE: UNA DEFINIZIONE OPERATIVA
- L’ingegneria del software è una collezione di tecniche, metodologie e strumenti che aiutano la produzione di UN SISTEMA SOFTWARE DI ALTA QUALITÀ SVILUPPATO CON UN BUDGET FISSATO ENTRO UNA SCADENZA FISSATA MENTRE SONO IN ATTO CONTINUI CAMBIAMENTI PERCHÉ UN CORSO DI INGEGNERIA DEL SOFTWARE?
- Produrre software non è (solo) un’arte e neppure (solo) una scienza: è
un’industria
- Lavoro inserito in un contesto di gruppo e azienda
- Vincoli economici e requisiti di qualità
- Come in ogni industria, per produrre software sono state sviluppate metodologie
di progetto, di sviluppo e di verifica
- Un informatico deve necessariamente conoscerle
- Non basta essere i migliori programmatori
- Bisogna essere in grado di analizzare , progettare e gestire un progetto software nella sua interezza INGEGNERIA DEL SOFTWARE: ORIGINI
Ingegneria del Software, a.a. 2020/2021 – A. Staiano LA CRISI DEL SOFTWARE
- Il concetto di crisi del software è emerso alla fine del 1960. Dijkstra affermava: “ La causa principale della crisi del software sta nell’accresciuta potenza dei computer di diversi ordini di grandezza! In soldoni: fin quando non c’erano computer, la programmazione non rappresentava alcun problema; quando sono arrivati i primi (non molto potenti) computer, programmare è divenuto un problema moderato, e ora che abbiamo computer enormi (in termini di potenza), programmare è divenuto un altrettanto enorme problema”
- Le cause della crisi del software erano collegate alla complessità dei processi software ed alla relativa immaturità nella produzione del software. La crisi si manifestava in diversi modi: - Progetti oltre il budget - Progetti oltre i limiti di tempo - Software di scarsa qualità - Software che spesso non rispettava i requisiti - Progetti ingestibili e codice difficile da manutenere Ingegneria del Software, a.a. 2020/2021 – A. Staiano SOFTWARE NON INGEGNERIZZATO
- Alcuni fatti ( 2000 - 2002 ):
- Mercato mondiale dell’ICT: 2. 153. 000. 000. 000 di Euro
- Costo dei difetti nel software (considerando solo l’economia USA):
60. 000. 000. 000 di $
- Percentuale dei progetti software completati rispettando preventivi di
spesa e tempo: 16 %
- La metà dei progetti software commerciali sforano il preventivo di
spesa del 90 %
- Percentuale dei costi di manutenzione su quelli totali di un software:
QUALCHE (MIS)FATTO CONCRETO
- Therac- 25 ( 1985 - 1987 )
- Diversi pazienti furono irradiati con dosi massicce di raggi X da un’apparecchiatura per terapie contro il cancro. Sistema controllato da sistema di input software contenente un baco. Almeno 5 persone furono uccise.
- London Ambulance Service ( 1992 )
- Il LAS introdusse un sistema automatico di selezione e invio delle unità mediche sostituendo le procedure manuali fino a quel punto in uso, introducendo meccanismi di selezione più avanzati. L’appalto fu bandito a giugno 1991 ed assegnato ad un costo di £ 1 , 1 milioni. Furono fissate precise scadenze non negoziabili. Il sistema mal progettato e realizzato causò, quando messo in opera, altissimi ritardi nell’arrivo delle unità (anche 11 ore) e circa 30 persone morirono a causa dei ritardi. Il software fu poi dismesso. QUALCHE (MIS)FATTO CONCRETO (CONT.)
- Denver Airport Baggage System ( 1995 )
- L’aeroporto di Denver doveva essere inaugurato nel 1995 e doveva basarsi su di un sistema di smistamento dei bagagli avveniristico. Il sistema software avrebbe dovuto controllare 42 Km di nastri trasportatori indirizzando correttamente i bagagli. Il sistema però non riuscì mai a fornire le garanzie necessarie e ritardò l’apertura dello scalo per mesi al costo di un milione di dollari al giorno. Alla fine il progetto fu abbandonato.
- Il vettore spaziale Ariane 5 ( 1996 )
- Il vettore Ariane 5 dell’agenzia spaziale europea esplose durante il volo inaugurale il 4 giugno 1996 dopo 39 secondi dal decollo. L’esplosione fu causata da un segnale di autodistruzione emesso dal sistema di controllo che erroneamente, a causa di buffer overflow, pensava di essere fuori rotta. La progettazione e costruzione del vettore era costata 500 milioni di dollari.
Ingegneria del Software, a.a. 2020/2021 – A. Staiano INGEGNERIA DEL SOFTWARE: DEFINIZIONI
- IEEE:
- Applicazione di un approccio sistematico, disciplinato e quantificabile allo sviluppo, supporto e manutenzione del software
- Sommerville:
- L’Ingegneria del Software è una disciplina ingegneristica che riguarda tutti gli aspetti della produzione del software. L’ingegnere del software deve adottare un approccio sistematico ed organizzato al suo lavoro ed utilizzare gli strumenti e le tecniche più appropriate a seconda del problema da risolvere, dei vincoli di sviluppo e delle risorse disponibili.
- Ghezzi, Jazayeri, Mandrioli:
- L’Ingegneria del Software è la branca dell’informatica che riguarda lo sviluppo di sistemi software le cui dimensioni richiedono l’intervento di uno o più team di sviluppo … programmare è principalmente un’attività personale, mentre l’ingegneria del software è essenzialmente un’ attività di team. Ingegneria del Software, a.a. 2020/2021 – A. Staiano INGEGNERIA DEL SOFTWARE: DEFINIZIONI
- Emmerich:
- L’Ingegneria del Software è una branca dell’ingegneria dei sistemi che
riguarda lo sviluppo di sistemi software complessi e di grandi dimensioni.
Essa si focalizza su: obiettivi e limiti reali per i servizi forniti dai sistemi
software; la precisa specifica della struttura di questi sistemi, del loro
comportamento e l’implementazione di tali specifiche; le attività richieste al
fine di garantire che le specifiche e gli obiettivi siano raggiunti; l’evoluzione
di tali sistemi nel tempo. Infine, essa riguarda anche i processi, i metodi e
gli strumenti per lo sviluppo economicamente vantaggioso e pianificato
del software.
COSA SI EVINCE?
- Introduzione di metodologie per lo sviluppo di sistemi di medio/grandi dimensioni
- Si raccomanda disciplina e sistematicità
- Si raccomanda l’introduzione di metodi quantificabili al fine di poter paragonare differenti soluzioni possibili
- Comporta lo sviluppo di sistemi che richiedono l’intervento di team di sviluppo. Dunque la comunicazione diventa uno degli aspetti più importanti. COSA SI EVINCE? (CONT.)
- Non riguarda soltanto la programmazione (per certi versi aspetto marginale)
- Costi di sviluppo e tempi sono un aspetto fondamentale dello sviluppo
- Si richiedono capacità di gestione e di pianificazione
- Obiettivo focale è la spinta verso la produzione di qualità
- Necessità di applicare strumenti di supporto
Ingegneria del Software, a.a. 2020/2021 – A. Staiano IL SOFTWARE NELL’ECONOMIA MODERNA
- Le economie di tutte le nazioni più evolute dipendono dal software e la maggior
parte dei sistemi sono controllati da software
- L’Ingegneria del Software ha a che fare con teorie, metodi e strumenti per
progettare, costruire e mantenere software di grandi dimensioni
- Il software costa più dell’hardware e il mantenimento costa più dello sviluppo
- Obiettivo: sviluppo cost-effective del software Ingegneria del Software, a.a. 2020/2021 – A. Staiano IL SOFTWARE NELL’ECONOMIA MODERNA
Valorizzazione in borsa in G$ delle principali aziende ICT
COSA È UN PRODOTTO SOFTWARE?
- Qualcosa di più di un insieme di linee di codice…
- Un insieme di:
- Programmi per computer
- Tutta la documentazione che descrive la struttura del sistema
- I dati di configurazione, che permettono di installarlo
- Il manuale utente DIMENSIONE DEI SW ATTUALI
- Di quante linee di codice sono costituiti i software attuali?
- The Gimp 650. 000
- Kernel Linux nel 2002 4. 141. 432
- Open Office 10. 000. 000
- Suite Mozilla (Firefox + Thunderbird) 30. 000. 000
- Windows Vista 50. 000. 000
- OS X 10. 4 86. 000. 000
Ingegneria del Software, a.a. 2020/2021 – A. Staiano PROBLEMI DELLA PRODUZIONE SOFTWARE
- Un’ azienda nel settore della grande distribuzione aveva richiesto un sistema che, stima iniziale, sarebbe stato sviluppato in 9 mesi al prezzo di 250. 000 $ ( 1989 ) - Due anni dopo, e dopo una spesa di 2. 500. 000 $, il lavoro non era stato ancora completato e fu stimato che erano necessari altri 3. 600. 000 $ (!!) - Il progetto fu abbandonato!
- Da un report USA del 1989
- su 600 aziende contattate, più del 35 % avevano progetti ‘runaway’ (in ritardo o fuori dal budget e la tempistica stimata) Ingegneria del Software, a.a. 2020/2021 – A. Staiano UNO DEI PIÙ NOTI RECORD NEGATIVI: IL SOFTWARE DELLO SPACE SHUTTLE
- Costo finale: $ 10. 000. 000. 000 , svariati milioni di dollari in più di quanto pianificato
- Time: ritardo di 3 anni
- Qualità: Il primo lancio del Columbia fu cancellato a causa di problemi di sincronizzazione tra i 5 computer di bordo
- Dopo lunghe (e costose) investigazioni, l’errore fu individuato in una modifica fatta 2 anni prima, quando un programmatore aveva cambiato un fattore di ritardo su un interrupt handler da 50 a 80 millisecondi
- La possibilità che si verificasse un errore a riguardo era talmente minima che non apparve mai nelle migliaia di ore di testing
- Il software contiene ancora errori sostanziali
- Gli astronauti hanno a disposizione un libro dei bug noti... INGEGNERIA DEL SOFTWARE: ALLEVIARE I PROBLEMI NECESSITÀ DI UN APPROCCIO INGEGNERISTICO
- Necessità di applicare principi ingegneristici alla produzione software per sviluppare:
- il giusto prodotto
- al giusto costo
- nel tempo giusto
- con la giusta qualità
DUNQUE, RICAPITOLANDO
- L’ Ingegneria del Software è una disciplina che cerca di fornire le regole per il processo di produzione del software
- Un ingegnere del software dovrebbe:
- adottare un approccio sistematico e organizzato al proprio lavoro
- usare strumenti e tecniche appropriate, che dipendono dal problema che
deve essere risolto, dai vincoli presenti e dalle risorse disponibili
STRUTTURA DEL CORSO
- Modellazione orientata agli oggetti; Unified Modeling Language (UML)
- Gestione progetto e comunicazione
- Concetti di base, definizioni e problematiche dell’Ingegneria del Software - Modelli di ciclo di vita del software - Analisi e specifica dei requisiti - Progettazione e architetture software
- Software testing
- processo e documenti di testing;
- principali tecniche di testing black box e white box