Tema 43
Herramientas de Diseño y Desarrollo de Sistemas de Información. Funcionalidad y Conceptos. Entornos Integrados. Gestión de la Configuración del Software: Identificación de la Configuración. Control de Versiones y Cambios: GIT
Oposición Técnico/a de Función Administrativa – Opción Sistemas y Tecnología de la Información (TFA-STI) del Servicio Andaluz de Salud
Introducción
Las herramientas de diseño y desarrollo de sistemas de información son componentes esenciales en el ciclo de vida del software moderno. Estos instrumentos permiten a los desarrolladores crear, probar, desplegar y mantener sistemas de forma eficiente y controlada. Este tema aborda las herramientas CASE (Computer-Aided Software Engineering), los entornos de desarrollo integrado (IDE), la gestión de la configuración del software y, especialmente, los sistemas de control de versiones como GIT. Comprender estas herramientas es fundamental para cualquier profesional de TI que trabaja en la construcción y mantenimiento de sistemas de información en organizaciones modernas como el Servicio Andaluz de Salud.
1. Herramientas CASE: Conceptos y Clasificación
1.1 Definición de Herramientas CASE
CASE (Computer-Aided Software Engineering) son herramientas de software que automatizan y facilitan el desarrollo, mantenimiento y gestión de sistemas de información. Estas herramientas proporcionan un entorno integrado que combina múltiples funciones para optimizar el ciclo de vida del software, desde la planificación inicial hasta el mantenimiento final.
- Mejorar la productividad: Automatizan tareas repetitivas y aceleren el desarrollo
- Aumentar la calidad: Reducen errores mediante validación automática y estándares
- Reducir costes: Minimizan tiempos de desarrollo y mantenimiento
- Facilitar la documentación: Generan documentación automáticamente desde modelos
- Mejorar comunicación: Proporcionan un lenguaje común (UML) para equipos
- Garantizar trazabilidad: Rastrean cambios desde requisitos hasta código
1.2 Clasificación de Herramientas CASE según Fases del Ciclo de Vida
| Clasificación | Fases Cubiertas | Objetivos | Ejemplos |
|---|---|---|---|
| Upper CASE (U-CASE) | Planificación, Análisis de requisitos, Análisis funcional | Automatizar análisis y diseño de requisitos, crear especificaciones | Entreprise Architect, Sparx Systems, ArchiMate |
| Middle CASE (M-CASE) | Análisis, Diseño de aplicaciones | Automatizar diseño de bases de datos, estructuras de datos, módulos | Visual Studio, PowerDesigner, DBDesigner |
| Lower CASE (L-CASE) | Codificación, Pruebas, Depuración | Generar código, realizar pruebas, depuración, documentación | IntelliJ IDEA, Eclipse, Visual Studio Code, Junit, Selenium |
| Integrated CASE (I-CASE) | Todo el ciclo de vida completo | Cobertura total desde análisis hasta implantación | IBM Rational, Microsoft Visual Studio, SAP |
2. Entornos Integrados de Desarrollo (IDE)
2.1 Concepto y Funcionalidades Principales
Un Entorno de Desarrollo Integrado (IDE) es una aplicación de software que proporciona un conjunto de herramientas integradas en una única interfaz gráfica para facilitar el desarrollo de software de manera eficiente. Los IDE combinan las funcionalidades más importantes necesarias para programar, permitiendo al desarrollador trabajar sin necesidad de cambiar entre múltiples aplicaciones.
2.2 Componentes Principales de un IDE
Editor de Código Fuente
- Resaltado de sintaxis específico del lenguaje
- Autocompletado inteligente y sugerencias
- Detección de errores en tiempo real
- Navegación rápida entre archivos
- Refactorización automática de código
Compilador/Intérprete
- Compilación automática
- Detección de errores de sintaxis
- Generación de ejecutables
- Integración con herramientas de build
- Mensajes de error descriptivos
Depurador (Debugger)
- Ejecución paso a paso (step-by-step)
- Puntos de ruptura (breakpoints)
- Inspección de variables
- Evaluación de expresiones
- Rastreo de pila de llamadas
Herramientas Adicionales
- Gestor de proyectos
- Control de versiones (Git integrado)
- Pruebas automatizadas
- Análisis estático de código
- Documentación generada automáticamente
2.3 Tipos de Entornos de Desarrollo
IDEs Locales
Se instalan y ejecutan directamente en el equipo del desarrollador:
- Ventajas: Completo control, funcionamiento sin conexión, personalización total
- Desventajas: Configuración compleja, consume recursos locales, diferencias de configuración entre equipos
- Ejemplos: Visual Studio, IntelliJ IDEA, Eclipse, PyCharm
IDEs en la Nube
Se ejecutan en navegadores web, con recursos en servidores cloud:
- Ventajas: Acceso desde cualquier dispositivo, entorno estandarizado, menor consumo local
- Desventajas: Requiere conexión a internet, latencia potencial, dependencia del proveedor
- Ejemplos: VS Code Online, GitHub Codespaces, AWS Cloud9, Codenvy
2.4 IDEs Populares y sus Usos
| IDE | Lenguajes Soportados | Tipo | Características Principales |
|---|---|---|---|
| Visual Studio | C#, C++, VB.NET, Python, Java | Local | Integración Azure, excelente depuración, herramientas enterprise |
| Visual Studio Code | Múltiples (JavaScript, Python, Java, C++, Go) | Local/Cloud | Ligero, extensiones, popularidad comunidad, integración Git |
| IntelliJ IDEA | Java, Kotlin, Python, JavaScript | Local | Análisis inteligente, refactorización avanzada, herramientas web |
| Eclipse | Java, C++, Python, PHP | Local | Open source, multiplataforma, extensible, amplio ecosistema |
| PyCharm | Python, JavaScript, SQL | Local | Especializado en Python, integración web, herramientas científicas |
| NetBeans | Java, PHP, C++, HTML5 | Local | Open source, desarrollo visual, herramientas web modernas |
| Xcode | Swift, Objective-C | Local | Desarrollo iOS/macOS, integración Apple, Interface Builder |
3. Gestión de la Configuración del Software
3.1 Concepto y Objetivos
La Gestión de la Configuración del Software (SCM) es el conjunto de actividades que establecen y mantienen la integridad de los productos de software a lo largo de su ciclo de vida. Incluye la identificación, control, contabilidad y auditoría de la configuración de software.
- Identificar todos los componentes de un sistema (ítems de configuración)
- Controlar cambios de forma organizada y trazable
- Garantizar consistencia entre versiones
- Facilitar colaboración entre equipos
- Permitir reversión a versiones anteriores si es necesario
- Auditar y rastrear todas las modificaciones
- Asegurar que las versiones están correctamente identificadas
3.2 Identificación de la Configuración
Elementos de Configuración (CIs)
Son los componentes del software que requieren seguimiento y control durante el ciclo de vida:
- Código fuente: Ficheros de programación (*.java, *.py, *.cpp, etc.)
- Documentación: Especificaciones, manuales, requisitos
- Componentes compilados: Librerías, ejecutables, módulos objeto
- Datos de prueba: Ficheros y bases de datos para testing
- Configuraciones: Archivos de configuración (.xml, .ini, .conf)
- Scripts: Scripts de instalación, despliegue, migración
- Dependencias: Librerías externas, versiones de herramientas
Líneas Base (Baselines)
Una línea base es un punto de referencia aprobado en el ciclo de vida del software que marca un estado estable documentado:
- Baseline Funcional: Especificaciones completas del sistema establecidas al inicio
- Baseline Asignada: Diseño del sistema documentado y aprobado
- Baseline del Producto: Software completamente desarrollado y probado, listo para producción
- Versiones Etiquetadas: Marcas específicas en el control de versiones que identifican releases
3.3 Componentes de un Plan de Gestión de Configuración
| Componente | Descripción | Actividades Clave |
|---|---|---|
| Identificación | Determinar qué elementos requieren control | Crear lista de ítems, asignar identificadores únicos, documentar versiones |
| Control | Gestionar cambios en elementos de configuración | Solicitar cambios, revisar, autorizar, implementar cambios controlados |
| Contabilidad | Registrar el estado de elementos de configuración | Mantener registro de versiones, estados, cambios, historial completo |
| Auditoría | Verificar conformidad con el plan | Auditorías periódicas, verificación de completitud, validación de integridad |
4. Control de Versiones: GIT
4.1 Conceptos Fundamentales
GIT es un sistema de control de versiones distribuido que permite a los desarrolladores rastrear cambios en el código fuente, colaborar eficientemente y mantener un historial completo de modificaciones. Es el sistema de control de versiones más popular en la actualidad, utilizado en más del 87% de los proyectos de software.
- Distribuido: Cada desarrollador tiene una copia local completa del repositorio
- Rápido: Operaciones locales sin dependencia de servidor central
- Flexible: Soporta diferentes flujos de trabajo y modelos de colaboración
- Rastreable: Historial completo con autores, fechas y mensajes descriptivos
- Ramificación Ligera: Crear y fusionar ramas es rápido y seguro
- Open Source: Código abierto, gratuito, amplio soporte comunitario
4.2 Conceptos Clave de GIT
Repositorio (Repository)
Almacén central que contiene todos los archivos, historial completo de cambios y metadatos del proyecto:
- Repositorio Local: Copia completa en la máquina del desarrollador (directorio .git)
- Repositorio Remoto: Servidor central (GitHub, GitLab, Bitbucket) donde se almacena versión oficial
Rama (Branch)
Línea independiente de desarrollo que permite trabajar en paralelo sin afectar el código principal:
- Rama Principal (main/master): Rama por defecto, generalmente contiene código estable y listo para producción
- Ramas de Desarrollo: Ramas temporales para nuevas funcionalidades, correcciones de errores
- Fusión (merge): Proceso de integrar cambios de una rama a otra
Confirmación (Commit)
Snapshots de los cambios realizados en el código en un momento específico:
- Registro permanente de modificaciones
- Incluye identificador hash SHA-1 único
- Contiene mensaje descriptivo de cambios
- Registra autor, fecha/hora y cambios exactos
4.3 Flujo de Trabajo Básico de GIT
1. MODIFICAR ARCHIVOS
└─ Cambios realizados en el directorio de trabajo
Estado: MODIFICADO
2. PREPARAR CAMBIOS (Staging)
└─ Comando: git add .
Archivos trasladados al área de preparación (index)
Estado: PREPARADO
3. CONFIRMAR CAMBIOS (Commit)
└─ Comando: git commit -m "Mensaje descriptivo"
Cambios guardados permanentemente en repositorio local
Estado: CONFIRMADO
4. ENVIAR AL REPOSITORIO REMOTO (Push)
└─ Comando: git push origin main
Cambios sincronizados con servidor remoto
Disponibles para todo el equipo
4.4 Operaciones Principales de GIT
| Operación | Comando GIT | Descripción |
|---|---|---|
| Inicializar | git init nombreproyecto | Crear nuevo repositorio local |
| Clonar | git clone url | Copiar repositorio remoto a máquina local |
| Agregar cambios | git add . | Mover archivos modificados a área de preparación |
| Confirmar | git commit -m «mensaje» | Guardar cambios con mensaje descriptivo |
| Enviar | git push origin rama | Sincronizar cambios locales con repositorio remoto |
| Descargar | git pull origin rama | Obtener cambios del repositorio remoto |
| Ver historial | git log | Mostrar historial de commits realizados |
| Ver estado | git status | Mostrar archivos modificados sin confirmar |
| Crear rama | git branch nombrerama | Crear nueva rama de desarrollo |
| Cambiar rama | git checkout nombrerama | Cambiar a rama especificada |
| Fusionar rama | git merge nombrerama | Integrar cambios de una rama a otra |
5. Flujos de Trabajo con GIT
5.1 Git Flow
Git Flow es un modelo de flujo de trabajo complejo y estructurado, diseñado para proyectos con ciclos de publicación planificados y versiones múltiples en mantenimiento.
Ramas Principales (vida infinita):
- main: Rama de producción, contiene código estable y lanzamientos oficiales
- develop: Rama de integración, contiene desarrollo actual en progreso
Ramas de Soporte (vida finita):
- feature/: Ramas para nuevas funcionalidades (ej: feature/login-system)
- release/: Ramas para preparar lanzamiento a producción
- hotfix/: Ramas para correcciones urgentes en producción
- Excelente control y organización en proyectos grandes
- Permite mantenimiento de múltiples versiones simultáneamente
- Facilita pruebas exhaustivas antes de producción
- Estructura clara para equipos grandes
- Complejidad aumentada, curva de aprendizaje más pronunciada
- Ramas de larga duración pueden generar conflictos
- Menos adecuado para ciclos de desarrollo muy rápidos
- Requiere disciplina y coordinación en el equipo
5.2 GitHub Flow
GitHub Flow es un modelo ligero y simple, ideal para equipos con entregas continuas e integración frecuente.
Características Principales:
- Rama main siempre lista para producción: El código en main debe ser estable y deployable
- Feature branches: Se crean ramas descriptivas desde main (ej: add-user-authentication)
- Pull Requests: Antes de fusionar, se abre un PR para revisión de código
- Revisión y discusión: El equipo revisa, comenta y aprueba cambios
- Merge a main: Una vez aprobado, se fusiona a main e inmediatamente a producción
- Despliegue frecuente: Múltiples despliegues por día posibles
- Simplicidad y facilidad de comprensión
- Despliegues rápidos y frecuentes
- Excelente para CI/CD y DevOps
- Menos conflictos por ramas de corta duración
- Escalable para equipos de cualquier tamaño
5.3 GitLab Flow
GitLab Flow combina simplicidad de GitHub Flow con estructura de ambientes de Git Flow.
- Rama main: Código estable listo para producción
- Feature branches: Desarrollo de nuevas funcionalidades
- Environment branches: Ramas por cada ambiente (staging, production)
- Merge requests: Revisión de código antes de fusión
- Despliegue controlado: Promoción cuidadosa entre ambientes
6. Integración en MÉTRICA Versión 3
MÉTRICA versión 3 es la metodología estándar de la administración pública española para desarrollo de sistemas. Incorpora la gestión de configuración en el proceso de Construcción del Sistema (CSI):
6.1 Actividades de Gestión de Configuración en MÉTRICA 3
- CSI 1: Preparación del entorno, incluyendo configuración de herramientas de control de versiones
- CSI 2-5: Durante codificación y pruebas, todos los cambios deben ser registrados en GIT
- CSI 6-7: Generación de baselines de código probado y documentación de versiones
7. Mejores Prácticas en Gestión de Configuración
- Commits frecuentes: Realizar cambios pequeños y documentados regularmente
- Mensajes descriptivos: Usar mensajes claros que expliquen el «por qué» del cambio
- Ramas descriptivas: Usar nombres que indiquen claramente el propósito (feature/add-payment, bugfix/login-error)
- Revisión de código: Implementar pull requests y code review antes de merges
- Protección de main: Configurar permisos para que solo cambios probados lleguen a producción
- Tagging de versiones: Usar tags para marcar releases (v1.0.0, v1.1.0)
- Gestión de conflictos: Resolver conflictos de merge proactivamente
- Documentación: Mantener README.md y documentación actualizada
- Integración continua: Automatizar pruebas al hacer push
- Backups regulares: Asegurar backups del repositorio
8. Cuestionario de Evaluación (20 Preguntas)
Pregunta 1: ¿Qué significa CASE en ingeniería de software?
CASE significa Computer-Aided Software Engineering, que se refiere a herramientas que automatizan y facilitan el desarrollo, mantenimiento y gestión de sistemas de información.
Pregunta 2: ¿Cuál es la principal diferencia entre Upper CASE y Lower CASE?
Upper CASE automatiza análisis y diseño de requisitos, mientras que Lower CASE automatiza codificación, pruebas y depuración. Cubren diferentes fases del ciclo de vida.
Pregunta 3: ¿Qué es un IDE (Entorno de Desarrollo Integrado)?
Un IDE es un entorno integrado que combina editor de código, compilador, depurador y otras herramientas en una única interfaz para facilitar el desarrollo eficiente.
Pregunta 4: ¿Cuál de los siguientes es un componente esencial de un IDE?
Un depurador es un componente esencial de un IDE que permite ejecutar código paso a paso, establecer puntos de ruptura e inspeccionar variables.
Pregunta 5: ¿Qué ventaja principal ofrece un IDE en la nube sobre uno local?
Los IDEs en la nube ofrecen flexibilidad para acceder desde cualquier dispositivo con navegador, facilitando el trabajo remoto y colaborativo.
Pregunta 6: ¿Qué es la gestión de la configuración del software?
La gestión de configuración del software incluye identificación, control, contabilidad y auditoría de toda la configuración del software a lo largo de su ciclo de vida.
Pregunta 7: ¿Qué es una línea base (baseline) en gestión de configuración?
Una línea base es un snapshot aprobado de un proyecto en un momento específico, que marca un estado estable documentado como referencia para cambios futuros.
Pregunta 8: ¿Cuál es la característica principal que hace a GIT distribuido?
GIT es distribuido porque cada desarrollador tiene una copia completa del repositorio localmente, permitiendo trabajar sin conexión a servidor central.
Pregunta 9: ¿Cuál es el orden correcto de operaciones en el flujo de trabajo de GIT?
El flujo correcto es: 1) Modificar archivos, 2) Agregar cambios (git add), 3) Confirmar (git commit), 4) Enviar (git push).
Pregunta 10: ¿Qué comando de GIT se usa para descargar cambios del repositorio remoto?
git pull descarga e integra cambios del repositorio remoto a la rama local actual. git fetch solo descarga sin integrar, git push envía cambios.
Pregunta 11: ¿Cuál es el propósito principal de las ramas (branches) en GIT?
Las ramas permiten a diferentes desarrolladores trabajar en paralelo en diferentes características sin interferencias, facilitando colaboración organizada.
Pregunta 12: ¿Qué es Git Flow?
Git Flow es un modelo complejo con ramas main, develop, feature, release y hotfix, diseñado para proyectos con ciclos de publicación bien definidos.
Pregunta 13: ¿Cuál es la característica principal de GitHub Flow?
GitHub Flow es un modelo ligero basado en despliegues frecuentes. Utiliza main como rama estable y features branches con pull requests para revisión.
Pregunta 14: ¿Qué es un Pull Request en GIT?
Un Pull Request es una solicitud para revisar, comentar y potencialmente fusionar cambios de una rama a otra, facilitando code review colaborativo.
Pregunta 15: ¿Cuál de los siguientes IDEs es especializado en desarrollo Python?
PyCharm es el IDE específico de JetBrains para desarrollo Python, con herramientas avanzadas para análisis, depuración y desarrollo web con Python.
Pregunta 16: ¿Qué es un commit en GIT?
Un commit es un snapshot de cambios que se guarda permanentemente en el repositorio local, con hash SHA-1 único, autor, fecha y mensaje descriptivo.
Pregunta 17: ¿Qué significa «merge» en GIT?
Merge es el proceso de integrar cambios de una rama a otra, combinando el historial de commits de ambas ramas.
Pregunta 18: ¿En qué difiere un IDE local de un IDE en la nube?
Los IDEs locales se instalan en máquina local y usan sus recursos. Los IDEs cloud se ejecutan en navegador, usan recursos de servidor remoto y permiten acceso desde cualquier lugar.
Pregunta 19: ¿Cuál es un elemento de configuración (CI) típico en gestión de configuración?
Los elementos de configuración incluyen código fuente, documentación, datos de prueba, componentes compilados, scripts, configuraciones y dependencias que requieren seguimiento.
Pregunta 20: ¿Qué operación realiza «git clone»?
git clone descarga una copia completa del repositorio remoto a la máquina local, incluyendo todo el historial y todas las ramas.
9. Referencias Bibliográficas
Referencias sobre Herramientas CASE e IDEs
- Pressman, R. S. (2021). Software Engineering: A Practitioner’s Approach. 9ª edición. McGraw-Hill.
- Sommerville, I. (2020). Software Engineering. 10ª edición. Addison-Wesley.
- ISO/IEC 15504 (SPICE): Software Process Improvement and Capability Determination.
- IEEE 1219:2019. Standard for Application and Management of the Systems and Software Engineering Process.
Referencias sobre GIT y Control de Versiones
- Chacon, S., & Straub, B. (2014). Pro Git. 2ª edición. Apress.
- Atlassian. (2023). Git Tutorials. https://www.atlassian.com/git
- Driessen, V. (2010). A successful Git branching model. https://nvie.com/posts/a-successful-git-branching-model/
- GitHub. (2023). GitHub Flow. https://guides.github.com/introduction/flow/
- GitLab. (2023). GitLab Flow. https://about.gitlab.com/blog/2014/09/29/gitlab-flow/
Referencias sobre Gestión de Configuración del Software
- IEEE 828:2012. Standard for Configuration Management in Systems and Software Engineering.
- Ministerio de Administraciones Públicas. (2008). MÉTRICA Versión 3. Disponible en administracionelectronica.gob.es
- Estándares de la Administración Pública Española para Gestión de Configuración.
Referencias sobre IDEs Específicos
- JetBrains. (2023). IntelliJ IDEA Documentation. https://www.jetbrains.com/help/idea/
- Microsoft. (2023). Visual Studio Documentation. https://docs.microsoft.com/visualstudio
- Eclipse Foundation. (2023). Eclipse IDE Documentation. https://www.eclipse.org/ide/
- Visual Studio Code. (2023). Official Documentation. https://code.visualstudio.com/docs
Referencias del Sector Público (SAS)
- Junta de Andalucía. Servicio Andaluz de Salud. Políticas de Tecnología de la Información.
- Agencia para la Defensa de la Seguridad Informática (CCN-CERT). Recomendaciones para desarrollo seguro.
- Normas ISO/IEC 27001 para seguridad en sistemas de información sanitarios.
