Software

Instrucciones que una computadora puede ejecutar

Software escrito en lenguaje JavaScript

El software consiste en programas informáticos que dan instrucciones sobre la ejecución de una computadora . [1] El software puede definirse de manera amplia para incluir documentos de diseño, especificaciones y conjuntos de pruebas. [2]

La historia del software está estrechamente ligada al desarrollo de las computadoras digitales a mediados del siglo XX. Los primeros programas se escribieron en el lenguaje de máquina específico del hardware. La introducción de lenguajes de programación de alto nivel en 1958 permitió instrucciones más legibles para los humanos, lo que hizo que el desarrollo de software fuera más fácil y más portátil en diferentes arquitecturas de computadoras . El software en un lenguaje de programación se ejecuta a través de un compilador o intérprete para ejecutarse en el hardware de la arquitectura. Con el tiempo, el software se ha vuelto complejo, debido a los avances en redes , sistemas operativos y bases de datos .

En general, el software se puede clasificar en dos tipos principales:

  1. sistemas operativos , que administran recursos de hardware y brindan servicios para aplicaciones
  2. software de aplicación , que realiza tareas específicas para los usuarios

El auge de la computación en la nube ha introducido el nuevo modelo de distribución de software, el software como servicio (SaaS). En SaaS, las aplicaciones son alojadas por un proveedor y se accede a ellas a través de Internet .

El proceso de desarrollo de software implica varias etapas, entre ellas el diseño , la programación , las pruebas , el lanzamiento y el mantenimiento del software . La garantía de calidad y la seguridad del software son aspectos fundamentales del desarrollo de software, ya que los errores y las vulnerabilidades de seguridad pueden provocar fallos del sistema y violaciones de seguridad. Además, las cuestiones legales, como las licencias de software y los derechos de propiedad intelectual, desempeñan un papel importante en la distribución de productos de software.

Historia

El circuito integrado es una invención esencial para producir sistemas de software modernos. [3]

El primer uso de la palabra software se atribuye al matemático John Wilder Tukey en 1958. [4] Las primeras computadoras programables, que aparecieron a fines de la década de 1940, [5] se programaron en lenguaje de máquina . El lenguaje de máquina es difícil de depurar y no es portable entre diferentes computadoras. [6] Inicialmente, los recursos de hardware eran más caros que los recursos humanos . [7] A medida que los programas se volvieron complejos, la productividad del programador se convirtió en el cuello de botella. La introducción de lenguajes de programación de alto nivel en 1958 ocultó los detalles del hardware y expresó los algoritmos subyacentes en el código. [8] [9] Los primeros lenguajes incluyen Fortran , Lisp y COBOL . [9]

Tipos

Diagrama que muestra cómo interactúa el usuario con el software de aplicación en una computadora de escritorio típica . La capa de software de aplicación interactúa con el sistema operativo , que a su vez se comunica con el hardware . Las flechas indican el flujo de información.

Hay dos tipos principales de software:

  • Los sistemas operativos son "la capa de software que administra los recursos de una computadora para sus usuarios y sus aplicaciones ". [10] Hay tres propósitos principales que cumple un sistema operativo: [11]
    • Asignar recursos entre diferentes aplicaciones, decidiendo cuándo recibirán tiempo de la unidad central de procesamiento (CPU) o espacio en la memoria . [11]
    • Proporcionar una interfaz que abstraiga los detalles del acceso a los detalles del hardware (como la memoria física) para facilitar las cosas a los programadores. [11] [12]
    • Ofrecer servicios comunes, como una interfaz para acceder a dispositivos de red y de disco. Esto permite ejecutar una aplicación en un hardware diferente sin necesidad de reescribirla. [13]
  • El software de aplicación se ejecuta sobre el sistema operativo y utiliza los recursos de la computadora para realizar una tarea. [14] Hay muchos tipos diferentes de software de aplicación porque la gama de tareas que se pueden realizar con las computadoras modernas es muy amplia. [15] Las aplicaciones representan la mayor parte del software [16] y requieren el entorno proporcionado por un sistema operativo, y a menudo otras aplicaciones, para funcionar. [17]
Comparación de hardware y software locales, infraestructura como servicio (IaaS), plataforma como servicio (PaaS) y software como servicio (SaaS)

