Riassunti
Appunti universitari in formato Markdown da Obsidian.
Introduzione all'Ingegneria del Software
download Scarica MDCos'è un software?
Sono programmi per computer che hanno documentazione associata (ad es. requisiti, modelli di progettazione e manuali utente). Un software può essere:
- generico: sviluppato per essere venduto a una gamma di clienti diversi, ad es. Software per PC come Excel o Word;
- specifico (personalizzato): sviluppato per un singolo cliente secondo le sue specifiche.
Un nuovo software può essere creato dallo sviluppo di nuovi programmi, dalla configurazione di software generici e dal riutilizzo di software esistenti.
Cos'è l'Ingegneria del Software?
È una disciplina ingegneristica che si occupa di tutti gli aspetti della produzione di software.
Gli ingegneri del Software dovrebbero adottare un approccio sistematico e organizzato al loro lavoro e utilizzare strumenti e tecniche appropriate a seconda del problema da risolvere, dei vincoli di sviluppo e delle risorse disponibili.
Qual è la differenza tra Ingegneria del Software e Informatica?
L'informatica si occupa di teoria e fondamenti mentre l'Ingegneria del Software si occupa degli aspetti pratici dello sviluppo e della fornitura di software utili ed economici.
Qual è la differenza tra Ingegneria del Software e Ingegneria dei Sistemi?
L'Ingegneria dei Sistemi si occupa di tutti gli aspetti dello sviluppo di sistemi basati su computer: hardware, software e ingegneria di processo.
L'Ingegneria del Software fa parte di questo processo per quanto riguarda l'infrastruttura software, il controllo, le applicazioni e i database nel sistema.
Gli ingegneri di sistema sono coinvolti nelle specifiche del sistema, nella progettazione architettonica, nell'integrazione e nella distribuzione.
Cos'è lo processo software?
È un insieme di attività il cui obiettivo è lo sviluppo o l'evoluzione del software. Le attività generiche in tutti i processi software sono:
- specifiche: cosa dovrebbe fare il sistema e i suoi vincoli di sviluppo;
- sviluppo: produzione del sistema software;
- convalida: verifica che il software sia ciò che il cliente desidera;
- evoluzione: cambiare il software in risposta alle mutevoli esigenze.
Che cos'è un modello del processo software?
È una rappresentazione semplificata di un processo software, presentata da una prospettiva specifica. Esempi di prospettive di processo sono:
- Prospettiva del flusso di lavoro, sequenza di attività;
- Prospettiva del flusso di dati, flusso di informazioni;
- Prospettiva di ruolo/azione, chi fa cosa.
Esistono alcuni modelli di processo generici come il modello a cascata, lo sviluppo iterativo e l'ingegneria del software basata su componenti.
Quali sono i costi dell'Ingegneria del Software?
All'incirca il 60% per i costi di sviluppo, 40% per i costi di test.
Per i software personalizzati, i costi di evoluzione spesso superano i costi di sviluppo.
I costi variano in base al il tipo di sistema che si sta sviluppando e alle prestazioni e affidabilità del sistema.
La distribuzione dei costi dipende dal modello di sviluppo utilizzato.

Quali sono i metodi dell'Ingegneria del Software?
Sono approcci strutturati allo sviluppo del software come per esempio:
- descrizioni e notazioni dei modelli, descrizioni dei modelli grafici che dovrebbero essere prodotti;
- regole, vincoli applicati ai modelli di sistema;
- raccomandazioni, consigli sulle buone pratiche di progettazione;
- guida al processo, quali attività seguire.
Che cos'è CASE (Computer-Aided Software Engineering)
Sono sistemi software destinati a fornire supporto automatizzato per le attività dei processi software. I sistemi CASE sono spesso utilizzati per il supporto del metodo come per esempio:
- Upper-CASE, strumenti a supporto delle prime attività di processo dei requisiti e della progettazione;
- Lower-CASE, strumenti per supportare attività successive come programmazione, debug e test.
Quali sono le caratteristiche di un buon software?
Il software deve fornire all'utente le funzionalità e le prestazioni richieste e deve essere manutenibile, affidabile e accettabile:
- manutenibilità: il software deve evolversi per soddisfare le mutevoli esigenze;
- affidabilità: il software deve essere affidabile;
- efficienza: il software non dovrebbe fare un uso dispendioso delle risorse di sistema;
- accettabilità: il software deve essere accettato dagli utenti per i quali è stato progettato. Ciò significa che deve essere comprensibile, utilizzabile e compatibile con altri sistemi.
Quali sono le principali sfide che l'Ingegneria del Software deve affrontare?
- eterogeneità: sviluppo di tecniche per la creazione di software in grado di far fronte a piattaforme e ambienti di esecuzione eterogenei;
- consegna: sviluppo di tecniche che portano a una consegna più rapida del software;
- fiducia: sviluppo di tecniche che dimostrino che il software può essere considerato affidabile dai suoi utenti.
Responsabilità professionale ed etica
L'ingegneria del software è più che l'applicazione di competenze tecniche. Gli ingegneri devono comportarsi in modo onesto ed eticamente responsabile. Il comportamento etico è più che semplicemente rispettare la legge.
Abbiamo vari problemi legati alla responsabilità professionale come:
- riservatezza: gli ingegneri dovrebbero normalmente rispettare la riservatezza dei loro datori di lavoro o clienti, indipendentemente dal fatto che sia stato firmato o meno un accordo formale di riservatezza.
- competenza: gli ingegneri non dovrebbero travisare il loro livello di competenza. Non dovrebbero accettare consapevolmente un lavoro che è al di fuori delle loro competenze.
- diritti di proprietà intellettuale: essere a conoscenza delle leggi locali sulla proprietà intellettuale come brevetti, copyright, ecc. e fare attenzione a garantire che la proprietà intellettuale di datori di lavoro e clienti sia protetta;
- uso improprio del computer: l'Ingegnere non dovrebbe utilizzare le proprie competenze tecniche per abusare dei computer di altre persone.
Codice Etico ACM/IEEE
Le società professionali negli Stati Uniti hanno collaborato per produrre un codice di pratica etica. Questo codice contiene otto principi relativi al comportamento e alle decisioni e riguarda professionisti, educatori, manager, supervisori e responsabili politici, nonché tirocinanti e studenti della professione.
Dilemmi etici
Alcuni esempi di dilemmi etici:
- disaccordo in linea di principio con le politiche dell'alta dirigenza;
- il tuo datore di lavoro agisce in modo non etico e rilascia un sistema critico per la sicurezza senza aver terminato il test del sistema;
- partecipazione allo sviluppo di sistemi d'arma militari o sistemi nucleari.