Ingegneria del Software

Anno Accademico 2016-17

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

AVVISI



  • 03-10-2017: ultime date di esame per il corso in oggetto:
                         14 NOV 2017 ore 10, aula 4
                         16 GEN 2018 ore 10, aula 6
                         30 GEN 2018 (AULA 6) ore 10:00
                         12 FEB 2018 (AULA 6) ore 10:00
  • 27-06-2017:  spostamento data esame del 04/07/2017 al 12/07/2017. Date di consegna del progetto spostate di conseguenza come da regolamento di esame.
  • 30-05-2017: nuove date di esame per giugno: lunedi' 19 ore 10 (consegna entro il 14), aula 2 - giovedi' 29 ore 10 (consegna entro il 23), aula 2
  • 06-02-2017: è stata introdotta una nuova FAQ sulla documentazione dei servizi nel documento consigli per la stesura del progetto
  • 27-01-2017: si chiarisce che la documentazione cartacea delle classi in formato javadoc va prodotta mediante stampa del codice java opportunamente etichettato.
  • 10-01-2017: per l'appello del 30-01-2017 la scadenza per la consegna dei progetti svolti è il giorno 23-01-2017 alle ore 12
  • 16-12-2016: elenco gruppi per lo svolgimento del progetto d'esame (provvisorio-con gruppi non confermati)
  • 16-12-2016: la scadenza per la consegna dei progetti svolti per il primo appello (16-1-2017) è il giorno 09-01-2017 alle ore 12
  • 14-12-2016: Domani (15-12-2016) si terrà una lezione di ingegneria del software in Lab. D1 dalle 11:30 alle 14:00
  • 14-12-2016: Elenco iscritti al 14-12-2016. Si ricorda agli studenti che per fare esami nell'anno accademico corrente devono essere iscritti all'elenco anzidetto.
  • 06-12-2016: Tema standard di progetto per l'a.a. 2016-17: pdf
  • 05-12-2016: Tutti gli studenti devono organizzarsi in gruppi da 3 e comunicarne la composizione al docente nelle modalità descritte a lezione entro il 15/12/2016
  • 24-11-2016: Nuova tesina esempio: qui.
  • 24-10-2016: Non si svolgeranno le lezioni di ingegneria del software del 25 e 27 ottobre
  • 19-10-2016: gli esami del 08-11-2016 si terranno in laboratorio 1
  • ATTENZIONE:Gli studenti  devono registrarsi a questo corso entro il 15-11-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, al fine di assicurare il giusto tempo a disposizione per ogni studente). 


    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 (linguaggio C++ o, meglio, Java). 

    LEZIONI ED ESERCITAZIONI

    Il corso si terrà al primo semestre.

    Orario delle lezioni: martedì ore 11:30-14:00 aula 5 e giovedì, ore 14:30-17:00, laboratorio E2 via Ingrassia.

    Sospensione lezioni: 07/11/2016 - 11/11/2016

    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:
    • Tema di progetto standard per l'a.a. 2016-17  (pdf). Consultare ricorrentemente la pagina 'Consigli per la stesura del progetto'
    • Programma previsto per l'a.a. 2016-2017 (pdf)
    • Programma svolto nel corso 2016-17 (pdf)

    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 27/09 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
    29/09
    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 04/10

    Linguaggi di Modellazione del Software
    diagrammi principali (continuazione):
    2. diagrammi delle classi
    L3_ModelingWithUML_ch02lect2
    06/10

    Linguaggi di Modellazione del Software
    diagrammi principali (continuazione):
    3. diagrammi di sequenza,
    L3_ModelingWithUML_ch02lect2






    3

    11/10


    strutturazione dei diagrammi di sequenza, ordine oggetti,
    4.diagrammi di stato,
    L3_ModelingWithUML_ch02lect2
    13/10
    Cap.4   
    par. 4.1-4.6 5.diagrammi attività
    6. diagrammi dei componenti e di dislocazione.

    Il ciclo di vita del software. Introduzione alla raccolta dei requisiti.
    Definizione di scenario
    L3_ModelingWithUML_ch02lect2

    L5_ModelingwithUML_ch02lect4

    L10_Requirements_Elicitation_ch04lect1






    4
    18/10


    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.

    L11_Functional_Modeling_ch04lect3

    20/10



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

    Cap. 5
    par. 5.1-5.6

    Introduzione. Modelli di analisi: funzionale, degli oggetti, dinamico. Concetti di analisi: oggetti di tipo entità, di confine e di controllo. Dai casi d'uso agli oggetti. La tecnica di Abbott

    L12_ObjectModeling_ch05lect2






    5
    25/10


    Lezione annullata


    27/10


    Lezione annullata





    6





    03/11


    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





    7
    15/11


    • modellazione del comportamento degli oggetti.
    Strutturazione dei diagrammi di sequenza, ordine oggetti, strutture a forchetta e scala.
    Stati degli oggetti, diagrammi di stato e navigation path.
    L13_DynamicModeling_ch05lect3

    Cap. 6
    par. tutti
    La progettazione di sistema e le sue otto attività. Definizione dei goal di progetto,
    L14_SystemDes_ch06lect1-short





    17/11


    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
    L14






    8
    22/11


    client/server, peer-to-peer, three-tier, four-tier, repository, model-view-controller, pipe and filter.
    L14_SystemDes_ch06lect1-short

    Cap. 8
    par. 1-3 (escluso sottopar. 3.5)
    Identificazione della concorrenza.
    L15_Addressing Design Goals_ch07lect1
    24/11

    Mappatura hardware/software. Diagrammi UML di deployment e dei componenti. Gestione dei dati persistenti. gestione delle risorse globali: controllo degli accessi, matrice di accesso, lista di controllo degli accessi.



    Esercitazione Bancomat





    9
    29/11


    Template System Design
    SDD_template

    Cap. 9
    par. 1-6
    Le attività del progetto degli oggetti: identificare i componenti, aggiustarli, identificare pattern, aggiustarli,. 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.
    L16_ObjectDesign_ch08lect1
    01/12

    Le attività del progetto degli oggetti (continuazione):
    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).
    L19_SpecifyingInterfaces_ch09lect1





    10
    06/12


    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



    Presentazione tema di progetto per l'anno in corso


    Cap. 10
    par. 1-6
    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),
    L21_MappingModelsToCode_ch10lect1-short





    11
    13/12


    ESERCITAZIONE Aeromodello



    mappatura associazioni (uno ad uno unidirezionale e bidirezionale, uno a molti bidirezionale, molti a molti bidirezionale), mappatura contratti su eccezioni (meccanismo try-throw-catch).
    L21_MappingModelsToCode_ch10lect1-short




    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
    15/12

    Template Object Design
    ODD_template

    Cap. 11
    par. 1-4
    Introduzione, terminologia (failure, error, fault, validation), tassonomia per la gestione dei guasti. Elementi del modello del test ad oggetti. Modello del test case (test driver, input data, oracle, test harness). Test doubles: dummy/fake/Stub/Mock object. Attività di testing (unit, integration, system, acceptance testing). Black box testing. White box testing, euristica per lo unit testing.
    L23_UnitTesting_ch11lect1



    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.Test di sistema: test funzionale, test di performance, test pilota (alpha test, beta test), test di accettazione e test di installazione. Pianificazione del test; documentazione del test.
    L24_SystemTesting_ch11lect2
    Template di Software Project Management Plan (SPMP)






    12
    20/12
    Project Management
    vedasi file pdf ed 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
    Materiali didattici

    Sito web project management
    22/12


    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)

    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, Template di Software Project Management Plan (SPMP)

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