Código fuente

Instrucciones legibles para humanos que una computadora puede ejecutar
Ejemplo de código fuente simple en lenguaje C , un lenguaje de programación procedimental . El programa resultante imprime "hola, mundo" en la pantalla de la computadora. Este primer fragmento conocido de " Hola, mundo " del libro seminal El lenguaje de programación C tiene su origen en Brian Kernighan en los Laboratorios Bell en 1974. [1]

En informática , el código fuente , o simplemente código o fuente , es un programa informático de texto simple escrito en un lenguaje de programación . Un programador escribe el código fuente legible para humanos para controlar el comportamiento de una computadora .

Dado que una computadora, en principio, solo entiende código de máquina , el código fuente debe traducirse antes de que una computadora pueda ejecutarlo . El proceso de traducción se puede implementar de tres maneras. El código fuente se puede convertir en código de máquina mediante un compilador o un ensamblador . El ejecutable resultante es código de máquina listo para la computadora. Alternativamente, el código fuente se puede ejecutar sin conversión a través de un intérprete . Un intérprete carga el código fuente en la memoria. Traduce y ejecuta simultáneamente cada instrucción . Un método que combina la compilación y la interpretación es producir primero un bytecode . El bytecode es una representación intermedia del código fuente que se interpreta rápidamente.

Fondo

Los primeros ordenadores programables, que aparecieron a finales de la década de 1940, [2] se programaban 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. [3] Inicialmente, los recursos de hardware eran escasos y caros, mientras que los recursos humanos eran más baratos. [4] A medida que los programas se volvían 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 como Fortran 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 los humanos pudieran entender más fácilmente. [5] [6] 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 . [6] La invención de los lenguajes de programación de alto nivel fue simultánea con los compiladores necesarios para traducir el código fuente automáticamente a código de máquina que se puede ejecutar directamente en el hardware de la computadora . [7]

El código fuente es la forma de código que es modificado directamente por humanos, generalmente en un lenguaje de programación de alto nivel. El código objeto puede ser ejecutado directamente por la máquina y se genera automáticamente a partir del código fuente, a menudo a través de un paso intermedio, el lenguaje ensamblador . Si bien el código objeto solo funcionará en una plataforma específica, el código fuente se puede trasladar a una máquina diferente y volver a compilarlo allí. Para el mismo código fuente, el código objeto puede variar significativamente, no solo en función de la máquina para la que se compila, sino también en función de la optimización del rendimiento del compilador. [8] [9]

Organización

La mayoría de los programas no contienen todos los recursos necesarios para su ejecución 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. [10]

Un ejemplo de código fuente de Java más complejo . Escrito en un estilo de programación orientada a objetos , muestra código repetitivo . Los comentarios del prólogo se indican en rojo, los comentarios en línea se indican en verde y las declaraciones del programa se indican en azul.

Los desarrolladores de software suelen utilizar la gestión de configuración para realizar un seguimiento de los cambios en los archivos de código fuente ( control de versiones ). El sistema de gestión de configuración también realiza un seguimiento de qué archivo de código objeto corresponde a qué versión del archivo de código fuente. [11]

Propósitos

Estimación

La cantidad de líneas de código fuente se utiliza a menudo como una métrica para evaluar la productividad de los programadores de computadoras, el valor económico de una base de código, la estimación del esfuerzo para proyectos en desarrollo y el costo continuo del mantenimiento del software después del lanzamiento. [12]

Comunicación

El código fuente también se utiliza para comunicar algoritmos entre personas, por ejemplo, fragmentos de código en línea o en libros. [13]

A los programadores informáticos puede resultarles útil revisar el código fuente existente para aprender sobre técnicas de programación. [13] El hecho de compartir el código fuente entre desarrolladores se cita con frecuencia como un factor que contribuye a la maduración de sus habilidades de programación. [13] Algunas personas consideran que el código fuente es un medio artístico expresivo . [14]

El código fuente suele contener comentarios (bloques de texto que el compilador debe ignorar). Este contenido no forma parte de la lógica del programa, sino que está destinado a ayudar a los lectores a comprender el programa. [15]

Las empresas suelen mantener el código fuente confidencial para ocultar algoritmos considerados secretos comerciales . Los códigos fuente y algoritmos propietarios y secretos se utilizan ampliamente para aplicaciones gubernamentales sensibles, como la justicia penal , lo que da lugar a un comportamiento de caja negra con una falta de transparencia en la metodología del algoritmo. El resultado es la evasión del escrutinio público de cuestiones como el sesgo. [16]

Modificación

El acceso al código fuente (no solo al código objeto) es esencial para modificarlo. [17] Es necesario comprender el código existente para entender cómo funciona [17] y antes de modificarlo. [18] La velocidad de comprensión depende tanto de la base del código como de la habilidad del programador. [19] Los programadores experimentados tienen más facilidad para comprender lo que hace el código a un alto nivel. [20] La visualización de software se utiliza a veces para acelerar este proceso. [21]