El software también se puede clasificar según su forma de implementación . Las aplicaciones tradicionales se compran con una licencia perpetua para una versión específica del software, se descargan y se ejecutan en el hardware que pertenece al comprador. [18] El auge de Internet y la computación en la nube posibilitó un nuevo modelo, el software como servicio (SaaS), [19] en el que el proveedor aloja el software (generalmente construido sobre una infraestructura o plataformas alquiladas ) [20] y proporciona el uso del software a los clientes, a menudo a cambio de una tarifa de suscripción . [18] Para 2023, los productos SaaS, que generalmente se entregan a través de una aplicación web , se habían convertido en el método principal con el que las empresas entregan aplicaciones. [21]

Desarrollo y mantenimiento de software

Diagrama de un ciclo de vida de desarrollo de software tradicional de 1988. Los números representan el costo típico de cada fase.

Las empresas de software tienen como objetivo entregar un producto de alta calidad a tiempo y dentro del presupuesto. Un desafío es que la estimación del esfuerzo de desarrollo de software a menudo es inexacta. [22] El desarrollo de software comienza con la concepción del proyecto, la evaluación de su viabilidad, el análisis de los requisitos comerciales y la realización de un diseño de software . [23] [24] La mayoría de los proyectos de software aceleran su desarrollo reutilizando o incorporando software existente, ya sea en forma de software comercial listo para usar (COTS) o software de código abierto . [25] [26] La garantía de calidad del software suele ser una combinación de revisión manual del código por parte de otros ingenieros [27] y pruebas de software automatizadas . Debido a las limitaciones de tiempo, las pruebas no pueden cubrir todos los aspectos de la funcionalidad prevista del software, por lo que los desarrolladores a menudo se centran en la funcionalidad más crítica. [28] En algunos sistemas críticos para la seguridad se utilizan métodos formales para demostrar la corrección del código, [29] mientras que las pruebas de aceptación del usuario ayudan a garantizar que el producto cumpla con las expectativas del cliente. [30] Existen diversas metodologías de desarrollo de software , que varían desde completar todos los pasos en orden hasta modelos concurrentes e iterativos. [31] El desarrollo de software está impulsado por requisitos tomados de los posibles usuarios, a diferencia del mantenimiento, que está impulsado por eventos como una solicitud de cambio. [32]

Con frecuencia, el software se lanza en un estado incompleto cuando el equipo de desarrollo se queda sin tiempo o fondos. [33] A pesar de las pruebas y el control de calidad , prácticamente todo el software contiene errores donde el sistema no funciona como se esperaba. El mantenimiento del software posterior al lanzamiento es necesario para remediar estos errores cuando se encuentran y mantener el software funcionando a medida que el entorno cambia con el tiempo. [34] A menudo se agregan nuevas características después del lanzamiento. Con el tiempo, el nivel de mantenimiento se vuelve cada vez más restringido antes de eliminarse por completo cuando el producto se retira del mercado. [35] A medida que el software envejece , se lo conoce como software heredado y puede permanecer en uso durante décadas, incluso si no queda nadie que sepa cómo solucionarlo. [36] Durante la vida útil del producto, se estima que el mantenimiento del software comprende el 75 por ciento o más del costo total de desarrollo. [37] [38]

Completar un proyecto de software implica varias formas de experiencia, no solo en programadores de software sino también pruebas, redacción de documentación, gestión de proyectos , diseño gráfico , experiencia del usuario , soporte al usuario, marketing y recaudación de fondos. [39] [40] [24]

Calidad y seguridad

La calidad del software se define como el cumplimiento de los requisitos establecidos, así como de las expectativas del cliente. [41] La calidad es un término general que puede referirse al comportamiento correcto y eficiente de un código, su reutilización y portabilidad , o la facilidad de modificación. [42] Por lo general, es más rentable incorporar calidad al producto desde el principio en lugar de intentar agregarla más tarde en el proceso de desarrollo. [43] Un código de mayor calidad reducirá el costo de vida útil tanto para los proveedores como para los clientes, ya que es más confiable y más fácil de mantener . [44] [45] Las fallas de software en sistemas críticos para la seguridad pueden ser muy graves, incluida la muerte. [44] Según algunas estimaciones, el costo del software de mala calidad puede ser tan alto como el 20 al 40 por ciento de las ventas. [46] A pesar del objetivo de los desarrolladores de entregar un producto que funcione completamente como se esperaba, prácticamente todo el software contiene errores. [47]

