stringtranslate.com

Software

Las tarjetas de crédito son una de las muchas tecnologías cotidianas que dependen del software. [1]

El software consiste en programas de computadora que instruyen la ejecución de una computadora . [2]

Basándose en innovaciones previas en matemáticas y tecnología, se creó software para las computadoras digitales programables que surgieron a fines de la década de 1940 y fue necesario para hacer realidad su utilidad. El primer software estaba estrechamente vinculado al hardware subyacente de la computadora , pero con el tiempo, las capas inferiores del sistema se han vuelto más estandarizadas y el software se ha vuelto cada vez más portátil entre diferentes sistemas y se ha abstraído del código de máquina subyacente . Los sistemas operativos administran los recursos de hardware y median entre diferentes aplicaciones que realizan tareas para el usuario. Los lenguajes de programación son el formato en el que se escribe el software y deben ser legibles para humanos y capaces de traducirse en instrucciones inequívocas para el hardware de la computadora. Se necesitan compiladores o intérpretes para vincular un programa con otro código en el que se basa y convertir el software en código de máquina que se puede ejecutar en el hardware. Los programas se combinan entre sí y con entradas externas para ser capaces de realizar una tarea compleja.

La tarea central del desarrollo de software es programar y mantener el código fuente de un proyecto , pero el término también cubre la concepción del proyecto, la evaluación de su viabilidad, el análisis de los requisitos comerciales, el diseño del software y el lanzamiento . El aseguramiento de la calidad del software , que incluye la revisión y prueba del código , es una parte esencial del proceso, ya que la entrega de código de calidad reduce el costo de las fallas de confiabilidad , los ciberataques habilitados por vulnerabilidades de seguridad y los costos de mantenimiento . El mantenimiento generalmente consume el 75 por ciento o más del presupuesto de ingeniería de vida útil del software. 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. El software se ha vuelto omnipresente en la vida cotidiana en los países desarrollados . En muchos casos, el software aumenta la funcionalidad de las tecnologías preexistentes, pero también ha permitido la creación de tecnologías completamente nuevas como Internet , los videojuegos , las redes sociales , los teléfonos móviles y el GPS .

Definición

El software puede definirse de manera más estricta como las instrucciones ejecutadas por el hardware de la computadora , o de manera más amplia incluyendo otros conceptos, herramientas y métodos necesarios para hacer un sistema ejecutable en el hardware de la computadora , como documentos de diseño, especificaciones y suites de prueba. [3] [4] Un programa individual o archivo de código fuente consta de instrucciones y algoritmos inequívocos . Los programas se combinan entre sí y con entradas externas para ser capaces de realizar una tarea compleja. [5] [4] Las herramientas como compiladores , ensambladores , diagramas de flujo , herramientas de diseño, simuladores y diagramas arquitectónicos —algunos de los cuales también son software— son esenciales para el diseño y la ejecución de la mayoría de los sistemas informáticos. [4] Aunque el software es intangible , [6] [7] el software crea instrucciones para que el hardware de la computadora produzca efectos visibles y tangibles. [8]

Historia

07R01, un circuito integrado de Motorola . Los circuitos integrados fueron una invención esencial que permitió la creación de software. [9]

Una serie de inventos anteriores fueron necesarios para la creación de software, incluyendo las matemáticas —especialmente los sistemas de numeración binario y decimal , y el cero— , los alfabetos , la escritura , las calculadoras mecánicas , [10] el álgebra de Boole , los transistores , los circuitos integrados y los plásticos . [11] El software no podría existir sin las computadoras digitales , ya que fue creado específicamente para estos dispositivos y fue necesario para realizar su utilidad. [12]

