## Cos'è 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. ![[distribuzioneCostiAttivita.png]] ## 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.