El auge de Internet también aumentó en gran medida la necesidad de seguridad informática , ya que permitió a los actores maliciosos realizar ciberataques de forma remota. [48] [49] Si un error crea un riesgo de seguridad, se denomina vulnerabilidad . [50] [51] A menudo se lanzan parches de software para corregir vulnerabilidades identificadas, pero las que permanecen desconocidas ( días cero ), así como las que no han sido parcheadas, siguen siendo susceptibles de explotación. [52] Las vulnerabilidades varían en su capacidad de ser explotadas por actores maliciosos, [50] y el riesgo real depende de la naturaleza de la vulnerabilidad, así como del valor del sistema circundante. [53] Aunque algunas vulnerabilidades solo se pueden utilizar para ataques de denegación de servicio que comprometen la disponibilidad de un sistema, otras permiten al atacante inyectar y ejecutar su propio código (llamado malware ), sin que el usuario se dé cuenta. [50] Para frustrar los ciberataques, todo el software del sistema debe estar diseñado para resistir y recuperarse de un ataque externo. [49] A pesar de los esfuerzos por garantizar la seguridad, una fracción significativa de computadoras están infectadas con malware. [54]

Codificación y ejecución

Lenguajes de programación

El código fuente de un programa informático en C. Las líneas grises son comentarios que explican el programa a los humanos. Cuando se compila y se ejecuta , arrojará como resultado " ¡Hola, mundo! ".

Los lenguajes de programación son el formato en el que se escribe el software. Desde la década de 1950, se han inventado miles de lenguajes de programación diferentes; algunos se han utilizado durante décadas, mientras que otros han caído en desuso. [55] Algunas definiciones clasifican el código de máquina (las instrucciones exactas implementadas directamente por el hardware) y el lenguaje ensamblador (una alternativa más legible para los humanos al código de máquina cuyas instrucciones se pueden traducir uno a uno al código de máquina) como lenguajes de programación. [56] Los programas escritos en los lenguajes de programación de alto nivel utilizados para crear software comparten algunas características principales: no es necesario conocer el código de máquina para escribirlos, se pueden trasladar a otros sistemas informáticos y son más concisos y legibles para los humanos que el código de máquina. [57] Deben ser legibles para los humanos y capaces de traducirse en instrucciones inequívocas para el hardware de la computadora. [58]

Compilación, interpretación y ejecución

La invención de los lenguajes de programación de alto nivel fue simultánea a la de los compiladores necesarios para traducirlos automáticamente a código máquina. [59] La mayoría de los programas no contienen todos los recursos necesarios para ejecutarlos y dependen de bibliotecas externas . Parte de la función del compilador es vincular estos archivos de tal manera que el programa pueda ser ejecutado por el hardware. Una vez compilado, el programa puede guardarse como un archivo objeto y el cargador (parte del sistema operativo) puede tomar este archivo guardado y ejecutarlo como un proceso en el hardware del ordenador. [60] Algunos lenguajes de programación utilizan un intérprete en lugar de un compilador. Un intérprete convierte el programa en código máquina en tiempo de ejecución , lo que los hace de 10 a 100 veces más lentos que los lenguajes de programación compilados. [61] [62]

Responsabilidad

El software se suele lanzar sabiendo que está incompleto o contiene errores. Los compradores lo compran a sabiendas en ese estado, lo que ha dado lugar a un régimen jurídico en el que la responsabilidad por los productos de software se reduce considerablemente en comparación con otros productos. [63]

Licencias

Blender , un programa de software libre

El código fuente está protegido por la ley de derechos de autor que otorga al propietario el derecho exclusivo de copiar el código. Las ideas o algoritmos subyacentes no están protegidos por la ley de derechos de autor, pero a menudo se tratan como un secreto comercial y se ocultan mediante métodos como los acuerdos de confidencialidad . [64] Los derechos de autor del software se reconocen desde mediados de la década de 1970 y pertenecen a la empresa que fabrica el software, no a los empleados o contratistas que lo escribieron. [65] El uso de la mayoría del software se rige por un acuerdo ( licencia de software ) entre el titular de los derechos de autor y el usuario. El software propietario generalmente se vende bajo una licencia restrictiva que limita la copia y la reutilización (a menudo aplicada con herramientas como la gestión de derechos digitales (DRM)). [66] Las licencias de código abierto , por el contrario, permiten el uso gratuito y la redistribución del software con pocas condiciones. [65] La mayoría de las licencias de código abierto utilizadas para el software requieren que las modificaciones se publiquen bajo la misma licencia, lo que puede crear complicaciones cuando el software de código abierto se reutiliza en proyectos propietarios. [67]