Muchos programadores de software utilizan un entorno de desarrollo integrado (IDE) para mejorar su productividad. Los IDE suelen tener varias funciones integradas, incluido un editor de código fuente que puede alertar al programador sobre errores comunes. [22] La modificación a menudo incluye la refactorización del código (mejora de la estructura sin cambiar la funcionalidad) y la reestructuración (mejora de la estructura y la funcionalidad al mismo tiempo). [23] Casi todos los cambios en el código introducirán nuevos errores o efectos dominó inesperados , que requieren otra ronda de correcciones. [18]

Las revisiones de código por parte de otros desarrolladores se utilizan a menudo para examinar el nuevo código añadido a un proyecto. [24] El propósito de esta fase es a menudo verificar que el código cumple con los estándares de estilo y capacidad de mantenimiento y que es una implementación correcta del diseño del software . [25] Según algunas estimaciones, la revisión del código reduce drásticamente la cantidad de errores que persisten después de que se completa la prueba de software . [24] Junto con las pruebas de software que funcionan ejecutando el código, el análisis estático del programa utiliza herramientas automatizadas para detectar problemas con el código fuente. Muchos IDE admiten herramientas de análisis de código, que pueden proporcionar métricas sobre la claridad y la capacidad de mantenimiento del código. [26] Los depuradores son herramientas que a menudo permiten a los programadores recorrer la ejecución paso a paso mientras realizan un seguimiento de qué código fuente corresponde a cada cambio de estado. [27]

Compilación y ejecución

Los archivos de código fuente en un lenguaje de programación de alto nivel deben pasar por una etapa de preprocesamiento en código de máquina antes de que las instrucciones puedan llevarse a cabo. [7] Después de ser compilado, el programa puede guardarse como un archivo de objeto y el cargador (parte del sistema operativo) puede tomar este archivo guardado y ejecutarlo como un proceso en el hardware de la computadora. [10] Algunos lenguajes de programación utilizan un intérprete en lugar de un compilador. Un intérprete convierte el programa en código de 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. [22] [28]

Calidad

La calidad del software 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. [29] 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. [30] 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 . [31] [32]

La mantenibilidad es la cualidad del software que permite modificarlo fácilmente sin romper la funcionalidad existente. [33] Seguir las convenciones de codificación, como usar nombres claros de funciones y variables que correspondan a su propósito, hace que el mantenimiento sea más fácil. [34] El uso de declaraciones de bucle condicional solo si el código se puede ejecutar más de una vez, y la eliminación del código que nunca se ejecutará también puede aumentar la comprensibilidad. [35] Muchas organizaciones de desarrollo de software descuidan la mantenibilidad durante la fase de desarrollo, aunque aumentará los costos a largo plazo. [32] La deuda técnica se incurre cuando los programadores, a menudo por pereza o urgencia por cumplir con una fecha límite, eligen soluciones rápidas y sucias en lugar de incorporar la mantenibilidad en su código. [36] Una causa común son las subestimaciones en la estimación del esfuerzo de desarrollo de software , lo que lleva a recursos insuficientes asignados al desarrollo. [37] Un desafío con la mantenibilidad es que muchos cursos de ingeniería de software no lo enfatizan. [38] Los ingenieros de desarrollo que saben que no serán responsables del mantenimiento del software no tienen un incentivo para incorporar la mantenibilidad. [18]

La situación varía en todo el mundo, pero en los Estados Unidos antes de 1974, el software y su código fuente no eran susceptibles de derechos de autor y, por lo tanto, siempre eran software de dominio público . [39] En 1974, la Comisión de los Estados Unidos sobre Nuevos Usos Tecnológicos de Obras con Derechos de Autor (CONTU) decidió que "los programas de computadora, en la medida en que incorporan la creación original de un autor, son materia adecuada de derechos de autor". [40] [41]

El software propietario rara vez se distribuye como código fuente. [42] Aunque el término software de código abierto se refiere literalmente al acceso público al código fuente , [43] el software de código abierto tiene requisitos adicionales: redistribución libre, permiso para modificar el código fuente y publicar trabajos derivados bajo la misma licencia y no discriminación entre diferentes usos, incluido el uso comercial. [44] [45] La reutilización libre del software de código abierto puede acelerar el desarrollo. [46]

Véase también

