Sviluppo Software
- Info Corso
- Matteo Baldoni
- Sviluppo Agile
- PDF Version
Software
Include:
- tutta la documentazione elettronica che serve agli utenti dei sistemi, agli sviluppatore e i responsabili della qualità
É caratterizzato da:
- manutenibilità
- fidatezza
- efficienza
- accettabilità
In generale un processo descrive
- chi
- fa cosa
- come
- quando
Per raggiungere un obiettivo
Le 4 attività fondamentali comuni a tutti i processi software:
- specifiche
- sviluppo
- convalida
- evoluzione
Modello a cascata
Nel modello a cascata queste sono distinte e separate
- requisiti in dettaglio
- non c’è feedback, molto lavoro speculativo
- piano temporale delle attività da svolgere
- modellazione
- progetto software
- programmazione software
- verifica e rilascio
Parte dal presupposto che le specifiche sono prevedibili e stabili e possono essere definite correttamente sin dall’inizio, a fronte di un basso tasso di cambiamenti
- nella realtà questo non avviene quasi mai, questo modello é ottimo in caso di sistemi critici

Modello di Sviluppo Incrementale
Nel modello di sviluppo incrementale queste sono intrecciate, aggiunte di funzionalità alla versione precedente (versioning)
- utilizzato in caso di requisiti che cambiano durante lo sviluppo
- in molti casi se si procede progettando tutto fin dall’inizio si rischia di buttare molto del lavoro in seguito
- si implementano immediatamente le funzionalità più critiche
- per rilasciare il prima possibile: il feedback é l’aspetto più critico
- si procede per incrementi, patch
- il codice si degrada progressivamente
- per arginare la degradazione é necessario un continuo refactoring del codice
- per il management é più complesso gestire le tempistiche
- almeno in parte può essere essenziale pianificare le iterazioni
- fin dall’inizio si procede con progettazione e testing del sistema
L’ambiente odierno richiede cambiamenti rapidi:
- la rapidità delle consegne é quindi un requisito critico
- i requisiti reali diventano chiari solo dopo il feedback degli utenti
per ciò questo metodo di sviluppo ha preso piede
Lo sviluppo é organizzato in sotto-progetti
- progettazione
- iterazione
- test
Il progetto si adatta iterazione dopo iterazione al feedback, é evolutivo
- ogni iterazione é una scelta di un sottoinsieme dei requisiti
- produce un sistema eseguibile e subito testabile
\(\textsc{nb}\) L’output di una iterazione non é un esperimento o un prototipo. É una sottoinsieme a livello di produzione del sistema finale.
Esempi
- Unified Progress
- Extreme Programming
- Scrum
Vantaggi
- riduzione rischi
- progresso subito visibile
- feedback immediato
- gestione della complessità, evita la paralisi da analisi
Test Driven Development
TDD
Diversi tipi di test:
- unitari
- verificano il funzionamento di singole unità
- struttura in 4 parti
- preparazione, instanziazione degli oggetti di testing e il contesto
- esecuzione
- verifica, spesso assert
- rilascio, garbage collection
- di integrazione
- verificano la comunicazione tra parti
- end-to-end
- verificano il collegamento complessivo tra gli elementi del sistema
- di accettazione
- verificano il funzionamento complessivo del sistema
Refactoring
Strettamente legato al testing in un ciclo di sviluppo incrementale. A seguito di un refactoring vengono rieseguiti tutti i test per assicurarsi di non aver provocato una regressione.
Esempi di refactoring:
- Rename
- Extract Method
- Extract Class
- Extract Constant
- Move Method
- Introduce Explaining Variable
- Replace Constructor Call with Factory Method
Modello di Integrazione e Configurazione
Nel modello dell’integrazione e configurazione si basa su un gran numero di componenti o sistemi riutilizzabili, piccoli sistemi che vengono configurati in nuove funzionalità
Il processo appropriato dipende dai requisiti e le politiche normative, dall’ambiente in cui il software sarà utilizzato
Object Oriented Analysis/Design
OOA/D
Ai concetti vengono attribuite le responsabilità, a partire da queste si passa alla progettazione e poi al software
OOD
é fortemente correlata alla/analisi dei requisiti/:
- casi d’uso
- storie utente
L’analisi si concentra sull’identificazione e la descrizione degli oggetti:
- concetti nel dominio del problema
Queste analisi dei requisiti sono svolte nel contesto di processi di sviluppo:
- Processo di sviluppo iterativo
- Sviluppo Agile
- Unified Process -
UP
Unified Process
UP
- cerca di bilanciarsi tra estrema agilità e pianificazione
- la versione commerciale si chiama
RUP
, diRational
- iterazioni corte e timeboxed
- raffinamento graduale
- gruppi di lavoro auto-organizzati
Orizzontalmente:
- ideazione
- approssimazione
- portata
- studio della fattibilità
- elaborazione
- visione raffinata
- implementazione iterativo del nucleo
- risoluzione rischi maggiori, parte più critica
- implementata l’architettura del sistema, mitigazione rischi
- costruzione
- transizione
Tutte queste fasi includono analisi, progettazione e programmazione
Verticalmente si procede con:
- discipline
- modellazione del business
- requisiti
- progettazione
- implementazione
- test
- rilascio
- artefatti
- qualsiasi prodotto di lavoro
In questo processo é utilizzato solo UML
- utilizzato solo se necessario, se viene tralasciato va indicato il motivo
- i diagrammi seguono le iterazioni e gli incrementi
Quasi tutto in UP
é opzionale, deciso dal project leader