Patentes

Las patentes otorgan a un inventor una licencia exclusiva y limitada en el tiempo para un producto o proceso novedoso. [68] Las ideas sobre lo que el software podría lograr no están protegidas por la ley y las implementaciones concretas están cubiertas por la ley de derechos de autor . En algunos países, un requisito de que la invención reclamada tenga un efecto en el mundo físico también puede ser parte de los requisitos para que una patente de software sea considerada válida. [69] Las patentes de software han sido históricamente controvertidas . Antes del caso de 1998 State Street Bank & Trust Co. v. Signature Financial Group, Inc. , las patentes de software generalmente no se reconocían en los Estados Unidos. En ese caso, la Corte Suprema decidió que los procesos comerciales podían patentarse. [70] Las solicitudes de patentes son complejas y costosas, y las demandas que involucran patentes pueden aumentar el costo de los productos. [71] A diferencia de los derechos de autor, las patentes generalmente solo se aplican en la jurisdicción donde se emitieron. [72]

Impacto

Las simulaciones generadas por computadora son uno de los avances que permite el software. [73]

El ingeniero Capers Jones escribe que "las computadoras y el software están realizando cambios profundos en cada aspecto de la vida humana: educación, trabajo, guerra, entretenimiento, medicina, leyes y todo lo demás". [74] Se ha vuelto omnipresente en la vida cotidiana en los países desarrollados . [75] En muchos casos, el software aumenta la funcionalidad de tecnologías existentes, como electrodomésticos y ascensores . [ 76] El software también generó tecnologías completamente nuevas como Internet , videojuegos , teléfonos móviles y GPS . [76] [77] Internet permitió nuevos métodos de comunicación, incluidos el correo electrónico , foros , blogs , microblogging , wikis y redes sociales . [78] Ahora se encuentran disponibles cantidades masivas de conocimiento que superan cualquier biblioteca en papel con una rápida búsqueda en la web . [77] La ​​mayoría de los profesionales creativos han cambiado a herramientas basadas en software, como diseño asistido por computadora , modelado 3D , edición de imágenes digitales y animación por computadora . [73] Casi todos los dispositivos complejos están controlados por software. [77]

