stringtranslate.com

Código fuente

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 fundamental The C Programming Language tiene su origen en Brian Kernighan en los Laboratorios Bell en 1974. [1]

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

Dado que una computadora, básicamente, 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 un 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 declaración . Un método que combina compilación e interpretación es producir primero código de bytes . 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 los años 40, [2] estaban programados en lenguaje de máquina (instrucciones sencillas que podían ser ejecutadas directamente por el procesador). El lenguaje de máquina era difícil de depurar y no era portátil entre diferentes sistemas informáticos. [3] Inicialmente, los recursos de hardware eran escasos y costosos, mientras que los recursos humanos eran más baratos. [4] A medida que los programas se volvieron más complejos, la productividad de los programadores 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 los años cincuenta. Estos lenguajes abstrajeron los detalles del hardware y, en cambio, fueron diseñados para expresar algoritmos que los humanos pudieran entender más fácilmente. [5] [6] Como instrucciones distintas del hardware de la computadora subyacente, el software es, por lo tanto, relativamente reciente y se remonta a 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 pueda ejecutarse directamente en el hardware de la computadora . [7]

El código fuente es la forma de código que los humanos modifican directamente, 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 transferir a una máquina diferente y volver a compilarse allí. Para el mismo código fuente, el código objeto puede variar significativamente, no solo según la máquina para la que se compila, sino también según la optimización del rendimiento del compilador. [8] [9]

Organización

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. [10]

Un ejemplo de código fuente Java más complejo . Escrito en estilo de programación orientada a objetos , muestra código repetitivo . Con los comentarios del prólogo indicados en rojo, los comentarios en línea indicados en verde y las declaraciones del programa indicadas 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

Estimacion

El número de líneas de código fuente se utiliza a menudo como métrica al evaluar la productividad de los programadores informáticos, 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 de computadoras les puede resultar útil revisar el código fuente existente para aprender sobre técnicas de programación. [13] El intercambio de 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 el código fuente un medio artístico expresivo . [14]

El código fuente a menudo contiene comentarios : bloques de texto marcados para que el compilador los ignore. Este contenido no forma parte de la lógica del programa, sino que pretende ayudar a los lectores a comprender el programa. [15]

Las empresas suelen mantener la confidencialidad del código fuente para ocultar algoritmos considerados secreto comercial . Los algoritmos y códigos fuente secretos y patentados se utilizan ampliamente para aplicaciones gubernamentales sensibles, como la justicia penal , lo que da como resultado un comportamiento de caja negra con una falta de transparencia en la metodología del algoritmo. El resultado es evitar el escrutinio público de cuestiones como el sesgo. [dieciséis]

Modificación

El acceso al código fuente (no sólo al código objeto) es esencial para modificarlo. [17] Es necesario comprender el código existente para comprender cómo funciona [17] y antes de modificarlo. [18] La tasa de comprensión depende tanto de la base del código como de la habilidad del programador. [19] A los programadores experimentados les resulta más fácil comprender lo que hace el código en un alto nivel. [20] A veces se utiliza la visualización de software 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 (mejorar la estructura sin cambiar la funcionalidad) y la reestructuración (mejorar 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 realizadas por otros desarrolladores se utilizan a menudo para examinar el código nuevo agregado 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 mantenibilidad 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 una vez finalizadas las pruebas de software . [24] Junto con las pruebas de software que funcionan ejecutando el código, el análisis de programas estáticos 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 avanzar paso a paso en la ejecución 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 se puedan llevar a cabo las instrucciones. [7] Después de compilarse, el programa se puede guardar como un archivo 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 entre 10 y 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] Generalmente es más rentable incorporar calidad al producto desde el principio que intentar agregarla más adelante 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 calidad del software que permite modificarlo fácilmente sin alterar la funcionalidad existente. [33] Seguir convenciones de codificación, como el uso claro de funciones y nombres de variables que correspondan a su propósito, facilita el mantenimiento. [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, a pesar de que 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 es la subestimación en la estimación del esfuerzo de desarrollo de software , lo que lleva a que se asignen recursos insuficientes al desarrollo. [37] Un desafío con la mantenibilidad es que muchos cursos de ingeniería de software no la 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]

Derechos de autor y licencias

La situación varía a nivel mundial, pero en Estados Unidos antes de 1974, el software y su código fuente no estaban protegidos por derechos de autor y, por lo tanto, siempre eran software de dominio público . [39] En 1974, la Comisión estadounidense sobre nuevos usos tecnológicos de obras protegidas por derechos de autor (CONTU) decidió que "los programas informáticos, en la medida en que incorporan la creación original de un autor, son materia propia 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 gratuita, 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 gratuita del software de código abierto puede acelerar el desarrollo. [46]

Ver también

Referencias

  1. ^ Kernighan, Brian W. "Programación en C: un tutorial" (PDF) . Bell Laboratories, Murray Hill, Nueva Jersey Archivado desde el original (PDF) el 23 de febrero de 2015.
  2. ^ Gabbrielli y Martini 2023, pag. 519.
  3. ^ Gabbrielli y Martini 2023, págs. 520–521.
  4. ^ Gabbrielli y Martini 2023, pag. 522.
  5. ^ Gabbrielli y Martini 2023, pag. 521.
  6. ^ ab Tracy 2021, pag. 1.
  7. ^ ab Tracy 2021, pag. 121.
  8. ^ Lin y col. 2001, págs. 238-239.
  9. ^ Katyal 2019, pag. 1194.
  10. ^ ab Tracy 2021, págs.
  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 Profesional, 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. ^ ab Katyal 2019, pag. 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. ^ ab O'Regan 2022, pag. 375.
  23. ^ Tripatía y Naik 2014, p. 94.
  24. ^ ab Dooley 2017, pág. 272.
  25. ^ O'Regan 2022, págs.18, 21.
  26. ^ O'Regan 2022, pag. 133.
  27. ^ Kaczmarek y col. 2018, págs. 348–349.
  28. ^ Sebesta 2012, pag. 28.
  29. ^ Galin 2018, pag. 26.
  30. ^ O'Regan 2022, págs.68, 117.
  31. ^ O'Regan 2022, págs.3, 268.
  32. ^ ab Varga 2018, pag. 12.
  33. ^ Varga 2018, pag. 5.
  34. ^ Tripatía y Naik 2014, págs.
  35. ^ Tripatía y Naik 2014, p. 309.
  36. ^ Varga 2018, págs. 6–7.
  37. ^ Varga 2018, pag. 7.
  38. ^ Varga 2018, págs. 7–8.
  39. ^ Liu, José P.; Dogan, Stacey L. (2005). "Ley de derechos de autor y especificidad de la materia: el caso del software informático". Encuesta anual sobre derecho estadounidense de la Universidad de Nueva York . 61 (2). Archivado desde el original el 25 de junio de 2021.
  40. ^ Apple Computer, Inc. contra Franklin Computer Corporation devuelve el byte a la protección de derechos de autor para 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 1984)
  41. ^ Lemley, Menell, Merges y Samuelson. Derecho del software y de Internet , pág. 34.
  42. ^ Boyle 2003, pag. 45.
  43. ^ Morin y col. 2012, Código abierto versus código cerrado.
  44. ^ Sen y col. 2008, pág. 209.
  45. ^ Morin y col. 2012, Licencia de software libre y de código abierto (FOSS).
  46. ^ O'Regan 2022, pag. 106.

Fuentes

enlaces externos