Tali regole potrebbero richiedere dati aziendali critici. I dati e le regole sono strettamente legati,
insieme si chiamano Entità.
Il livello è la distanza tra input e output.
Le Entità hanno accesso ai dati e hanno dentro delle policy.
6) Principi clean dell’architettura del software: principali componenti dell’architettura.
Policy, Entità, Casi d’Uso che sono una descrizione del modo in cui viene utilizzato un sistema
automatizzato. Contengono: input/output utente e le fasi di elaborazione.
7) Che cosa è una architettura del software e quali possono essere degli esempi di stili
architetturali.
L'architettura del software è la forma data al sistema da chi lo costruisce. Il suo scopo è
facilitare: lo Sviluppo, la Distribuzione, il Funzionamento e la Manutenzione. Il suo obbiettivo è
supportare il ciclo di vita del sistema. Stili Architetturali: Client-Server, Layered, (pipes and
filters), Microkernel, Service based, Event driven, Microservice, Serverless, …
8) Stili architetturali:pipes and filters, client server, layered, microkernel, event driven,
microservizi, service based e serverless.
Pipe and Filters: Sistema di flusso di dati per semplici sistemi. Pipe: flusso unidirezionale di
info. Filters: sono autonomi, indipendenti da altri filtri e senza stato, progettati per eseguire un
singolo compito specifico. Ci sono 4 tipi: Producer (inizio), Transformer (elaborazione), Tester
(scarto pass-through), Consumer (fine).
Client-Server: il Client richiede un servizio, il Server accetta la richiesta del Client, raccoglie le
info, elabora, genera la soluzione e la dà al Client, il Client e il Server comunicano tramite un
Mezzo di comunicazione.
Layered: Componenti Tecnicamente partizionati in strati logici orizzontali isolati e comunicano
solo con quello sopra e sotto. Di solito sono 4: Prestazioni, Aziendale, Persistenza, Database.
Microkernel: ha un piccolo sistema centrale per regole aziendali generali, con attaccati i "Plug-
in" che portano funzionalità e sono indipendenti e autonomi.
Event driven: È formato da componenti di "elaborazione eventi" disaccoppiati che ricevono,
elaborano gli eventi in modo asincrono distribuito. L’architettura reagisce a una situazione. C'è
un Orchestratore che indirizza le richieste in modo deterministico e sincrono ai vari "Processori
di richiesta" che le gestiscono e leggono/scrivono le info sul database e sono: Broker per
controllo dinamico sull'elaborazione o Mediatore per controllo sul flusso del processo.
Microservice: Ogni componente viene distribuita come unità separata e indipendente
implementata con pipe semplice con pipe. Ogni servizio modella un flusso. C’è un
partizionamento estremo del dominio.
Service based: Ha 3 macro-livelli: UI, Servizi Remoti a grana grossa (parte dell'applicazione)
detti "Servizi di Dominio", Database Monolitico condiviso.
Serverless: Incorpora servizi di terzi nel cloud per gestire la parte del server. Oppure quando la
parte del server viene eseguita in contenitori di elaborazione stateless di terzi.
Design Characteristics and Metrics
1) In che modo può essere descritta e caratterizzata la progettazione di un software?
Attraverso le metriche software che servono per valutare oggettivamente il software pur
rimanendo il giudizio umano permane.
2) Cosa si intende per metrica del software, quali sono i limiti nell’utilizzare metriche per
caratterizzare i software e quali tipi di metriche possono essere utilizzate.
Una metrica software rappresenta una misura quantitativa del grado in cui un sistema,
componente o processo possiede una proprietà o caratteristica definita. I limiti cono
l’inaccuratezza delle metriche tradizionali e la non linearità del codice o come la McCabe
potrebbero non essere misure assolute. Le tipologie sono: Del Prodotto cioè metriche su un
risultato intermedio o finale, Del Processo cioè sui metodi, tecniche e strumenti,
implementazioni usati, Del Progetto cioè sul tempo, budget e gestione.
3) Cosa si intende per analisi statica e dinamica del software.
L’analisi Statica: è sul codice scritto: linee di codice, livello di nidificazione, Complessità
Ciclomatica, Complessità di Halstead, Accoppiamento, Coesione, Duplicazione di Codice,
Punti Funzione.
L’analisi Dinamica: cioè come si comporta il sistema: Copertura del codice, Bug per riga,
Utilizzo delle funzionalità.
4) Caratteristiche delle misure basate:
a) Sul conteggio delle linee di codice.
LOC n° linee di codice
NLOC n° linee di codice senza commenti
CLOC/LOC (linee commento diviso linee codice) dice quanto è stato commentato
SLOC n° linee esclusi commenti e righe vuote
CLOC n° linee commenti
NCLOC n° linee esclusi commenti, vuote, intestazioni, pié di pagina, parentesi graffe (corpo
funzioni)
LLOC n° linee logiche (istruzioni)
BLOC n° di linee vuote
Svantaggi: NON considera la funzionalità e la complessità, codice prolisso, dipende
linguaggio usato
b) Sul livello di innestamento del codice.
comprende chiamate, livelli (le parentesi nell'espressioni matematiche), blocchi (if, while),
classi e funzioni nidificate. Nidificato significa profondo, cioè più difficile da leggere (più lo è
e peggio è)
NL livello nidificazione
LoopNL livello nidificazione in un ciclo
NLMean livello Medio nidificazione
NL#+ n° righe oltre un livello di nidificazione (NL4+, NL5+)
c) Sulla complessità del codice (Halstead e complessità ciclomatica di Mc Cabe).
Complessità ciclomatica: Attraverso Diagrammi rappresentanti flussi (Activity o State
Machine), McCabe = E - N + 2P dove E n° archi, N n° nodi, P n° componenti collegate (di
solito 1).
Complessità di Halstead: si basa sulla complessità lessicografica sulle relazioni tra
operatori (esegue azione) e operandi (partecipa all'azione). Svantaggi: NON considerate la
struttura, la logica e la progettazione
Assegnato: n1 n° operatori, n2 n° operandi, N1 somma occorrenze n1, N2 somma
occorrenze n2 (anche cicli)
Vocabolario n := n1 + n2
Lunghezza N := N1 + N2
Volume V := N * (Log2 n)
Lunghezza Calcolata := n1 log2 n1 + n2 log 2 n2
Difficoltà D := (n1/2) * (N2/n2)
Sforzo E := V * D
Tempo T := E/18 sec
n° Bug consentiti = E (2/3)/3000
5) Quali sono i problemi generati dalla duplicazione del codice.
Il “copia e incolla” codice, causato da sviluppo indipendente, violano il Principio DRY (cioè non
ripetere). Più ci sono parti copiate più è difficile la manutenzione ed è difficilissimo rintracciare
le parti copiate. La Ricerca avviene con: Corrispondenze Sintattiche, Token e Abstract Syntax
Tree (AST), …Tipologia di duplicazione: pezzi codice uguali, pezzi sintatticamente uguali,
pezzi uguali con modifiche, pezzi che eseguono stesso calcolo.
6) Come si possono misurare le relazioni tra i moduli del software.
Flusso di informazioni Henry-Kafura: fan_IN n° di info in ingresso, fan_OUT n° di info in uscita
Cp=(fan_IN*fan_OUT)^2 è Complessità del modulo del Programma p
Card and Glass: Complessità Strutturale del modulo m è S_m= fan_OUT^2 ; P_m n° variabili
(uscita o ingresso) nel modulo m; Complessità dei Dati è D_m=P_m/(fan_OUT + 1) ;
Complessità del Sistema P_m=S_m+D_m
7) Cosa si intende e come si descrive la coesione e l’accoppiamento dei moduli di un
software.
Accoppiamento: (è un principio di dipendenza) è il grado di dipendenza inter-modulare. Ci
sono 2 tipi: Efferente, quanto dipende dagli altri e Afferente, quanti gli altri dipendono da lui. Si
misura con Fenton e Melton. Ma si può misurare anche con Flusso di informazioni Henry-
Kafura e con Card and Glass.
Coesione: (è un principio di dipendenza) è il grado di dipendenza intra-modulare. Ci sono 2
tipi: Afferente, n° responsabilità interne e Efferente, n° dipendenze interne. Si misura con
Program Slice-Based and Data Slice-Based. Ma si può misurare anche con McCabe e
Halstead.
8) Quali sono le principali misure che caratterizzano un software costruito con un
linguaggio Object Oriented (CK metrics).
Nelle Metriche di OOP analizzano come le classi sono correlate e interagiscono tra loro. Si
usano Metriche CK (Chidamber e Kemerer) basate su manutenibilità, riusabilità, validità teorica
e empirica. Si basa su: Metodi ponderati per classe (WMC), Profondità dell'albero ereditario
(DIT), Numero di sottoclassi (NOC), Accoppiamento tra classi di oggetti (CBO), Risposta per
una classe (RFC), Mancanza di coesione nei metodi (LCOM).
Implementation
1) Che cosa si intende per fase di implementazione e quali sono le caratteristiche di questa
fase? In che modo le caratteristiche si influenzano e quando assumono una particolare
importanza? Che importanza è opportuno dare all’ottimizzazione del codice?
La fase di implementazione è l'atto di trasformare il progetto dettagliato in un programma in un
linguaggio di programmazione. Le caratteristiche di questa fase sono: Leggibilità, aiuta la
manutenibilità e la correttezza; Tracciabilità, aiuta la verifica e la validazione; Completezza,
garantisce il giusto comportamento; Manutenibilità adegua ai cambiamenti; Prestazioni
importanti per i sistemi in tempo reale o con vincoli di risorse. Le caratteristiche si influenzano
reciprocamente (anche in conflitto). Ad esempio, l'ottimizzazione può ridurre la leggibilità e la
manutenibilità. Pertanto, bisogna trovare equilibrio. L'ottimizzazione bisognerebbe farla dopo
aver misurato. L'ottimizzazione ha bassa importanza, a meno di soddisfare i requisiti non
funzionali.
2) Nozione dello standard ISO/EIC 25010.
Definisce un modello di qualità per i software (prodotti e in uso). Il prodotto ha 8 caratteristiche:
idoneità funzionale, prestazioni, compatibilità, usabilità, affidabilità, sicurezza, manutenibilità e
portabilità. In uso ha 5 caratteristiche: efficacia, efficienza, soddisfazione, libertà dal rischio e
copertura del contesto. Lo standard ha anche delle metriche per la qualità interna, esterna o in
uso.
3) Cosa si intende per stile di programmazione?
È il modo in cui viene scritto e organizzato il codice, seguendo convenzioni e regole per
migliorare la leggibilità, la manutenibilità e la qualità. Riguarda: i nomi, la formattazione, la
struttura, i costrutti e librerie e tecniche specifiche.
4) Come possono essere classificati i commenti?
Sono classificati in 6 tipi:
Spiegazione: spiegano in linguaggio umano;
Ripetizione: da evitati possono essere obsoleti o sbagliati;
-
Fisica Generale - Lista domanda e Risposte
-
Risposte alla Lista non esaustiva - Domande prova teoria
-
Risposte a lista di domande, Fisica Generale II
-
Lista esauriente di domande diritto commerciale
- Risolvere un problema di matematica
- Riassumere un testo
- Tradurre una frase
- E molto altro ancora...
Per termini, condizioni e privacy, visita la relativa pagina.