<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Simone Cabrino's Blog &#187; Università</title>
	<atom:link href="http://simone.cabrino.it/blog/category/universita/feed/" rel="self" type="application/rss+xml" />
	<link>http://simone.cabrino.it</link>
	<description>Informatica, internet e programmazione: è passione!</description>
	<lastBuildDate>Sat, 14 Aug 2010 08:45:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Basi di dati: fasi della progettazione</title>
		<link>http://simone.cabrino.it/blog/progettazione-database/</link>
		<comments>http://simone.cabrino.it/blog/progettazione-database/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 23:34:46 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Università]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/2008/01/22/progettazione-database/</guid>
		<description><![CDATA[Fasi di progettazione di una base di dati: dalla progettazione e schema concettuale alla progettazione del livello fisico.]]></description>
			<content:encoded><![CDATA[<p>Dopo aver trattato le <a href="http://simone.cabrino.it/2007/11/27/fasi_di_progettazione/" title="Ingegneria del Software: fasi di progettazione">fasi di progettazione di un software</a>, ecco le fasi di progettazione delle basi di dati: <strong>progettazione concettuale</strong>, <strong>progettazione logica</strong> e <strong>progettazione fisica</strong> sono le 3 fasi principali dello sviluppo di un database, un archivio di dati correlati tra loro e facilmente utilizzabili da un calcolatore (perchè la parola computer, im mezzo a tutte queste parole italiane suonava male).</p>
<p>Ecco spiegate le tre fasi principali dello sviluppo di una base di dati, per rendere più semplici gli studi ai prossimi programmatori web o semplicemente fare una chiarezza in più a chi, per passione, vuole migliorare la forma del proprio sviluppo web / applicazioni.</p>
<p><span id="more-184"></span></p>
<h2>Progettazione Concettuale</h2>
<p>È il livello più alto della progettazione di un database, quello <strong>più vicino all&#8217;essere umano e più lontano dal computer</strong>. Durante la fase della progettazione concettuale della base di dati, il progettista ha il compito di estrapolare nei dettagli, con parole e linguaggi chiari e comuni, comprensibili a tutti, tutti i dati dell&#8217;applicativo da sviluppare.  Deve quindi essere realizzata con strumenti indipendenti dall&#8217;ambiente e dal sistema di dati che si andrà ad utilizzare durante lo sviluppo.</p>
<p>Il metodo più semplice per riuscire in questa fase consiste nello scrivere una descrizione breve ed essenziale del problema come se doveste fare un compito di italiano e successivamente evidenziare tutti i sostantivi e le forme verbali presenti nel testo creato (senza produrre duplicati): i sostantivi saranno nella base di dati gli <strong>oggetti</strong>, mentre i verbi rappresenteranno le  <strong>relazioni</strong>.</p>
<p>Il prodotto dell&#8217;analisi è uno <strong>schema concettuale</strong>, schema che mette in relazione entità (gli oggetti) con le relazioni: è il diagramma E/R (Entità Relazioni) o DEA (Diagramma Entità Relazione).</p>
<h2>Progettazione Logica</h2>
<p>Durante la fase della progettazione logica si traduce lo <strong>schema concettuale</strong> prodotto nella fase di progettazione concettuale, nel modello di rappresentazione dei dati adottato dall&#8217;ambiente database scelto per la programmazione.</p>
<p>La traduzione, per essere formalmente corretta con i software in uso (per utilizzare così il minor numero di spazio e aumentare le velocità di recupero dei dati), porta ad utilizzare la tecnica della <strong>normalizzazione</strong> che si divide in tre (3) ulteriori livelli: 1ª, 2ª e 3ª forma normale.</p>
<p>Il prodotto di questa fase è chiamato <strong>schema logico</strong>.</p>
<h2>Progettazione Fisica</h2>
<p>La terza ed ultima fase di progettazione di una base di dati è quella fisica, progettazione che, forse, solo i sistemisti e i DBA (<em>DataBase Administrator</em>, Amministratori delle Basi di dati) conoscono: dico forse perchè, con l&#8217;avvento delle tante piattaforme di sviluppo database, conoscere nei dettagli i parametri fisici di memorizzazione dei dati (impacchettamento dei records, clusterizzazione, indicizzazione, &#8230;) è veramente cosa per pochi.</p>
<p>Ogni forma di memorizzazione dipende soprattutto dall&#8217;ambiente che si è scelto di utilizzare e i software di gestione dei database si preoccupano di convertire lo schema logico prodotto nella fase di progettazione logica in puntamenti a vettori e &#8220;riserva&#8221; dello spazio su disco.</p>
<h2>Aspetti metodologici (metodologia)</h2>
<p>La metodologia di progettazione di una base di dati può vedersi quindi come un insieme di attività tra di loro collegate, atte a produrre un insieme di prodotti intermedi e finali utilizzando criteri di verifica (normalizzazione) di qualità delle fasi e dei risultati ottenuti, volti a realizzare un database corretto e funzionale a partire da un insieme di specifiche legate al progetto di partenza.</p>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/progettazione-database/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ingegneria del Software: modelli di ciclo di vita</title>
		<link>http://simone.cabrino.it/blog/modelli_ciclo_vita/</link>
		<comments>http://simone.cabrino.it/blog/modelli_ciclo_vita/#comments</comments>
		<pubDate>Wed, 28 Nov 2007 11:51:54 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Università]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/2007/11/28/modelli_ciclo_vita/</guid>
		<description><![CDATA[Elenco con pregi e difetti di tanti modelli di ciclo di vita studiati dall'ingegneria del software.]]></description>
			<content:encoded><![CDATA[<p>Dopo aver analizzato le <a href="http://simone.cabrino.it/2007/11/27/fasi_di_progettazione/" title="Modello tradizionale del ciclo di vita di un software">fasi del modello tradizionale del ciclo di vita di un software</a>, rieccomi per fare un elenco, spero piuttosto completo, di tutti quelli che sono i modelli creati durante questi ultimi 20 anni, 20 anni di crescente sviluppo nel ramo della programmazione.</p>
<p>Darò una spiegazione generale di ogni modello, elencandone, se possibile, pregi e difetti, per porre tutti coloro che hanno poco chiaro l&#8217;argomento in grado di comprendere meglio l&#8217;evoluzione di questi modelli.</p>
<p><span id="more-106"></span></p>
<h2>Modello a cascata (o document based)</h2>
<p>Questo modello, nato negli anni 50, diventa famoso solamente intorno agli anni 70, anni in cui un numero sempre crescente di persone si pone di fronte ad un computer per produrre software. Prevede anche due varianti (retroazione singola e a fontana).</p>
<p align="center"><img src="http://simone.cabrino.it/wp-content/uploads/2007/11/waterfallmodel.png" alt="Modello a Cascata" /></p>
<p>Prende nome dal flusso preciso delle fasi che lo compongono, partendo dalla raccolta dei requisiti e cadendo (come l&#8217;acqua dalla montagna) attraverso tutte le altre fasi, fino ad arrivare al cliente. Una volta che il progetto è consegnato al cliente, questo modello non prevede nemmeno la fase di manutenzione.<br />
È anche chiamato &#8220;document based&#8221; perchè presuppone una fortissima rigidità nella compilazione di documenti di specifiche: i reparti che si occupano di gestire le fasi non comunicano tra loro e la documentazione deve essere per questo motivo il più chiara possibile.</p>
<p><strong>Pregi:</strong> si possono fissare nei dettagli le scadenze delle singole fasi.</p>
<p><strong>Difetti:</strong> rigidità (impossibile fare modifiche), congelamento dei sotto prodotti, stima dei costi solo iniziale, monoliticità. Anche per il cliente che cambia idea in un secondo momento non c&#8217;è possibilità di modifica.</p>
<h3>Variante: retroazione singola</h3>
<p>La variante a retroazione singola prevede che ogni fase può intervenire al livello precedente per effettuarne modifiche e/o correzioni. Diventa però un modello troppo libero e non mi permette di seguire un percorso chiaro e preciso.</p>
<h3>Variante: modello a fontana</h3>
<p>Questo modello prevede l&#8217;aggiunta delle fasi di manutenzione e evoluzione: come in una fontana l&#8217;acqua viene spinta verso l&#8217;alto per poi ricadere nella vasca, questo modello prevede il passaggio attraverso tutte le fasi della produzione e, giunto alla fase di manutenzione (o alla fase di evoluzione), ritorna all&#8217;inizio. Per ogni modifica che si vorrà effettuare al progetto si riaffronteranno così tutte le fasi, una per una.</p>
<h2>Modello a V (o dente di pescecane)</h2>
<p>Modello particolare che prevede che, ad ogni passo avanti effettuato lungo la sequenza delle fasi, vengano effettuati due differenti test. Il primo è  il test di verifica rispetto alla fase precedente, il confronto con le specifiche fornite dal livello superiore, il secondo è il test di validazione che viene effettuato con l&#8217;utente.</p>
<p>Ogni volta che mostrerò il sistema all&#8217;utente, l&#8217;utente avrà un&#8217;idea più completa di quello che vuole e potrà fornirmi informazioni di specifica più  precise e complete.</p>
<h2>Modello Evolutivo e Incrementale</h2>
<p>Tra questi due modelli c&#8217;è una sostanziale differenza, anche se sono molto simili tra loro.</p>
<p>Nel modello evolutivo, consegnerò il sistema completo all&#8217;utente ogni volta che si presenterà una modifica sensibile (che crea un aggiunta di valore) per lo stesso.</p>
<p>Il modello incrementale, invece, prevede un continuo balzare dalla fase di coding (di scrittura del codice dell&#8217;applicativo) alla fase di analisi dei requisiti, fino a quando sarò certo di aver creato il programma definitivo: solo a questo punto lo consegnerò all&#8217;utente.</p>
<p><strong>Difetti:</strong> in entrambi i modelli non posso determinare quanti cicli effettuerò e la pianificazione diventa così difficile da gestire.</p>
<h2>Modello Prototipale</h2>
<p>Modello discutibile, prevede in sostanza di effettuare il lavoro almeno due volte.<br />
Il primo lavoro sarà il prototipo del sistema e servirà al programmatore, quanto al cliente, per avere un&#8217;idea precisa di cosa fare, delle problematiche che si possono incontrare lungo il cammino e avere un feedback completo.<br />
Si potrà così buttare via tutto per affrontare il lavoro in maniera completa.</p>
<p><strong>Pregi:</strong> ottimo per le interfacce utente, che verranno mostrate senza alcun codice correlato.</p>
<h2>Modello Flipper</h2>
<p>Poco da dire: il ciclo di vita è quasi puramente casuale. Il sistema è come una pallina che rimbalza a caso tra le fasi. Non ci sono vincoli temporali e nulla è misurabile.</p>
<h2>Meta-modello a spirale (risk based)</h2>
<p>Questo meta modello è una sorta di framework attraverso cui posso inquadrare tanti altri modelli. Prevede di analizzare ciclicamente (allontanandomi dal centro e aumentando i costi) tutte le fasi dello sviluppo, permettendomi, per esempio, di terminare ad ogni momento la produzione.</p>
<p align="center"><img src="http://simone.cabrino.it/wp-content/uploads/2007/11/modelloaspirale.gif" alt="Modello a Spirale" /></p>
<p>Le fasi di analisi cicliche, ideate da Boehm, sono</p>
<ul>
<li>determinazione degli obiettivi, delle alternative e dei vincoli</li>
<li>valutazione di eventuali alternative e <strong>identificazione dei rischi</strong></li>
<li> fase di sviluppo e di verifica</li>
<li>pianificazione nei dettagli della fase successiva</li>
</ul>
<p>Sempre Boehm, in seguito, creò a questo la variante <strong>Win Win</strong>, attraverso la quale si ottimizzano le specifiche tramite una contrattazione tra programmatore e utente: entrambi avranno l&#8217;illusione finale di aver vinto (win) circa le proprie idee.</p>
<h2>Modello COTS (component of the shelf)</h2>
<p>Perchè sono obbligato a ripartire sempre dal principio e riscrivere sempre le stesse cose partendo da zero? Ecco che, finalmente, il riutilizzo del codice diventa importante. Nascono le librerie, che raccolgono le funzioni base più utilizzate.</p>
<p>Una volta che avrò raccolto le specifiche del sistema, dovrò guardarmi in giro per cercare qualcosa di già pronto e il più simile a quanto mi è necessario: potrò anche andare a variare le specifiche, semplificandole, per adattarmi a quanto trovato.</p>
<p><strong>Difetti:</strong> se così possono essere definiti le difficoltà di archiviazione dei moduli e la capacità di ricerca degli stessi.</p>
<h2>Modello Agile Programming</h2>
<p>Il modello Agile Programming (che comprende anche il modello dell&#8217;eXtreme Programming) è un modello che prevede un continuo contatto con il cliente/utente, in modo da facilitare la richiesta di requisiti e la soluzione ad alcuni dubbi o problemi sollevati dallo sviluppo. Non esiste una vera documentazione scritta come nella maggior parte dei modelli analizzati: il codice è scritto secondo convenzioni e standard tali da permetterne in maniera molto rapida (agile) l&#8217;analisi.</p>
<p>Introduce quattro variabili: <strong>portata</strong> (il numero di funzionalità del sistema), <strong>tempistiche</strong> (deadline &#8211; scadenze), <strong>qualità </strong>(quanto deve essere buono e bello il prodotto finale) e <strong>costo</strong>. Attraverso il dialogo, si porta l&#8217;utente/cliente a scegliere 3 di queste quattro variabili in modo da permettere di calcolare l&#8217;ultima anche se un cliente vorrà sempre tutto, in poco tempo, con la massima qualità e un costo pari a zero!!!</p>
<p>Il cliente ha il diritto di cambiare idea quando e come vuole, facendomi buttare quanto già fatto se di poca utilità o evitandomi del lavoro inutile. Grazie all&#8217;uso delle priorità, però, i lavori iniziali saranno sicuramente quelli più sicuri e assodati, che delineeranno il prodotto finale e permetteranno al cliente di aggiungere/modificare/eliminare tutte quelle funzionalità con bassa priorità.</p>
<p>Il tentativo di questi modelli è quello di ridurre al minimo i fallimenti, rilasciano piccoli &#8220;aggiornamenti&#8221; sensibili in finestre temporali di piccole dimensioni (qualche settimana circa), diminuire i costi di produzione e godere della piena soddisfazione del cliente.</p>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/modelli_ciclo_vita/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ingegneria del Software: fasi di progettazione</title>
		<link>http://simone.cabrino.it/blog/fasi_di_progettazione/</link>
		<comments>http://simone.cabrino.it/blog/fasi_di_progettazione/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 09:47:41 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Università]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/2007/11/27/fasi_di_progettazione/</guid>
		<description><![CDATA[Il ciclo di vita di un software diviso nelle 5 fasi principali: analisi dei requisiti, progettazione, codifica, testing e manutenzione.]]></description>
			<content:encoded><![CDATA[<p>L&#8217;<strong>Ingegneria del Software</strong> è una branca dell&#8217;ingegneria che ha come oggetto di studio lo sviluppo delle migliori metodologie da utilizzare come metodo di sviluppo di sistemi software di ogni genere, a partire da un semplice sito web fino ad arrivare agli applicativi più complessi (ma nello stesso tempo di facile e comune utilizzo) come Text Editor o Sistemi Operativi.</p>
<p>L&#8217;ingegneria del software, a differenza di tutte le altre differenti branche dell&#8217;ingegneria, soffre di un grosso male, ma gode nello stesso tempo di alcuni benefici. Se il cliente potrà, in ogni momento dello sviluppo, modificare le proprie richieste (spesso stravolgendole), è anche vero che l&#8217;ingegneria del software è l&#8217;unica che permette di &#8220;uscire&#8221; con un prodotto non completo o non completamente funzionale: nessuno di voi comprerà mai un auto di cui non si assicura il funzionamento, come non si assicura il funzionamento completo di un prodotto software che, anche ora, state utilizzando sul vostro PC.</p>
<p>Anche se veramente poco utilizzate nella normale programmazione all&#8217;interno di team o poco numerosi o inesperti, le fasi studiate dall&#8217;ingegneria del software potrebbero migliorare notevolmente lo sviluppo di ogni applicativo o sistema web based. Si parla più comunemente di <strong>ciclo di vita del software</strong>.</p>
<p><span id="more-104"></span></p>
<h2>Analisi dei requisiti</h2>
<p>Di fronte alla richiesta di un cliente, è sempre opportuno verificare nei dettagli cosa l&#8217;utente vuole dall&#8217;applicativo, quali risultati vorrebbe ottenere dall&#8217;utilizzo dello stesso e quali caratteristiche e qualità si aspetta di trovare una volta che l&#8217;applicativo sarà completato. Per poter generare una lista di requisiti completa, è importante consultare anche gli <em>stakeholders</em>, gli utenti finali del sistema.</p>
<p>Al termine dell&#8217;analisi dei requisiti, i consigli dati dall&#8217;ingegneria del software sono quelli di produrre in output un documento di specifiche, un manuale utente di base (si, un manuale utente ancor prima di aver creato l&#8217;applicativo) e un piano di test di sistema sulle specifiche raccolte. Raccogliendo tutte le informazioni in documenti, eviterete di perdere dettagli importanti durante lo svolgimento delle fasi successive.</p>
<h2>Progettazione (design)</h2>
<p>Se la fase di Analisi dei requisiti potrebbe rispondere alla domanda &#8220;<em>cosa deve/devo fare?</em>&#8220;, la fase di design dell&#8217;applicativo si può specchiare nel quesito &#8220;<em>come posso fare?</em>&#8220;, come l&#8217;applicativo o progetto dovrà soddisfare tutti i requisiti raccolti.</p>
<p>Durante la fase di progettazione si delineano solamente gli aspetti di alto livello, generali e piuttosto astratti della programmazione: la fase si sviluppo (<em>coding</em> &#8211; trasformazione in codice) sarà successiva e inizierà al completamento della fase di progettazione.</p>
<h2>Coding (sviluppo)</h2>
<p>La fase di coding è, come accennato in precedenza, quella in cui si cominciano a scrivere le righe di codice che daranno vita all&#8217;applicativo. La fase di codifica del progetto si può spesso visualizzare, soprattutto quando il progetto ha una certa complessità e il team di sviluppo si divide i compiti, come unione di due sottofasi:</p>
<ul>
<li>fase di creazione di moduli base</li>
<li>fase di integrazione dei moduli creati</li>
</ul>
<p>La <strong>fase di creazione</strong> di moduli distinti permette di avere una migliore verificabilità delle singole porzioni di codice ottenendo così un applicativo più corretto e funzionale.<br />
Nella <strong>fase di integrazione</strong>, invece, i blocchi (detti <em>stub</em>) che sono stati creati utilizzando richieste o generando output fittizi, devono essere uniti l’un l’altro per dar vita al progetto completo.</p>
<h2>Test (o collaudo)</h2>
<p>È in questa fase che vengono eseguiti i test di conformità del progetto e la verifica del rispetto delle specifiche iniziali. Il documento prodotto già durante la raccolta dei requisiti si rivela così molto utile per permettere allo sviluppatore di controllare nei dettagli che sia correttamente possibile fare quanto richiesto inizialmente dal cliente.</p>
<p>Anche la fase di test si può scomporre in due diverse sottofasi:</p>
<ul>
<li>test di sistema (o test funzionali)</li>
<li>test di accettazione</li>
</ul>
<p>I test di sistema sono i test generali, ovvero tutti quei test che possono confermare la correttezza del sistema software creato.</p>
<p>I test di accettazione, invece, sono tutti quei test che vengono fatti per verificare che tutto sia conforme alle specifiche fornite dal cliente.<br />
Ma spesso il cliente non è un singolo individuo, ma il progetto è fonte di un&#8217;idea della software-house stessa. In questo la fase di accettazione vedrà due distinte sottofasi di test: <strong>Alfa Test</strong> e <strong>Beta Test</strong>.</p>
<p>Gli <strong>Alfa Test </strong>vengono effettuati solitamente all’interno dell’azienda produttrice e vengono fatti utilizzare da persone che rispecchiano l&#8217;utente finale del sistema; la <strong>versione beta</strong> di un&#8217;applicativo, viene invece rilasciata ad un gruppo più esteso di utenti,  solitamente in versione gratuita, ma con l’obbligo di riportare alla casa produttrice l’elenco degli errori trovati durante il normale utilizzo.</p>
<h2>Manutenzione</h2>
<p>L&#8217;ultima fase di cui l&#8217;ingegneria del software si occupa è la fase di manutenzione. Questo momento del ciclo di vita di un prodotto è solitamente il momento più lungo. Durante questa fase vengono rilasciati tutti gli aggiornamenti per migliorare la stabilità del sistema, correggendone errori o adattandolo per permettere il supporto di nuove piattaforme operative, così come possono essere aggiunte funzionalità non previste nella prima versione di uscita.</p>
<p>La lunga durata di questa fase incide sui costi totali del progetto per quasi il 60%: ogni modifica, aggiunta o miglioramento prevede che venga rieseguita l&#8217;intera fase di testing.</p>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/fasi_di_progettazione/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
