SOFTWARE ENGINEERING

Insegnamento
SOFTWARE ENGINEERING
Insegnamento in inglese
SOFTWARE ENGINEERING
Settore disciplinare
ING-INF/05
Corso di studi di riferimento
COMPUTER ENGINEERING
Crediti
9.0
Ripartizione oraria
Ore Attività frontale: 81.0
Anno accademico
2018/2019
Anno di erogazione
2018/2019
Anno di corso
1
Lingua
INGLESE
Percorso
PERCORSO COMUNE
Docente responsabile dell'erogazione
MAINETTI LUCA
Sede
Lecce - Università degli Studi

Descrizione dell'insegnamento

Conoscenza di linguaggi di programmazione strutturata (preferita la conoscenza di Java). Si richiedono conoscenze di Fondamenti di Informatica.

Dopo il corso lo studente sarà in grado di:

  • Applicare i principi fondamentali dell'ingegneria del software e controllare sistematicamente le qualità interne ed esterne del software.
  • Progettare e implementare un sistema software interattivo complesso utilizzando standard industriali di specifica e sviluppo, organizzare il lavoro seguendo processi strutturati dell'ingegneria del software.
  • Gestire i compiti dell'ingegneria del software, cioè eseguire attività quali la pianificazione, l'organizzazione, lo staffing, il controllo, la stima dei costi e del volume del software.
  • Progettare il software adottando architetture software standard.
  • Selezionare adeguatamente e adottare differenti design pattern creazionali, strutturali e comportamentali.
  • Verificare il software utilizzando strumenti standard e impiegando metriche note.
  • Sviluppare sistemi software model-view-controller complessi, con interfaccia web e per dispositivi mobili (smartphone), con backend costruito tramite Spring framework accessibile tramite servizi web in formato REST/JSON.
  • Utilizzare i principali strumenti open source per il testing e refactoring di sistemi software, e strumenti di configuration management.

L'obiettivo principale del corso è approfondire le moderne tecniche di progettazione e sviluppo di sistemi software interattivi, in particolare affrontando i metodi e gli strumenti di convalida e verifica del software, i metodi "agili" di produzione del software e le architetture software standard (design pattern). I concetti appresi durante le lezioni frontali saranno sperimentati con lo svolgimento di un progetto software articolato, durante il quale potranno essere prodotti prototipi di architetture web e mobili (sperimentate su smartphone Android e iOS), orientate ai servizi, costruite a partire da framework software.

Lezioni frontali, esercitazioni pratiche, elaborazione di un progetto software da svolgersi in coppie.

L'esame prevede due prove, uno scritto volto a verificare l'apprendimento dei concetti teorici, che contribuisce a un massimo di 10 punti su 30; un elaborato software volto a verificare la capacità di applicazione dei concetti teorici, che contribuisce a un massimo di 20 punti su 30. Ai fini dell'elaborato software, in gruppi di due persone, gli studenti devono realizzare un sistema software. Il sistema deve essere progettato con UML e facendo uso esplicito di pattern di design. Il sistema deve essere realizzato a partire da un framework software (Struts2), tramite un linguaggio di programmazione strutturata e sottoposto a sistematiche azioni di convalida e verifica. Deve essere realizzato un servizio mobile per Android o Cross-platform (AngularJS, Ionic) ad interfaccia del sistema. Il gruppo deve lavorare secondo un processo "agile" (Scrum) e documentare il procedimento di lavoro adottato. Un mese prima del termine del corso è pubblicata la traccia dell'elaborato software, una traccia nuova per ogni anno, che rimane valida fino alla pubblicazione della traccia dell'anno accademico successivo. L'esito della prova scritta ha la medesima validità temporale della traccia dell'elaborato software.

Laurea Magistrale in Computer Engineering, Dipartimento di Ingegneria dell'Innovazione, Settore Scientifico Disciplinare 09-H1, 9 CFU, 74 ore di attività frontale, 54 ore di lavoro individuale svolto in coppie, 1° anno di corso, 2° semestre, lingua inglese.

Orario di ricevimento: mercoledì 15:00-19:00 presso lo studio del docente, Edificio La Stecca, 1° piano, scala centrale fronte bar, Campus Ecotekne.

  • Software engineering principles (8 hours): 
    • Software qualities and software engineering principles;
    • Software production process;
    • Management of software engineering.
  • Software architectures (4 hours): 
    • Design and software architectures;
    • Software architectures specification.
  • Software design pattern (12 hours): 
    • Introduction to standard architectures and design patterns;
    • How to select and adopt a design pattern;
    • Creational patterns, structural patterns, behavioral patterns.
  • Software verification (10 hours): 
    • Introduction to man software verification methods;
    • Black-box and white-box methods;
    • Test in the large, test in the small, correctness proofs;
    • Software metrics.
  • Introduction to Spring framework (14 hours): 
    • Introduction to Java EE;
    • Creating a dynamic web project with Java EE;
    • Introduction to Spring framework and development environment setup;
    • Developing a Spring MVC application;
    • Accessing Data Layer with Spring Data JPA;
    • Building a RESTful Web Service.
  • Software development and verification tools (5 hours): 
    • JUnit;
    • Refactoring;
    • Concurrent Versioning Systems (GIT).
  • Cloud computing with Amazon Web Services and EC2 (7 hours): 
    • Introduction to Amazon EC2 platform;
    • Introduction to Amazon API Gateway;
    • Configuring an EC2 instance and publishing API.
  • Mobile apps development with AngularJS (14 hours): 
    • Angular: Project Setup;
    • Angular: Component, Template & Data Binding;
    • Angular: Forms (Input, Validation, Template-Driven);
    • Angular: Services, Routing, HTTP;
    • Developing Cross-platform Mobile App with Ionic.

1. Ghezzi, Jazayeri, Mandrioli - Ingegneria del software (2a edizione) - Pearson Prentice Hall 2004.
2. Fowler - UML Distilled (3rd edition) - Addison Wesley Object Technology 2003.
3. Gamma, Helm, Johnson, Vlissides - Design patterns - Addison Wesley 2002.
4. Larman - Agile and Iterative Development: A Manager's Guide - Addison-Wesley Professional 2003.
5. Beck - Test Driven Development: By Example - Addison-Wesley Professional 2002.
6. Fowler, Beck, Brant, Opdyke, Roberts - Refactoring: Improving the Design of Existing Code - Addison-Wesley Professional 1999.
7. Un manuale di programmazione Java avanzata.

Semestre
Secondo Semestre (dal 04/03/2019 al 04/06/2019)

Tipo esame
Obbligatorio

Valutazione
Orale - Voto Finale

Orario dell'insegnamento
https://easyroom.unisalento.it/Orario