Nada de lo anterior es ingeniería de software. Solo se trata de una programación aleatoria.
La Ingeniería de Software (SE) es una disciplina de ingeniería relacionada con un enfoque sistemático, riguroso y disciplinado para el diseño, desarrollo, operación y mantenimiento del software, y el estudio de estos enfoques; Es decir, la aplicación de la ingeniería al software.
En particular, el software se puede diseñar cuando se aplican técnicas de ingeniería. Para aprender tales técnicas, lo mejor es estudiar un Master de SE relevante. Cuando te enseñas a ti mismo, puedes aprender sobre programación, pero no puedo imaginar que aprendas ingeniería por tu cuenta.
Ejemplo:
El programador viene y comienza a escribir código, optimizar código, etc. (todo lo que le importa a un programador es código y nada más que código). Los proyectos complejos a menudo llegan tarde, el presupuesto se excede hasta unos pocos órdenes de magnitud y el software no resuelve bien los requisitos. Esto se conoce como crisis de software. La respuesta a eso es la disciplina SE.
SE llega y quiere entender el dominio del problema como lo primero. Se aplica un enfoque de ingeniería, en particular, Ingeniería de requisitos (RE) (obtención de requisitos - > análisis de requisitos - > especificación de requisitos - > validación de requisitos).
El resultado de RE suele ser un conjunto de modelos, como el modelo contextual, el modelo de comportamiento y el modelo de proceso empresarial. A partir de estos modelos, SE entiende el problema comercial y diseña una solución de software.
El diseño normalmente significa que SE traduce los modelos de requisitos en una arquitectura de sistema basada en componentes y luego diseña los componentes de cada componente individualmente. Esto da como resultado una especificación determinada de límites de componentes, interfaces de componentes y clases para componer componentes.
El siguiente paso es alguien que llega a estas interfaces (generalmente generadas automáticamente) y crea su implementación. Esa persona puede ser un programador. Finalmente, SE sigue con la validación del software donde todo se prueba en comparación con el diseño y los requisitos originales.
En SE, los proyectos suelen tener un plan de proyecto que permite a los ingenieros planificar, controlar y monitorear proyectos. En particular, el software se diseña a tiempo, dentro del presupuesto, según las especificaciones.
Durante la fase de implementación del software, se produce documentación para cada artefacto y se generan muchos elementos de configuración (CI). Estos deben ser gestionados de alguna manera. Por lo general, en SE, hay un repositorio de Administración de configuración de software (SCM) y Administración de cambios. Otra parte de SE es Software Process (SP), es decir, RUP, Scrum, DSDM, Crystal, Waterfall, ...
SP debe documentarse y seguirse rigurosamente como en la documentación, sin excepción, para que los resultados sean siempre reproducibles. (ISO 9000). Esto se refiere a la calidad del software.
Otro tema de SE es Medición y estimación de software, que le permite medir la eficiencia de su SP, el rendimiento del equipo, el tamaño estimado del proyecto (LOC - Líneas de código), es decir, COCOMO, la entrega estimada del proyecto (días hábiles) y similares.
Todavía hay mucho más en SE de lo que describe esta breve respuesta. Aplicar enfoques de SE en lugar de solo escribir código es la forma en que practicas SE.
Debido a que SE sigue siendo un campo emergente, sucede que los no ingenieros se llaman a sí mismos ingenieros. A menos que estén aplicando enfoques de ingeniería, no son más que programadores.
Para obtener más información, consulte Ingeniería de software por Ian Sommerville y www.ieee.org / www.computer.org. En estos recursos, la SE es la disciplina de la ingeniería. En Stack Overflow y en muchas empresas, desafortunadamente, toman prestado el término SE y lo usan como otro nombre para la programación.