Requisiti
Capacita o condizioni a cui il sistema e il progetto devono essere conformi
- é l’utente che li stabilisce, non il progettista
Possono essere
- funzionali
- requisiti comportamentali
- comportamenti del sistema
- non funzionali
- scalabilità
- sicurezza
- tempi di risposta
- fattori umani
- usabilità
Nei processi a cascata sono molti i requisiti non utilizzati nei casi d’uso
- spreco di tempo, denaro, rischi in più
Per evitare questo UP
spinge al feedback
Modello requisiti FURPS+
- modello dei casi d’uso
- specifiche supplementari
- glossario
- visione
- regole di business
La disciplina dei requisiti é il processo per scoprire cosa deve essere costruito e orientare la sviluppo verso il sistema corretto Si incrementalmente una lista dei requisiti: feature list
- breve descrizione
- stato
- costi stimati di implementazione
- priorità
- rischio stimato per l’implementazione
-
Casi d’uso
Catturano (in
UP
eAgile
) i requisiti funzionali Sono descrizioni testuali che indicano l’uso che l’utente farà del sistema- attori; qualcuno o qualcosa dotato di comportamento
- scenario (istanza di caso d’uso); sequenza specifica di azioni e interazioni tra sistema e attori
- caso d’uso; collezione di scenari correlati (di successo/fallimento) che descrivono un attore che usa il sistema per raggiungere un obiettivo specifico
UP
é use-case driven, questi sono il modo in cui si definiscono i requisiti di sistema- i casi d’uso definiscono analisi e progettazione
- i casi sono utilizzati per pianificare le iterazioni
- i casi definiscono i test
Il modello dei casi d’uso include un grafico
UML
- é un modello delle funzionalità del sistema
I casi d’uso non sono orientati agli oggetti, ma sono utili a rappresentare i requisiti come input all'
OOA/D
- l’enfasi é sull’utente, sono il principale metodo di inclusione dell’attore nel processo di sviluppo
- questi non sono algoritmi, sono semplici descrizioni dell’interazione, non la specifica di implementazione
- il come é obiettivo della progettazione
OOD
- i casi descrivono gli eventi o le interazioni tra attori e sistema, si tratta il cosa e nulla riguardo al come
- il come é obiettivo della progettazione
I casi devono essere guidelines, esprimerle in uno stile essenziale. A livello delle intenzioni e delle responsabilità, non delle azioni concrete.
-
Attori
Sono ruoli svolti da persone, organizzazioni, software, macchine
- primario
- di supporto
- offre un servizio al sistema
- chiarisce interfacce esterne e protocolli
- fuori scena
- ha interesse nel comportamento del caso d’uso
-
Formati
- breve
- un solo paragrafo informale che descrive solitamente lo scenario principale
- informale
- più paragrafi in modo informale che descrivono vari scenari
- dettagliato
- include precondizioni e garanzie di successo
- breve
-
Requisiti non funzionali
Possono essere inclusi nei casi d’uso se relazionati con il requisito funzionale descritto dal caso. Altrimenti vengono descritti nelle specifiche supplementari.
-
SSD
Diagrammi di Sequenza di Sistema
- illustra eventi di input e output relativi ai sistemi in discussione
- diagrammi di sequenza
UML
- sviluppo blackbox, non si pensa al come ma al cosa
- l’intenzione dell’utente
- input dei contratti
-
Contratti
- usano pre e post condizioni per definire nel dettaglio i cambiamenti agli oggetti concettuali nel modello di dominio
Precondizioni: ipotesi significative sullo stato del sistema o degli oggetti del modello di dominio prima dell’esecuzione dell’operazione di sistema Postcondizioni: descrive i cambiamenti di stato degli oggetti del dominio dopo il completamento dell’operazione
- oggetti creati
- collegamenti formati/rotti
- attributi modificati
I contratti sono input per il processo di progettazione software.
Modello di Dominio
Casi d’uso e specifiche supplementari sono input che vanno a definire il modello di dominio
\(\textsc{definition}\) Nel UP
il Modello di Dominio é una rappresentazione delle classi concettuali della situazione reale. Queste non sono oggetti software.
- si può pensare come un dizionario visivo, mostra le astrazioni e le loro relazioni in maniera immediata
- non tratta le responsabilità/metodi degli oggetti, questi sono prettamente software
- possibile distinguere:
- simboli
- intenzioni
- proprietà intrinseche, definizione
- estensioni
- esempi e casi in cui la classe concettuale si applica
Modello di Progetto
Architettura Logica e Layer
Si tratta di un modello indipendente dalla piattaforme che definisce i layer
:
- gruppi di classi software,
packages
, sottoinsiemi con responsabilità condivisaUser Interface
Application Logic
Domain Objects
Technical Services
I modelli per gli oggetti possono essere
- statici, definiscono (diagrammi delle classi)
- package
- nomi delle classi
- attributi
- firme delle operazioni
- dinamici, rappresentano il comportamento del sistema (diagrammi di sequenza)
- collaborazione tra oggetti per realizzare una caso d’uso
- i metodo delle classi software
-
Diagrammi dei Package
Vista statica
-
Diagrammi di Interazione
Vista dinamica
Un interazione é una specifica di come alcuni oggetti si scambiano messaggi nel tempo per eseguire un compito nell’ambito di un certo contesto.
Un compito é rappresentato da un messaggio che dà inizio all’interazione
- questo messaggio é detto messaggio trovato
Per questo scopo vengono usati i diagrammi di sequenza o i diagrammi di comunicazione In particolare questi sono chiamati
Design Sequence Diagram - DSD
.
-
Diagrammi delle Classi
Design Class Diagram - DCD
Vista staticaIl diagramma delle classi di progetto é un diagramma delle classi utilizzato da un punto di vista software o di progetto.
A differenza del
Modello di Dominio
in questo contesto la visibilità ha un significato:- le associazioni qui hanno un verso
-
Progettazione a oggetti
- Quali sono le responsabilità dell’oggetto?
- Con chi collabora l’oggetto?
- Quali design pattern devono essere applicati?
Si parte dal
Modello di Dominio
, ma l’implementazione impone dei vicoli ulteriori dovuti alObject Oriented
- vengono letti e implementati i contratti, con le loro pre e post-condizioni
- non si creano nuove associazioni nel
Modello di Dominio
: siamo a livello del codice e si fanno scelte progettuali di visibilità
Ideazione
Si tratta dello studio di fattibilità
- si decide se il caso merita un’analisi più completa
La documentazione possibile é tanta ma tutto é opzionale
- va documentato solo ciò che aggiunge valore al progetto
Elaborazione
Alla fine di questa fase si ha un’idea chiara del progetto
- vengono stipulati contratti e obiettivi chiari, temporali e sui requisiti
Costruzione
Durante questa fase i requisiti principali dovrebbero essere stabili
Transizione
Unified Modeling Language
UML
Strumento per pensare e comunicare
- utilizzato per rappresentare il modello di dominio/concettuale
- permette un passaggio più veloce da modello a design/progettazione
- il gap rappresentativo sarà più semplice
É un linguaggio visuale per la specifica, la costruzione e la documentazione degli elaborati di un sistema software
- de facto standard in particolare per software OO
- può essere utilizzato come abbozzo, progetto o linguaggio di programmazione
- la modellazione agile enfatizza l’uso di
UML
come abbozzo
Pattern
Riassunto di esperienze precedenti, permettono di individuare le pratiche ottime nello sviluppo di progetti complessi. Un Pattern é una coppia problema-soluzione ben conosciuta e con un nome associato.
L’approccio complessivo é guidato dalla responsabilità1:
RDD
- Responsibility-Driven Development
In UML
la responsabilità é un contratto o un obbligo di un classificatore.
Sono correlate agli obblighi o al comportamento di un oggetto, sono di due tipi:
- di fare
- fare qualcosa esso stesso
- chiedere ad altri di eseguire azioni
- controllare e controllare attività di altri
- di conoscere
- i propri dati
- gli oggetti correlati
- cose che può derivare o calcolare
GRASP
General Responsibility Assignment Software Patterns
Capire le responsabilità é fondamentale per una buona programmazione a oggetti. \(\qquad\qquad\qquad\) ~ Martin Fowler #cit
GRASP tratta i pattern di base per l’assegnazione di responsabilità.
- buon blog post a riguardo
Disegnare i diagrammi di interazione é occasione di considerare le responsabilità (metodi) e assegnarle.
La progettazione modulare é uno dei principi (High Cohesion
- Low Coupling
)
- questi sono pattern valutativi, non ci danno la soluzione direttamente
Creator
- Chi crea un oggetto
A
? - Chi deve essere responsabile della creazione di una nuova istanza di una classe?
Assegna alla classe B
la responsabilità vale una delle seguenti condizioni:
B
contiene o aggrega con una composizione oggetti di tipoA
B
registraA
- ovvero ne salva una
reference
in un campo
- ovvero ne salva una
B
utilizza strettamenteA
B
possiede i dati per l’inizializzazione diA
- quindi
B
é unExpert
rispetto adA
- quindi
Information Expert
- Chi ha una particolare responsabilità?
Assegna la responsabilità alla classe che contiene le informazioni necessarie per soddisfarla.
Expert
Low Coupling
- Come ridurre l’impatto dei cambiamenti?
- Come sostenere una dipendenza bassa?
Assegna le responsabilità in modo tale che l’accoppiamento (non necessario) rimanga basso. Questo é un principio da utilizzare per valutare le scelte possibili e gli altri pattern.
- classi per natura generiche e che verranno riutilizzate devono avere un accoppiamento particolarmente basso.
- il rapporto tra classi-sottoclassi é un accoppiamento forte
- accoppiamento alto con elementi stabili o pervasivi causano raramente problemi
- il problema sorge con accoppiamento alto con elementi per certi aspetti instabili
High Cohesion
- Come mantenere gli oggetti focalizzati, comprensibili e gestibili?
- effetto collaterale, sostenere
Low Coupling
- effetto collaterale, sostenere
Assegna le responsabilità in modo tale che la coesione rimanga alta. Questo é un principio da utilizzare per valutare le scelte possibili e gli altri pattern alternativi.
Una classe con una bassa coesione fa molte cose non correlate tra loro o svolge troppo lavoro. La coesione può essere misurata in termini di:
- coesione di dati
- coesione funzionale
- questa corrisponde al principio di
High Cohesion
- Grady Booch: c’è una coesione funzionale alta quando gli elementi di un componente lavorano tutti insieme per fornire un comportamento ben circoscritto
- questa corrisponde al principio di
- coesione temporale
- coesione per pura coincidenza
bad
Controller
- Qual é il primo oggetto oltre lo strato
UI
che riceve e coordina (“controlla”) un’operazione di sistema?
Assegna la responsabilità a un oggetto che rappresenta uno di questi:
- il sistema complessivo, un oggetto radice o entry point del software, un sottosistema principale
- controller facade
- uno scenario di un caso d’uso all’interno del quale si verifica l’operazione di sistema
- controller di sessione o controller di caso d’uso
Il Controller
é un pattern di delega:
- oggetti dello strato
UI
catturano gli eventi di sistema generati dagli attori - oggetti dello strato
UI
devono delegare le richieste di lavoro a oggetti di un altro strato - il
Controller
é una sorta di facciata appunto- controlla e coordina ma non esegue lui stesso le operazioni, secondo la
High Cohesion
- controlla e coordina ma non esegue lui stesso le operazioni, secondo la
Il controller
MVC
é distinto e solitamente dipende strettamente dalla tecnologia utilizzata per laUI
e fa parte di questo strato. A sua volta delegherà alController
dello strato di Dominio.
Polymorphism
Pure Fabrication
Indirection
Protected Variations
GoF
Gang of Four
GoF sono idee di progettazione più avanzate rispetto a GRASP.
- non sono proprio principi
- articoli di journaldev a riguardo

