L'obiettivo dell'insegnamento è fornire una comprensione approfondita dei principi, metodologie e strumenti necessari per la programmazione su larga scala. Gli studenti saranno guidati nell'analisi e formalizzazione dei requisiti del software, nella progettazione utilizzando UML, nella gestione dei progetti software e nel testing del codice. Si darà enfasi allo sviluppo di abilità di lavoro in team, preparando gli studenti a collaborare efficacemente in un contesto di sviluppo software su larga scala.
The aim of the course is to provide a comprehensive understanding of the principles, methodologies, and tools needed for large-scale programming. Students will be guided in the analysis and formalization of software requirements, in the design using UML, in software project management, and in code testing. Emphasis will be placed on the development of teamwork skills, preparing students to collaborate effectively in a large-scale software development context.
Al termine dell’insegnamento, gli studenti saranno in grado di:
• discutere i problemi associati allo sviluppo e alla manutenzione di grandi programmi, incluso l'importanza economica dei software, e di identificare le diverse qualità del software (funzionalità, correttezza, efficienza, usabilità, portabilità, ecc.).
• gestire la configurazione del software, tra cui l'identificazione degli elementi di configurazione, il controllo delle versioni, la gestione delle modifiche e il controllo della configurazione.
• confrontare e contrapporre i diversi approcci ai processi software (waterfall, prototyping, iterative - agile methodologies)
• analizzare e formalizzare requisiti funzionali e non funzionali di un sistema software, utilizzando UML per formalizzare i requisiti e • verificare e validare i requisiti attraverso ispezioni, prototipi e modelli formali.
• utilizzare UML per la progettazione, creare diagrammi di progettazione e architetturali e verificare e convalidare i progetti.
• condurre diversi tipi di test sul codice sorgente (test white e black box, unitario, di integrazione, di sistema), utilizzare tecniche e strumenti di ispezione e revisione, e discutere l'importanza della testabilità, correttezza e affidabilità nel processo di sviluppo software.
• conoscere strumenti di gestione del progetto come WBS, Gantt, Pert, milestone, deliverables e gestire efficacemente un progetto software.
• collaborare e contribuire efficacemente in un ambiente di gruppo, come dimostrato dalla loro capacità di completare un progetto di gruppo utilizzando un team assegnato in base a un sondaggio che riflette il loro background e l'impegno previsto.
Students will learn the major notions, products and activities associated with software engineering.
The skills to be acquired include the ability to formalize the requirements of a software system by means of structural and behavioral models and the ability to solve simple problems related to the various disciplines of the software process.
Capacità di sviluppare piccoli programmi, conoscenza degli elementi strutturali dei linguaggi di programmazione (funzioni, classi, pacchetti), conoscenza operativa di Python o Javascript. Conoscenza di SQL e capacità di definire uno schema di DB.
Basic knowledge of object-oriented programming and relational databases is a prerequisite.
Introduzione (0.5 CFU)
• Problemi nello sviluppo e manutenzione di grandi programmi
• Qualità del software: funzionalità, correttezza, efficienza, usabilità, portabilità ecc
• Valore economico, diretto e indiretto, dei programmi
• Tipologie di programmi
Gestione della configurazione (0.5 CFU)
• Identificazione degli elementi di configurazione
• Controllo delle versioni, gestione delle modifiche, controllo della configurazione
• Esempi pratici con GIT
Processi software (0.5 CFU)
• waterfall,
• prototyping,
• iterative - agile methodologies
UML (1.5 CFU)
• diagrammi strutturali (diagramma delle classi, diagramma di distribuzione)
• diagrammi dinamici (diagramma delle sequenze)
• diagrammi funzionali (diagramma dei casi d'uso)
Analisi e modellazione dei requisiti (1.5 CFU)
• Requisiti funzionali e non funzionali
• Stakeholder
• Schema di un documento di specifica dei requisiti
• Uso di UML per formalizzare i requisiti
• Verifica e validazione dei requisiti: ispezioni, prototipi, modelli formali
Progettazione software (0.5 CFU)
• Uso di UML per la progettazione
• Diagrammi di progettazione e architetturali
• Verifica e validazione dei progetti
Verifica e Validazione (2.5 CFU)
• Testabilità, correttezza, affidabilità
• Test: test white e black box, unitario, di integrazione, di sistema; tecniche e strumenti
• Ispezioni, walkthrough, revisioni, lettura
Gestione del progetto software (0.5 CFU)
• Strumenti: WBS, Gantt, Pert, milestone, deliverables
• Attività: stima, pianificazione, tracking, post mortem
1. Introduction (1 credit)
• Software engineering
• Product life cycle and software process
• Requirements analysis
2. UML models (1 credit)
• Models of classes, relationships and attributes
• Use cases
• Activity diagrams
• Metamodels
3. Behavioral models (2 credits)
• State models
• Petri nets: properties and analysis
• Subclasses of Petri nets
• Timed Petri nets and colored ones
4. Business processes (2 credits)
• Extended Petri nets (process-oriented)
• Models of collaboration
• Models of B2B (business to business) systems
• BPMN and process patterns
5. Software process (2 credits)
• The CMM model
• Verification and validation
• White-box and black-box testing
• Project management
• Configuration management
• Software quality
• Agile methods
L'insegnamento è costituito da lezioni in aula, progetto e laboratori per supportare l'esecuzione del progetto.
This course consists of lectures.
Sul portale della didattica sono disponibili le slide e i case study utilizzate dai docenti.
Alcuni testi di approfondimento:
• M. Fowler. UML distilled, Quarta edizione, Pearson, 2018.
• B. Bruegge, A. Dutoit, Object Oriented Software Engineering, Prentice Hall.
• Morisio M., Vetro A., Falcarin P., Software Engineering Exercices, CLUT.
Lecture slides are available through the portal.
Suggested readings:
M. Fowler. UML distilled, 4th edition, Pearson, 2018.
I. Sommerville. Ingegneria del software, 10th edition, Pearson, 2017.
Slides; Video lezioni dell’anno corrente;
Lecture slides; Video lectures (current year);
Modalità di esame: Prova scritta in aula tramite PC con l'utilizzo della piattaforma di ateneo;
Exam: Computer-based written test in class using POLITO platform;
...
Esame scritto, individuale, di 1 ora di durata, in aula, senza accesso a libri o appunti attraverso la piattaforma exam con domande a scelta multipla. La prova consiste in alcuni esercizi e alcune domande di teoria. Esami passati con soluzioni sono disponibili sul sito web del corso.
Progetto, in team di 4 persone, sviluppato solo durante il corso. Consiste nello sviluppo di un piccolo progetto in linguaggio Typescript, che prevede la consegna di:
• documento di requisiti,
• documento di progetto,
• codice,
• casi di test (unitario, di integrazione, di accettazione),
• documento di stima effort,
• manuale utente.
Il progetto è gestito attraverso uno strumento di gestione della configurazione (GitLab) e utilizza strumenti open source (aka Eclipse, Junit, Jest, Mocha, PlantUmL, Jacoco, Slack e simili).
Il progetto è valutato considerando la qualità dei deliverables. Sono organizzati laboratori settimanali per supportare gli studenti nell'esecuzione del progetto.
Regole d’esame:
• È possibile sostenere solo l’esame scritto. In questo caso la valutazione massima è di 20/30.
• Se si svolge il progetto è necessario ottenere una valutazione minima di 12/20 nello scritto per poter sommare il voto del lavoro di gruppo.
• Il progetto va svolto in parallelo al corso
• La lode si ottiene a partire da 32,5 punti
Gli studenti e le studentesse con disabilità o con Disturbi Specifici di Apprendimento (DSA), oltre alla segnalazione tramite procedura informatizzata, sono invitati a comunicare anche direttamente al/la docente titolare dell'insegnamento, con un preavviso non inferiore ad una settimana dall'avvio della sessione d'esame, gli strumenti compensativi concordati con l'Unità Special Needs, al fine di permettere al/la docente la declinazione più idonea in riferimento alla specifica tipologia di esame.
Exam: Computer-based written test in class using POLITO platform;
The exam consists of a written test made up of four exercises. The main one is based on sections 2 and 4 of the course syllabus and concerns the formalisation of the textual requirements of a software system through the definition of a structural model and a behavioural one. The other exercises concern the other sections of the course syllabus. Normally the main exercise weighs 40% on the final grade, while for the others the weight varies between 10% and 25%.
The evaluation of the exercises is based on the correctness of the result.
The duration of the test is two hours; students can consult the slides of the course.
In addition to the message sent by the online system, students with disabilities or Specific Learning Disorders (SLD) are invited to directly inform the professor in charge of the course about the special arrangements for the exam that have been agreed with the Special Needs Unit. The professor has to be informed at least one week before the beginning of the examination session in order to provide students with the most suitable arrangements for each specific type of exam.