Nessuna delle precedenti è ingegneria del software. È tutto solo programmazione in modo casuale.
Software Engineering (SE) è una disciplina ingegneristica che si occupa di un approccio sistematico, rigoroso e disciplinato alla progettazione, allo sviluppo, al funzionamento e alla manutenzione del software, e allo studio di questi approcci; cioè, l'applicazione dell'ingegneria al software.
In particolare, il software può essere progettato quando si applicano tecniche di ingegneria. Per apprendere tali tecniche, la cosa migliore è studiare un Master SE pertinente. Quando insegni a te stesso, potresti imparare a programmare, ma non riesco a immaginare che tu stia imparando l'ingegneria da solo.
Esempio:
Il programmatore arriva e inizia a scrivere codice, ottimizzando il codice, ecc. (Tutto ciò che conta per un programmatore è il codice e nient'altro che il codice). I progetti complessi sono spesso in ritardo, il budget viene superato fino a pochi ordini di grandezza e il software non risolve bene i requisiti. Questo è noto come crisi del software. La risposta è la disciplina SE.
SE arriva e vuole capire il dominio del problema come prima cosa. Viene applicato un approccio ingegneristico, in particolare Requirements Engineering (RE) (requisiti elicitazione - > analisi dei requisiti - > specifica dei requisiti - > convalida dei requisiti).
Il risultato di RE è in genere un insieme di modelli come modello contestuale, modello comportamentale e modello di processo aziendale. Da questi modelli, SE comprende il problema aziendale e progetta una soluzione software.
Il design in genere significa che SE traduce i modelli dei requisiti in architettura di sistema basata su componenti e quindi progetta il design dei componenti per ciascun componente singolarmente. Ciò si traduce in una specifica specifica dei limiti dei componenti, delle interfacce dei componenti e delle classi da cui comporre i componenti.
Il passo successivo è qualcuno che arriva a queste interfacce (solitamente generate automaticamente) e ne crea l'implementazione. Quella persona potrebbe essere un programmatore. Infine, SE segue con la convalida del software in cui tutto è testato rispetto alla progettazione e ai requisiti originali.
In SE, i progetti hanno in genere un piano di progetto che consente agli ingegneri di pianificare, controllare e monitorare i progetti. In particolare, il software è progettato in base al tempo, al budget, alle specifiche.
Durante la fase di implementazione del software, la documentazione viene prodotta per ogni artefatto e vengono generati molti elementi di configurazione (CI). Questi devono essere gestiti in qualche modo. Di solito, in SE, sono presenti un repository SCM (Software Configuration Management) e Change Management. Un'altra parte di SE è Software Process (SP), ad esempio RUP, Scrum, DSDM, Crystal, Waterfall, ...
SP deve essere documentato e rigorosamente seguito come nella documentazione, senza eccezioni, in modo che i risultati siano sempre riproducibili. (ISO 9000). Questo si riferisce alla qualità del software.
Un altro argomento di SE è Software Measurement and Estimation che ti consente di misurare l'efficienza del tuo SP, le prestazioni del team, le dimensioni del progetto (LOC - Lines of Code) ovvero COCOMO, la consegna stimata del progetto (giorni uomo) e simili.
C'è ancora molto altro da fare a SE di questa breve risposta. Applicare approcci SE invece di scrivere solo codice è come pratichi SE.
Dato che SE è ancora un campo emergente, succede che i non-ingegneri si chiamano ingegneri. A meno che non stiano applicando approcci ingegneristici, sono semplicemente programmatori.
Per ulteriori letture, vedi Ingegneria del Software di Ian Sommerville e www.ieee.org / www.computer.org. In queste risorse, SE è la disciplina ingegneristica. Su Stack Overflow e in molte aziende, sfortunatamente, prendono in prestito il termine SE e lo usano come un altro nome per la programmazione.