Ejecución del programa |
---|
Conceptos generales |
Tipos de código |
Estrategias de compilación |
Notable runtimes |
|
Notable compilers & toolchains |
|
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.
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]
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]
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]
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]
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]
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]
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]
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]