La ingeniería de software es la aplicación sistemática de enfoques de ingeniería al desarrollo de software . [1] [2] [3]
Historia
Cuando aparecieron las primeras computadoras digitales a principios de la década de 1940, [4] las instrucciones para hacerlas funcionar estaban conectadas a la máquina. Los profesionales se dieron cuenta rápidamente de que este diseño no era flexible y se les ocurrió la "arquitectura de programa almacenado" o arquitectura de von Neumann . Así, la división entre "hardware" y "software" comenzó con el uso de la abstracción para lidiar con la complejidad de la computación.
Los lenguajes de programación comenzaron a aparecer a principios de la década de 1950 [5] y este también fue otro paso importante en la abstracción. Los principales lenguajes como Fortran , ALGOL , PL / I y COBOL se lanzaron a finales de 1950 y 1960 para tratar problemas científicos, algorítmicos y comerciales, respectivamente. David Parnas introdujo el concepto clave de modularidad y ocultación de información en 1972 [6] para ayudar a los programadores a lidiar con la creciente complejidad de los sistemas de software .
En la década de 1960, la ingeniería de software se consideraba su propio tipo de ingeniería . También durante ese tiempo, el desarrollo de la ingeniería de software fue una lucha. Fue difícil mantenerse al día con el hardware. Esto causó muchos problemas a los ingenieros de software. Los problemas incluían software que sobrepasaba el presupuesto y las fechas límite, una amplia eliminación de errores , requería mucho mantenimiento, satisfacía sin éxito las necesidades de los consumidores o nunca se completaba. 1968 fue el año en que la OTAN celebró la primera conferencia de Ingeniería de Software en la que se abordaron cuestiones de software, se establecieron directrices y las mejores prácticas para el desarrollo de software. [7]
Los orígenes del término "ingeniería de software" se han atribuido a varias fuentes. El término "ingeniería de software" apareció en una lista de servicios ofrecidos por las empresas en la edición de junio de 1965 de COMPUTERS and AUTOMATION 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 al Membresía de ACM ”por el presidente de ACM Anthony A. Oettinger, [8] [9] también está asociado con el título de una conferencia de la OTAN en 1968 por el profesor Friedrich L. Bauer , la primera conferencia sobre ingeniería de software. [10] Independientemente, Margaret Hamilton llamó a la disciplina "ingeniería de software" durante las misiones Apolo para dar legitimidad a lo que estaban haciendo. [11] En ese 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 50 años de "Ingeniería de Software" con las ponencias 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 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 Procesos introducidos se convertirían en la Integración del Modelo de Madurez de Capacidades para el Desarrollo (CMMI-DEV), que ha definido cómo el gobierno de los Estados Unidos evalúa las habilidades 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]
Definiciones
Las definiciones notables de ingeniería de software incluyen:
- "La aplicación sistemática de conocimientos, métodos y experiencia científicos y tecnológicos al diseño, implementación, prueba y documentación de software" —La Oficina de Estadísticas Laborales— Ingeniería de software y sistemas IEEE - Vocabulario [19]
- "La aplicación de un enfoque sistemático, disciplinado y cuantificable para el desarrollo, operación y mantenimiento de software " - Glosario estándar de terminología de ingeniería de software de IEEE [20]
- "una disciplina de ingeniería que se ocupa de todos los aspectos de la producción de software" - Ian Sommerville [21]
- "el establecimiento y uso de principios de ingeniería sólidos para obtener de manera económica un software que sea confiable y funcione de manera eficiente en máquinas reales" - Fritz Bauer [22]
- "una rama de la informática que se ocupa del diseño, implementación y mantenimiento de programas informáticos complejos " - Merriam-Webster [23]
- "La 'ingeniería de software' abarca no solo 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. . '"- Ingeniería de software en Google [24]
El término también se ha utilizado de forma menos formal:
- como el término informal contemporáneo para la amplia gama de actividades que antes se llamaban programación de computadoras y análisis de sistemas ; [25]
- como término amplio para todos los aspectos de la práctica de la programación de computadoras, a diferencia de la teoría de la programación de computadoras, que se estudia formalmente como una subdisciplina de la informática ; [26]
- como el término que encarna la defensa de un enfoque específico de la programación de computadoras, uno que insta a que se trate como una disciplina de ingeniería en lugar de un arte o un oficio, y aboga por la codificación de prácticas recomendadas. [27]
Para concluir, la ingeniería de software es el proceso de examinar y determinar las necesidades de los usuarios, desarrollarlo y diseñarlo, construirlo, formarlo y probar el software del usuario final para ver si satisface sus necesidades a través de lenguajes de programación de software. La ingeniería de software también se utiliza para sistemas más grandes y complejos, que son utilizados principalmente por organizaciones y empresas. Existen diferentes tipos de ingeniería de software. Existe la ingeniería de software de front-end, que involucra software de ingeniería que cumple con los fines visuales de la aplicación o sistema. Luego está la ingeniería de software de back-end, donde hay ingenieros que crean partes de las aplicaciones y sistemas que utilizan los clientes y administradores. [28]
Campos
Diseño de software
El diseño de software se trata del proceso de definir la arquitectura, los componentes, las interfaces y otras características de un sistema o componente. A esto también se le 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 sus 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, por lo general, sus algoritmos y estructuras de datos . [29]
Desarrollo de software
El desarrollo de software , la actividad principal de la construcción de software , [1] [30] es la combinación de programación , verificación, prueba de software y depuración . Un proceso de desarrollo de software [1] [30] es 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 la configuración del software [1] [30], que consiste en controlar sistemáticamente los cambios en la configuración y mantener la integridad y la trazabilidad de la configuración y el código durante todo el ciclo de vida del sistema. Los procesos modernos utilizan versiones de software .
Mantenimiento del software
El mantenimiento de software [1] [30] se refiere a las actividades necesarias para proporcionar un soporte rentable después del envío del producto de software. El mantenimiento de software consiste en modificar y actualizar aplicaciones de software después de la 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 descartadas y no utilizadas, 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 tanto, centrarse en el mantenimiento mantiene bajos los costos. [31]
Requisitos de Software
La ingeniería de requisitos se 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. Los requisitos funcionales son requisitos que el usuario final cumple con las demandas que ofrece el software. Se debe realizar la operación del software y se debe esperar que el usuario utilice la salida adecuada. Los requisitos no funcionales tratan cuestiones como la portabilidad, la seguridad, el mantenimiento, la confiabilidad, la escalabilidad, el rendimiento, la reutilización y la flexibilidad. Se clasifican en los siguientes tipos: restricciones de interferencia, 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. Es necesario conocer cómo funciona el sistema o el software cuando se trata de especificar requisitos no funcionales. Los requisitos de dominio tienen que ver con la característica de una determinada categoría o dominio de proyectos. [32]
Pruebas de software
La prueba de software [1] [30] es 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 .
Educación
El conocimiento de la programación informática es un requisito previo para convertirse en un ingeniero de software. En 2004, la IEEE Computer Society elaboró el SWEBOK , que se ha publicado como Informe técnico ISO / IEC 1979: 2005, que describe el conjunto de conocimientos que recomiendan que lo domine un ingeniero de software graduado con cuatro años de experiencia. [33] Muchos ingenieros de software ingresan a la profesión obteniendo un título universitario o una 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 de licenciatura en ingeniería de software , y se actualizó en 2014. [34] Varias universidades tienen programas de licenciatura en ingeniería de software; A partir de 2010[actualizar], había 244 programas de Licenciatura en Ingeniería de Software del Campus , 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 deseen 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 mediante el servicio militar en ingeniería de software.
Profesión
Los requisitos legales para la licencia o certificación de ingenieros de software profesionales varían en todo el mundo. En el Reino Unido, no existe ningún requisito legal o de licencia para asumir o utilizar el puesto de Ingeniero de software. En algunas áreas de Canadá, como Alberta, Columbia Británica, Ontario, [35] 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).
Estados Unidos, desde 2013, ha ofrecido un examen de ingeniero profesional de NCEES para ingeniería de software, lo que permite que los ingenieros de software obtengan una licencia y sean reconocidos. [36] NCEES finalizará el examen después de abril de 2019 debido a la falta de participación. [37] Actualmente, la concesión de licencias obligatorias se debate ampliamente y se percibe como controvertida. En algunas partes de los EE. UU., Como Texas, el uso del término Ingeniero está regulado por la ley y reservado solo para uso de personas que tengan una licencia de Ingeniero Profesional .
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 para el Cuerpo de Conocimientos de Ingeniería de Software - Versión 2004 , o SWEBOK , define el campo y describe el conocimiento que 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. [38] El IEEE también promulga un "Código de ética de ingeniería de software". [39]
Empleo
La Oficina de Estadísticas Laborales de EE. UU. Contó 1.365.500 desarrolladores de software con trabajos en EE. UU. En 2018. [40] Se prevé que el empleo de ocupaciones de informática y tecnología de la información crezca un 13 por ciento de 2016 a 2026, más rápido que el promedio de todas las ocupaciones. Se proyecta que estas ocupaciones agregarán alrededor de 557,100 nuevos puestos de trabajo. La demanda de estos trabajadores se derivará de un mayor énfasis en la computación en la nube, la recopilación y almacenamiento de big data y la seguridad de la información. [41] Sin embargo, el BLS también dice que algunos empleos en estas ocupaciones se están desacelerando, especialmente para las mujeres, [42] y se proyecta que los programadores de computadoras disminuirán un 7 por ciento de 2016 a 2026 y una disminución del 9 por ciento de 2019 a 2029 [43] Dado que la programación de computadoras se puede hacer desde cualquier parte del mundo, las empresas a veces contratan programadores en países donde los salarios son más bajos. [43] Debido a su relativa novedad como campo de estudio, la educación formal en ingeniería de software a menudo se enseña como parte de un plan de estudios de ciencias de la computación, y muchos ingenieros de software tienen títulos en ciencias de la computación. [44]
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 en el proceso de desarrollo de software . Otras organizaciones requieren que los ingenieros de software realicen muchas o todas. En proyectos grandes, las personas pueden especializarse en un solo rol. En proyectos pequeños, las personas pueden ocupar varios o todos los roles al mismo tiempo. Las especializaciones incluyen: en la industria ( analistas , arquitectos , desarrolladores , probadores , soporte técnico , analistas de middleware , gerentes ) y en el mundo académico ( educadores , investigadores ).
La mayoría de los ingenieros y programadores de software 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. [45] Las lesiones potenciales en estas ocupaciones son posibles porque, al igual que otros trabajadores que pasan mucho tiempo períodos sentados frente a una terminal de computadora escribiendo en un teclado, los ingenieros y programadores son susceptibles a la fatiga visual, molestias en la espalda y problemas en las manos y muñecas, como el síndrome del túnel carpiano . [46]
Certificación
El Instituto de Ingeniería de Software ofrece certificaciones sobre temas específicos como seguridad , mejora de procesos y arquitectura de software . [47] 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 hacia tecnologías específicas y son administrados por los proveedores de estas tecnologías. [48] Estos programas de certificación se adaptan a las instituciones que emplearían a personas que utilizan estas tecnologías.
La certificación más amplia de habilidades generales de ingeniería de software está disponible a través de varias sociedades profesionales. A partir de 2006[actualizar], el IEEE había certificado a más de 575 profesionales de software como Profesional Certificado en Desarrollo de Software (CSDP). [49] En 2008, agregaron una certificación de nivel de entrada conocida como Certified Software Development Associate (CSDA). [50] La ACM tenía un programa de certificación profesional a principios de la década de 1980, [ cita requerida ] que se suspendió debido a la falta de interés. El ACM examinó la posibilidad de certificación profesional de ingenieros de software a fines de la década de 1990, pero finalmente decidió que dicha certificación era inapropiada para la práctica industrial profesional de la ingeniería de software. [51]
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 Institución de Ingeniería y Tecnología y, por lo tanto, calificar para el estado de Ingeniero Colegiado. En Canadá, la Sociedad Canadiense de Procesamiento de la Información ha desarrollado una certificación profesional legalmente reconocida llamada Information Systems Professional (ISP) . [52] En Ontario, Canadá, los ingenieros de software que se gradúen de un programa acreditado por la Junta de Acreditación de Ingeniería Canadiense (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 para obtener la licencia a través de Professional Engineers Ontario y puede convertirse en Professional Engineers P.Eng. [53] Sin embargo, el 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 controversias y una guerra de certificación. También ha mantenido el número de titulares de P.Eng para la profesión excepcionalmente bajo. La gran mayoría de los profesionales que trabajan en el campo tienen un título en CS, no en SE. Dada la difícil ruta de certificación para los titulares de títulos que no son de SE, la mayoría nunca se molesta en obtener la licencia.
Impacto de la globalización
El impacto inicial de la subcontratación y el costo relativamente más bajo 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: China, Rusia y otros países en desarrollo. Este enfoque tenía algunas fallas, principalmente la diferencia de distancia / zona horaria que impedía la interacción humana entre clientes y desarrolladores y la transferencia masiva 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 debido al temor de la subcontratación (importación de productos o servicios de software de otros países) y de ser desplazados por trabajadores extranjeros con visas . [54] Aunque las estadísticas no muestran actualmente una amenaza para la ingeniería de software en sí; una carrera relacionada, la programación informática parece haberse visto afectada. [55] [56] No obstante, la capacidad de aprovechar de manera inteligente los recursos en alta mar y cerca de la costa a través del flujo de trabajo de seguimiento del sol ha mejorado la capacidad operativa general de muchas organizaciones. [57] Cuando los norteamericanos abandonan el 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 en procesos críticos para el negocio las 24 horas del día, sin pagar compensación por horas extras o 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 encontrarse con serias dificultades como resultado de la distancia entre los desarrolladores. Esto se debe a los elementos clave de este tipo de distancia que se han identificado como geográficos, temporales, culturales y comunicativos (que incluye el uso de diferentes idiomas y dialectos del inglés en diferentes localizaciones). [58] Se han realizado investigaciones en el área del desarrollo de software global durante los últimos 15 años y se ha publicado un extenso cuerpo de trabajo relevante que destaca los beneficios y problemas asociados con la actividad compleja. Al igual que con otros aspectos de la ingeniería de software, la investigación está en curso en esta y otras áreas relacionadas.
Controversia
Crítica
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 las connotaciones de predictibilidad, precisión, riesgo mitigado y profesionalismo. Esta perspectiva ha dado lugar a llamadas [¿ por quién? ] para la concesión de licencias, la certificación y los cuerpos codificados de conocimiento como mecanismos para difundir el conocimiento de la ingeniería y madurar el campo.
La ingeniería de software amplía 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 en gran medida, incluso en libros de texto de ingeniería de software, artículos y entre las comunidades de programadores y artesanos.
Uno de los problemas centrales en la ingeniería de software es que sus enfoques no son lo suficientemente empíricos porque la validación de 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 solo en un "entorno teórico".
Edsger Dijkstra , el fundador de muchos de los conceptos utilizados en el desarrollo de software en la actualidad, rechazó la idea de "ingeniería de software" hasta su muerte en 2002, argumentando que esos términos eran analogías pobres para lo que él llamó la "novedad radical" de la informática. :
Varios de estos fenómenos se han agrupado con el nombre de "Ingeniería de software". 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 a sí misma como otra causa digna, pero eso es un lavado de ojos: si lees cuidadosamente su literatura y analizas lo que sus devotos hacen realmente, descubrirás que la ingeniería de software ha aceptado como su estatuto "Cómo programar si no puedes . " [59]
Ver también
- Ciencias de la Computación
- Licenciatura en Ciencias en Tecnología de la Información
- Licenciatura en Ingeniería de Software
- Ingeniería de Información
- Lista de conferencias de ingeniería de software
- Lista de revistas de informática (incluidas las revistas de ingeniería de software)
- Artesanía del software
- Desarrollo de software
- Instituto de Ingeniería de Software
Referencias
Citas
- ^ a b c d e f Abran et al. 2004 , págs. 1–1
- ^ ACM (2007). "Grados y carreras en informática" . ACM . Consultado el 23 de noviembre de 2010 .
- ^ Laplante, Phillip (2007). Lo que todo ingeniero debe saber sobre la ingeniería de software . Boca Ratón: CRC. ISBN 978-0-8493-7228-5. Consultado el 21 de enero de 2011 .
- ^ Leondes, Cornelius T. (2002). Sistemas inteligentes: tecnología y aplicaciones . Prensa CRC. pag. I-6. ISBN 978-0-8493-1121-5.
1.4 Ordenadores y un primer vistazo a Al (década de 1940)
- ^ Campbell-Kelly, Martin (abril de 1982). "El desarrollo de la programación informática en Gran Bretaña (1945 a 1955)". IEEE Annals of the History of Computing . 4 (2): 121-139. doi : 10.1109 / MAHC.1982.10016 . S2CID 14861159 .
- ^ Parnas, David (diciembre de 1972). "Sobre los criterios que se utilizarán en la descomposición de sistemas en módulos" . Comunicaciones de la ACM . 15 (12): 1053-1058. doi : 10.1145 / 361598.361623 . S2CID 53856438 . Consultado el 26 de diciembre de 2008 .
- ^ "La historia de la codificación y la ingeniería de software" . www.hackreactor.com . Consultado el 6 de mayo de 2021 .
- ^ Oettinger, AG (1966). "Carta del presidente a los miembros de ACM" . Comun. ACM . Asociación para Maquinaria de Computación. 9 (8): 545–546. doi : 10.1145 / 365758.3291288 . ISSN 0001-0782 . S2CID 53432801 .
- ^ "El origen de la" ingeniería de software " " . Consultado el 17 de noviembre de 2017 .
- ^ Randall, Brian. "Los informes de ingeniería de software de la OTAN de 1968/69" . Consultado el 17 de noviembre de 2017 .
- ^ Revista de software . "Qué saber sobre el científico que inventó el término" Ingeniería de software " " . Archivado desde el original el 24 de noviembre de 2018 . Consultado el 12 de febrero de 2019 .
- ^ Sommerville , 2008 , p. 26
- ^ Peter, Naur; Randell, Brian (7 a 11 de octubre de 1968). Ingeniería de software: Informe de una conferencia patrocinada por el Comité Científico de la OTAN (PDF) . Garmisch, Alemania: División de Asuntos Científicos, OTAN . Consultado el 26 de diciembre de 2008 .
- ^ Randell, Brian (10 de agosto de 2001). "Los informes de ingeniería de software de la OTAN de 1968/69" . Página de inicio de la Universidad de Brian Randell . Escuela de Ciencias de la Computación, Universidad de Newcastle . Consultado el 11 de octubre de 2008 .
La idea de la primera Conferencia de Ingeniería de Software de la OTAN, y en particular la de adoptar el entonces prácticamente desconocido término "ingeniería de software" como su título (deliberadamente provocador), creo que provino originalmente del profesor Fritz Bauer .
- ^ 2018 International Conference on Software Engineering celebrando su 40 aniversario y 50 años de ingeniería de software. "ICSE 2018 - Sesiones plenarias - Fred Brooks" . Consultado el 9 de agosto de 2018 .
- ^ 2018 International Conference on Software Engineering celebrando su 40 aniversario y 50 años de ingeniería de software. "ICSE 2018 - Sesiones plenarias - Margaret Hamilton" . Consultado el 9 de agosto de 2018 .
- ^ "ISO / IEC TR 19759: 2005" . Consultado el 1 de abril de 2012 .
- ^ "La Fuerza de Tarea Conjunta para los Currículos de Computación 2005" (PDF) . 2014-10-21. Archivado (PDF) desde el original el 21 de octubre de 2014 . Consultado el 16 de abril de 2020 .
- ^ Ingeniería de sistemas y software - Vocabulario , ISO / IEC / IEEE std 24765: 2010 (E), 2010.
- ^ Glosario estándar IEEE de terminología de ingeniería de software , IEEE std 610.12-1990, 1990.
- ^ Sommerville, Ian (2007) [1982]. "1.1.2 ¿Qué es la ingeniería de software?" . Ingeniería de Software (8ª ed.). Harlow, Inglaterra: Pearson Education. pag. 7. ISBN 978-0-321-31379-9.
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 una vez que ha entrado 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 solo se ocupa de los procesos técnicos de 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 apoyar la producción de software. - ^ "Ingeniería de software". Procesamiento de información . 71 : 530–538.
- ^ "Definición de INGENIERÍA DE SOFTWARE" . www.merriam-webster.com . Consultado el 25 de noviembre de 2019 .
- ^ Winters, Titus; Manshrec, Tom; Wright, Hyrum (2020). "Prefacio, Programación en el tiempo". Ingeniería de software en Google . O'Reilly Media, Inc. págs. 6–7. ISBN 978-1-492-08279-8.
Proponemos que la “ingeniería de software” abarca no solo 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 que mejor mantengan 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 propia disciplina de la ingeniería de software sea más rigurosa? No tenemos respuestas fundamentales a estas preguntas, pero esperamos que la experiencia colectiva de Google durante las últimas dos décadas ilumine posibles caminos para encontrar esas respuestas.
Una idea clave que compartimos en este libro es que la ingeniería de software se puede considerar como una "programación integrada a lo largo del tiempo". ¿Qué prácticas podemos introducir en nuestro código para que sea sostenible (capaz de reaccionar a los cambios necesarios) durante su ciclo de vida, desde la concepción hasta la introducción, pasando por el mantenimiento y la desaprobación?
El libro enfatiza tres principios fundamentales que creemos que las organizaciones de software deben tener en cuenta al diseñar, diseñar y escribir su código:
Tiempo y cambio Cómo el código deberá adaptarse a lo largo de su vida
Escala y crecimiento Cómo una organización deberá adaptarse a medida que evoluciona
Compensaciones y costos Cómo una organización toma decisiones, basándose en las lecciones del tiempo y el cambio y la escala y el crecimiento - ^ Akram I. Salah (5 de abril de 2002). "Ingeniería de un programa académico en ingeniería de software" (PDF) . 35º Simposio Anual de Instrucción y Computación del Medio Oeste . Consultado el 13 de septiembre de 2006 .: "Para algunos, la ingeniería de software es solo un nombre glorificado para la programación. Si usted es un programador, puede poner 'ingeniero de software' en su tarjeta de presentación, pero nunca 'programador'".
- ^ Mills, Harlan D., JR Newman y CB Engle, Jr., "Un plan de estudios de pregrado en ingeniería de software", en Deimel, Lionel E. (1990). Ingeniería de Software Educación: Conferencia SEI 1990, Pittsburgh, Pennsylvania, EE.UU., Abril 2-3, .. . Saltador. ISBN 978-0-387-97274-9., p. 26 : "En la práctica, consideramos la ingeniería de software como la preparación necesaria para la práctica, el desarrollo de software y el profesional de mantenimiento. El informático se está preparando para estudios teóricos adicionales ..."
- ^ David Budgen; Pearl Brereton; Barbara Kitchenham; Stephen Linkman (14 de diciembre de 2004). "Realización de la ingeniería de software basada en evidencias" . Archivado desde el original el 17 de diciembre de 2006 . Consultado el 18 de octubre de 2006 .: "Creemos que la ingeniería de software solo puede avanzar como una disciplina de ingeniería alejándose de su dependencia actual de la defensa y el análisis ..."
- ^ "¿Qué es la Ingeniería de Software? - Definición de Techopedia" . Techopedia.com . Consultado el 6 de mayo de 2021 .
- ^ "Ingeniería de Software | Proceso de Diseño de Software" . GeeksforGeeks . 2019-05-24 . Consultado el 6 de mayo de 2021 .
- ^ a b c d e "Cuerpo de conocimientos de ingeniería de software (SWEBOK versión 3), 2014" (pdf) . www.swebok.org . Sociedad de Informática IEEE . Consultado el 24 de mayo de 2016 .
- ^ "¿Qué es el mantenimiento de software? Definición de mantenimiento de software, significado de mantenimiento de software" . The Economic Times . Consultado el 6 de mayo de 2021 .
- ^ "Ingeniería de Software | Clasificación de Requerimientos de Software" . GeeksforGeeks . 2018-06-19 . Consultado el 6 de mayo de 2021 .
- ^ Abran, Alain, ed. (2005) [2004]. "Capítulo 1: Introducción a la Guía" . Guía del Cuerpo de Conocimientos de Ingeniería de Software . Los Alamitos: IEEE Computer Society. ISBN 978-0-7695-2330-9. Consultado el 13 de septiembre de 2010 .
El volumen total de la literatura citada está destinado a ser adecuado para el dominio mediante la finalización de una educación de pregrado más cuatro años de experiencia.
- ^ "Plan de estudios de ingeniería de software SE2014" (PDF) .
- ^ Williams, NSW (19 a 21 de febrero de 2001). "El enfoque de Professional Engineers Ontario para la concesión de licencias a los profesionales de la ingeniería de software". Educación y formación en ingeniería de software, Actas de 2001. 14ª Conferencia sobre . Charlotte, Carolina del Norte: IEEE . págs. 77–78.
- ^ "Especificaciones del examen de ingeniería de software de NCEES" (PDF) . Archivado desde el original (PDF) el 27 de agosto de 2013 . Consultado el 1 de abril de 2012 .
- ^ "NCEES descontinuando el examen de ingeniería de software de PE" . Consejo Nacional de Examinadores de Ingeniería y Topografía. 13 de marzo de 2018 . Consultado el 6 de agosto de 2018 .
- ^ "Guía SWEBOK Versión 3" . Consultado el 9 de marzo de 2015 .
- ^ " Código de Ética de Ingeniería de Software " (PDF) . Consultado el 25 de marzo de 2012 .
- ^ "Desarrolladores de software" . Manual de perspectivas ocupacionales . Oficina de Estadísticas Laborales de EE. UU. 4 de septiembre de 2019 . Consultado el 11 de diciembre de 2019 .
- ^ https://www.bls.gov/ooh/computer-and-information-technology/home.htm
- ^ https://developers.hp.com/public/blog/hp-international-womens-week-women-computer-science-dropping-1980s
- ^ a b https://www.bls.gov/ooh/computer-and-information-technology/computer-programmers.htm
- ^ "Disciplinas y especializaciones informáticas" (PDF) . ACM . Consultado el 6 de septiembre de 2019 .
- ^ https://www.bloomberg.com/opinion/articles/2020-08-04/big-tech-wants-you-to-believe-america-has-a-skills-gap
- ^ "Ingenieros informáticos y programadores informáticos" . Consultado el 17 de diciembre de 2009 .
- ^ "Página de certificación SEI" . Sei.cmu.edu . Consultado el 25 de marzo de 2012 .
- ^ Wyrostek, Warren (14 de marzo de 2008). "Los 10 principales problemas con la certificación de TI en 2008" . InformIT . Consultado el 3 de marzo de 2009 .
- ^ Sociedad de Informática IEEE. "Informe de la sociedad informática del IEEE de 2006 para la Asamblea General de la IFIP" (PDF) . Consultado el 10 de abril de 2007 .
- ^ IEEE. "CSDA" . Consultado el 20 de abril de 2010 .
- ^ ACM (17 de julio de 2000). "Un resumen de la posición de ACM en la ingeniería de software como una profesión de ingeniería con licencia" (PDF) . Asociación de Maquinaria de Computación (ACM). Archivado desde el original (PDF) el 17 de mayo de 2008 . Consultado el 3 de marzo de 2009 .
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 se corresponde con la práctica industrial profesional de la ingeniería de software. Tales 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 obtengan una licencia.
- ^ Sociedad Canadiense de Procesamiento de la Información. "Designación de ISP" . Consultado el 15 de marzo de 2007 .
- ^ "Profesionales ingenieros de Ontario: Bienvenido al sitio web de PEO" . Peo.on.ca . Consultado el 25 de marzo de 2012 .
- ^ Thibodaux, Patrick (5 de mayo de 2006). "A medida que la subcontratación gana fuerza, el interés por la informática disminuye" . Computerworld.com . Consultado el 6 de diciembre de 2016 .
- ^ "Programadores informáticos" . Bls.gov . Consultado el 25 de marzo de 2012 .
- ^ Mullins, Robert (13 de marzo de 2007). "El crecimiento de los desarrolladores de software se ralentiza en América del Norte" . InfoWorld . Archivado desde el original el 4 de abril de 2009 . Consultado el 25 de marzo de 2012 .
- ^ "Cuadrante mágico de Gartner" (PDF) . Cognizant.com . Consultado el 25 de marzo de 2012 .
- ^ Casey, Valentine (20 de agosto de 2010). "Gestión de proyectos del equipo de software virtual" . Revista de la Sociedad Brasileña de Computación . 16 (2): 83–96. doi : 10.1007 / s13173-010-0013-3 . S2CID 14383734 .
- ^ Dijkstra, EW (1988). "Sobre la crueldad de enseñar realmente ciencias de la computación" . Consultado el 10 de enero de 2014 .
Fuentes
- Abran, Alain; Moore, James W .; Bourque, Pierre; Dupuis, Robert; Tripp, Leonard L. (2004). Guía del Cuerpo de Conocimientos de Ingeniería de Software . IEEE. ISBN 978-0-7695-2330-9.
- Sommerville, Ian (2010). Ingeniería de Software (7ª ed.). Educación Pearson. ISBN 978-81-7758-530-8. Consultado el 10 de enero de 2013 .
Otras lecturas
- Guía del conocimiento de ingeniería de software (Guía SWEBOK): Versión 3.0 . Pierre Bourque, Richard E. Fairley (eds.). Sociedad de Informática IEEE. 2014. ISBN 978-0-7695-5166-1.CS1 maint: otros ( enlace )
- Pressman, Roger S (2009). Ingeniería de software: el enfoque de un practicante (7ª ed.). Boston, Mass: McGraw-Hill. ISBN 978-0-07-337597-7.
- Sommerville, Ian (2010) [2010]. Ingeniería de Software (9ª ed.). Harlow, Inglaterra: Pearson Education. ISBN 978-0-13-703515-1.
- Jalote, Pankaj (2005) [1991]. Un enfoque integrado de la ingeniería de software (3ª ed.). Saltador. ISBN 978-0-387-20881-7.
- Bruegge, Bernd ; Dutoit, Allen (2009). Ingeniería de software orientada a objetos: uso de UML, patrones y Java (3ª ed.). Prentice Hall. ISBN 978-0-13-606125-0.
- Oshana, Robert (21 de junio de 2019). Ingeniería de software para sistemas embebidos: métodos, técnicas prácticas y aplicaciones (Segunda ed.). Kidlington, Oxford, Reino Unido. ISBN 978-0-12-809433-4.
enlaces externos
- Guía del cuerpo de conocimientos de ingeniería de software
- El marco de ciclo de vida de desarrollo de software e ingeniería de sistemas abiertos OpenSDLC.org el SDLC integrado de Creative Commons
- Instituto de Ingeniería de Software Carnegie Mellon