Ingeniería de software es la disciplina concerniente a la aplicación de la teoría, conocimiento, y práctica para construir sistemas de software de manera eficaz y eficiente que satisfagan los requerimientos de usuarios y clientes. La Ingeniería de Software es aplicable a pequeños, medianos, y sistemas a gran escala. Abarca todas las fases del ciclo de vida de un sistema de software. El ciclo de vida incluye especificación y análisis de requerimientos, diseño, construcción, prueba, despliegue, y operación y mantenimiento.
La Ingeniería de Software emplea métodos, procesos, técnicas y mediciones de ingeniería. Se beneficia del uso de herramientas para gestionar el desarrollo de software; analizar y modelar artefactos de software; medir y controlar la calidad; y para asegurar un disciplinado, acercamiento controlado a la evolución de software y su reutilización. El desarrollo del software, el cuál puede invoucrar a un solo desarrollor o a un equipo de desarrolladores, requiere la elección herramientas, métodos y enfoques que son más aplicables para un determinado ambiente de desarrollo. La caja de herramientas de la Ingeniería de Software ha evolucionado a través de los años; por ejemplo, el uso de contratos (tales como una cláusula ``se requiere", una cláusula "se asegura", invariantes de clase, etc.) ahora se considera una buena práctica.
Los elementos de la ingeniería de software son aplicables al desarrollo de software en cualquier dominio de la aplicación de computación donde el profesionalismo, la calidad, los plazos, y el costo son importantes para producir un sistema de software.