Ingegneria del Software

Anno Accademico 2015-16

Corso di Laurea in Informatica
Scuola delle Scienze di Base e Applicate
Codice insegnamento: 03968; CFU: 6

AVVISI

  • 19-10-2016: gli esami del 08-11-2016 si terranno in laboratorio 1.
  • 2016-09-07: l'appello previsto per il giorno 20-09-2016 è differito al 23-09-2016 alle ore 10, aula da definire. Conseguentemente viene aggiornata la data di consegna dei progetti.
  •  2016-07-08: si ricorda che è necessario allegare al progetto (al momento della consegna) anche una stampa del problem statement approvato (con il relativo logo apposto dal docente)
  • 2016-07-08: si consiglia a tutti gli studenti che vorranno fare esami a settembre di sottomettere il problem statement del loro gruppo entro il 22-07-2016. Oltre questa data si potrebbero registrare ritardi nella valutazione e approvazione dello stesso che potrebbero compromettere il rispetto delle scadenze per la consegna del progetto prima dell'esame.
  • 2016-05-17: il 24 Maggio durante le consuete ore di lezione si svolgerà un seminario sui design pattern
  • 2016-05-05: si consiglia agli studenti di consultare ricorrentemente la pagina 'Consigli per la stesura del progetto'
  • 2016-05-04: Specifiche di progetto standard per l'esame (pdf) e schema di valutazione (pdf). Gli studenti dovranno counicare al docente la composizione dei gruppi di lavoro entro il 20-05-2016. 
  • 2016-05-04: Elenco iscritti al corso (pdf). Gli studenti sono invitati a verificare la loro presenza in questo elenco.
  • 2016-04-26: La lezione del giorno 03-05-2016 non si svolgerà.
  • 2016-04-11: La lezione del giorno 12-04-2016 non si terrà per disposizione della direzione del corso di studio per permettere la partecipazione degli studenti alle attività legate all'Open Day in programma in quella data.
  • ATTENZIONE: Gli studenti  devono registrarsi a questo corso entro il 31-03-2016 tramite il portale UNIPA. Chi non sarà iscritto entro quella data non potrà partecipare alla formazione dei gruppi d'esame e quindi sostenere gli esami stessi.

DOCENTE

Massimo Cossentino (web page)
E-mail: cossentino(at ]pa.icar.cnr.it  (sostituire (at ] con @)
Ricevimento: Venerdì ore 11 presso Area della Ricerca CNR, via U. La Malfa, 153 (ma solo per prenotazione ottenuta via e-mail). 


DESCRIZIONE DEL CORSO

Obiettivo del corso:
Obiettivo del corso è lo studio del processo di sviluppo del software (con particolare riferimento allo sviluppo di software object-oriented). Verranno esaminate le tecniche di raccolta dei requisiti, stesura delle specifiche, pianificazione, progettazione, implementazione, integrazione e manutenzione.
Più in dettaglio gli obiettivi principali sono:
  • Imparare a progettare sistemi software, cioè:
    • Raccogliere, analizzare e documentare i requisiti
    • Definire l'architettura del sistema incluse eventuali soluzioni distribuite
    • Definire il progetto di dettaglio
    • Definire il piano di test e i criteri di validazione del sistema
  • Imparare a lavorare in gruppo, condividere informazioni e coordinare attività
Come studiare
Dal libro di testo, i paragrafi segnalati di seguito, e dalle slide complementate dagli appunti presi a lezione.

Una buona definizione di Ingegneria del software è stata fornita da D.L. Parnas:
Software engineering is the "multi-person construction of multi-version software"
D.L. Parnas. Some Software Engineering Principles. In Structured Analysis and Design, State of the Art Report. Infotech International. (1978).

PREREQUISITI

Sono richieste conoscenze di programmazione ad oggetti (linguaggi C++ o, meglio, Java). 

LEZIONI ED ESERCITAZIONI

Il corso si terrà al secondo semestre.

Orario delle lezioni: martedì ore 14:30-17:00 e mercoledì, ore 11-13:30, laboratorio Aula D1 (ex consorzio).

Interruzione lezioni: Vacanze pasquali: 24/03/16-29/03/16; Sospensione: 18/04/16-23/04/16

ESAMI

Gli esami si baseranno sulla discussione del progetto di un software ad oggetti. Ulteriori specifiche verranno fornite in seguito.