Referencias

  1. ^ Stair, Ralph M. (2003). Principios de los sistemas de información, sexta edición . Thomson. pág. 16. ISBN 0-619-06489-7El software consiste en programas de computadora que gobiernan el funcionamiento de la computadora.
  2. ^ Osterweil 2013, pág. 61.
  3. ^ Jones 2014, págs. 19, 22.
  4. ^ Tracy 2021, pág. 2.
  5. ^ Gabbrielli y Martini 2023, pag. 519.
  6. ^ Gabbrielli y Martini 2023, págs. 520–521.
  7. ^ Gabbrielli y Martini 2023, pag. 522.
  8. ^ Gabbrielli y Martini 2023, pag. 521.
  9. ^ desde Tracy 2021, pág. 1.
  10. ^ Anderson y Dahlin 2014, pág. 6.
  11. ^ abc Anderson y Dahlin 2014, pág. 7.
  12. ^ Tanenbaum y Bos 2023, pág. 5.
  13. ^ Anderson y Dahlin 2014, págs.7, 9, 13.
  14. ^ Anderson y Dahlin 2014, págs. 6–7.
  15. ^ Jones 2014, pág. 121.
  16. ^ Tracy 2021, pág. 66.
  17. ^ Tracy 2021, pág. 72.
  18. ^ desde O'Regan 2022, pág. 386.
  19. ^ Campbell-Kelly y García-Swartz 2015, págs. 156-157.
  20. ^ Rosati y Lynn 2020, pág. 23.
  21. ^ Watt 2023, pág. 4.
  22. ^ O'Regan 2022, pág. 7.
  23. ^ O'Regan 2022, pág. 5.
  24. ^ desde Dooley 2017, pág. 1.
  25. ^ O'Regan 2022, págs. 18, 110-111.
  26. ^ Tracy 2021, págs. 43, 76.
  27. ^ O'Regan 2022, págs. 117-118.
  28. ^ O'Regan 2022, pág. 54.
  29. ^ O'Regan 2022, pág. 267.
  30. ^ O'Regan 2022, pág. 20.
  31. ^ O'Regan 2022, pág. 9.
  32. ^ Tripatía y Naik 2014, p. 26.
  33. ^ Reifer 2012, pág. 22.
  34. ^ Tripatía y Naik 2014, págs.4, 27.
  35. ^ Tripatía y Naik 2014, p. 89.
  36. ^ Tracy 2021, pág. 3.
  37. ^ Varga 2018, pág. 6.
  38. ^ Ulziit y otros. 2015, pág. 764.
  39. ^ Tucker, Morelli y de Silva 2011, pág. 7.
  40. ^ Stull 2018, págs. 24-25.
  41. ^ Galin 2018, pág. 3.
  42. ^ Galin 2018, pág. 26.
  43. ^ O'Regan 2022, págs. 68, 117.
  44. ^ ab O'Regan 2022, págs.3, 268.
  45. ^ Varga 2018, pág. 12.
  46. ^ O'Regan 2022, pág. 119.
  47. ^ Ablon y Bogart 2017, pág. 1.
  48. ^ Campbell-Kelly y García-Swartz 2015, pág. 164.
  49. ^ desde O'Regan 2022, pág. 266.
  50. ^ abc Ablon y Bogart 2017, pág. 2.
  51. ^ Daswani y Elbayadi 2021, pag. 25.
  52. ^ Daswani y Elbayadi 2021, págs. 26-27.
  53. ^ Haber y Hibbert 2018, págs. 5-6.
  54. ^ Kitchin y Dodge 2011, pág. 37.
  55. ^ Tracy 2021, pág. 117.
  56. ^ Tracy 2021, págs. 118-120.
  57. ^ Tracy 2021, págs. 118-119.
  58. ^ Kitchin & Dodge 2011, pág. 26.
  59. ^ Tracy 2021, pág. 121.
  60. ^ Tracy 2021, págs. 122-123.
  61. ^ O'Regan 2022, pág. 375.
  62. ^ Sebesta 2012, pág. 28.
  63. ^ Kitchin & Dodge 2011, págs. 36–37.
  64. ^ O'Regan 2022, págs. 394–396.
  65. ^ desde O'Regan 2022, pág. 403.
  66. ^ O'Regan 2022, págs. 394, 404.
  67. ^ Langer 2016, págs. 44–45.
  68. ^ O'Regan 2022, pág. 395.
  69. ^ Gerardo Con Díaz, "El texto en la máquina: la legislación estadounidense sobre derechos de autor y las múltiples naturalezas del software, 1974-1978", Tecnología y Cultura 57 (octubre de 2016), 753-79.
  70. ^ Jones 2014, pág. 19.
  71. ^ O'Regan 2022, pág. 398.
  72. ^ O'Regan 2022, pág. 399.
  73. ^Ab Manovich 2013, pág. 333.
  74. ^ Jones 2014, pág. 32.
  75. ^ Kitchin & Dodge 2011, pág. iv.
  76. ^ desde Kitchin & Dodge 2011, pág. 5.
  77. ^ abc Jones 2014, pág. xxviii.
  78. ^ Manovich 2013, pág. 329.

