Produccion de Software EMI305
Apuntes del curso de Produccion de Software EMI305
Bienvenido/a al repositorio de Produccion de Software EMI305.
Este proyecto está completamente preconfigurado con un Dev Container en Visual Studio Code que incluye todas las herramientas necesarias para análisis de seguridad (SBOM, CodeQL y Grype).
📋 Requisitos Previos
Antes de comenzar, asegúrate de tener instalados:
| Herramienta | Enlace | Nota |
|---|---|---|
| Docker | https://www.docker.com/get-started | Debe estar corriendo en tu sistema |
| Visual Studio Code | https://code.visualstudio.com/ | Editor recomendado |
| Dev Containers Extension | Extensión | Necesaria para abrir el Dev Container |
✅ Verificar Docker
Abre una terminal y verifica que Docker está correctamente instalado:
docker --version
docker run hello-worldDeberías ver la versión de Docker y un mensaje de éxito.
🚀 Inicio Rápido (5-10 minutos)
Paso 1: Clonar el repositorio
git clone https://github.com/dci-courses/produccion_software_emi305.git
cd produccion_software_emi305Paso 2: Abrir en VS Code
code .Paso 3: Reconstruir y Abrir el Dev Container
Una vez que VS Code esté abierto:
- Presiona
Ctrl + Shift + P(Windows/Linux) oCmd + Shift + P(Mac) - Escribe:
Dev Containers: Rebuild and Reopen in Container - Selecciona la opción y presiona Enter

Esto iniciará el proceso de construcción del contenedor.
Paso 4: Esperar a la Construcción ⏳
Durante la construcción, se realizarán:
- ✅ Instalación de dependencias Python
- ✅ Configuración de Jupyter Kernel
- ✅ Descarga de CodeQL query packs
- ✅ Actualización de BD de Grype
- ✅ Verificación de herramientas
Esto puede tomar 3-10 minutos la primera vez. Ten paciencia y no cierres VS Code.
Verás mensajes en la terminal indicando el progreso:
Building image...
[... logs del proceso ...]
Successfully built container
Paso 5: Archivo de Bienvenida
Después de la construcción, se abrirá automáticamente WELCOME.md con:
- 📚 Guía completa del proyecto
- 🚀 Instrucciones de uso
- 📊 Descripción de scripts disponibles
- ❓ Solución de problemas comunes
Si no se abre automáticamente, puedes abrirlo manualmente: - Presiona Ctrl + O - Busca WELCOME.md
Paso 6: Configura el kernel de Jupyter
- Abre cualquier notebook
.ipynb - Al ejecutar una celda por primera vez, selecciona el kernel: Python (ciberseguridad)