Las primeras computadoras programables, que aparecieron a finales de la década de 1940, [13] se programaron en lenguaje de máquina (instrucciones simples que podían ser ejecutadas directamente por el procesador). El lenguaje de máquina era difícil de depurar y no era portable entre diferentes sistemas informáticos. [14] Inicialmente, los recursos de hardware eran escasos y caros, mientras que los recursos humanos eran más baratos. [15] A medida que los programas se volvieron más complejos, la productividad del programador se convirtió en un cuello de botella. Esto llevó a la introducción de lenguajes de programación de alto nivel a mediados de la década de 1950. Estos lenguajes abstraían los detalles del hardware, y en su lugar estaban diseñados para expresar algoritmos que pudieran ser entendidos más fácilmente por los humanos. [16] [17] Como las instrucciones son distintas del hardware subyacente de la computadora , el software es, por lo tanto, relativamente reciente, y data de estos primeros lenguajes de programación de alto nivel como Fortran , Lisp y COBOL . [17] El primer uso de la palabra software se atribuye al matemático John Wilder Tukey en 1958. [4] Como esta primera definición de software era negativa (elementos de una computadora que no fueran “tubos, transistores, cables, cintas y similares”), dejó abierta la posibilidad de una comprensión más amplia del concepto de software, como postula el historiador de la informática Nathan Ensmenger. Para los historiadores, el software es un sistema sociotécnico , lo que significa “un sistema en el que las máquinas, las personas y los procesos están inextricablemente interconectados y son interdependientes”, en palabras de Ensmenger. [18] El historiador de la informática Thomas Haigh insiste en la idea de circulación y argumenta que “el software siempre implica empaquetar elementos dispares como código informático, prácticas, algoritmos, conocimiento tácito y derechos de propiedad intelectual en un artefacto adecuado para su difusión”. [19]

El primer software estaba estrechamente ligado al hardware subyacente y, en consecuencia, no era portable a otros sistemas. A medida que ha evolucionado, el software más nuevo se puede construir y ejecutar en una amplia variedad de plataformas. Gran parte del aumento de la portabilidad se puede atribuir a la estandarización de los aspectos de nivel inferior del sistema, como la red , los sistemas operativos y las bases de datos . Debido a que solo hay relativamente unos pocos sistemas operativos, TCP e IP se utilizan para prácticamente todas las redes y SQL se utiliza para muchas consultas de bases de datos, el software de aplicación puede ejecutarse más fácilmente en una amplia variedad de hardware. [20] Aumentar el número de capas de abstracción en el sistema es un desarrollo relacionado: tanto en lenguajes de programación donde permite una mejor estructura y una mayor modularidad , como también permite la virtualización de los recursos del sistema. Como resultado del aumento de la estabilidad y la abstracción, el software se ha vuelto cada vez más complejo y puede resolver más problemas. [21] Tanto la industria como la academia han tenido una fuerte influencia en el desarrollo de diferentes aspectos del software. [22]

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:

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. [31] El auge de Internet y la computación en la nube posibilitó un nuevo modelo, el software como servicio (SaaS), [32] en el que el proveedor aloja el software (generalmente construido sobre una infraestructura o plataformas alquiladas ) [33] y proporciona el uso del software a los clientes, a menudo a cambio de una tarifa de suscripción . [31] 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. [34]

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. [35] 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 . [36] [37] 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 . [38] [39] La garantía de calidad del software suele ser una combinación de revisión manual del código por parte de otros ingenieros [40] 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. [41] En algunos sistemas críticos para la seguridad se utilizan métodos formales para demostrar la corrección del código, [42] mientras que las pruebas de aceptación del usuario ayudan a garantizar que el producto cumpla con las expectativas del cliente. [43] Existen diversas metodologías de desarrollo de software , que varían desde completar todos los pasos en orden hasta modelos concurrentes e iterativos. [44] 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. [45]

Con frecuencia, el software se lanza en un estado incompleto cuando el equipo de desarrollo se queda sin tiempo o fondos. [46] 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. [47] 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. [48] 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. [6] 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. [49] [50]

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. [51] [52] [37]

Calidad y seguridad

