INFORMATIC TECHNOLOGY

I principi dell'ingegneria del software

PROGETTAZIONE SOFTWARE


I principi dell'ingegneria del software descrivono proprietà desiderabili del prodotto software e sono generali e astratti.
Per poter essere applicati devono esserci a disposizione dei metodi appropriati e tecniche specifiche.

I principi sono 7 principali, vediamoli uno ad uno:

Rigore e formalità

Un adeguato livello di rigore è necessario al fine di ottenere prodotti affidabili e corretti.
Il livello più alto di rigore è la fomalità.
Qualunque prodotto o processo deve essere espresso matematicamente e deve rispondere a specifiche leggi matematiche.
La fase di programmazione adotta un approccio formale.

Separazione degli interessi

Per rendere più semplice la complessità di un problema occorre separarne i vari aspetti concentrandosi su ognuno di essi in maniera separata.
Per fare ciò è necessario isolare gli aspetti scarsamente correlati tra di loro.
Esistono due modi principali per effettuare la separazione:
temporale (separazione di attività in diversi periodi di tempo)
qualitativa (ad esempio perseguire correttezza e efficenza).

Modularità

La modularità è il principio principale dell'ingegneria del software. Cosiste nel suddividere un sistema complesso in parti più semplici detti moduli.
Un sistema modulare (composto da moduli) consente di applicare la separazione di interessi in due fasi:
1. Si possono trattare i dettagli di ciascun modulo ignorando i dettagli degli altri moduli.
2. Si possono esaminare le caratteristiche complessive di tutti i moduli e le loro relazioni.
Sono due gli approcci principali:
- Approccio bottom-up: prima sui moduli e poi sulla loro composizione.
- Approccio top-down: scomposizione in moduli e poi progettazione di ciascuno di essi.

La modularità fornisce quattro tipi di benefici fondamentali:
- Divide et impera: capacità di scomporre il sistema in parti più semplici.
- Capacità di comporre un sistema complesso a partire dai moduli esistenti.
- Capacità di comprendere un sistema in funzione delle sue parti.
- Capacità di modificare un sistema modificando solo un piccolo insieme delle sue parti.

Per ottenere i benefici della modularità è necessario che i moduli abbiamo un alta coesione interna ed un basso accoppiamento tra di essi.
Un modulo è altamente coeso se tutti i suoi elementi sono strettamente connessi.
L'accoppiamento caratterizza le relazioni tra i moduli. Un basso accoppiamento consente di capire, modificare, testare o riusare ciascun modulo separatamente.
Strutture modulari con alta coesione e basso accoppiamento consentono di vedere i moduli come delle scatole nere quando si descrive la struttura complessiva e vedere ciascuno nei suoi dettagli quando è necessario analizzare la struttura interna.

Astrazione

L'astrazione consente di identificare gli aspetti fondamentali di un fenomeno e di ignorare i dettagli.
E' un caso particolare della separazione degli interessi.
Il tipo di astrazione dipende dallo scopo.
L'astrazione genera modelli. Quando, ad esempio, si analizzano i requisiti si ottiene un modello della potenziale applicazione. Il modello può essere una descrizione formale o semiformale. Per mezzo del modello ottenuto è possibile ragionare sul sistema.
Se un modello può essere simulato può fornire informazioni sul sistema prima che venga realizzato.
Esempi sono i modelli dei cicuiti elettrici, i quali elementi (condesatori, resistenze, corrente..) vengono astratti e disegnati tralasciando le loro caratteristiche interne.

Anticipazione del cambiamento

La capacità di supportare l'evoluzione del software richiede l'abilità di anticipare i potenziali cambiamenti futuri. Tutto ciò costituisce la base per l'evolvibilità del software.
La capacità di evolvere deve essere pianificata con estrema cura. I progettisti devono cercare di identificare i possibili cambiamenti e predisporre il progetto per favorire la loro attuazione in modo agevole.
L'anticipazione del cambiamento influenza anche la riusabilità ed è fondamentale anche nei processi.

Generalità

Ogni volta che si cerca di risolvere un problema, si cerca di scoprire quale è il problema più grande nascosto dietro quello specifico. Spesso è più semplice di quello specifico e la sua soluzione è potenzialmente più riusabile.
La soluzione più generale può essere più costosa ed occorre bilanciarla rispetto ai costi e all'efficienza della soluzione.

Incrementalità

L'incrementalità si ha quando un processo procede per passi (incrementi) che permettono di raggiungere l'obbiettivo attraverso approssimazioni successive.
Nel caso del software si intende che l'applicazione desiderata si ottiene come risultato si un processo evolutivo.

Categorie Post


Sicurezza

Dalla crittografia all'anonimato, dallo scambio di messaggi agli antivirus. Vediamo come funziona la sicurezza digitale.

Internet

Tutto ciò che ci circonda è sempre più connesso ad internet, vediamo come e cosa c'è dietro la rete che ha cambiato il nostro mondo.

Programmazione

Raccolta di frammenti di codice, plugin, script, linee guida e tutto ciò che c'è da sapere sulla programmazione.

Progettazione Software

Come vengono progettati software complessi? Dietro c'è lavoro di team e tanta organizzazione. Cerchiamo di esaminarne i concetti principali.

Elettronica

Esaminia i componenti elettronici principali che ci permettono di utilizzare qualsiasi cosa di digitale, e non solo, al giorno d'oggi.

Mobile

Tutto ciò che riguarda il mondo dei cellulari e tablet con un occhio di riguardo al modding.