La ingeniería de software es un enfoque basado en la ingeniería para el desarrollo de software . [1] [2] [3] Un ingeniero de software es una persona que aplica el proceso de diseño de ingeniería para diseñar, desarrollar, probar, mantener y evaluar software de computadora . El término programador se utiliza a veces como sinónimo, pero puede enfatizar la implementación de software sobre el diseño y también puede carecer de connotaciones de educación o habilidades en ingeniería. [4]
Las técnicas de ingeniería se utilizan para informar el proceso de desarrollo de software , [1] [5] que implica la definición, implementación, evaluación, medición, gestión, cambio y mejora del proceso del ciclo de vida del software en sí. Utiliza en gran medida la gestión de configuración de software , [1] [5] , que consiste en controlar sistemáticamente los cambios en la configuración y mantener la integridad y trazabilidad de la configuración y el código durante todo el ciclo de vida del sistema. Los procesos modernos utilizan versiones de software .
A partir de la década de 1960, la ingeniería de software fue vista como un tipo de ingeniería en sí misma . Además, el desarrollo de la ingeniería de software se consideraba una lucha. Era difícil mantenerse al día con el hardware, lo que causaba muchos problemas a los ingenieros de software. Los problemas incluían software que excedía el presupuesto, excedía los plazos, requería depuración y mantenimiento exhaustivos y no satisfacía las necesidades de los consumidores o ni siquiera se completaba. En 1968 la OTAN celebró la primera conferencia de Ingeniería de Software donde se abordaron cuestiones relacionadas con el software: se establecieron directrices y mejores prácticas para el desarrollo de software. [6]
Los orígenes del término ingeniería de software se han atribuido a diversas fuentes. El término apareció en una lista de servicios ofrecidos por empresas en la edición de junio de 1965 de "Computers and Automation" [7] y se utilizó más formalmente en la edición de agosto de 1966 de Communications of the ACM (Volumen 9, número 8) "carta a los miembros de la ACM" por el Presidente de la ACM, Anthony A. Oettinger. [8] [9] También se asocia con el título de una conferencia de la OTAN en 1968 por el profesor Friedrich L. Bauer . [10] Margaret Hamilton describió la disciplina de "ingeniería de software" durante las misiones Apolo para dar legitimidad a lo que estaban haciendo. [11] En aquel momento se percibió que había una " crisis de software ". [12] [13] [14] La 40.ª Conferencia Internacional sobre Ingeniería de Software (ICSE 2018) celebra los 50 años de la "Ingeniería de software" con las conferencias magistrales de las sesiones plenarias de Frederick Brooks [15] y Margaret Hamilton . [dieciséis]
En 1984, el Instituto de Ingeniería de Software (SEI) se estableció como un centro de investigación y desarrollo financiado con fondos federales y con sede en el campus de la Universidad Carnegie Mellon en Pittsburgh, Pensilvania, Estados Unidos. Watts Humphrey fundó el Programa de Procesos de Software SEI, cuyo objetivo es comprender y gestionar el proceso de ingeniería de software. Los niveles de madurez de proceso introducidos se convertirían en la integración del modelo de madurez de capacidad para el desarrollo (CMMI-DEV), que ha definido cómo el gobierno de EE. UU. evalúa las capacidades de un equipo de desarrollo de software.
El subcomité ISO/IEC JTC 1/SC 7 recopiló las mejores prácticas modernas y generalmente aceptadas para la ingeniería de software y las publicó como el Cuerpo de conocimientos de ingeniería de software (SWEBOK). [17] La ingeniería de software se considera una de las principales disciplinas informáticas . [18]
Las definiciones notables de ingeniería de software incluyen:
El término también se ha utilizado de manera menos formal:
Margaret Hamilton promovió el término "ingeniería de software" durante su trabajo en el programa Apollo . El término "ingeniería" se utilizó para reconocer que el trabajo debería tomarse tan en serio como otras contribuciones al avance de la tecnología. Hamilton detalla su uso del término:
Cuando se me ocurrió el término por primera vez, nadie había oído hablar de él antes, al menos en nuestro mundo. Fue una broma constante durante mucho tiempo. Les gustaba bromear acerca de mis ideas radicales. Fue un día memorable cuando uno de los gurús del hardware más respetados explicó a todos en una reunión que estaba de acuerdo conmigo en que el proceso de creación de software también debería considerarse una disciplina de ingeniería, al igual que el hardware. No por su aceptación del nuevo "término" per se, sino porque nos habíamos ganado su aceptación y la de los demás en la sala como parte de un campo de ingeniería por derecho propio. [28]
Los comentaristas individuales han discrepado marcadamente sobre cómo definir la ingeniería de software o su legitimidad como disciplina de ingeniería. David Parnas ha dicho que la ingeniería de software es, de hecho, una forma de ingeniería. [29] [30] Steve McConnell ha dicho que no lo es, pero que debería serlo. [31] Donald Knuth ha dicho que la programación es un arte y una ciencia. [32] Edsger W. Dijkstra afirmó que los términos ingeniería de software e ingeniero de software se han utilizado incorrectamente [¿ síntesis inadecuada? ] y debe considerarse dañino, particularmente en los Estados Unidos. [33]
La ingeniería de requisitos trata de la obtención, análisis, especificación y validación de requisitos para software . Los requisitos de software pueden ser de tres tipos diferentes. Hay requisitos funcionales , requisitos no funcionales y requisitos de dominio. Se debe realizar la operación del software y se debe esperar que el usuario obtenga el resultado adecuado. Los requisitos no funcionales abordan cuestiones como la portabilidad, la seguridad, la mantenibilidad, la confiabilidad, la escalabilidad, el rendimiento, la reutilización y la flexibilidad. Se clasifican en los siguientes tipos: restricciones de interfaz, restricciones de rendimiento (como tiempo de respuesta, seguridad, espacio de almacenamiento, etc.), restricciones operativas, restricciones del ciclo de vida (mantenibilidad, portabilidad, etc.) y restricciones económicas. Se necesita conocimiento de cómo funciona el sistema o el software cuando se trata de especificar requisitos no funcionales. Los requisitos de dominio tienen que ver con las características de una determinada categoría o dominio de proyectos. [34]
El diseño de software trata sobre el proceso de definir la arquitectura, los componentes, las interfaces y otras características de un sistema o componente. Esto también se llama arquitectura de software . El diseño de software se divide en tres niveles diferentes de diseño . Los tres niveles son diseño de interfaz , diseño arquitectónico y diseño detallado . El diseño de interfaz es la interacción entre un sistema y su entorno. Esto sucede en un alto nivel de abstracción junto con el funcionamiento interno del sistema. El diseño arquitectónico tiene que ver con los componentes principales de un sistema y sus responsabilidades, propiedades, interfaces y las relaciones e interacciones que ocurren entre ellos. El diseño detallado son los elementos internos de todos los componentes principales del sistema, sus propiedades, relaciones, procesamiento y, generalmente, sus algoritmos y estructuras de datos . [35]
La construcción de software, la actividad principal del desarrollo de software, [1] [5] es la combinación de programación , pruebas unitarias , pruebas de integración y depuración para implementar el diseño. Las pruebas durante esta fase generalmente las realiza el programador mientras el software está en construcción, para verificar lo que se acaba de escribir y decidir cuándo el código está listo para enviarse al siguiente paso. [ cita necesaria ]
Las pruebas de software [1] [5] son una investigación técnica empírica realizada para proporcionar a las partes interesadas información sobre la calidad del producto o servicio bajo prueba, con diferentes enfoques, como pruebas unitarias y pruebas de integración . Es un aspecto de la calidad del software . Como fase separada en el desarrollo de software, generalmente la realiza el personal de control de calidad o un desarrollador distinto al que escribió el código.
El análisis de software es el proceso de analizar el comportamiento de los programas informáticos con respecto a una propiedad como el rendimiento , la robustez y la seguridad . Se puede realizar sin ejecutar el programa ( análisis estático del programa ), durante el tiempo de ejecución ( análisis dinámico del programa ) o en una combinación de ambos.
El mantenimiento de software [1] [5] se refiere a las actividades necesarias para proporcionar soporte rentable después del envío del producto de software. El mantenimiento del software consiste en modificar y actualizar las aplicaciones de software después de su distribución para corregir fallas y mejorar su rendimiento. El software tiene mucho que ver con el mundo real y cuando el mundo real cambia, se requiere mantenimiento del software. El mantenimiento del software incluye: corrección de errores , optimización, eliminación de funciones no utilizadas y descartadas, y mejora de funciones que ya existen. Por lo general, el mantenimiento representa entre el 40% y el 80% del costo del proyecto, por lo que centrarse en el mantenimiento mantiene los costos bajos. [36]
El conocimiento de la programación informática es un requisito previo para convertirse en ingeniero de software. En 2004, la IEEE Computer Society produjo el SWEBOK , que se publicó como Informe técnico ISO/IEC 1979:2005, y describe el conjunto de conocimientos que recomiendan que domine un ingeniero de software graduado con cuatro años de experiencia. [37] Muchos ingenieros de software ingresan a la profesión obteniendo un título universitario o capacitación en una escuela vocacional. El Grupo de Trabajo Conjunto sobre Currículos de Computación de la IEEE Computer Society y la Association for Computing Machinery definió un plan de estudios internacional estándar para títulos universitarios en ingeniería de software , y lo actualizó en 2014. [38] Varias universidades tienen programas de grado en Ingeniería de software; En 2010 [update], había 244 programas universitarios de Licenciatura en Ingeniería de Software , 70 programas en línea, 230 programas de nivel de maestría, 41 programas de nivel de doctorado y 69 programas de nivel de certificado en los Estados Unidos.
Además de la educación universitaria, muchas empresas patrocinan pasantías para estudiantes que desean seguir carreras en tecnología de la información. Estas pasantías pueden presentar al estudiante tareas interesantes del mundo real que los ingenieros de software típicos encuentran todos los días. Se puede obtener una experiencia similar a través del servicio militar en ingeniería de software.
La mitad de todos los profesionales actuales tienen títulos en ciencias de la computación , sistemas de información o tecnología de la información . [ cita necesaria ] Un número pequeño, pero creciente, de profesionales tienen títulos en ingeniería de software. En 1987, el Departamento de Computación del Imperial College de Londres introdujo la primera licenciatura en ingeniería de software de tres años en el Reino Unido y el mundo; al año siguiente, la Universidad de Sheffield estableció un programa similar. [39] En 1996, el Instituto de Tecnología de Rochester estableció el primer programa de licenciatura en ingeniería de software en los Estados Unidos, sin embargo, no obtuvo la acreditación ABET hasta 2003, al mismo tiempo que la Universidad Rice , la Universidad Clarkson , la Escuela de Ingeniería de Milwaukee y La Universidad Estatal de Mississippi obtuvo la suya. [40] En 1997, la Facultad de Tecnología del PSG en Coimbatore, India, fue la primera en iniciar una Maestría en Ciencias integrada de cinco años en Ingeniería de Software. [ cita necesaria ]
Desde entonces, se han establecido títulos universitarios en ingeniería de software en muchas universidades. Un comité directivo definió un plan de estudios internacional estándar para títulos universitarios en ingeniería de software, SE2004 , entre 2001 y 2004 con financiación de la Association for Computing Machinery y la IEEE Computer Society . En 2004 [update], en los EE. UU., alrededor de 50 universidades ofrecen títulos de ingeniería de software, que enseñan principios y prácticas tanto de informática como de ingeniería. La primera maestría en ingeniería de software se estableció en la Universidad de Seattle en 1979. Desde entonces, muchas más universidades han ofrecido títulos de posgrado en ingeniería de software. Asimismo, en Canadá, la Junta Canadiense de Acreditación de Ingeniería (CEAB) del Consejo Canadiense de Ingenieros Profesionales ha reconocido varios programas de ingeniería de software.
En 1998, la Escuela Naval de Postgrado (NPS) de EE. UU. estableció el primer programa de doctorado en Ingeniería de Software del mundo. [ cita necesaria ] Además, han aparecido muchos títulos avanzados en línea en Ingeniería de Software, como la Maestría en Ciencias en Ingeniería de Software (MSE) que se ofrece a través del Departamento de Ingeniería y Ciencias de la Computación de la Universidad Estatal de California, Fullerton . Steve McConnell opina que debido a que la mayoría de las universidades enseñan ciencias de la computación en lugar de ingeniería de software, hay una escasez de verdaderos ingenieros de software. [41] La Universidad ETS (École de technologie supérieure) y la UQAM (Université du Québec à Montréal) recibieron el mandato del IEEE de desarrollar el Cuerpo de conocimientos de ingeniería de software ( SWEBOK ), que se ha convertido en una norma ISO que describe el cuerpo de conocimientos cubierto por un ingeniero de software. [42]
Los requisitos legales para la concesión de licencias o certificación de ingenieros de software profesionales varían en todo el mundo. En el Reino Unido, no existe ningún requisito legal ni de licencia para asumir o utilizar el título de trabajo de Ingeniero de software. En algunas áreas de Canadá, como Alberta, Columbia Británica, Ontario, [43] y Quebec, los ingenieros de software pueden tener la designación de Ingeniero Profesional (P.Eng) y/o la designación de Profesional de Sistemas de Información (ISP). En Europa, los Ingenieros de Software pueden obtener el título profesional de Ingeniero Europeo (EUR ING). Los ingenieros de software también pueden obtener la calificación profesional como ingenieros colegiados a través de la British Computer Society .
En los Estados Unidos, el NCEES comenzó a ofrecer un examen de Ingeniero Profesional para Ingeniería de Software en 2013, lo que permite a los Ingenieros de Software obtener una licencia y ser reconocidos. [44] NCEES finalizó el examen después de abril de 2019 debido a la falta de participación. [45] Actualmente, la concesión de licencias obligatorias sigue siendo objeto de gran debate y se percibe como controvertida. [ cita necesaria ]
La IEEE Computer Society y la ACM , las dos principales organizaciones profesionales de ingeniería de software con sede en EE. UU., publican guías para la profesión de ingeniería de software. La Guía del IEEE sobre los conocimientos de ingeniería de software - Versión 2004 , o SWEBOK , define el campo y describe el conocimiento que el IEEE espera que tenga un ingeniero de software en ejercicio. El SWEBOK v3 más actual es una versión actualizada y se lanzó en 2014. [46] El IEEE también promulga un "Código de ética de ingeniería de software". [47]
Se estima que hay 26,9 millones de ingenieros de software profesionales en el mundo en 2022, frente a 21 millones en 2016. [48] [49]
Muchos ingenieros de software trabajan como empleados o contratistas. Los ingenieros de software trabajan con empresas, agencias gubernamentales (civiles o militares) y organizaciones sin fines de lucro. Algunos ingenieros de software trabajan por cuenta propia como autónomos . Algunas organizaciones cuentan con especialistas para realizar cada una de las tareas del proceso de desarrollo de software . Otras organizaciones requieren que los ingenieros de software realicen muchas o todas ellas. En proyectos grandes, las personas pueden especializarse en una sola función. En proyectos pequeños, las personas pueden desempeñar varios o todos los roles al mismo tiempo. Muchas empresas contratan pasantes , a menudo estudiantes universitarios o universitarios durante las vacaciones de verano, o pasantías . Las especializaciones incluyen analistas , arquitectos , desarrolladores , evaluadores , soporte técnico , analistas de middleware , gerentes de proyectos , gerentes de productos de software , educadores e investigadores .
La mayoría de los ingenieros de software y programadores trabajan 40 horas a la semana, pero alrededor del 15 por ciento de los ingenieros de software y el 11 por ciento de los programadores trabajaron más de 50 horas a la semana en 2008. [50] Las posibles lesiones en estas ocupaciones son posibles porque, al igual que otros trabajadores que pasan mucho tiempo Durante los períodos sentados frente a una terminal de computadora escribiendo en un teclado, los ingenieros y programadores son susceptibles a fatiga visual, molestias en la espalda y problemas en manos y muñecas, como el síndrome del túnel carpiano . [51]
La Oficina de Estadísticas Laborales de EE. UU. (BLS) contabilizó 1.365.500 desarrolladores de software que ocupaban puestos de trabajo en EE. UU . en 2018. [52] Debido a su relativa novedad como campo de estudio, la educación formal en ingeniería de software a menudo se imparte como parte de un plan de estudios de informática. y muchos ingenieros de software tienen títulos en informática. [53] El BLS estima que entre 2014 y 2024 la ingeniería de software aumentaría un 17%. [54] Esto es inferior a la estimación BLS de 2012 a 2022 del 22% para ingeniería de software. [55] [54] Y está aún más por debajo de su estimación BLS del 30% de 2010 a 2020. [56] Debido a esta tendencia, el crecimiento del empleo puede no ser tan rápido como durante la última década, ya que los trabajos que habrían ido a parar a ingenieros de software en los Estados Unidos se subcontratarían a ingenieros de software en países como India y otros países. países extranjeros. [57] [50] Además, la perspectiva laboral BLS para programadores informáticos, la perspectiva ocupacional de la Oficina de Estadísticas Laborales (BLS) de EE. UU. predice una disminución del -7 por ciento de 2016 a 2026, una disminución adicional del -9 por ciento de 2019 a 2029, una disminución del -10 por ciento de 2021 a 2031. [57] y luego una disminución del -11 por ciento de 2022 a 2032. [57] Dado que la programación informática se puede realizar desde cualquier parte del mundo, las empresas a veces contratan programadores en países donde los salarios son más bajos. [57] [58] [59] Además, el número de mujeres en muchos campos del software también ha ido disminuyendo a lo largo de los años en comparación con otros campos de la ingeniería. [60] Luego está la preocupación adicional de que los recientes avances en inteligencia artificial puedan afectar la demanda de futuras generaciones de ingenieros de software. [61] [62] [63] [64] [65] [66] [67] Sin embargo, esta tendencia puede cambiar o desacelerarse en el futuro, ya que muchos ingenieros de software actuales en el mercado estadounidense huyen de la profesión o envejecen fuera del mercado . en las próximas décadas. [57]
El Instituto de Ingeniería de Software ofrece certificaciones en temas específicos como seguridad , mejora de procesos y arquitectura de software . [68] IBM , Microsoft y otras empresas también patrocinan sus propios exámenes de certificación. Muchos programas de certificación de TI están orientados a tecnologías específicas y administrados por los proveedores de estas tecnologías. [69] Estos programas de certificación están diseñados para las instituciones que emplearían personas que utilizan estas tecnologías.
Varias sociedades profesionales ofrecen una certificación más amplia de habilidades generales de ingeniería de software. En 2006 [update], el IEEE había certificado a más de 575 profesionales del software como Profesional Certificado en Desarrollo de Software (CSDP). [70] En 2008 agregaron una certificación de nivel de entrada conocida como Asociado Certificado en Desarrollo de Software (CSDA). [71] La ACM tenía un programa de certificación profesional a principios de la década de 1980, [ cita necesaria ] que se suspendió debido a la falta de interés. La ACM examinó la posibilidad de una certificación profesional de los ingenieros de software a finales de los años 1990, pero finalmente decidió que dicha certificación era inapropiada para la práctica industrial profesional de la ingeniería de software. [72]
En el Reino Unido, la British Computer Society ha desarrollado una certificación profesional legalmente reconocida llamada Chartered IT Professional (CITP) , disponible para miembros totalmente calificados ( MBCS ). Los ingenieros de software pueden ser elegibles para ser miembros de la Sociedad Británica de Computación o de la Institución de Ingeniería y Tecnología y, por lo tanto, calificar para ser considerados para el estado de Ingeniero colegiado a través de cualquiera de esas instituciones. En Canadá, la Sociedad Canadiense de Procesamiento de Información ha desarrollado una certificación profesional legalmente reconocida llamada Information Systems Professional (ISP) . [73] En Ontario, Canadá, los ingenieros de software que se gradúen de un programa acreditado por la Junta Canadiense de Acreditación de Ingeniería (CEAB) , completen con éxito el examen de práctica profesional (PPE) de PEO ( ingenieros profesionales de Ontario ) y tengan al menos 48 meses de experiencia aceptable en ingeniería son elegibles. obtener una licencia a través de Professional Engineers Ontario y puede convertirse en Professional Engineers P.Eng. [74] Sin embargo, la PEO no reconoce ninguna educación en línea o a distancia; y no considera que los programas de Ciencias de la Computación sean equivalentes a los programas de ingeniería de software a pesar de la tremenda superposición entre los dos. Esto ha provocado controversia y una guerra de certificaciones. También ha mantenido excepcionalmente bajo el número de titulares de P.Eng para la profesión. La gran mayoría de los profesionales que trabajan en este campo tienen un título en informática, no en SE. Dado el difícil camino de certificación para los titulares de títulos que no son de SE, la mayoría nunca se molesta en obtener la licencia.
El impacto inicial de la subcontratación y el costo relativamente menor de los recursos humanos internacionales en los países en desarrollo del tercer mundo llevaron a una migración masiva de actividades de desarrollo de software de corporaciones en América del Norte y Europa a la India y más tarde a China, Rusia y otros países en desarrollo. Este enfoque tenía algunos fallos, principalmente la diferencia de distancia/zona horaria que impedía la interacción humana entre clientes y desarrolladores y la transferencia masiva de puestos de trabajo. Esto tuvo un impacto negativo en muchos aspectos de la profesión de ingeniería de software. Por ejemplo, algunos estudiantes en el mundo desarrollado evitan la educación relacionada con la ingeniería de software por temor a la subcontratación en el extranjero (importación de productos o servicios de software de otros países) y a ser desplazados por trabajadores extranjeros con visas . [75] Aunque las estadísticas actualmente no muestran una amenaza para la ingeniería de software en sí; una carrera relacionada, la programación informática parece haberse visto afectada. [76] [77] Sin embargo, la capacidad de aprovechar inteligentemente los recursos marinos y cercanos a la costa a través del flujo de trabajo de seguimiento del sol ha mejorado la capacidad operativa general de muchas organizaciones. [78] Cuando los norteamericanos salen del trabajo, los asiáticos recién llegan a trabajar. Cuando los asiáticos dejan el trabajo, los europeos llegan a trabajar. Esto proporciona una capacidad continua para tener supervisión humana de los procesos críticos para el negocio las 24 horas del día, sin pagar compensación por horas extras ni interrumpir un recurso humano clave: los patrones de sueño.
Si bien la subcontratación global tiene varias ventajas, el desarrollo global –y generalmente distribuido– puede tropezar con serias dificultades resultantes de la distancia entre los desarrolladores. Esto se debe a que los elementos clave de este tipo de distancia se han identificado como geográfico, temporal, cultural y de comunicación (que incluye el uso de diferentes idiomas y dialectos del inglés en diferentes lugares). [79] Se han llevado a cabo investigaciones en el área del desarrollo de software global durante los últimos 15 años y se ha publicado un extenso conjunto de trabajos relevantes que resaltan los beneficios y problemas asociados con esta compleja actividad. Al igual que con otros aspectos de la ingeniería de software, se están realizando investigaciones en esta y áreas relacionadas.
Hay varios premios en el campo de la ingeniería de software: [80]
La ingeniería de software ve a sus profesionales como individuos que siguen enfoques de ingeniería bien definidos para la resolución de problemas. Estos enfoques se especifican en varios libros de ingeniería de software y artículos de investigación, siempre con connotaciones de previsibilidad, precisión, riesgo mitigado y profesionalismo. Esta perspectiva ha dado lugar a llamados [ ¿de quién? ] para la concesión de licencias, la certificación y los cuerpos codificados de conocimientos como mecanismos para difundir el conocimiento de la ingeniería y madurar el campo.
La ingeniería de software extiende la ingeniería y se basa en el modelo de ingeniería, es decir, el proceso de ingeniería, la gestión de proyectos de ingeniería, los requisitos de ingeniería, el diseño de ingeniería, la construcción de ingeniería y la validación de ingeniería. El concepto es tan nuevo que rara vez se comprende y se malinterpreta ampliamente, incluso en libros de texto y artículos de ingeniería de software y entre las comunidades de programadores y artesanos.
Uno de los problemas centrales de la ingeniería de software es que sus enfoques no son lo suficientemente empíricos porque la validación de los enfoques en el mundo real generalmente está ausente o es muy limitada y, por lo tanto, la ingeniería de software a menudo se malinterpreta como factible sólo en un "entorno teórico".
Edsger Dijkstra , el fundador de muchos de los conceptos utilizados hoy en día en el desarrollo de software, rechazó la idea de "ingeniería de software" hasta su muerte en 2002, argumentando que esos términos eran pobres analogías con lo que llamó la "novedad radical" de la informática. :
Varios de estos fenómenos se han agrupado bajo el nombre de "Ingeniería de software". Así como la economía se conoce como "La ciencia miserable", la ingeniería de software debería ser conocida como "La disciplina condenada", condenada al fracaso porque ni siquiera puede acercarse a su objetivo, ya que su objetivo es contradictorio en sí mismo. La ingeniería de software, por supuesto, se presenta como otra causa digna, pero eso es una tontería: si lees atentamente su literatura y analizas lo que realmente hacen sus devotos, descubrirás que la ingeniería de software ha aceptado como su estatuto "Cómo programar si no puedes". ". [81]
La idea de la primera Conferencia de Ingeniería de Software de la OTAN, y en particular la de adoptar como título (deliberadamente provocativo) el entonces prácticamente desconocido término "ingeniería de software", creo que surgió originalmente del profesor
Fritz Bauer
.
{{cite web}}
: CS1 maint: numeric names: authors list (link){{cite web}}
: CS1 maint: numeric names: authors list (link)La ingeniería de software es una disciplina de ingeniería que se ocupa de todos los aspectos de la producción de software, desde las primeras etapas de la especificación del sistema hasta el mantenimiento del sistema después de su puesta en uso. En esta definición, hay dos frases clave:
1. Disciplina de ingeniería Los ingenieros hacen que las cosas funcionen. Aplican teorías, métodos y herramientas cuando son apropiados [. . .] Los ingenieros también reconocen que deben trabajar con limitaciones organizativas y financieras. [. . .]
2. Todos los aspectos de la producción de software La ingeniería de software no se ocupa sólo de los procesos técnicos del desarrollo de software sino también de actividades como la gestión de proyectos de software y el desarrollo de herramientas, métodos y teorías para respaldar la producción de software.
Proponemos que la "ingeniería de software" abarca no sólo el acto de escribir código, sino todas las herramientas y procesos que utiliza una organización para construir y mantener ese código a lo largo del tiempo. ¿Qué prácticas puede introducir una organización de software para mantener mejor su código valioso a largo plazo? ¿Cómo pueden los ingenieros hacer que una base de código sea más sostenible y que la disciplina de ingeniería de software sea más rigurosa?
{{cite book}}
: CS1 maint: location missing publisher (link)Cuando FL Bauer, de la Universidad Tecnológica de Munich, acuñó el término en 1968, lo acogí con agrado.
[.
.
.] Interpreté la introducción del término "ingeniería de software" como un reflejo acertado del hecho de que el diseño de sistemas de software era una actividad por excelencia para el ingeniero matemático.
[.
.
.].
Tan pronto como el término llegó a Estados Unidos, fue relevado de todo su contenido técnico.
Tenía que ser así porque en su significado original era totalmente inaceptable [.
.
.] Mientras tanto, ingeniería de software se ha convertido en un término casi vacío, como lo demostró claramente Data General, que de la noche a la mañana promovió a todos sus programadores al exaltado rango de "ingenieros de software".
Se pretende que el volumen total de literatura citada sea adecuado para el dominio mediante la finalización de una educación universitaria más cuatro años de experiencia.
{{cite web}}
: CS1 maint: multiple names: authors list (link) En su reunión de mayo de 2000, el Consejo concluyó además que el marco de un ingeniero profesional con licencia, desarrollado originalmente para ingenieros civiles, no coincide con la práctica industrial profesional de la ingeniería de software.
Esas prácticas de concesión de licencias darían falsas garantías de competencia incluso si el conjunto de conocimientos fuera maduro;
e impediría que muchos de los ingenieros de software más calificados obtuvieran una licencia.
{{cite book}}
: CS1 maint: others (link)