La calidad del software se define como el cumplimiento de los requisitos establecidos, así como de las expectativas del cliente. [53] 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. [54] 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. [55] 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 . [56] [57] Las fallas de software en sistemas críticos para la seguridad pueden ser muy graves, incluida la muerte. [56] 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. [58] A pesar del objetivo de los desarrolladores de entregar un producto que funcione completamente como se esperaba, prácticamente todo el software contiene errores. [59]

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. [60] [61] Si un error crea un riesgo de seguridad, se denomina vulnerabilidad . [62] [63] 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. [64] Las vulnerabilidades varían en su capacidad de ser explotadas por actores maliciosos, [62] y el riesgo real depende de la naturaleza de la vulnerabilidad, así como del valor del sistema circundante. [65] 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. [62] Para frustrar los ciberataques, todo el software del sistema debe estar diseñado para resistir y recuperarse de un ataque externo. [61] A pesar de los esfuerzos por garantizar la seguridad, una fracción significativa de computadoras están infectadas con malware. [66]

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. [67] 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. [68] 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. [69] Deben ser legibles para los humanos y capaces de traducirse en instrucciones inequívocas para el hardware de la computadora. [70]

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. [71] 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. [72] 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. [73] [74]

Cuestiones jurídicas

Responsabilidad

El software se suele lanzar a sabiendas de 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. [75]

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 . [76] 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. [77] 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)). [78] Las licencias de código abierto , por el contrario, permiten el uso gratuito y la redistribución del software con pocas condiciones. [77] 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. [79]

Patentes

Las patentes otorgan a un inventor una licencia exclusiva y limitada en el tiempo para un producto o proceso novedoso. [80] 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. [81] 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. [11] Las solicitudes de patentes son complejas y costosas, y las demandas que involucran patentes pueden aumentar el costo de los productos. [82] A diferencia de los derechos de autor, las patentes generalmente solo se aplican en la jurisdicción donde se emitieron. [83]

Impacto

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

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". [85] Se ha vuelto omnipresente en la vida cotidiana en los países desarrollados . [86] En muchos casos, el software aumenta la funcionalidad de tecnologías existentes, como electrodomésticos y ascensores . [ 1] El software también generó tecnologías completamente nuevas como Internet , videojuegos , teléfonos móviles y GPS . [1] [87] Internet permitió nuevos métodos de comunicación, incluidos el correo electrónico , foros , blogs , microblogging , wikis y redes sociales . [88] Ahora se encuentran disponibles cantidades masivas de conocimiento que superan cualquier biblioteca en papel con una rápida búsqueda en la web . [87] 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 . [84] Casi todos los dispositivos complejos están controlados por software. [87]

