IN_DE_SO aperte
|
|
Title of test:
![]() IN_DE_SO aperte Description: work in progress |



| New Comment |
|---|
NO RECORDS |
|
Che cos'è, nel contesto dell'Ingegneria del Software, una metodologia? In che cosa si differenzia da un metodo?. Una metodologia è una collezione di tecniche, pratiche e/o strumenti per risolvere una classe di problemi, che specifica come e quando ogni metodo debba essere usato. Si differenzia da un metodo (che è una tecnica ripetibile per risolvere un dato problema) perché la metodologia organizza e coordina più metodi all'interno di un processo. Che cos'è, nel contesto dell'Ingegneria del Software, una notazione? Fornisci un esempio. Una notazione è un insieme di regole grafiche o testuali utilizzate per rappresentare un modello. L'UML (Unified Modeling Language) è la notazione standard usata per rappresentare modelli orientati agli oggetti. Disegna un diagramma delle classi per rappresentare la relazione tra genitori e figli. Considera che una persona può avere sia genitori che figli. Annota le associazioni con ruoli e molteplicità. La classe è Persona con un'associazione ricorsiva che collega ogni persona ai propri genitori e figli. Dal lato dei genitori la molteplicità è 2, perché ogni persona ha esattamente due genitori. Dal lato dei figli la molteplicità è 0..*, perché una persona può non avere figli oppure averne molti. Disegna un diagramma delle classi che rappresenta un libro definito così: "un libro è composto da parti, a loro volta composte da capitoli; un capitolo è composto da sezioni". Concentrati sulle classi e le relazioni. Un Libro è composto da una o più Parti. Ogni Parte è composta da uno o più Capitoli. Ogni Capitolo è composto da una o più Sezioni. Tutte le relazioni sono di tipo composizione, perché le parti non esistono indipendentemente dal contenitore: se elimini un Libro, eliminano anche le sue Parti, e così via. La molteplicità sul lato del contenitore è 1, mentre sul lato del contenuto è 1..* (almeno uno). Nell'ambito delle notazioni adottate nei diagrammi UML, che cos'è una nota? Fornisci un esempio. Una nota in UML è un commento testuale allegato a un elemento del modello per fornire spiegazioni aggiuntive, vincoli o chiarimenti, senza influenzare la semantica formale. Si rappresenta con un rettangolo con un lembo piegato. Ad esempio, accanto a una classe si può scrivere: "Questa classe sarà implementata come singleton". Nell'ambito delle notazioni adottate nei diagrammi UML, che cos'è un package? Fornisci un esempio. Un package in UML è un raggruppamento generico utilizzato per organizzare elementi del modello in unità logiche, riducendo la complessità e migliorando la leggibilità. Serve a racchiudere classi, casi d'uso o altri componenti correlati. Ad esempio, si può creare un package chiamato "GestioneUtenti" contenente le classi "Utente", "Profilo" e "Autenticazione". Nell'ambito delle notazioni adottate nei diagrammi UML, che cos'è un vincolo (constraint)? Fornisci un esempio. Un vincolo in UML è una regola o condizione che limita il significato o l'uso di un elemento del modello, specificando una relazione che deve essere sempre vera. Si rappresenta tra parentesi graffe { } e può essere espresso in linguaggio naturale o formale. Ad esempio, su un'associazione tra le classi Persona e Automobile si può porre il vincolo {maggiorenne}. Nell'ambito delle notazioni adottate nei diagrammi UML, che cos'è uno stereotipo? Fornisci un esempio. Uno stereotipo in UML è un meccanismo di estensione che permette di classificare un elemento del modello, aggiungendo una semantica specifica o indicandone un uso particolare. Si rappresenta racchiudendo il nome tra « » (virgolette angolari). In merito al tema dell'elicitazione dei requisiti, che cosa si intende con affidabilità di un sistema?. Nel contesto dell'elicitazione dei requisiti, l'affidabilità è un requisito non funzionale che esprime la capacità del sistema di operare senza guasti per un determinato periodo di tempo, in specifiche condizioni ambientali. Descrive la continuità di corretto funzionamento. In merito al tema dell'elicitazione dei requisiti, che cosa si intende con usabilità di un sistema o di una sua componente?. Nel contesto dell'elicitazione dei requisiti, l'usabilità è un requisito non funzionale che riguarda la facilità con cui un utente può imparare a utilizzare il sistema, interagire con esso e raggiungere i propri obiettivi. In merito al tema dell'elicitazione dei requisiti, i requisiti relativi alle prestazioni (performance) coinvolgono attributi quantificabili del sistema. Cita almeno tre esempi di tali attributi. I requisiti di prestazione coinvolgono attributi quantificabili del sistema come il tempo di risposta, che misura l'intervallo tra una richiesta e la risposta del sistema, la velocità di elaborazione, che indica quante operazioni il sistema completa in un dato intervallo di tempo, e la capacità di carico, che specifica il numero massimo di utenti o transazioni che il sistema può supportare senza degradare. Durante la progettazione del sistema i requisiti sono frequentemente validati con il committente e con gli utenti. La validazione dei requisiti si articola in controlli di completezza, consistenza, non-ambiguità e correttezza. Descrivi il significato di queste categorie di validazione. La completezza verifica che siano stati considerati tutti i requisiti necessari senza lacune. La consistenza controlla che non ci siano contraddizioni tra requisiti. La non ambiguità assicura che ogni requisito sia interpretabile in un solo modo. La correttezza accerta che ogni requisito corrisponda a una reale esigenza degli stakeholder. In merito al tema dell'elicitazione dei requisiti, che cosa si intende con supportabilità di un sistema?. La supportabilità è un requisito non funzionale che riguarda la facilità con cui il sistema può essere assistito, mantenuto e aggiornato durante l'intero ciclo di vita. Tre proprietà desiderabili della specifica dei requisiti sono che essa sia realistica, verificabile e tracciabile. Descrivi queste tre proprietà. Realistica quando descrive requisiti effettivamente attuabili tenendo conto dei vincoli tecnologici, economici, temporali e organizzativi esistenti. Verificabile quando esiste un metodo chiaro e oggettivo per stabilire se il requisito è stato soddisfatto nel sistema realizzato. Tracciabile quando è possibile seguire il requisito lungo l'intero ciclo di vita del software, sia a ritroso verso le sue origini, sia in avanti verso gli elementi di progettazione e implementazione, permettendo di comprenderne le motivazioni. Che cosa si intende con il termine greenfield engineering?. Si intende lo sviluppo di un sistema software nuovo, realizzato da zero, senza dover interagire o integrarsi con componenti preesistenti. Si parte da un contesto vergine in cui non ci sono vincoli imposti da sistemi legacy. Descrivi la struttura del documento di analisi dei requisiti (RAD). Introduzione: fornisce una panoramica di alto livello del sistema. Sistema corrente (as-is): descrive lo stato attuale dei processi che il nuovo sistema andrà a modificare o sostituire. Sistema proposto (to-be): costituisce il cuore del RAD e contiene la specifica dei requisiti (funzionali, non funzionali). Glossario: elenca e definisce i termini tecnici e di dominio utilizzati. Nel contesto dell'analisi dei requisiti, che cosa intendiamo per generalizzazione? Fornisci un esempio. La generalizzazione è l'attività di modellizzazione che identifica concetti più astratti e generali a partire da concetti più specifici, creando una relazione di ereditarietà tra di essi. Dalle classi specifiche Automobile e Moto si astrae la classe generale Veicolo, che racchiude gli attributi e le operazioni comuni (come targa, velocitaMax). Nel contesto dell'analisi dei requisiti, che cosa sono gli oggetti control? Fornisci una definizione ed un esempio. Gli oggetti control sono oggetti che gestiscono il flusso delle operazioni e coordinano le attività tra oggetti boundary e oggetti entity. Incapsulano la logica applicativa di un caso d'uso. In un sistema di prenotazione alberghiera, un oggetto control GestorePrenotazione riceve la richiesta dall'utente (tramite un oggetto boundary come FormPrenotazione), verifica la disponibilità delle camere (interrogando oggetti entity come Camera), calcola il costo e aggiorna la prenotazione. Nel contesto dell'analisi dei requisiti, che cosa sono gli oggetti boundary? Fornisci una definizione ed un esempio. Gli oggetti boundary sono oggetti che mediano l'interazione tra il sistema e gli attori esterni; essi incapsulano i dettagli dell'interfaccia, isolando il resto del sistema dalle modifiche all'interfaccia stessa. In un sistema di home banking, un oggetto boundary ModuloLogin riceve le credenziali inserite dall'utente, le trasmette a un oggetto control per l'autenticazione. Nel contesto dell'analisi dei requisiti, che cosa sono gli oggetti entity? Fornisci una definizione ed un esempio. Gli oggetti entity rappresentano i concetti del dominio applicativo che il sistema deve gestire e memorizzare in modo persistente. In un sistema bancario, un oggetto entity ContoCorrente con attributi come numeroConto e intestatario e filiale. Nel contesto dell'analisi dei requisiti, che cosa intendiamo per specializzazione? Fornisci un esempio. La specializzazione è l'attività di modellizzazione che, partendo da un concetto generale, definisce concetti più specifici che ne ereditano le caratteristiche e aggiungono proprietà o comportamenti particolari. Dalla classe generale Veicolo si specializzano le classi Automobile (aggiungendo attributi come numeroPorte e tipoCarburante) e Motocicletta (aggiungendo attributi come cilindrata e tipoManubrio). Descrivi le architetture a strati aperte. Fornisci un esempio. Un'architettura a strati aperta è un'architettura in cui ogni strato può accedere non solo allo strato immediatamente sottostante, ma anche a tutti gli strati inferiori. In un sistema operativo, un'applicazione (strato superiore) può chiamare direttamente funzioni di sistema (strato inferiore) senza passare per i livelli intermedi delle librerie di sistema. Fornisci una definizione del concetto di coesione relativamente a un sotto-sistema software. La coesione è la misura del grado in cui gli elementi all'interno di uno stesso sotto-sistema sono correlati tra loro e contribuiscono a realizzare uno scopo comune e ben definito. Un'alta coesione indica che le parti del sotto-sistema sono strettamente integrate. La riduzione del coupling in sede di progettazione dei sotto-sistemi è sempre un valore da perseguire in assoluto? In quali casi le controindicazioni prevalgono?. La riduzione del coupling non è un valore assoluto perché in alcuni casi un accoppiamento più stretto può essere preferibile per ottimizzare le prestazioni, ridurre l'overhead computazionale, riflettere una forte coesione funzionale necessaria o soddisfare requisiti di dominio che richiedono interdipendenze. Descrivi le architetture a strati chiuse. Fornisci un esempio. Un'architettura a strati chiusa (closed layered architecture) è un'architettura in cui ogni strato può interagire solo con lo strato immediatamente sottostante, seguendo una gerarchia rigorosa. Il modello ISO/OSI di rete è un'architettura a strati chiusa: lo strato di trasporto comunica solo con lo strato di rete sottostante e con lo strato di sessione soprastante. Che cosa si intende, in Ingegneria del software, con il termine coupling?. Il coupling è la misura del grado di dipendenza tra moduli o sottosistemi diversi. Indica quanto un modulo è interconnesso con un altro: un basso coupling significa che i moduli sono indipendenti. Quali sono i vantaggi di un'architettura a strati?. Un'architettura a strati organizza il sistema in livelli gerarchici, dove ciascuno strato fornisce servizi a quello superiore e utilizza quelli dello strato inferiore. Questo approccio semplifica la manutenzione perché le modifiche rimangono confinate allo strato interessato senza impattare il resto dell'applicazione. Fornisci una definizione di partizionamento di un sistema. Il partizionamento di un sistema è la suddivisione orizzontale del sistema in moduli o sottosistemi indipendenti, ciascuno responsabile di una porzione specifica delle funzionalità complessive. Quali sono gli svantaggi di un'architettura a strati?. Un'architettura a strati può introdurre overhead prestazionale a causa della comunicazione tra livelli o aumentare la complessità progettuale per applicazioni semplici o limitare la flessibilità. Qual è il principale vantaggio dello stile architetturale Pipe & Filter? Per quali tipologie di sistemi è indicato?. Il principale vantaggio è la modularità e la possibilità di eseguire i filtri in parallelo, migliorando l'efficienza. È indicato per sistemi che elaborano flussi di dati in sequenza, come compilatori, pipeline di immagini e trasformazioni ETL. Descrivi lo stile architetturale Pipe & Filter. Indica un esempio in cui tale stile è ampiamente adottato. Lo stile Pipe & Filter organizza il sistema in filtri indipendenti che elaborano dati in sequenza, collegati da pipe che trasportano i risultati da un filtro all'altro. È ampiamente adottato nei compilatori, dove le fasi di analisi lessicale, sintattica e generazione del codice sono realizzate come filtri separati. Qual è il vantaggio insito nell'adozione di uno stile architetturale Three-tier?. Il vantaggio principale dell'architettura Three-tier è la separazione delle responsabilità in tre livelli distinti. Questo approccio modulare offre molteplici benefici: scalabilità indipendente di ogni livello in base alle esigenze, maggiore sicurezza isolando i dati dietro il livello applicativo, manutenibilità semplificata e flessibilità nel sostituire le tecnologie di un singolo livello. Descrivi lo stile architetturale Four-tier. Fornisci un esempio. Nell'architettura Four-tier, il livello di presentazione viene suddiviso in due sottolivelli distinti. Presentation client: l'interfaccia utente vera e propria che risiede sul dispositivo dell'utente (desktop, smartphone, ATM). Presentation server: un livello intermedio che gestisce la logica di presentazione, la generazione delle viste, etc. Esempio: un'applicazione bancaria in cui il presentation server genera interfacce ottimizzate per desktop, mobile e ATM, tutte alimentate dagli stessi servizi applicativi sottostanti. Descrivi lo stile architetturale Three-tier. L'architettura Three-tier organizza il sistema in tre livelli distinti e indipendenti: il livello di presentazione gestisce l'interfaccia utente, il livello applicativo contiene la logica di business e coordina le operazioni, mentre il livello dati si occupa della persistenza e della gestione delle informazioni. Fornisci una definizione del concetto di deadlock di due processi. Quale stile architetturale, tra quelli presentati nel corso, è potenzialmente soggetto a deadlock?. Un deadlock è una condizione di stallo in cui due o più processi si bloccano reciprocamente, ciascuno in attesa di una risorsa detenuta dall'altro, senza che nessuno possa procedere. L'architettura Peer-to-peer, poiché in essa tutti i nodi agiscono contemporaneamente sia come client che come server, creando una rete di dipendenze reciproche, è soggetta a questo tipo di eventi. Fornisci una definizione del concetto di operazione callback. Quale stile architetturale, tra quelli presentati nel corso, fa tipicamente uso di operazioni callback?. Un'operazione callback è una funzione che viene passata a un altro componente software per essere richiamata successivamente al verificarsi di un evento. L'architettura che ne fa tipicamente uso è quella a invocazione implicita, come il pattern Model-View-Controller. In fase di identificazione degli obiettivi del design possiamo fare riferimento a cinque gruppi di criteri progettuali. Citane almeno quattro. Prestazioni, Affidabilità, Costi, Manutenibilità. Un gruppo di criteri progettuali su cui si basa l'identificazione degli obiettivi del design prende in considerazione la manutenzione del sistema. Fornisci degli esempi delle caratteristiche del sistema tipicamente coinvolte. Manutenibilità: la capacità di correggere difetti e apportare modifiche con sforzo contenuto. Leggibilità e chiarezza del codice: la comprensibilità del codice sorgente per chi deve intervenire successivamente. Documentazione tecnica: la completezza e l'aggiornamento della documentazione che supporta le attività di manutenzione. Un gruppo di criteri progettuali su cui si basa l'identificazione degli obiettivi del design prende in considerazione i costi associati al sistema. Fornisci degli esempi delle tipologie di costo tipicamente coinvolte. Il gruppo di criteri progettuali legato ai costi considera i costi di sviluppo iniziale, i costi operativi per l'esecuzione del sistema, i costi di manutenzione e gli eventuali costi per hardware o licenze software. Un gruppo di criteri progettuali su cui si basa l'identificazione degli obiettivi del design prende in considerazione la dependability (affidabilità) del sistema. Fornisci degli esempi delle caratteristiche del sistema tipicamente coinvolte. Affidabilità: la capacità di eseguire le funzioni previste senza guasti per un determinato periodo. Integrità: la protezione dei dati da modifiche non autorizzate o errate. Disponibilità: la misura in cui il sistema è operativo e accessibile quando richiesto. Un gruppo di criteri progettuali su cui si basa l'identificazione degli obiettivi del design prende in considerazione le prestazioni del sistema. Fornisci degli esempi delle caratteristiche del sistema tipicamente coinvolte. Il gruppo di criteri progettuali legato alle prestazioni considera le caratteristiche che misurano l'efficienza e la reattività del sistema, come la velocità di risposta, il throughput, la latenza, la capacità di gestire carichi di lavoro intensi e l'utilizzo efficiente delle risorse computazionali. Un gruppo di criteri progettuali su cui si basa l'identificazione degli obiettivi del design prende in considerazione i criteri dell'utente finale. Fornisci degli esempi delle caratteristiche del sistema tipicamente coinvolte. Il gruppo di criteri progettuali legato ai bisogni dell'utente finale si concentra sugli aspetti che determinano la qualità dell'interazione e la soddisfazione percepita. Le caratteristiche tipicamente coinvolte includono l'usabilità, efficienza nell'uso delle risorse e soddisfazione soggettiva . Rientrano in quest'area anche la facilità di apprendimento o la chiarezza delle informazioni. Descrivi le conseguenze (positive ed, eventualmente, negative) che possono derivare dall'adozione del design pattern Façade. L'adozione del pattern Façade semplifica l'interazione con il sottosistema e riduce l'accoppiamento tra client e componenti interni, migliorando manutenibilità e organizzazione. Tuttavia, introduce un ulteriore livello che può diventare un collo di bottiglia prestazionale e, se mal progettato, trasformarsi in un "god object" difficile da gestire. Abbiamo classificato gli obiettivi del design in 5 categorie: prestazioni, dependability, costo, manutenzione e utente finale. Assegna una o più categorie al seguente obiettivo:La cassa automatica deve resistere ad attacchi di «forza bruta» (ad es. un utente che cerchi di scoprire un codice segreto provando tutte le possibilità). L'obiettivo "La cassa automatica deve resistere ad attacchi di «forza bruta»" appartiene principalmente alla categoria dependability, e più specificamente alla sottocategoria della sicurezza. Rientra anche indirettamente nella categoria utente finale, poiché la resistenza agli attacchi contribuisce alla fiducia e alla protezione degli utenti. Abbiamo classificato gli obiettivi del design in 5 categorie: prestazioni, dependability, costo, manutenzione e utente finale. Assegna una o più categorie al seguente obiettivo:L'alloggiamento del distributore di biglietti deve riservare spazio per installare nuovi bottoni qualora il numero di tariffe aumenti. L'obiettivo "L'alloggiamento del distributore di biglietti deve riservare spazio per installare nuovi bottoni qualora il numero di tariffe aumenti" appartiene principalmente alla categoria manutenzione, e più specificamente all'estendibilità. Abbiamo classificato gli obiettivi del design in 5 categorie: prestazioni, dependability, costo, manutenzione e utente finale. Assegna una o più categorie al seguente obiettivo: Il distributore di biglietti deve essere in grado di emettere un biglietto anche nel caso di caduta della connessione di rete. L'obiettivo "Il distributore di biglietti deve essere in grado di emettere un biglietto anche nel caso di caduta della connessione di rete" appartiene principalmente alla categoria dependability, e più specificamente alla sottocategoria della robustezza o tolleranza ai guasti. Indirettamente, tocca anche la categoria utente finale, poiché garantisce la continuità del servizio. Abbiamo classificato gli obiettivi del design in 5 categorie: prestazioni, dependability, costo, manutenzione e utente finale. Assegna una o più categorie al seguente obiettive: Dopo aver digitato un comando, l'utente deve ricevere una risposta entro un secondo. L'obiettivo "Dopo aver digitato un comando, l'utente deve ricevere una risposta entro un secondo" appartiene principalmente alla categoria prestazioni, poiché definisce un requisito di tempo di risposta. Appartiene anche alla categoria utente finale, poiché un tempo di risposta breve contribuisce all'usabilità e alla soddisfazione percepita. Descrivi le conseguenze (positive ed, eventualmente, negative) che possono derivare dall'adozione del design pattern Observer. L'adozione del pattern Observer favorisce il basso accoppiamento tra soggetto e osservatori, semplificando la manutenzione e consentendo notifiche automatiche a tutti gli osservatori registrati. Tuttavia, può causare problemi se l'ordine delle notifiche è rilevante o generare loop in presenza di riferimenti circolari. Descrivi la soluzione proposta dal design pattern Observer. Il pattern Observer prevede che un soggetto mantenga una lista di osservatori dipendenti. Quando lo stato del soggetto cambia, esso notifica automaticamente tutti gli osservatori registrati, i quali si aggiornano di conseguenza. Quale problema di progettazione viene affrontato con l'uso del design pattern Observer?. Il pattern Observer affronta il problema di mantenere la consistenza tra oggetti correlati senza creare un forte accoppiamento. Quando un oggetto (il soggetto) cambia stato, è necessario che altri oggetti dipendenti (gli osservatori) vengano informati e aggiornati automaticamente, ma senza che il soggetto debba conoscere i dettagli specifici degli osservatori. Fornisci una definizione di design pattern. Un design pattern è una soluzione progettuale generale e riutilizzabile a un problema ricorrente che si presenta durante lo sviluppo della soluzione. Non è un codice già pronto, ma una descrizione o un modello di come risolvere un problema. Quale problema di progettazione viene affrontato con l'uso del design pattern Façade?. Il pattern Façade affronta il problema di ridurre la complessità e l'accoppiamento tra un client e un sottosistema complesso, composto da molte classi e interfacce . Esso fornisce un'interfaccia unificata e semplificata che nasconde i dettagli interni. Quali elementi fanno parte della struttura di un design pattern?. Nome, Problema, Soluzione, Conseguenze. In molte architetture, come ad es. quelle three-tier e four-tier, la memorizzazione di oggetti persistenti è affidata a un tier dedicato. Quali obiettivi del design hanno condotto a questa decisione?. La decisione è stata guidata principalmente dagli obiettivi di manutenibilità (modificare il sistema di memorizzazione senza impattare l'intera applicazione), scalabilità (ridimensionare le risorse di storage indipendentemente) e sicurezza (isolare i dati e controllare centralmente gli accessi). Elenca gli obiettivi del design che sarebbe difficile soddisfare usando un'architettura chiusa con molti strati, come ad es. l'esempio OSI-ISO. In un'architettura chiusa con molti strati, come il modello ISO/OSI, sarebbe difficile soddisfare gli obiettivi di design legati alle prestazioni e alla flessibilità. La stratificazione rigida introduce un'overhead dovuto alla continua interazione tra i livelli, penalizzando l'efficienza complessiva del sistema. Descrivi la soluzione proposta dal design pattern Flyweight. Il pattern Flyweight riduce l'uso di memoria condividendo oggetti che hanno uno stato intrinseco invariante, separato dallo stato estrinseco dipendente dal contesto. Quale problema di progettazione viene affrontato con l'uso del design pattern Flyweight?. Il pattern Flyweight affronta il problema dell'elevato consumo di memoria dovuto alla creazione di molti oggetti simili, condividendo tra essi la parte invariante dello stato. Considera il diagramma UML di deployment riportato qui sotto: Fornisci una descrizione verbale delle informazioni desumibili dal diagramma. Servlet: componenti che gestiscono le richieste HTTP. HttpService: servizio per la comunicazione tramite protocollo HTTP. DBProxy: un proxy che media l'accesso al database. jdbc: il driver JDBC per la connessione al database. l nodo WebServer ospita tutti questi componenti, che collaborano per fornire servizi web e accedere ai dati. Descrivi la funzione e la struttura dei diagrammi UML di deployment. Fornisci un esempio. I diagrammi di deployment UML mostrano l'architettura fisica di un sistema, rappresentando i nodi hardware e i componenti software che risiedono su di essi, insieme alle connessioni di comunicazione tra nodi. Un esempio è un sistema web con un nodo "Browser" sul client, un nodo "WebServer" con l'applicazione e un nodo "DatabaseServer" con il DBMS, collegati da linee che indicano i protocolli di comunicazione. Considera il pattern MVC, generalizzazione del design pattern Observer: Indica in che misura la struttura di MVC facilita oppure ostacola il seguente obiettivo del design:Controllo degli accessi (la garanzia che solo gli utenti autorizzati possano accedere a parti specifiche del model). Il pattern MVC facilita il controllo degli accessi perché il Controller può verificare i permessi dell'utente prima di invocare operazioni sul Model, centralizzando la logica di autorizzazione e mantenendo il Model focalizzato sui dati. Considera il pattern MVC, generalizzazione del design pattern Observer: Indica in che misura la struttura di MVC facilita oppure ostacola il seguente obiettivo del design:Modificabilità (l'aggiunta di nuovi attributi nel model). Il pattern MVC facilita la modificabilità perché il Model può essere esteso con nuovi attributi senza impattare le View, che ricevono notifiche automatiche senza dipendere dalla struttura interna. Il Controller può essere aggiornato separatamente per gestire i nuovi dati. Considera il pattern MVC, generalizzazione del design pattern Observer: Indica in che misura la struttura di MVC facilita oppure ostacola il seguente obiettivo del design:Ottimizzazione dei tempi di risposta (il tempo tra l'input dell'utente e l'aggiornamento di tutte le views). Il pattern MVC può facilitare l'ottimizzazione dei tempi di risposta grazie alla separazione dei ruoli e al meccanismo di notifica automatica delle View. Tuttavia, può ostacolarla in contesti con aggiornamenti molto frequenti, poiché la catena di comunicazione introduce overhead e potenziali colli di bottiglia. Considera il pattern MVC, generalizzazione del design pattern Observer: Indica in che misura la struttura di MVC facilita oppure ostacola il seguente obiettivo del design:Estendibilità (l'aggiunta di nuovi tipi di view). Il pattern MVC facilita l'estendibilità perché nuove View possono essere aggiunte semplicemente registrandosi come osservatori del Model, senza modificare il Model stesso o le View esistenti. Quale problema di progettazione viene affrontato con l'uso del design pattern Simple Factory?. Il pattern Simple Factory affronta il problema di centralizzare la creazione di oggetti, separando la logica di istanziazione dalla logica del client. Senza questo pattern, il client dovrebbe conoscere e scegliere direttamente le classi concrete, rendendo il codice più rigido e difficile da manutenere. Descrivi la soluzione proposta dal design pattern Iterator. Il pattern Iterator fornisce un modo per accedere sequenzialmente agli elementi di una collezione senza esporne la struttura interna. La soluzione prevede la definizione di un'interfaccia comune per l'iteratore. La collezione stessa fornisce un metodo per creare un iteratore appropriato. Quale problema di progettazione viene affrontato con l'uso del design pattern Iterator?. Il pattern Iterator affronta il problema di accedere agli elementi di una collezione senza esporre la sua struttura interna e di fornire un modo uniforme per scorrere diverse strutture dati. Senza questo pattern, il client dovrebbe conoscere i dettagli implementativi della collezione. Descrivi la soluzione proposta dal design pattern Proxy. Il pattern Proxy fornisce un oggetto sostituto che controlla l'accesso all'oggetto reale, gestendo aspetti come l'inizializzazione ritardata, la sicurezza o la comunicazione remota, senza che il client debba conoscerne i dettagli. Quale problema di progettazione viene affrontato con l'uso del design pattern Proxy?. Il pattern Proxy affronta il problema di controllare l'accesso a un oggetto, aggiungendo un livello di indirezione che permette di gestire situazioni come l'inizializzazione ritardata, la protezione degli accessi, la comunicazione remota o l'aggiunta di operazioni trasparenti. Descrivi la soluzione proposta dal design pattern Adapter. Il pattern Adapter consente a classi con interfacce incompatibili di collaborare. La soluzione prevede la creazione di un oggetto adattatore che fa da ponte tra il client e la classe da adattare. L'adattatore implementa l'interfaccia attesa dal client e traduce le chiamate ai metodi di tale interfaccia in chiamate ai metodi dell'adattato. Quale problema di progettazione viene affrontato con l'uso del design pattern Adapter?. Il pattern Adapter affronta il problema di integrare classi con interfacce incompatibili che devono collaborare. Senza questo pattern, il client sarebbe costretto a conoscere e gestire direttamente le differenze tra le interfacce. Descrivi la soluzione proposta dal design pattern Singleton. Il pattern Singleton garantisce che una classe abbia una sola istanza e fornisce un punto di accesso globale a tale istanza. La soluzione prevede di rendere privato il costruttore della classe, in modo che nessun'altra classe possa istanziarla direttamente. Quale problema di progettazione viene affrontato con l'uso del design pattern Singleton?. Il pattern Singleton garantisce che una classe abbia una sola istanza e fornisce un punto di accesso globale a tale istanza, risolvendo i problemi legati alla creazione di oggetti multipli non desiderati. Descrivi la soluzione proposta dal design pattern Simple Factory. Il pattern Simple Factory propone di centralizzare la creazione di oggetti in una classe dedicata chiamata factory. Invece di istanziare direttamente le classi concrete con l'operatore new, il client chiama un metodo della factory (tipicamente statico) passando un parametro che specifica il tipo di oggetto desiderato. In merito alle strategie di scelta dei meccanismi di persistenza, discuti vantaggi e svantaggi dell'uso di un database ad oggetti. L'uso di un database ad oggetti semplifica la persistenza perché integra direttamente il modello a oggetti del codice, eliminando la necessità di conversioni complesse. Tuttavia, questi database hanno una diffusione minore rispetto a quelli relazionali, offrono meno strumenti di supporto e possono risultare meno performanti. In merito alle strategie di scelta dei meccanismi di persistenza, discuti vantaggi e svantaggi dell'uso di semplici file. L'uso di semplici file è semplice e immediato, ma manca di funzionalità essenziali come query complesse, transazioni, controllo della concorrenza e gestione dell'integrità, rendendoli inadatti per applicazioni con molti utenti o dati strutturati. Nel contesto della progettazione di sistemi software, che cosa intendiamo col termine persistenza?. Per persistenza si intende la capacità di un sistema di conservare i dati oltre la durata del processo che li ha generati, rendendoli disponibili anche dopo lo spegnimento o il riavvio dell'applicazione. Che cos'è una macchina virtuale? Perché questo concetto è interessante nel contesto del system design?. Una macchina virtuale è un ambiente software che emula un sistema fisico, permettendo di eseguire applicazioni come se fossero su hardware dedicato. Questo concetto è interessante nel system design perché offre flessibilità nella gestione delle risorse e nella distribuzione dei componenti. In merito alle strategie di scelta dei meccanismi di persistenza, discuti vantaggi e svantaggi dell'uso di un database relazionale. I database relazionali garantiscono integrità, consistenza e query complesse tramite SQL, ma hanno schemi rigidi, scalano orizzontalmente con difficoltà e richiedono conversione tra modello relazionale e oggetti. Un possibile approccio per rappresentare la matrice degli accessi è la lista delle capabilities. Descrivine la struttura. La lista delle capabilities è un'implementazione della matrice degli accessi organizzata per righe: per ogni attore (soggetto) si memorizza una lista delle risorse che può utilizzare, con i relativi permessi associati. Che cos'è, nel contesto del system design, il flusso del controllo globale? Fornisci un esempio. Il flusso del controllo globale definisce come i componenti del sistema si coordinano e comunicano tra loro, specificando l'ordine di esecuzione e la gestione degli eventi. Un esempio è un'applicazione web in cui il browser invia una richiesta al server, che la elabora e restituisce una risposta. Quali problematiche vengono affrontate nell'attività progettuale che nel corso è stata indicata come "controllo degli accessi", nel contesto del system design?. Nel system design, il controllo degli accessi affronta le problematiche relative a chi può accedere a quali risorse del sistema e con quali modalità, gestendo l'autenticazione degli utenti, l'autorizzazione basata su ruoli o permessi e la protezione delle informazioni da accessi non autorizzati. Che cos'è una matrice degli accessi? Descrivine la struttura. La matrice degli accessi è una tabella che rappresenta i permessi di accesso nel sistema, con le righe che corrispondono ai soggetti (utenti o ruoli) e le colonne alle risorse da proteggere. Ogni cella specifica le modalità di accesso che il soggetto ha sulla risorsa corrispondente. Un possibile approccio per rappresentare la matrice degli accessi è la tabella globale degli accessi. Descrivine la struttura. La tabella globale degli accessi è un'implementazione diretta della matrice degli accessi come un insieme di triple <dominio, oggetto, diritti>. Ogni tripla specifica i permessi che un determinato dominio ha su un oggetto. Quando un processo tenta di accedere a un oggetto, il sistema verifica la presenza della tripla corrispondente con i diritti richiesti. Un possibile approccio per rappresentare la matrice degli accessi è la lista di controllo degli accessi. Descrivine la struttura. La lista di controllo degli accessi è organizzata per oggetto: a ogni risorsa è associata una lista che specifica quali soggetti (utenti o ruoli) hanno determinati permessi su di essa. I possibili approcci per rappresentare la matrice degli accessi sono: -la tabella globale degli accessi -la lista di controllo degli accessi -la lista delle capabilities. Confrontali dal punto di vista delle prestazioni. La tabella globale degli accessi è efficiente in memoria centrale ma diventa lenta e ingombrante in sistemi complessi. Le liste di controllo accessi ottimizzano le verifiche su singole risorse ma rallentano con liste lunghe e in alta concorrenza. Le liste di capabilities sono velocissime per controllare i permessi di un utente ma complesse da gestire nella condivisione e nella protezione. Descrivi il meccanismo basato su threads per il controllo del flusso delle azioni. Il meccanismo basato su threads per il controllo del flusso permette a un processo di suddividersi in più flussi di esecuzione concorrenti che condividono le risorse ma hanno un proprio stack. I thread comunicano direttamente tramite memoria condivisa, e il loro accesso alle risorse comuni viene coordinato tramite meccanismi di sincronizzazione. Descrivi il meccanismo procedurale di controllo del flusso delle azioni. Il meccanismo procedurale organizza il flusso di controllo come una sequenza lineare di chiamate a procedure o funzioni, dove il programma principale invoca sottoprogrammi secondo una logica predefinita e attende il loro completamento prima di proseguire. Descrivi il meccanismo guidato da eventi per il controllo del flusso delle azioni. Nel meccanismo guidato da eventi, il flusso di controllo è determinato da eventi asincroni. Un loop principale rimane in attesa, intercetta gli eventi e li invia ai gestori appropriati, che eseguono la logica corrispondente in modo non lineare e reattivo. In quale situazione il meccanismo procedurale di controllo del flusso delle azioni si dimostra particolarmente utile? In quale situazione, invece, non andrebbe adottato?. Il meccanismo procedurale è utile in contesti con flusso di controllo lineare e prevedibile, come calcoli scientifici o elaborazioni batch. Non va adottato in sistemi reattivi che devono gestire eventi asincroni, interfacce utente o concorrenza, dove sono più adatti modelli guidati da eventi o basati su thread. Confronta il meccanismo di controllo del flusso basati su eventi e con quello basato su threads. Sotto quali aspetti il primo è preferibile al secondo?. Il modello a eventi è preferibile quando si devono gestire molte connessioni simultanee (es. server web) perché consuma meno memoria, evita complessi problemi di sincronizzazione come i deadlock e ha un overhead minore rispetto alla creazione e gestione di thread multipli da parte del sistema operativo. Quali situazioni vengono descritte dai boundary use cases? Cita almeno un esempio. I boundary use cases descrivono il comportamento del sistema in situazioni eccezionali o al confine del normale funzionamento, come l'inizializzazione, lo spegnimento e la gestione di errori o guasti. Un esempio è come un'applicazione gestisce la perdita di connessione di rete durante il trasferimento di dati. Che cos'è un'eccezione? Elenca le cause possibili. Un'eccezione è un evento anomalo che interrompe il flusso normale di esecuzione di un programma. Le cause possono essere errori dell'utente, malfunzionamenti hardware, risorse insufficienti, dati non validi o condizioni impreviste nell'ambiente di esecuzione. Seleziona il meccanismo di flusso di controllo che ritieni più appropriato per un Web server che deve sostenere carichi di lavoro elevati (molti accessi contemporanei) . Motiva la tua scelta. Il meccanismo più appropriato è un controllo concorrente, basato su multithreading o su un modello event-driven asincrono. Un Web server deve gestire molte richieste simultanee e non può adottare un flusso sequenziale. Il modello concorrente permette di elaborare più richieste in parallelo, migliorando scalabilità, throughput e tempi di risposta sotto carico elevato. Seleziona il meccanismo di flusso di controllo che ritieni più appropriato per l'interfaccia a manipolazione diretta (GUI) di un word processor . Motiva la tua scelta. Il meccanismo di flusso di controllo più appropriato per la GUI di un word processor è il modello event-driven. In questo modello il sistema rimane in attesa di eventi generati dall’utente, e reagisce tramite gestori di eventi. Questo approccio è coerente con la manipolazione diretta perché garantisce interazione libera, feedback immediato e aggiornamento dinamico dell’interfaccia. Seleziona il meccanismo di flusso di controllo che ritieni più appropriato per un sistema di controllo in tempo reale dotato di vari sensori ed attuatori . Motiva la tua scelta. Il flusso di controllo più appropriato è basato su thread concorrenti gestiti da uno scheduler real-time. La presenza di più sensori e attuatori richiede attività parallele (acquisizione, elaborazione, controllo). Considera un sistema che include un Web server e un server di database. Gli utenti usano un Web browser per accedere ai dati attraverso il Web server, oppure possono usare un client proprietario che accede direttamente al database. Disegna un diagramma di deployment UML che rappresenta la mappatura hardware/software del sistema. Nel diagramma di deployment rappresenterei tre nodi: un Client, un Web Server e un Database Server. Sul Client sono distribuiti il Web Browser e il Client proprietario. Sul Web Server è distribuita la Web Application. Sul Database Server sono distribuiti il DBMS e il Database. Il Browser comunica con il Web Server via HTTP, il Web Server comunica con il Database Server, mentre il Client proprietario si connette direttamente al Database Server. Nel contesto dell'object design, descrivi l'attività di ottimizzazione del modello del sistema. Nell'object design, l'ottimizzazione del modello modifica la struttura delle classi e le loro relazioni per migliorare prestazioni, efficienza e uso delle risorse, aggiungendo ridondanze o attributi derivati e ottimizzando algoritmi critici per soddisfare i requisiti non-funzionali. Nel contesto dell'object design, descrivi l'attività di riuso. Nell'object design, il riuso consiste nell'identificare e integrare componenti esistenti e design patterns per sfruttare soluzioni già collaudate, riducendo tempi e costi di sviluppo e migliorando la qualità del sistema. La fase di object design prevede quattro tipi di attività, presentate qui in ordine alfabetico: -ottimizzazione del modello -ristrutturazione del modello -riuso di componenti e patterns -specifica dettagliata delle interfacce In che ordine vengono eseguite? Perché?. Le attività vengono eseguite partendo dal riuso per definire la struttura, seguite da ristrutturazione e ottimizzazione per migliorare qualità e prestazioni, e infine dalla specifica delle interfacce per formalizzare i contratti tra classi, poiché ogni fase successiva si basa sui risultati della precedente. Nel contesto dell'object design, descrivi l'attività di ristrutturazione del modello del sistema. La ristrutturazione del modello nell'object design riorganizza le classi per migliorare chiarezza, flessibilità e manutenibilità, introducendo classi astratte, riducendo l'accoppiamento e ottimizzando le gerarchie senza alterare il comportamento funzionale. Nel contesto dell'object design, descrivi l'attività di specifica dettagliata delle interfacce. La specifica dettagliata delle interfacce definisce con precisione i contratti offerti da ogni classe o sotto-sistema, dichiarando nomi, parametri, tipi di ritorno, eccezioni e condizioni di pre e post per ogni metodo pubblico, rendendo esplicite e non ambigue le modalità di interazione tra componenti. Qual è la ragione per cui usiamo l'ereditarietà in fase di object design? Fornisci un esempio. In fase di object design, usiamo l'ereditarietà principalmente per ridurre la ridondanza e migliorare l'estensibilità del sistema. In un'applicazione che gestisce diversi formati di immagini, possiamo definire una classe astratta Immagine che contiene attributi e metodi comuni (come larghezza, altezza, carica()). Le sottoclassi ImmagineJPEG, ImmagineGIF, ImmaginePNG ereditano da Immagine e implementano i dettagli specifici per ciascun formato. Qual è la differenza tra gli oggetti dell'applicazione e gli oggetti della soluzione? Fornisci un esempio. Gli oggetti dell'applicazione rappresentano concetti del dominio applicativo, come Libro in una biblioteca. Gli oggetti della soluzione rappresentano componenti implementativi, come DatabaseConnection o Button, che non hanno significato nel dominio ma servono a realizzare il sistema. Quali sono le ragioni per cui usiamo l'ereditarietà e la generalizzazione a livello di specifica, nel modello dell'analisi?. In fase di analisi, usiamo l'ereditarietà e la generalizzazione con lo scopo di organizzare i concetti del dominio in gerarchie comprensibili. Questo permette a chi legge il modello di partire dai concetti astratti per comprendere le funzionalità centrali del sistema. Commenta il seguente diagramma, indicando le peculiarità dei diversi tipi di ereditarietà. -. Quali sono gli svantaggi connessi con l'uso dell'ereditarietà? Fornisci un esempio. L'ereditarietà introduce un forte accoppiamento tra superclasse e sottoclassi, rendendo il sistema rigido e difficile da modificare, viola l'incapsulamento esponendo dettagli implementativi e può portare a gerarchie complesse e fragili. Un esempio è la classe Quadrato che eredita da Rettangolo: modificare l'altezza di un rettangolo non ha lo stesso effetto su un quadrato. Che cosa si intende per ereditarietà stretta? Fornisci un esempio. Si riferisce a una relazione di ereditarietà che rispetta il Principio di Sostituzione di Liskov. Questo principio stabilisce che se S è un sottotipo di T, allora gli oggetti di tipo T possono essere sostituiti con oggetti di tipo S senza alterare la correttezza del programma. Un esempio di violazione è la classe Quadrato che eredita da Rettangolo: se un programma modifica separatamente larghezza e altezza di un Rettangolo, sostituirlo con un Quadrato altera il comportamento perché impone lati uguali. Enuncia il principio di sostituzione di Liskov. Il principio di sostituzione di Liskov stabilisce che se S è un sottotipo di T, allora gli oggetti di tipo T possono essere sostituiti con oggetti di tipo S senza alterare la correttezza del programma. La delega sostituisce bene l'ereditarietà di un determinato tipo. Quale? Con quali vantaggi?. La delega sostituisce bene l'ereditarietà a livello di implementazione, non quella a livello di specifica. Rispetto all'ereditarietà di implementazione, la delega riduce l'accoppiamento tra classi e rende il sistema più flessibile perché le dipendenze possono essere modificate a runtime, mentre l'ereditarietà lega staticamente le sottoclassi alla superclasse. Fornisci una definizione del meccanismo di delega. La delega è un meccanismo di riuso in cui un oggetto, invece di eseguire direttamente un'operazione, affida il compito a un altro oggetto, detto delegato. Il primo oggetto mantiene un riferimento al delegato e gli invia messaggi per far eseguire le operazioni richieste. Perché l'uso di opportuni design patterns ci aiuta a gestire le situazioni di cambiamento?. L'uso dei design patterns aiuta a gestire il cambiamento perché incapsulano la variazione, separando gli aspetti stabili da quelli che possono modificarsi e isolando l'impatto delle modifiche. Ogni pattern disaccoppia specifiche parti del sistema, rendendo il software più flessibile e permettendo di aggiungere nuove funzionalità o sostituire componenti senza dover riscrivere il codice esistente. Nel progettare un sistema software complesso dobbiamo prevedere le esigenze di cambiamento che emergeranno in futuro. Elenca almeno tre possibili cause di cambiamento. Nuovi fornitori e nuove tecnologie: i componenti commerciali sono spesso sostituiti da equivalenti di altre marche. Nuove implementazioni: le prestazioni di un sistema possono rivelarsi insoddisfacenti in fase di test, richiedendo strutture dati ed algoritmi più efficienti. Nuove funzionalità: il contesto applicativo evolve nel tempo, cambiano le normative, e il sistema deve far fronte a nuovi requisiti. Descrivi le caratteristiche di un blackbox framework. I blackbox frameworks si basano su interfacce e delega: l'estensibilità è ottenuta definendo componenti che implementano interfacce predefinite e vengono integrati dinamicamente nel framework, senza richiedere la conoscenza della struttura interna. Quali sono le principali differenze tra gli application frameworks e le librerie di classi, dal punto di vista dello sviluppatore di un'applicazione software?. Un framework è un'applicazione parziale e attiva che fornisce uno scheletro architetturale per un dominio specifico, invertendo il controllo: è il framework che chiama il codice dello sviluppatore. Una libreria di classi è invece un insieme passivo di componenti generici che lo sviluppatore chiama quando necessario per riusare codice, senza vincolare la struttura dell'applicazione. Qual è la principale differenza tra gli application frameworks e i design patterns dal punto di vista del progettista di software?. La differenza principale è che un application framework è un software concreto e riusabile che fornisce una struttura architetturale per un dominio specifico, mentre un design pattern è una soluzione astratta e indipendente dal linguaggio a un problema progettuale ricorrente. Descrivi le caratteristiche di un whitebox framework. I whitebox framework si basano sull'ereditarietà: lo sviluppatore estende le funzionalità creando sottoclassi e ridefinendo metodi hook, ma deve conoscere a fondo la struttura interna del framework, creando un forte accoppiamento che richiede ricompilazione in caso di modifiche. Che cos'è un enterprise application framework? Quali sono le sue specificità rispetto a un generico application framework?. Un enterprise application framework è un tipo di framework specializzato per lo sviluppo di sistemi informativi aziendali. A differenza di un framework generico, che fornisce funzionalità trasversali, un enterprise framework è progettato per un dominio specifico come finanza o logistica, incorporando conoscenze di base e componenti predefiniti. Che cos'è un middleware framework? Quali sono le sue specificità rispetto a un generico application framework?. Un middleware framework è un framework specializzato per lo sviluppo di sistemi distribuiti, che fornisce servizi per la comunicazione e l'integrazione tra componenti eterogenei. A differenza di un application framework generico, che struttura un'applicazione singola, il middleware framework maschera le differenze tra sistemi operativi e protocolli di rete. Che cos'è un framework infrastrutturale? Quali sono le sue specificità rispetto a un generico application framework?. Un framework infrastrutturale fornisce servizi di base per lo sviluppo software, come la gestione della comunicazione di rete o l'accesso a dispositivi hardware. A differenza di un application framework generico, che struttura una applicazione, un framework infrastrutturale si concentra su aspetti tecnici di basso livello. Che cos'è un application framework? Per che cosa serve?. Un application framework è una struttura software riutilizzabile che fornisce una base comune di servizi e componenti su cui costruire applicazioni . Serve a semplificare e velocizzare lo sviluppo offrendo soluzioni predefinite per compiti comuni, come la gestione della configurazione, la sicurezza, etc. Quali attività definiscono il ruolo del class user?. Il class user è lo sviluppatore che utilizza una classe chiamandone le operazioni pubbliche durante la realizzazione di un'altra classe, affidandosi alla specifica delle interfacce come contratto che definisce i servizi offerti senza dover conoscere i dettagli implementativi interni. Quali responsabilità definiscono il ruolo del class implementor?. Il class implementor è responsabile della realizzazione di una classe: progetta le strutture dati interne e implementa il codice di tutte le operazioni, trasformando le specifiche dell'interfaccia in codice funzionante. Nel contesto dell'object design, che cosa si intende per specifica delle postcondizioni?. Le postcondizioni sono condizioni che devono essere vere dopo l'esecuzione di un'operazione, garantendo che lo stato del sistema sia stato modificato correttamente secondo quanto specificato. Esse rappresentano gli obblighi del fornitore verso il chiamante. Nel contesto dell'object design, che cosa si intende per specifica delle precondizioni?. Le precondizioni sono condizioni che devono essere vere prima che un'operazione venga eseguita, rappresentando gli obblighi che il chiamante deve soddisfare per utilizzare correttamente l'operazione. Nel contesto dell'object design, che cosa si intende per specifica delle invarianti?. Le invarianti sono condizioni che devono essere sempre vere per tutte le istanze di una classe, prima e dopo ogni operazione, garantendo la consistenza interna dello stato dell'oggetto. Che cosa intendiamo per visibilità di un'operazione?. La visibilità di un'operazione definisce chi può chiamarla, distinguendo tra operazioni pubbliche accessibili a tutte le classi, operazioni protette accessibili solo a sottoclassi, operazioni private accessibili solo alla classe stessa e operazioni di package accessibili alle classi dello stesso package. Che cos'è la signature di un'operazione? Fornisci un esempio. La signature di un'operazione è la sua dichiarazione formale che specifica il nome, il numero e i tipi dei parametri e il tipo del valore di ritorno, definendo come deve essere invocata. Ad esempio, 'calcolaMedia(int, int) : double'. Quali attività definiscono il ruolo del class extender?. Il class extender sviluppa specializzazioni della classe creando sottoclassi, chiama le operazioni della classe e deve rispettare i contratti ereditati, potendo allentare le precondizioni ma mantenendo invariate le postcondizioni e rafforzando gli invarianti, con accesso ai membri protected. Che cosa specifica il tipo di un attributo?. Il tipo di un attributo specifica l'insieme dei valori che l'attributo può assumere e le operazioni che possono essere applicate ad esso. Può essere un tipo primitivo (come int, boolean, char), un tipo enumerato (con valori predefiniti), una stringa, o anche un'istanza di un'altra classe (tipo definito dall'utente). Fornisci una descrizione di ognuno dei livelli di visibilità di un attributo disponibili in UML. La visibilità public (+) permette l'accesso da qualsiasi classe, protected (#) dalla classe stessa e dalle sue sottoclassi, private (-) solo dalla classe stessa, e package (~) dalle classi dello stesso package. Considera una classe Esame che rappresenta un esame universitario di un dato insegnamento; tra le varie operazioni possibili, la classe offre l'operazione iscrivi(Studente), che inserisce un'iscrizione. Fornisci un esempio di postcondizione relativamente a tale operazione. post: numeroIscritti = numeroIscritti@pre + 1. Considera una classe Esame che rappresenta un esame universitario di un dato insegnamento; tra le varie operazioni possibili, la classe offre l'operazione iscrivi(Studente), che inserisce un'iscrizione. Fornisci un esempio di invariante relativamente a tale operazione. Il numero degli iscritti all'esame deve essere sempre maggiore o uguale a zero e minore o uguale al numero massimo di posti disponibili. Questa invariante deve rimanere vera prima e dopo l'esecuzione di iscrivi(Studente). Che cos'è OCL (Object Constraint Language)?. OCL è un linguaggio dichiarativo per esprimere vincoli su modelli UML, come invarianti, precondizioni e postcondizioni, utilizzando espressioni booleane simili alla sintassi dei linguaggi orientati agli oggetti. Come si rappresenta graficamente in UML un vincolo su un elemento del modello?. In UML, un vincolo si rappresenta con una nota (rettangolo con lembo piegato) contenente l'espressione del vincolo tra parentesi graffe, collegata all'elemento vincolato da una linea tratteggiata. Considera una classe Esame che rappresenta un esame universitario di un dato insegnamento; tra le varie operazioni possibili, la classe offre l'operazione iscrivi(Studente), che inserisce un'iscrizione. Fornisci un esempio di precondizione relativamente a tale operazione. Una precondizione potrebbe essere che ci sia ancora posto disponibile: "Il numero di iscritti deve essere inferiore al numero massimo di posti". context Esame::iscrivi(st: Studente) pre: numeroIscritti < maxPosti. Il diagramma qui sotto mostra dominio e codominio di quattro tipi di trasformazione relativi al mapping: Descrivi lo scopo e fornisci un esempio di model transformation. Lo scopo di una model transformation è applicare una trasformazione a un elemento del modello per produrre un altro elemento dello stesso modello. Ad esempio, se nel modello iniziale abbiamo classi Automobile e Moto con attributi comuni come targa e velocitaMax, una model transformation può introdurre una superclasse Veicolo che raccoglie gli attributi comuni, facendo ereditare Automobile e Moto da Veicolo. Il diagramma qui sotto mostra dominio e codominio di quattro tipi di trasformazione relativi al mapping: Descrivi lo scopo e le caratteristiche del refactoring. Il refactoring è una trasformazione che agisce sul codice sorgente (da codice a codice) con lo scopo di migliorarne la struttura interna, la leggibilità e la manutenibilità senza modificarne il comportamento esterno. Il diagramma qui sotto mostra dominio e codominio di quattro tipi di trasformazione relativi al mapping: Descrivi lo scopo le caratteristiche del forward engineering. Il forward engineering è una trasformazione che genera automaticamente codice sorgente a partire da un modello UML, mappando classi, attributi e associazioni in costrutti del linguaggio di programmazione per mantenere coerenza tra modello e implementazione. Il diagramma qui sotto mostra dominio e codominio di quattro tipi di trasformazione relativi al mapping: Descrivi lo scopo e le caratteristiche del reverse engineering. Il reverse engineering è una trasformazione che parte dal codice sorgente per risalire al modello corrispondente, recuperando una rappresentazione a più alto livello di astrazione utile per documentare e comprendere sistemi esistenti. Nel contesto delle trasformazioni di mapping, descrivi il principio di unicità del criterio. Il principio di unicità del criterio stabilisce che ogni trasformazione deve migliorare il sistema rispetto a un solo obiettivo progettuale, evitando di perseguire risultati multipli contemporaneamente per non aumentare la probabilità di errori o complessità. Nel contesto delle trasformazioni di mapping, descrivi il principio di validazione. Il principio di validazione stabilisce che ogni trasformazione deve essere seguita da un passo di verifica per controllare la correttezza delle modifiche apportate, aggiornando i modelli o rieseguendo i test prima di procedere con la trasformazione successiva. Nel contesto delle trasformazioni di mapping, descrivi il principio di località. Il principio di località stabilisce che ogni trasformazione deve intervenire solo su un numero limitato di metodi o classi, evitando modifiche pervasive. Se possibile, deve lasciare inalterate le interfacce per non propagare cambiamenti al codice cliente. Nel contesto delle trasformazioni di mapping, descrivi il principio di isolamento. Il principio di isolamento stabilisce che le trasformazioni devono essere applicate una alla volta, senza mescolare obiettivi diversi (come ottimizzazione e nuove funzionalità) per ridurre il rischio di errori e mantenere la concentrazione su un singolo problema per volta. Nel contesto della mappatura del modello degli oggetti in uno schema relazionale per la persistenza dei dati, come vengono mappate le relazioni di ereditarietà?. Nel mapping orizzontale gli attributi della superclasse vengono replicati in ogni sottoclasse, senza una tabella separata per la superclasse. Nel mapping verticale ogni classe ha una tabella propria e le sottoclassi condividono la stessa chiave primaria della superclasse, collegandosi ad essa tramite una chiave esterna. Nel contesto della mappatura del modello degli oggetti in uno schema relazionale per la persistenza dei dati, come vengono mappate le associazioni?. Le associazioni si mappano usando chiavi esterne. Per associazioni uno-a-molti si aggiunge una chiave esterna alla tabella sul lato molti che riferisce la tabella sul lato uno. Per associazioni molti-a-molti si crea una tabella di associazione separata con due chiavi esterne che riferiscono le tabelle coinvolte. Nel contesto della mappatura del modello degli oggetti in uno schema relazionale per la persistenza dei dati, che cos'è una chiave esterna?. Una chiave esterna è un attributo che referenzia la chiave primaria di un'altra tabella, creando un collegamento tra i record delle due tabelle per realizzare associazioni. Nel contesto della mappatura del modello degli oggetti in uno schema relazionale per la persistenza dei dati, che cos'è una chiave primaria?. Una chiave primaria è un insieme di attributi che identifica univocamente ogni record in una tabella, garantendo che non esistano due righe con lo stesso valore e permettendo di riferire in modo esclusivo ciascun record. Descrivi le caratteristiche di uno schema relazionale per la persistenza dei dati. Uno schema relazionale è la struttura logica di un database organizzata in tabelle, dove ogni tabella contiene righe (record) e colonne (attributi) con domini definiti. Le tabelle sono correlate tramite chiavi primarie, che identificano univocamente ogni record, e chiavi esterne, che collegano record di tabelle diverse garantendo l'integrità referenziale. L'insieme di queste regole assicura la consistenza e l'affidabilità dei dati memorizzati. Nel contesto della mappatura del modello degli oggetti in uno schema relazionale per la persistenza dei dati, come vengono mappate le classi?. Nel mapping oggetti-relazionale, ogni classe viene mappata in una tabella del database, gli attributi della classe diventano le colonne della tabella e ogni istanza della classe corrisponde a una riga della tabella stessa. Che cos'è un white-box test?. Un white-box test è una tecnica di testing che verifica la struttura interna del codice, esaminando percorsi di esecuzione, condizioni logiche e flussi di controllo, basandosi sulla conoscenza del design e dell'implementazione del sistema. Che cos'è un black-box test?. Un black-box test è una tecnica di testing che verifica il funzionamento del sistema basandosi solo sugli input e sugli output attesi, senza conoscere la struttura interna del codice. Quali relazioni possono sussistere tra due test cases?. Due test cases possono essere correlati da relazioni di precedenza, quando uno deve essere eseguito prima dell'altro, o di composizione, quando un test case è costituito da più sotto-test. Elenca gli attributi che descrivono un test case. nome, collocazione, input, oracolo (la sequenza dei dati di output), log. Nel contesto del fault detection, quali sono le caratteristiche della tecnica denominata debugging? Quali tipi di debugging sono presentati nel corso?. Il debugging è l'attività di individuazione e correzione delle cause dei malfunzionamenti emersi durante i test. Il corso distingue tra debugging di correttezza, che riguarda i requisiti funzionali, e debugging di prestazione, che riguarda i requisiti non-funzionali come i tempi di risposta. Nel contesto del fault detection, quali sono le caratteristiche della tecnica denominata review? Quali tipi di review sono presentati nel corso?. La review è una tecnica di controllo statico che analizza il codice senza eseguirlo. L'inspection è una revisione formale in cui il gruppo di revisione esamina il codice per individuare difetti funzionali e di efficienza. Il walkthrough è una revisione informale in cui lo sviluppatore presenta il codice ai revisori simulando i passi per identificare difetti logici. Nel contesto delle tecniche tese ad aumentare l'affidabilità di un sistema, che cosa intendiamo con fault tolerance?. La fault tolerance è la capacità di un sistema di continuare a funzionare correttamente anche in presenza di guasti in uno o più dei suoi componenti, garantendo così continuità del servizio. Nel contesto delle tecniche tese ad aumentare l'affidabilità di un sistema, che cosa intendiamo con fault detection?. La fault detection è il processo di identificazione di un difetto durante l'esecuzione del sistema, riconoscendo comportamenti anomali rispetto a quanto previsto per prevenire malfunzionamenti. Nel contesto delle tecniche tese ad aumentare l'affidabilità di un sistema, che cosa intendiamo con fault avoidance?. La fault avoidance è l'insieme delle attività svolte durante lo sviluppo per prevenire l'introduzione di difetti nel sistema, attraverso l'adozione di specifiche precise, metodologie rigorose e verifiche approfondite prima che il software venga eseguito. Che cosa intendiamo con il termine test di regressione?. Il test di regressione è la riesecuzione di test già effettuati per verificare che le modifiche al software non abbiano introdotto nuovi errori in parti già funzionanti. Fornisci una descrizione della tecnica di state-based testing. Lo state-based testing è una tecnica che verifica il corretto comportamento di un sistema confrontando lo stato risultante dopo l'esecuzione di una sequenza di stimoli con lo stato atteso, basandosi sul diagramma degli stati della classe o del componente. Fornisci una descrizione della tecnica di equivalence testing. L'equivalence testing è una tecnica black-box che suddivide l'insieme degli input in classi di equivalenza, assumendo che il sistema si comporti nello stesso modo per tutti i valori di una stessa classe. Per ogni classe si seleziona un valore rappresentativo da testare, riducendo così il numero di test necessari. Fornisci una descrizione della tecnica di path testing. Il path testing è una tecnica white-box che verifica tutti i possibili percorsi di esecuzione del codice, costruendo un grafo del flusso di controllo e selezionando casi di test che coprano ogni percorso per individuare difetti logici e strutturali. Fornisci una descrizione della tecnica di boundary testing. Il boundary testing è una tecnica black-box che verifica il comportamento del sistema utilizzando valori posti ai confini delle classi di equivalenza, dove è più probabile che si verifichino errori. Elenca i passi in cui si articola l'attività di ispezione dei componenti nel contesto del testing. Si inizia con una panoramica in cui l'autore presenta il componente, seguita dalla preparazione in cui i revisori lo studiano. Segue l'ispezione vera e propria con lettura del codice e raccolta di obiezioni, poi la revisione in cui l'autore apporta le modifiche e infine il follow-up in cui il moderatore verifica la qualità del lavoro svolto. Qual è il principale vantaggio dei test di integrazione verticali? Qual è lo svantaggio?. Vantaggio: consente di testare un percorso di controllo completo in una fase precoce dell'integrazione. Svantaggio: può richiedere più tempo rispetto ad altre metodologie, perché la ricerca di un bug può essere complicata dalle dipendenze tra i moduli. Elenca le principali attività connesse con il system testing. Il system testing comprende la pianificazione, la progettazione dei casi di test basati sui requisiti, l'allestimento dell'ambiente di prova, l'esecuzione dei test, il tracciamento e la risoluzione dei difetti e infine la reportistica per verificare che il sistema integrato soddisfi tutti i requisiti prima del rilascio. |