⚙️ Qué Se Instala Automáticamente
El Dev Container preinstala automáticamente:
🐍 Python y Herramientas
| Herramienta | Versión | Uso |
|---|---|---|
| Python | 3.11 | Lenguaje base |
| uv | Latest | Gestor de dependencias (más rápido que pip) |
| Jupyter | Latest | Notebooks interactivos |
| Pandas | Latest | Análisis de datos |
🔐 Herramientas de Seguridad
| Herramienta | Versión | Uso |
|---|---|---|
| CodeQL CLI | 2.25.1 | Análisis estático de seguridad (vulnerabilidades en código) |
| Grype | Latest | Escaneo de vulnerabilidades en dependencias |
| Syft | Latest | Generación de SBOMs (inventario de componentes) |
| Node.js | 20 | Necesario para análisis JavaScript con CodeQL |
📦 Query Packs de CodeQL
Se descargan automáticamente: - codeql/python-queries - Análisis de Python - codeql/javascript-queries - Análisis de JavaScript/TypeScript - codeql/java-queries - Análisis de Java
✨ Después de Abrir el Contenedor
1. Verificar que Todo Funciona
Abre una terminal en VS Code (Ctrl + ``) y ejecuta:
uv run scripts/generate_codeql.py --diagnose
uv run scripts/generate_grype.py --diagnoseDeberías ver:
✓ CodeQL CLI: CodeQL version 2.25.1
✓ Grype CLI: Grype version X.X.X
✓ Node.js: v20.x.x
✓ npm: x.x.x
✓ Query pack codeql/python-queries disponible
✓ Query pack codeql/javascript-queries disponible
✓ Grype DB status: Database ready
2. Explorar el Proyecto
Lee el contenido de: - WELCOME.md: Guía general del proyecto - nbs/sbom/generacion_sbom.ipynb: Notebook para generar SBOMs - nbs/vuln/generacion_codeql.ipynb: Notebook para ejecutar análisis estático (CodeQL) - nbs/vuln/generacion_grype.ipynb: Notebook para escanear vulnerabilidades en dependencias (Grype)
3. Ejecutar tu Primer Análisis
Idealmente puedes realizar el proceso a través de los notebooks para la mejor experiencia, sin embargo, también puedes ejecutar los archivos de forma individual.
Desde la terminal:
# Generar SBOMs para los repositorios
uv run scripts/generate_sboms.py
# Ejecutar análisis de seguridad estático con CodeQL
uv run scripts/generate_codeql.py
# Escanear vulnerabilidades en dependencias con Grype
uv run scripts/generate_grype.pyLos resultados se guardarán en data/results/
🧭 Estructura del Proyecto
produccion_software_emi305/
├── data/
│ ├── repos/ # Repositorios a analizar
│ ├── results/ # Resultados de análisis (JSON)
│ └── repos.json # Configuración de repositorios
├── nbs/ # Notebooks Jupyter
│ ├── sbom/ # Análisis de SBOMs
│ └── vuln/ # Análisis de vulnerabilidades
│ ├── generacion_codeql.ipynb # Análisis estático
│ ├── explicacion_script_codeql.ipynb
│ ├── generacion_grype.ipynb # Escaneo de dependencias
│ └── explicacion_script_grype.ipynb
├── scripts/ # Automatización
│ ├── generate_sboms.py
│ ├── generate_codeql.py
│ ├── generate_grype.py
│ └── add_submodules.py
├── .devcontainer/ # Configuración del Dev Container
├── README.md # Será generado automáticamente
└── WELCOME.md # Guía general (se abre automáticamente)
🐛 Solución de Problemas
❌ “Dev Containers extension not found”
Solución: Instala la extensión desde el Marketplace de VS Code - Presiona Ctrl + Shift + X - Busca “Dev Containers” - Instala la extensión oficial de Microsoft
❌ “Docker daemon is not running”
Solución: Asegúrate de que Docker Desktop esté abierto - Windows: Abre Docker Desktop desde el menú Inicio - Mac: Abre Docker Desktop desde Applications - Linux: Ejecuta sudo systemctl start docker
❌ “La construcción del contenedor es muy lenta”
Normal para la primera vez (puede tomar 5-10 minutos) - Se descargan imágenes base - Se compilan herramientas como CodeQL - Se descarga la BD de Grype - Próximas aperturas serán mucho más rápidas
❌ “Python kernel no aparece en Jupyter”
Solución: Reinicia el kernel manualmente 1. Abre un notebook .ipynb 2. Presiona Ctrl + Shift + P 3. Selecciona Jupyter: Select Kernel 4. Elige Python (ciberseguridad)
❌ “CodeQL análisis falla”
Ejecuta el diagnóstico:
uv run scripts/generate_codeql.py --diagnoseVerifica que todos los componentes tengan ✓
❌ “Grype análisis falla”
Ejecuta el diagnóstico:
uv run scripts/generate_grype.py --diagnoseVerifica que Grype CLI y su BD estén disponibles
💡 Tips Útiles
Primeros comandos después de abrir el contenedor:
# Ver qué repositorios están listos para analizar ls data/repos/ # Ver resultados previos ls data/results/Agregar nuevos repositorios:
- Edita
data/repos.json - Ejecuta:
uv run python scripts/add_submodules.py - Corre los análisis nuevamente
- Edita
Reconstruir el contenedor si necesitas actualizar dependencias:
Ctrl + Shift + P→Dev Containers: Rebuild Container
Acceder a la terminal dentro del contenedor:
- `Ctrl + `` para abrir la terminal integrada
📚 Próximos Pasos
- Lee
WELCOME.mdpara entender la estructura completa - Explora los notebooks en
nbs/para ver ejemplos de uso - Ejecuta
--diagnosepara verificar herramientas - Corre tu primer análisis con los repositorios incluidos
❓ ¿Necesitas Ayuda?
- Consulta
WELCOME.mdpara instrucciones detalladas - Revisa los notebooks para ejemplos paso a paso
- Verifica el diagnóstico:
uv run scripts/generate_codeql.py --diagnoseyuv run scripts/generate_grype.py --diagnose