Fuentes

  • Ablon, Lillian; Bogart, Andy (2017). Días cero, miles de noches: la vida y los tiempos de las vulnerabilidades de día cero y sus exploits (PDF) . Rand Corporation. ISBN 978-0-8330-9761-3.
  • Anderson, Thomas ; Dahlin, Michael (2014). Sistemas operativos: principios y práctica (2.ª edición). Recursive Books. ISBN 978-0-9856735-2-9.
  • Campbell-Kelly, Martin; Garcia-Swartz, Daniel D. (2015). De los mainframes a los teléfonos inteligentes: una historia de la industria informática internacional . Harvard University Press. ISBN 978-0-674-28655-9.
  • Daswani, Neil ; Elbayadi, Moudy (2021). Grandes infracciones: lecciones de ciberseguridad para todos . Apress. ISBN 978-1-4842-6654-0.
  • Dooley, John F. (2017). Desarrollo, diseño y codificación de software: con patrones, depuración, pruebas unitarias y refactorización . Apress. ISBN 978-1-4842-3153-1.
  • Gabbrielli, Maurizio; Martini, Simone (2023). Lenguajes de programación: principios y paradigmas (2.ª ed.). Springer. ISBN 978-3-031-34144-1.
  • Galin, Daniel (2018). Calidad del software: conceptos y práctica . John Wiley & Sons. ISBN 978-1-119-13449-7.
  • Haber, Morey J.; Hibbert, Brad (2018). Vectores de ataque a activos: creación de estrategias eficaces de gestión de vulnerabilidades para proteger a las organizaciones . Apress. ISBN 978-1-4842-3627-7.
  • Jones, Capers (2014). La historia técnica y social de la ingeniería de software . Pearson Education. ISBN 978-0-321-90342-6.
  • Kitchin, Rob; Dodge, Martin (2011). Código/espacio: software y vida cotidiana . MIT Press. ISBN 978-0-262-04248-2.
  • Langer, Arthur M. (2016). Guía para el desarrollo de software: diseño y gestión del ciclo de vida . Springer. ISBN 978-1-4471-6799-0.
  • Manovich, Lev (2013). El software toma el mando . Bloomsbury Academic. ISBN 978-1-62356-745-3.
  • O'Regan, Gerard (2022). Guía concisa de ingeniería de software: desde los fundamentos hasta los métodos de aplicación . Springer Nature. ISBN 978-3-031-07816-3.
  • Osterweil, Leon J. (2013). "¿Qué es el software? El papel de los métodos empíricos para responder a la pregunta". Perspectivas sobre el futuro de la ingeniería de software: ensayos en honor a Dieter Rombach . Springer. pp. 237–254. ISBN 978-3-642-37395-4.
  • Rahman, Hanif Ur; da Silva, Alberto Rodrigues; Alzayed, Asaad; Raza, Mushtaq (2024). "Una revisión sistemática de la literatura sobre las decisiones de deslocalización del mantenimiento de software". Tecnología de la información y el software . 172 : 107475. doi :10.1016/j.infsof.2024.107475.
  • Reifer, Donald J. (2012). Recetas para el éxito en el mantenimiento de software . CRC Press. ISBN 978-1-4398-5167-8.
  • Rosati, Pierangelo; Lynn, Theo (2020). "Medición del valor comercial de la migración de infraestructura a la nube". Medición del valor comercial de la computación en la nube . Springer International Publishing. págs. 19–37. ISBN 978-3-030-43198-3.
  • Sebesta, Robert W. (2012). Conceptos de lenguajes de programación (10.ª ed.). Addison-Wesley. ISBN 978-0-13-139531-2.
  • Stull, Edward (2018). Fundamentos de UX para profesionales que no se dedican a la experiencia de usuario: principios de experiencia de usuario para gerentes, escritores, diseñadores y desarrolladores . Apress. ISBN 978-1-4842-3811-0.
  • Tanenbaum, Andrew S. ; Bos, Herbert (2023). Sistemas operativos modernos, edición global . Pearson Higher Ed. ISBN 978-1-292-72789-9.
  • Tracy, Kim W. (2021). Software: una historia técnica . Morgan & Claypool Publishers. ISBN 978-1-4503-8724-8.
  • Tripatía, Priyadarshi; Naik, Kshirasagar (2014). Evolución y mantenimiento del software: un enfoque profesional . John Wiley e hijos. ISBN 978-0-470-60341-3.
  • Tucker, Allen; Morelli, Ralph; de Silva, Chamindra (2011). Desarrollo de software: un enfoque de código abierto . CRC Press. ISBN 978-1-4398-8460-7.
  • Ulziit, Bayarbuyan; Warraich, Zeeshan Akhtar; Gencel, Cigdem; Petersen, Kai (2015). "Un marco conceptual de desafíos y soluciones para la gestión del mantenimiento global de software". Journal of Software: Evolution and Process . 27 (10): 763–792. doi :10.1002/smr.1720.
  • Watt, Andy (2023). Creación de aplicaciones SaaS modernas con C# y . NET: creación, implementación y mantenimiento de aplicaciones SaaS profesionales . Packt. ISBN 978-1-80461-087-9.
  • Varga, Ervin (2018). Desentrañando el mantenimiento y la evolución del software: pensar fuera de los esquemas convencionales . Springer. ISBN 978-3-319-71303-8.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Software&oldid=1247434508"