Soluzioni progettuali comuni, emergono dal codice di progetti di successo. Un fattore emerso é la superiorità della composizione rispetto all'ereditarietà:
- Ereditarietà
- la sottoclasse può accedere ai dettagli della superclasse
- whitebox, a scatola aperta
- é definita staticamente, non é modificabile a tempo di esecuzione
- una modifica alla superclasse potrebbe avere ripercussioni indesiderate sulla classe che la estende
- non rispetta l’incapsulamento
- Composizione
- le funzionalità sono ottenute tramite composizione/assemblamento di oggetti
- riuso blackbox, i dettagli interni sono nascosti
- una classe che utilizza un’altra classe può referenziarla attraverso una interfaccia, questo meccanismo é dinamico
- questa composizione tramite interfaccia rispetta l’incapsulamento, solo una modifica all’interfaccia comporterebbe ripercussioni
Questo aiuta a mantenere le classi incapsulate e coese.
Il meccanismo di ereditarietà può essere realizzata in due modi:
- Polimorfismo
- le sottoclassi possono essere scambiate l’una con l’altra
- si utilizza una superclasse comune
- si sfrutta l’upcasting
- Specializzazione
- le sottoclassi guadagnano elementi e proprietà rispetto alla classe base
- meglio utilizzare la delega che direttamente l’ereditarietà
I pattern mostrano che il polimorfismo e il binding dinamico é molto sfruttato, mentre la specializzazione non é comunemente utilizzata in buone soluzioni.
Creazionali
Riguardanti l'instanziazione delle classi
- Abstract Factory
- interfaccia factory
- classe factory concreta per ciascuna famiglia di elementi da creare
- opzionalmente definire una classe astratta che implementa l’interfaccia factory e fornisce servizi comuni alle factory concrete che la estendono
- il cliente che la utilizza non ha conoscenza delle classi concrete
- la factory si occupa di creare oggetti correlati tra loro
- una variante crea la factory come Singleton
- utilizzata in libreria Java per le
GUI
- Builder
- Factory Method
- Lazy Initialization
- Prototype Pattern
- Singleton
- é consentita/richiesta una sola istanza di una classe
- gli altri oggetti hanno bisogno di un punto di accesso globale e singolo al singleton
- si definisce un metodo statico della classe che restituisce l’oggetto singleton
- questo in Java
- restituisce un puntatore all’oggetto se già esiste, se non esiste ancora prima lo crea
- questa implementazione é preferibile
- la classe può essere raffinata in sottoclassi
- la maggior parte dei meccanismi di comunicazione remota object oriented supporta l’accesso remoto solo a metodi d’istanza
- una classe non é sempre singleton in tutti i contesti applicativi, dipende dalla
virtual machine
- il singleton può essere anche implementato come classe statica
- non un vero e proprio singleton, si lavora con la classe statica non l’oggetto
- la classe statica ha metodi statici che offrono ciò che é richiesto
- in
UML
é indicato con un \(1\) nella sezione del nome, in alto a destra - può esserci concorrenza in multithreading
- Double-check Locking
Strutturali
Riguardanti la struttura delle classi/oggetti
- Adapter
- gestire interfacce incompatibili
- fornire interfaccia stabile a comportamenti simili ma interfacce diverse
- converti l’interfaccia originale in un’altra interfaccia, attraverso un adapter intermedio
- da preferire l’utilizzo di un riferimento
Adaptee
da parte delAdapter
, per incapsulamento- questo piuttosto che estendere direttamente l'
Adaptee
- questo piuttosto che estendere direttamente l'
- Bridge
- Composite
- trattare un gruppo o una struttura composta nello stesso modo di un oggetto non composto
- si definiscono classi per gli oggetti composti e atomici in modo che implementino la stessa interfaccia
- rappresenta gerarchie tutto-parte
- permette di ignorare le differenze tra oggetti semplici e composti
- saranno le differenze interne a definire le operazioni, il
client
non vede questo
- saranno le differenze interne a definire le operazioni, il
- costruisce strutture ricorsive dove il cliente gestisce un’unica entità
- Decorator o Wrapper
- permettere di assegnare responsabilità addizionali a un oggetto dinamicamente
- inglobare l’oggetto all’interno di un altro che aggiunge le nuove funzionalità
- più flessibile dell’estensione della classe, completamente dinamico
- evitano l’esplosione delle sottoclassi
- simile al Composite ma aggiunge funzionalità
- Facade
- Flyweight
- Proxy
Comportamentali
Riguardanti l'interazione tra classi
- Chain of Responsibility
- utilizzato nella gestione delle eccezioni, delega a ritroso
- Command
- Event Listener
- Hirarchical Visitor
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- oggetti subscriber interessati ai cambiamenti o agli eventi di un oggetto publisher
- spesso associato al pattern architetturale
MVC
- spesso associato al pattern architetturale
- Il publisher vuole un basso accoppiamento con i subscriber
interface
subscriber o listener, gli oggetti subscriber implementano questa interfaccia- il publisher notifica i cambiamenti
- dipendenza uno-a-molti
- oggetti subscriber interessati ai cambiamenti o agli eventi di un oggetto publisher
- State
- il comportamento di un oggetto dipende dal suo stato
- i metodi contengono logica condizionale per casi
- classi stato per ciascun stato implementanti una
interface
comune- delega le operazioni che dipendono dallo stato all’oggetto stato corrente corrispondente
- assicura che l’oggetto contesto referenzi sempre un oggetto stato che riflette il suo stato corrente
- il comportamento di un oggetto dipende dal suo stato
- Strategy
- algoritmi diversi che hanno obiettivi in comune
- strategie come oggetti distinti che implementano una
interface
comune
- Template method
- Visitor
- separare l’operazione applicata su un contenitore complesso dalla struttura dati cui é applicata
- oggetto
ConcreteVisitor
in grado di percorrere la collezione- applica un metodo proprio su ogni oggetto
Element
visitato (parametro)
- applica un metodo proprio su ogni oggetto
- gli oggetti della collezione implementano una
interface
Visitable
che consente al visitatore di essere accettato e invocare l’operazione relativa all’elemento
Laboratorio
Progetto Cat & Ring
Fase Preliminare dell’ideazione
Glossario
UC Dettagliati
Chef
- Chef Claudio, ansioso
- foglio riepilogativo ricette e preparazioni di tutti i servizi (automatico)
- opzionalmente puó decidere di aggiungere cose al foglio (non al menù)
- ordina l’elenco per importanza/difficoltà (il metodo é soggettivo)
- questo puó essere fatto anche in un momento successivo o puó essere modificato
- tabellone dei turni: assegna a ogni elemento dell’elenco il turno e un cuoco (disponibile per quel turno)
- stima del tempo necessario a ogni cuoco
- quantità e porzioni
- revisione degli assegnamenti e dell’ordine di questi
- parallelamente sono creati i fogli riepilogativi dei servizi
- foglio riepilogativo ricette e preparazioni di tutti i servizi (automatico)
- Chef Tony, rilassato
- fogli riepilogativi ricette e preparazioni di tutti i servizi (automatico)
- ordina l’elenco per giorno del servizio
- fogli riepilogativi dei servizi: assegna turno e cuoco (disponibile in quel turno)
- segna se ci sono preparati già pronti/avanzati da servizi precedenti
- tabellone dei turni: per preparazioni critiche nelle tempistiche le assegna a turni successivi
- anche senza scegliere subito il cuoco
\(\textsc{nb}\) emergono due nuovi concetti:
- il foglio riepilogativo
- è associato ad un servizio all’interno di un evento, e riassume le ricette/preparazioni da preparare per quel servizio, riportando per ciascuna: se è stata assegnata, a chi e quando; se non è stata assegnata perché non serve prepararla; se il compito assegnato è stato portato a termine, e in tal caso eventuali commenti a riguardo del cuoco che l’ha preparata. Solo lo chef che ha in carico un evento e i relativi servizi può modificare (aggiungendo, eliminando o cambiando) l’elenco dei compiti nei relativi fogli riepilogativi.
- il tabellone dei turni
- riepiloga ciascun turno i compiti già assegnati indipendentemente dal servizio per cui sono assegnati. E’ usato dallo chef per capire lo “stato” di un turno, e dai cuochi per sapere cos’hanno da fare. E’ dunque pubblico; ogni qual volta uno chef modifica i compiti a partire dal proprio foglio riepilogativo, anche il contenuto del tabellone viene modificato.
Queste sono due visualizzazioni di una stessa informazione, l’utente inserirà l’informazione una volta sola.
- responsabilità del sistema queste visualizzazioni
Primi UC
- Claudio
- crea foglio riepilogativo per un servizio di un evento oppure apre un foglie riepilogativo esistente (tra i servizi degli eventi di cui é stato incaricato)
- opzionalmente aggiunge preparazioni/ricette all’elenco
- ordina l’elenco per importanza e/o difficoltà
- opzionalmente consulta tabellone turni
- assegna un compito a un cuoco in un dato turno (sia sul tabellone dei turni che sul foglio riepilogativo) oppure modifica un assegnamento oppure elimina un assegnamento
- opzionalmente specifica per il compito inserito nel tabellone una stima del tempo necessario
- opzionalmente specifica per il compito inserito nel fogilo riepilogativo le quantità/porzioni da preparare
ripete dal passo 4. fino a che soddisfatto
- Tony
- crea foglio riepilogativo per un servizio di un evento oppure apre un foglie riepilogativo esistente (tra i servizi degli eventi di cui é stato incaricato)
- opzionalmente apre più fogli riepilogativi ripetendo il passo 1.
- assegna compito a cuoco per dato turno (sia sul foglio riepilogativo che sul tabellone dei turni) oppure specifica che la ricetta/preparazione é già pronta oppure assegna un compito a un turno senza specificare il cuoco
- indica quantità/porzioni per il compito inserito
ripete dal passo 3. fino a che soddisfatto torna al passo 2. oppure conclude
UC Combinato
- Genera foglio riepilogativo oppure apre foglio esistente (relativo a eventi cui é incaricato)
se desidera ripete 1. per aprire più fogli parallelamente se desidera continua con 2. altrimenti termina il caso d’uso
- opzionalmente aggiunge preparazioni/ricette al foglio
- opzionalmente ordina l’elenco
- opzionalmente consulta tabellone dei turni
- assegna un compito in un dato turno e opzionalmente a un cuoco oppure specifica se il compito é già stato svolto oppure modifica un compito già inserito oppure elimina un compito già inserito
- opzionalmente specifica tempo necessario al compito e/o quantità/porzioni da preparare
ripete dal passo 4. fino a che soddisfatto
\(\textsc{nb}\) i passi 1. (per la generazione) e 4. (gestione delle 2 viste, foglio servizio e tabellone turni ) sono responsabilità del Sistema
Estensioni
Progettazione
Riguardo lo strato di domain
- passaggio all’inglese per dividere il linguaggio prettamente tecnico e quello leggibile dai clienti
- domain modules
MenuManagement
KitchenTaskManagement
- technical services
- persistence on
DB
- login
- persistence on
Gestione con grasp controller
degli eventi tra UI
e Domain
Il Design Class Diagram
o DCD
- é un documento unico per il progetto
- riporta tutte le classi
- entro questo si puó suddividere in moduli, ma questi rimangono interdipendenti tra loro
- questa é la parte statica
Il Detailed Sequence Diagram
o DSD
- la parte dinamica
- le interazioni tra gli oggetti per eseguire le operazioni necessarie
- a questo livello si vedono le chiamate e le risposte
- e anche le notifiche tra
observed
eobserver
- e anche le notifiche tra
-
\(\textsc{nb}\qquad\) quella della responsabilità é una metafora per semplificare il ragionamento ↩︎