1.f.1 Herramientas Utilizadas en el Desarrollo de Software.

Objetivo

Evaluar la funcionalidad de las principales herramientas utilizadas durante el desarrollo de software y relacionarlas con las tareas y fases en las que intervienen.

1. Contenidos

1.1 Herramientas de desarrollo

El desarrollo profesional utiliza herramientas para escribir, traducir, ejecutar, depurar, probar, versionar, construir, documentar y entregar software.


Editar → Compilar/Ejecutar → Depurar → Versionar → Probar → Construir → Entregar
				

No existe una única herramienta que sea siempre mejor. Debemos valorar si sus funciones se adaptan al proyecto.

1.2 Editores de código

Un editor de código facilita la creación y modificación del código fuente. Sus funciones pueden incluir:

  • resaltado de sintaxis;
  • numeración de líneas;
  • autocompletado;
  • búsqueda y sustitución;
  • extensiones;
  • integración con terminal y Git.

Ejemplos: Visual Studio Code (sin extensiones), Sublime Text, Notepad++, Vim.

1.3 IDE

Un IDE (Integrated Development Environment) integra en una misma aplicación varias funciones relacionadas con el desarrollo:


IDE
├── editor
├── gestión del proyecto
├── compilación / ejecución
├── depuración
├── refactorización
├── testing
└── integración con control de versiones
				

Ejemplos: IntelliJ IDEA, Eclipse, NetBeans, Visual Studio, PyCharm o PhpStorm.

Un IDE puede integrar un compilador, Git o un framework de pruebas, pero estos siguen siendo conceptos y herramientas diferentes.

1.4 Compiladores, intérpretes y runtimes

Estas herramientas permiten transformar o ejecutar programas:

  • GCC / Clang: compiladores habituales para C y C++;
  • javac: compilador de Java a bytecode;
  • Python: entorno de ejecución del lenguaje Python;
  • JVM: ejecuta bytecode Java.

1.5 Depuradores

Un depurador ayuda a observar el comportamiento de un programa durante la ejecución. Entre sus funciones habituales están:

  • puntos de ruptura (breakpoints);
  • ejecución paso a paso;
  • inspección de variables;
  • visualización de la pila de llamadas.

Es especialmente útil para localizar errores lógicos que no impiden compilar el programa.

Aunque existen programas de depuración, lo habitual es usarlos integrados en el IDE.

1.6 Control de versiones

Un sistema de control de versiones registra la evolución de los archivos de un proyecto. Permite:

  • crear un historial de cambios;
  • recuperar versiones;
  • crear ramas;
  • combinar trabajo;
  • colaborar en equipo.

Git es el sistema de control de versiones más utilizado. GitHub, GitLab o Bitbucket son servicios que pueden alojar repositorios Git y añadir funcionalidades colaborativas. Otros sistemas de control de versiones son Subversion (svn) que se utiliza en SourceForge y Control Version System (cvs) que es muy antiguo.

1.7 Herramientas de construcción y dependencias

Cuando nuestros programas utilizan librerías de terceros, que dependen de otras librerías de otros terceros que a su vez dependen de otras... Entonces necesitamos un "gestor de dependencias" para no rompernos la cabeza.

Herramientas como Maven o Gradle en Java, o Composer en PHP, npm en JavaScript o pip en Python, automatizan las tareas de construcción y gestionan las dependencias de nuestros programas.


Dependencias
     ↓
Compilación
     ↓
Pruebas
     ↓
Empaquetado
     ↓
Artefacto
				

También pueden gestionar las bibliotecas externas que necesita el proyecto y sus versiones.

1.8 Herramientas de pruebas

Los frameworks de testing permiten automatizar comprobaciones. Algunos ejemplos:

  • JUnit para Java;
  • pytest para Python;
  • Jest para JavaScript;
  • PHPUnit para PHP.

assertEquals(2, producto.getStock());
				

Las pruebas automáticas permiten repetir comprobaciones cada vez que cambia el programa.

1.9 Documentación

La documentación ayuda a utilizar, mantener y evolucionar el software. Puede incluir README, manuales, documentación de API, diagramas o comentarios estructurados.

Herramientas como Javadoc permiten generar documentación a partir del código fuente Java. Otras como PHPDoc, PyDoc lo hacen para otros lenguajes.

1.10 Entornos de desarrollo, pruebas y producción

Un proyecto profesional suele separar:

  • desarrollo: donde el equipo programa y prueba cambios;
  • pruebas / staging: donde se valida una versión en un entorno controlado;
  • producción: donde la aplicación es utilizada por usuarios reales.

No es recomendable experimentar directamente en producción.

1.11 Criterios para evaluar herramientas

Para comparar herramientas podemos valorar:

  • funcionalidad;
  • lenguajes y plataformas soportadas;
  • facilidad de uso;
  • integración con otras herramientas;
  • extensibilidad;
  • rendimiento y consumo de recursos;
  • licencia y coste;
  • comunidad, mantenimiento y documentación.

Para El Emporio Arcano, por ejemplo, un entorno Java podría combinar IntelliJ IDEA o Eclipse, Git, Maven, JUnit y una base de datos relacional.

2. Ejercicios

  1. Explica la diferencia entre editor e IDE.
  2. ¿Qué herramienta utilizarías para detener un programa en una línea y observar variables?
  3. Explica la diferencia entre Git y GitHub.
  4. ¿Qué problema resuelven Maven y Gradle?
  5. Relaciona: JUnit, javac, Git, IntelliJ IDEA y Javadoc con su función principal.
  6. Compara dos IDE o editores atendiendo al menos a tres criterios.
  7. Propón una caja de herramientas para desarrollar El Emporio Arcano con backend Java y justifica tres elecciones.

3. Bibliografía