Referencias

  1. ^ Kernighan, Brian W. "Programación en C: un tutorial" (PDF) . Bell Laboratories, Murray Hill, NJ. Archivado desde el original (PDF) el 23 de febrero de 2015.
  2. ^ Gabbrielli y Martini 2023, pag. 519. sfn error: no target: CITEREFGabbrielliMartini2023 (help)
  3. ^ Gabbrielli y Martini 2023, págs. 520–521. sfn error: no target: CITEREFGabbrielliMartini2023 (help)
  4. ^ Gabbrielli y Martini 2023, pag. 522. sfn error: no target: CITEREFGabbrielliMartini2023 (help)
  5. ^ Gabbrielli y Martini 2023, pag. 521. sfn error: no target: CITEREFGabbrielliMartini2023 (help)
  6. ^ desde Tracy 2021, pág. 1.
  7. ^ desde Tracy 2021, pág. 121.
  8. ^ Lin y col. 2001, págs. 238-239.
  9. ^ Katyal 2019, pág. 1194.
  10. ^ desde Tracy 2021, págs. 122-123.
  11. ^ O'Regan 2022, págs. 230-231, 233, 377.
  12. ^ Foster 2014, págs. 249, 274, 280, 305.
  13. ^ abc Spinellis, D: Lectura de código: la perspectiva del código abierto . Addison-Wesley Professional, 2003. ISBN 0-201-79940-5 
  14. ^ " Arte y programación informática " ONLamp.com Archivado el 20 de febrero de 2018 en Wayback Machine , (2005)
  15. ^ Kaczmarek y col. 2018, pág. 68.
  16. ^ Katyal 2019, págs. 1186-1187.
  17. ^ desde Katyal 2019, pág. 1195.
  18. ^ abc Offutt, Jeff (enero de 2018). «Descripción general del mantenimiento y la evolución del software». Departamento de Ciencias de la Computación de la Universidad George Mason . Consultado el 5 de mayo de 2024 .
  19. ^ Tripatía y Naik 2014, p. 296.
  20. ^ Tripatía y Naik 2014, p. 297.
  21. ^ Tripatía y Naik 2014, págs. 318–319.
  22. ^ desde O'Regan 2022, pág. 375.
  23. ^ Tripatía y Naik 2014, p. 94.
  24. ^ desde Dooley 2017, pág. 272.
  25. ^ O'Regan 2022, págs. 18, 21.
  26. ^ O'Regan 2022, pág. 133.
  27. ^ Kaczmarek y col. 2018, págs. 348–349.
  28. ^ Sebesta 2012, pág. 28.
  29. ^ Galin 2018, pág. 26.
  30. ^ O'Regan 2022, págs. 68, 117.
  31. ^ O'Regan 2022, págs. 3, 268.
  32. ^Ab Varga 2018, pág. 12.
  33. ^ Varga 2018, pág. 5.
  34. ^ Tripatía y Naik 2014, págs. 296–297.
  35. ^ Tripatía y Naik 2014, p. 309.
  36. ^ Varga 2018, págs. 6–7.
  37. ^ Varga 2018, pág. 7.
  38. ^ Varga 2018, págs. 7–8.
  39. ^ Liu, Joseph P.; Dogan, Stacey L. (2005). "Derecho de autor y especificidad de la materia: el caso del software informático". Encuesta anual de derecho estadounidense de la Universidad de Nueva York . 61 (2). Archivado desde el original el 25 de junio de 2021.
  40. ^ Apple Computer, Inc. v. Franklin Computer Corporation devuelve el derecho de autor a los programas informáticos Archivado el 7 de mayo de 2017 en Wayback Machine en Golden Gate University Law Review Volumen 14, Número 2, Artículo 3 por Jan L. Nussbaum (enero de 1984)
  41. ^ Lemley, Menell, Merges y Samuelson. Software y Derecho de Internet , pág. 34.
  42. ^ Boyle 2003, pág. 45. sfn error: no target: CITEREFBoyle2003 (help)
  43. ^ Morin et al. 2012, Código abierto versus código cerrado.
  44. ^ Sen y otros. 2008, pág. 209.
  45. ^ Morin et al. 2012, Licencias de software libre y de código abierto (FOSS).
  46. ^ O'Regan 2022, pág. 106.

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.
  • 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.
  • Foster, Elvis C. (2014). Ingeniería de software: un enfoque metódico . Apress. ISBN 978-1-4842-0847-2.
  • 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.
  • Kaczmarek, Stefan; Lees, Brad; Bennett, Gary; Fisher, Mitch (2018). Objective-C para principiantes absolutos: programación fácil para iPhone, iPad y Mac . Apress. ISBN 978-1-4842-3428-0.
  • Katyal, Sonia K. (2019). "La paradoja del secreto del código fuente". Cornell Law Review . 104 : 1183.
  • Kitchin, Rob; Dodge, Martin (2011). Código/espacio: software y vida cotidiana . MIT Press. ISBN 978-0-262-04248-2.
  • Lin, Daniel; Sag, Matthew; Laurie, Ronald S. (2001). "Código fuente versus código objeto: implicaciones de las patentes para la comunidad de código abierto". Revista de Derecho Informático y de Alta Tecnología de Santa Clara . 18 : 235.
  • Morin, Andrew; Urban, Jennifer; Sliz, Piotr (2012). "Una guía rápida sobre licencias de software para el científico-programador". PLOS Computational Biology . 8 (7): e1002598. Bibcode :2012PLSCB...8E2598M. doi : 10.1371/journal.pcbi.1002598 . ISSN  1553-7358. PMC  3406002 . PMID  22844236.
  • 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.
  • Sen, Ravi; Subramaniam, Chandrasekar; Nelson, Matthew L. (2008). "Determinantes de la elección de la licencia de software de código abierto". Journal of Management Information Systems . 25 (3). Informa UK Limited: 207–240. doi :10.2753/mis0742-1222250306. ISSN  0742-1222.
  • Sebesta, Robert W. (2012). Conceptos de lenguajes de programación (10.ª ed.). Addison-Wesley. ISBN 978-0-13-139531-2.
  • 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.
  • 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.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Source_code&oldid=1248642143"