Capitolo 1 : Ingegneria del software
Nell'ambito dello sviluppo del software, l'ingegneria del software si riferisce a un approccio basato sull'ingegneria. Nel processo di sviluppo del software, un professionista noto come ingegnere del software mette in pratica il processo di progettazione ingegneristica.
Nonostante il fatto che le frasi "programmatore" e "programmatore" siano sinonimi di "ingegnere del software", si riferiscono solo alla componente costruttiva del normale lavoro di un ingegnere del software.
Un ingegnere del software è responsabile dell'applicazione di un processo di sviluppo del software, che include la definizione, l'implementazione, il test, la gestione e la manutenzione dei sistemi software, nonché la creazione e l'aggiornamento del processo di sviluppo attraverso l'applicazione del processo.
Fu solo negli anni '60 che l'ingegneria del software fu riconosciuta come un sottocampo distinto dell'ingegneria.
Si credeva che lo sviluppo dell'ingegneria del software sarebbe stato un processo difficile. I problemi includevano software che non era stato completato o aveva superato il budget, superato le scadenze, che richiedeva un debug e una manutenzione sostanziali e non soddisfaceva i requisiti dei clienti. A volte il software non era mai finito.
Nel 1968, l'Organizzazione del Trattato del Nord Atlantico (NATO) ospitò la prima conferenza sull'ingegneria del software, in cui furono discussi argomenti riguardanti il software. Al fine di facilitare la creazione di software, sono state elaborate linee guida e i metodi più efficaci.
Un certo numero di fonti diverse sono state citate come origini del termine "ingegneria del software". "Computers and Automation" pubblicò un elenco di servizi forniti dalle società nell'edizione del giugno 1965 della pubblicazione. La parola è stata usata in modo più ufficiale nel numero di agosto 1966 di Communications of the Association for Computing Machinery (Volume 9, numero 8) nell'articolo "President's Letter to the ACM Membership" scritto da Anthony A. Oettinger. Oltre a questo, è collegato al nome di una conferenza della NATO che si tenne nel 1968 e fu guidata dal professor Friedrich L. Bauer. Mentre erano in corso le missioni Apollo, Margaret Hamilton fornì una descrizione del campo dell'"ingegneria del software" al fine di dare credibilità alle attività che venivano svolte. Il termine "crisi del software" era comunemente usato per descrivere la situazione dell'epoca. Frederick Brooks e Margaret Hamilton terranno i loro discorsi di apertura alle sessioni plenarie della 40a Conferenza Internazionale sull'Ingegneria del Software (ICSE 2018), che si terrà per commemorare mezzo secolo di campo dell'"Ingegneria del Software".
Il Software Engineering Institute (SEI) è stato creato nel 1984 come struttura di ricerca e sviluppo sostenuta dal governo federale. La sua sede si trova nel campus della Carnegie Mellon University di Pittsburgh, in Pennsylvania, negli Stati Uniti d'America.
Il SEI Software Process Program è stato creato da Watts Humphrey con l'intenzione di comprendere e gestire efficacemente il processo di ingegneria del software. Il Capability Maturity Model Integration for Development (CMMI-DEV) è stato sviluppato a seguito dei livelli di maturità del processo introdotti inizialmente. Questo modello ha delineato il modo in cui il governo degli Stati Uniti analizza le capacità dei suoi team di sviluppo software.
Il Software Engineering Body of Knowledge (SWEBOK) è una raccolta delle migliori pratiche contemporanee per l'ingegneria del software che sono state compilate dal sottocomitato ISO/IEC JTC 1/SC 7 e pubblicate. Queste best practice sono universalmente riconosciute. È generalmente accettato che l'ingegneria del software sia una delle categorie più importanti di computer.
Le definizioni significative di ingegneria del software includono quanto segue:
Ancora meno ufficialmente, la frase è stata usata anche come segue:
L'espressione "ingegneria del software" è stata resa popolare da Margaret Hamilton mentre lavorava al programma Apollo. Il lavoro dovrebbe essere considerato con la stessa serietà di altri contributi alla crescita della tecnologia, e il termine "ingegneria" è stato scelto per riconoscere che questo dovrebbe essere il caso. Hamilton fornisce il seguente uso del termine:
Era la prima volta che qualcuno sentiva parlare del termine, almeno non nel nostro mondo, quando mi è venuto in mente per la prima volta. Era stato uno scherzo per un considerevole periodo di tempo. Si divertivano a prendermi in giro per avere idee così estreme. Il giorno in cui uno dei più rispettati esperti di hardware ha condiviso con tutti in una riunione che era d'accordo con me sul fatto che anche il processo di creazione del software dovrebbe essere considerato una disciplina ingegneristica, proprio come il processo di costruzione dell'hardware, è stato un giorno che vivrà a lungo nella memoria. Avevamo guadagnato la sua e l'accettazione degli altri nella stanza come appartenenti a un campo dell'ingegneria a sé stante, e questo non perché lui accettasse il nuovo "termine" in sé e per sé; piuttosto, era perché ci eravamo guadagnati la loro accettazione.
C'è una notevole quantità di disaccordo tra i critici sulla definizione di ingegneria del software o sulla legittimità dell'ingegneria del software come materia all'interno dell'ingegneria. David Parnas ha affermato che l'ingegneria del software è, in realtà, un tipo di ingegneria o ingegneria in generale. Non è così, secondo Steve McConnell, ma crede che dovrebbe esserlo. L'affermazione che la programmazione è sia un'arte che una scienza è stata fatta da Donald Knuth. Per quanto riguarda gli Stati Uniti d'America, Edsger W. Dijkstra ha affermato che i termini ingegneria del software e ingegnere del software sono stati utilizzati in modo eccessivo.
Il processo di elicitazione, analisi, specifica e convalida dei requisiti software è noto come ingegneria dei requisiti. Sono disponibili tre opzioni per i requisiti software: dominio, non funzionale e funzionale.
I comportamenti previsti, spesso noti come output, sono descritti dai requisiti funzionali. Preoccupazioni come la portabilità, la sicurezza, la manutenibilità, l'affidabilità, la scalabilità, le prestazioni, la riutilizzabilità e la flessibilità sono esempi dei tipi di cose che sono specificate dai requisiti non funzionali. Queste restrizioni possono essere suddivise nelle seguenti categorie: vincoli di interfaccia, vincoli di prestazioni (inclusi elementi come velocità di reazione, sicurezza e spazio di archiviazione), vincoli operativi, vincoli del ciclo di vita (inclusi elementi come la portabilità e la manutenibilità) e vincoli economici. È necessario avere una comprensione del funzionamento del sistema o del programma per esprimere adeguatamente le esigenze non funzionali. Nell'ambito dei progetti, i requisiti di dominio si riferiscono alle caratteristiche associate a una particolare categoria o dominio.
Il processo di sviluppo di progetti di alto livello per il software è indicato come un esempio di progettazione del software. Ci sono momenti in cui il design è suddiviso in livelli:
La programmazione, nota anche come codifica, unit test, test di integrazione e debugging, sono le fasi tipiche coinvolte nella creazione di software. Questi passaggi sono necessari per mettere in atto il progetto. "Il test del software è correlato, ma distinto, dal test del software per computer", risoluzione dei problemi"
Nella maggior parte dei casi, il programmatore è colui che è responsabile dei test durante questa fase. L'obiettivo di questo test è garantire che il codice funzioni in conformità con la sua progettazione e determinare quando il codice è pronto per passare al livello successivo di test.
Lo scopo del test del software è fornire alle parti interessate informazioni sulla qualità del software che viene testato. Ciò si ottiene attraverso un'indagine empirica e tecnica effettuata.
Quando il test è specificato in un modo distinto dalla costruzione, viene spesso eseguito da ingegneri di test o tecnici di garanzia della qualità piuttosto che dai programmatori che erano responsabili della scrittura. Oltre ad essere svolto a livello di sistema, è considerato una componente della qualità del programma.
Il processo di studio dei programmi per computer in relazione a un particolare elemento, come le prestazioni, la robustezza o la sicurezza, è indicato come analisi del programma.
La manutenzione del software è il processo di fornitura di supporto per il software dopo che è stato rilasciato. Può includere, a titolo esemplificativo ma non esaustivo, aspetti quali la correzione degli errori, l'ottimizzazione, la rimozione di funzionalità che non vengono utilizzate o vengono scartate e il miglioramento di funzionalità già presenti.
Nella maggior parte dei casi, la manutenzione rappresenta tra il quaranta e l'ottanta percento del costo totale del progetto.
Avere una conoscenza pratica della programmazione informatica è necessario per intraprendere una carriera come ingegnere del software. Nel 2004, la IEEE Computer Society ha prodotto lo SWEBOK, che è stato ora pubblicato come ISO/IEC Technical Report 1979:2005. Questo documento descrive il corpus di conoscenze che l'organizzazione raccomanda a un ingegnere del software laureato con quattro anni di esperienza di essere in grado di comprendere.
Un numero significativo di ingegneri informatici entra in questo campo conseguendo prima una laurea presso un'università accreditata o ricevendo una formazione in una scuola professionale. Nel corso dell'anno 2014, la Joint Task Force on Computing Curricula...