Chiarimenti sulle regole d'esame:
  • Lo studente che rifiutasse il voto dopo aver fatto esami con la tesina potrà ripresentarsi dopo i tempi previsti. Il docente gli comunicherà se dovrà rifare il progetto (eventualmente con un un altro gruppo di studenti) o meno.
  • ISCRIZIONE: gli studenti devono iscriversi all'appello dal sito del portale UNIPA entro una settimana dalla data d'esame. La consegna della tesina (in portineria dell'Area della Ricerca CNR, via U. La Malfa 153, nei tempi previsti) NON vale come iscrizione all'appello ma in mancanza di essa gli studenti non potranno sostenere l'esame.
Si raccomanda agli studenti la rigida osservanza dei tempi di consegna delle tesine (entro le ore 12 del sesto giorno lavorativo antecedente la data di esame) Le tesine verranno corrette con i criteri descritti nel modulo per la correzione riportato nel link. Si consigliano gli studenti di valutare attentamente la qualità del proprio lavoro in rapporto ad esso.
Documenti utili:

DATE ESAMI

  • Vedasi calendario sul portale dell'università

MATERIALE DIDATTICO

Libro di testo:
B. Bruegge, A. H. Dutoit. Object-Oriented Software Engineering: Using UML, Patterns and Java. Third edition. International edition. ISBN: 0-13-606125-7. Prentice Hall

Introduzione a Java:
Bruce Eckel. Thinking in Java 3rd edition. Scaricabile gratuitamente
Oracle. Learning the Java Language.
M. Tarquini, A. Ligi. http://javamattone.4it.it/javamattone.pdf. Scaricabile gratuitamente.

Libri di consultazione:
I. Sommerville. Software Engineering. Prentice Hall
UML e Unified Process. Analisi e Progettazione Object Oriented. J. Arlow e I. Neustadt. McGraw-Hill
J. Rumbaugh,I. Jacobson, G. Booch. The Unified Modeling Languge Reference Manual. Addison Wesley

ESERCITAZIONI
Le seguenti esercitazioni sono fornite come spunto per la applicazione di quanto studiato durante il corso. Gli studenti possono svolgerle volontariamente, si suggerisce di farlo in gruppo. La correzione avverrà durante l'orario di ricevimento o su appuntamento in altre date.
Bancomat
Aeromodello

ORGANIZZAZIONE DEL CORSO

Settim. Giorno Capitolo Paragr. Argomento Presentazione
1 01/03 Cap. 1 par. 1.1-1.4, 1.6 Sinossi del corso. Introduzione all'Ingegneria del Software
Concetti di: progetto, attività, risorsa, task, workproduct, sistema, modello, documento, obiettivi (goal), requisiti, vincoli, notazioni, metodi e metodologie.
0-Introduzione al corso
L1_Introduction_ch01lect1
02/03
Cap.2
par. 2.1-2.4
Le fasi principali dello sviluppo: raccolta requisiti, analisi dei requisiti, progetto di sistema, progetto esecutivo o degli oggetti, implementazione, gestione del progetto, testing, ciclo di vita del software.
L1_Introduction_ch01lect1



Linguaggi di Modellazione del Software
Introduzione all’UML. Organizzazione dei diagrammi, estensione dei diagrammi, concetti di sistema, modello e vista. Modellazione object-oriented.
L2_ModelingwithUML_ch02lect1



"Linguaggi di Modellazione del Software
diagrammi principali:
1. diagrammi dei casi d’uso, "
L3_ModelingWithUML_ch02lect2






2 08/03

UML (parte 2). Diagrammi dei casi d'uso
UML parte 3: Diagrammi delle classi
L3_ModelingWithUML_ch02lect2
09/03

Linguaggi di Modellazione del Software diagrammi principali (continuazione):
3. diagrammi di sequenza, strutturazione dei diagrammi di sequenza, ordine oggetti,
4.diagrammi di stato
L3_ModelingWithUML_ch02lect2






3
15/03


5. diagrammi di attività,
6. diagrammi dei componenti e di dislocazione.
L3_ModelingWithUML_ch02lect2
L5_ModelingwithUML_ch02lect4

Cap.4 par. 4.1-4.6 La raccolta dei requisiti
Il ciclo di vita del software. Introduzione alla raccolta dei requisiti.
Definizione di scenario
L10_Requirements_Elicitation_ch04lect1
RAD document template (da integrare con libro e slide)

16/03


Raccolta dei requisiti: Definizione di scenario e design basato su scenari. Identificazione degli scenari. Requisiti funzionali e non funzionali. Modello FURPS+. Validazione dei requisiti. Template di documento di analisi dei requisiti




Documentazione dei casi d'uso. Identificare i casi d'uso. Esempi. Attributi dei casi d'uso. Documentazione di tipo request-response. Linee guida per la documentazione dei casi d'uso L11_Functional_Modeling_ch04lect3






4
22/03
Cap. 5
par. 5.1-5.6
L'analisi dei requisiti
Introduzione. Modelli di analisi: funzionale, degli oggetti, dinamico. Concetti di analisi: oggetti di tipo entità, di confine e di controllo. Associazioni multiple (uno a uno, uno a molti, molti a molti). La relazione di generalizzazione. Dai casi d'uso agli oggetti. La tecnica di Abbott
L12_ObjectModeling_ch05lect2
23/03

Attività di analisi:
• dai casi d’uso agli oggetti,
• identificazione degli oggetti entità,
• identificazione degli oggetti di confine,
• identificazione degli oggetti di controllo,
• modellazione delle interazioni,
• identificazione delle associazioni e degli attributi.
L13_DynamicModeling_ch05lect3





5
05/04
Cap. 5 par. 5.1-5.6 Stati degli oggetti, diagrammi di stato e navigation path.
Validazione dei requisiti.
Template di documentazione dell’analisi dei requisiti. Diagramma di interconnessione delle attività di analisi. Esempio di analisi dei requisiti (Toy car)
L13_DynamicModeling_ch05lect3
06/04
Cap. 6
par. tutti
Progettazione di sistema
La progettazione di sistema e le sue otto attività. Definizione dei goal di progetto, decomposizione in sottosistemi. Definizione dell'interfaccia dei sottosistemi e API. Relazioni tra sottosistemi (accoppiamento e coerenza). Architetture di sistema: layer e partizioni, virtual machine (aperta e chiusa), SOA, client/server, peer-to-peer, three-tier, four-tier.
L14_SystemDes_ch06lect1-short





6
12/04
- -
Lezione sospesa per disposizione del Presidente del corso di studi per permettere la partecipazione degli studenti all'open day e per la non disponibilità dell'aula D1

13/04 Cap. 6
par. tutti
Architetture di sistema (continuazione): repository, model-view-controller, pipe and filter.


Cap. 8
par. 1-3 (escluso sottopar. 3.5)
Identificazione della concorrenza. Mappatura hardware/software. Diagrammi UML di deployment e dei componenti.
L15_Addressing Design Goals_ch07lect1





7
26/04


Gestione dei dati persistenti. gestione delle risorse globali: controllo degli accessi, matrice di accesso, lista di controllo degli accessi. Controllo del software: implicito e esplicito (centralizzato o decentralizzato). Condizioni limite di funzionamento: inizializzazione, terminazione, guasto.




Template di documentazione della progettazione di sistema
SDD_template



Esercitazione Bancomat
Esercitazione Bancomat

Cap. 9
par. 1-6
Progetto degli oggetti.
Le attività: identificare i componenti, aggiustarli, identificare pattern, aggiustarli, identificare attributi e operazioni mancanti, specificare la visibilità, specificare tipi e firme (signature), specificare i vincoli e le eccezioni.
L16_ObjectDesign_ch08lect1
27/04


Identificare attributi e operazioni mancanti, specificare la visibilità, specificare tipi e firme (signature), specificare i vincoli e le eccezioni. Rivisitare le gerarchie di ereditarietà, collassare le classi, realizzare le associazioni,  ottimizzare i percorsi di accesso, caching/ritardo dei calcoli complessi. Component-based software engineering, approccio COTS (Commercial-off-the-shelf), definizione di design pattern. Riuso del codice: white box (ereditarietà) e black box (composizione). Uso dell'ereditarietà: descrizione di tassonomie e specifica delle interfacce. Ereditarietà di implementazione e specifica. Delegazione al posto dell'ereditarietà di implementazione. Operazioni e classi astratte. Ereditarietà di implementazione: Metodi riscrivibili e ereditarietà stretta, contrazione.






8
03/05
Cap. 9
par. 1-6
(continuazione)
Specializzazioni dell'attore Developer: Class user, implementor, extender. Specificare le interfacce, implementzione in Java della visibilità UML, informatin hiding, specificare la signature. Il contratto object-oriented, invarianti, precondizioni, postcondizioni, rappresentare i contratti nei modelli UML.
L19_SpecifyingInterfaces_ch09lect1

Progetto a.a. 2015-16

Presentazione progetto a.a. 2015/2016, vedasi sezione ESAMI sopra






9
10/05
Cap. 10 par. 1-6  Linguaggio OCL. Semplici predicati OCL: context, inv, pre, post. Javadoc, commenti in javadoc, contratti come insieme di commenti Javadoc. L20_OCL_ch09lect2-short



Esercitazione Aeromodello
Aeromodello



Problemi nella implementazione di un modello ad oggetti, trasformazione del modello, forward engineering, collassamento degli oggetti, mappatura della ereditarieta (realizzazione in java di specializzazione e generalizzazione, ereditarietà semplice, ereditarietà implementativa, ereditarietà di specifica delle interfacce), mappatura associazioni (uno ad uno unidirezionale e bidirezionale, uno a molti bidirezionale, molti a molti bidirezionale).
L21_MappingModelsToCode_ch10lect1-short
11/05

mappatura contratti su eccezioni (meccanismo try-throw-catch, esempi, linee guida)



Conversione di un modello ad oggetti in un database (criteri generali), conversione di una classe in una tabella, conversione delle relazioni uno ad uno, uno a molti, molti a molti, realizzazione dell'ereditarietà in tabelle separate (mappatura verticale), in colonne duplicate (mappatura orizzontale), confronto tra i metodi di realizzazione dell'ereditarietà in tabelle/colonne L22_MappingModelsToTRelationalSchema_ch10lect2



Template Object Design Document (ODD) ODD_template

Cap. 11
par. 1-4
Testing
Introduzione, terminologia (failure, error, fault, validation), tassonomia per la gestione dei guasti. Modello del test (test driver, input data, oracle, test harness).
L23_UnitTesting_ch11lect1





10
17/05


Modello del test case (test driver, input data, oracle, test harness).  Il modello del test ad oggetti. Test doubles: dummy/fake/Stub/Mock object. Attività di testing (unit, integration, system, acceptance testing). Black box testing. White box testing, branch testing, euristica per lo unit testing.

18/05


Il test di integrazione (integration testing), stub e driver, approccio big-bang, strategie di integrazione (bottom-up, top-down, sandwich, modified sandwich, continuous integration), i passi del test di integrazione.
L24_SystemTesting_ch11lect2





11
24/05


Seminario su Design Pattern
pdf
    
25/05
Esercitazioni

Esempi di progetto
tesina 1, tesina 2, tesina 3, esempio di documento RAD.

Project Management
tutto il sito Introduzione al Project Management
Elementi fondamentali del project management
• Caratteristiche fondamentali del progetto
• Attività (ordinarie, di riepilogo, cardine)
• Struttura delle attività
• Relazioni tra attività
• Le risorse (il calendario, i costi)
• I costi fissi del progetto
Sito web project management






12
31/05


I diagrammi fondamentali del project management
• Diagramma di Gantt
• Diagramma di Pert
• Report fondamentali di tempi, costi e risorse




Template di documento di software project Management
Template di Software Project Management Plan (SPMP)
01/06




LINK UTILI

Scaletta complessiva per un progetto OO e consigli per la stesura delle tesine: vedasi consigli

Object Management Group (OMG)
Unified Modeling Language (UML) Official Specification (ver. 2.4.1.).

CASE tools
Astah Community (consigliato)
Violet
Poseidon

Project Management tools
MS Project
ProjectLibre

Editor Java
BlueJ
Eclipse


Materiali didattici:
L2_ModelingwithUML_ch02lect1
L3_ModelingWithUML_ch02lect2
L5_ModelingwithUML_ch02lect4
L10_Requirements_Elicitation_ch04lect1
RAD document template (da integrare con libro e slide)
L11_Functional_Modeling_ch04lect3
L12_ObjectModeling_ch05lect2
L13_DynamicModeling_ch05lect3
L14_SystemDes_ch06lect1-short L15_Addressing Design Goals_ch07lect1
SDD_template
L16_ObjectDesign_ch08lect1
ODD_template
L19_SpecifyingInterfaces_ch09lect1
L20_OCL_ch09lect2-short
L21_MappingModelsToCode_ch10lect1-short
L22_MappingModelsToTRelationalSchema_ch10lect2

L23_UnitTesting_ch11lect1
L24_SystemTesting_ch11lect2
Template di Software Project Management Plan (SPMP)


Template vari: RAD Template, SPMP_Template, SDD_template, ODD_template, Test_template.

Esempi di tesina:
tesina 1, tesina 2, tesina 3, esempio di documento RAD.