Referencias

  1. ^ abc Kitchin & Dodge 2011, pág. 5.
  2. ^ 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.
  3. ^ Osterweil 2013, pág. 61.
  4. ^ abcd Tracy 2021, pág. 2.
  5. ^ Kitchin & Dodge 2011, págs. 3, 24.
  6. ^ desde Tracy 2021, pág. 3.
  7. ^ Kitchin y Dodge 2011, pág. 24.
  8. ^ Kitchin y Dodge 2011, págs. 3-4.
  9. ^ Jones 2014, págs. 19, 22.
  10. ^ Jones 2014, págs. 9, 21.
  11. ^Ab Jones 2014, pág. 19.
  12. ^ Jones 2014, pág. 22.
  13. ^ Gabbrielli y Martini 2023, pag. 519.
  14. ^ Gabbrielli y Martini 2023, págs. 520–521.
  15. ^ Gabbrielli y Martini 2023, pag. 522.
  16. ^ Gabbrielli y Martini 2023, pag. 521.
  17. ^ desde Tracy 2021, pág. 1.
  18. ^ Ensmenger, Nathan (2010). Los chicos informáticos toman el control: computadoras, programadores y la política de la experiencia técnica. Historia de la informática. Cambridge, Mass.: MIT Press. ISBN 978-0-262-05093-7.OCLC 496282165  .
  19. ^ Hocquet, Alejandro; Wieber, Federico; Gramelsberger, Gabriele; Hinsen, Konrad; Diesmann, Markus; Pasquini Santos, Fernando; Landstrom, Catharina; Peters, Benjamín; Kasprowicz, Dawid; Borrelli, Arianna; Roth, Phillip; Lee, Clarissa Ai Ling; Olteanu, Alin; Böschen, Stefan (1 de julio de 2024). "El software en la ciencia es omnipresente pero se pasa por alto". Ciencia Computacional de la Naturaleza . doi : 10.1038/s43588-024-00651-2 . ISSN  2662-8457.
  20. ^ Tracy 2021, pág. 249.
  21. ^ Tracy 2021, pág. 250.
  22. ^ Tracy 2021, págs. 250–251.
  23. ^ Anderson y Dahlin 2014, pág. 6.
  24. ^ abc Anderson y Dahlin 2014, pág. 7.
  25. ^ Tanenbaum y Bos 2023, pág. 5.
  26. ^ Anderson y Dahlin 2014, págs.7, 9, 13.
  27. ^ Anderson y Dahlin 2014, págs. 6–7.
  28. ^ Jones 2014, pág. 121.
  29. ^ Tracy 2021, pág. 66.
  30. ^ Tracy 2021, pág. 72.
  31. ^ desde O'Regan 2022, pág. 386.
  32. ^ Campbell-Kelly y García-Swartz 2015, págs. 156-157.
  33. ^ Rosati y Lynn 2020, pág. 23.
  34. ^ Watt 2023, pág. 4.
  35. ^ O'Regan 2022, pág. 7.
  36. ^ O'Regan 2022, pág. 5.
  37. ^ desde Dooley 2017, pág. 1.
  38. ^ O'Regan 2022, págs. 18, 110–111.
  39. ^ Tracy 2021, págs. 43, 76.
  40. ^ O'Regan 2022, págs. 117-118.
  41. ^ O'Regan 2022, pág. 54.
  42. ^ O'Regan 2022, pág. 267.
  43. ^ O'Regan 2022, pág. 20.
  44. ^ O'Regan 2022, pág. 9.
  45. ^ Tripatía y Naik 2014, p. 26.
  46. ^ Reifer 2012, pág. 22.
  47. ^ Tripatía y Naik 2014, págs.4, 27.
  48. ^ Tripatía y Naik 2014, p. 89.
  49. ^ Varga 2018, pág. 6.
  50. ^ Ulziit y otros. 2015, pág. 764.
  51. ^ Tucker, Morelli y de Silva 2011, pág. 7.
  52. ^ Stull 2018, págs. 24-25.
  53. ^ Galin 2018, pág. 3.
  54. ^ Galin 2018, pág. 26.
  55. ^ O'Regan 2022, págs. 68, 117.
  56. ^ desde O'Regan 2022, págs. 3, 268.
  57. ^ Varga 2018, pág. 12.
  58. ^ O'Regan 2022, pág. 119.
  59. ^ Ablon y Bogart 2017, pág. 1.
  60. ^ Campbell-Kelly y García-Swartz 2015, pág. 164.
  61. ^ desde O'Regan 2022, pág. 266.
  62. ^ abc Ablon y Bogart 2017, pág. 2.
  63. ^ Daswani y Elbayadi 2021, pag. 25.
  64. ^ Daswani y Elbayadi 2021, págs. 26-27.
  65. ^ Haber y Hibbert 2018, págs. 5-6.
  66. ^ Kitchin & Dodge 2011, pág. 37.
  67. ^ Tracy 2021, pág. 117.
  68. ^ Tracy 2021, págs. 118-120.
  69. ^ Tracy 2021, págs. 118-119.
  70. ^ Kitchin & Dodge 2011, pág. 26.
  71. ^ Tracy 2021, pág. 121.
  72. ^ Tracy 2021, págs. 122-123.
  73. ^ O'Regan 2022, pág. 375.
  74. ^ Sebesta 2012, pág. 28.
  75. ^ Kitchin & Dodge 2011, págs. 36–37.
  76. ^ O'Regan 2022, págs. 394–396.
  77. ^ desde O'Regan 2022, pág. 403.
  78. ^ O'Regan 2022, págs. 394, 404.
  79. ^ Langer 2016, págs. 44–45.
  80. ^ O'Regan 2022, pág. 395.
  81. ^ 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.
  82. ^ O'Regan 2022, pág. 398.
  83. ^ O'Regan 2022, pág. 399.
  84. ^Ab Manovich 2013, pág. 333.
  85. ^ Jones 2014, pág. 32.
  86. ^ Kitchin & Dodge 2011, pág. iv.
  87. ^ abc Jones 2014, pág. xxviii.
  88. ^ Manovich 2013, pág. 329.

Fuentes