Resultado de Aprendizaje 1: Prueba de aplicaciones web y para dispositivos móviles
Criterio 1.a: Comparar diferentes lenguajes de programación según sus características principales
- Conceptos: Características que afectan pruebas y seguridad, como gestión de memoria, seguridad de tipos y manejo de excepciones.
- Prácticas: Escribir y probar código en lenguajes como Python, Java y C++; usar herramientas de análisis estático para identificar problemas.
- Herramientas: IDEs (PyCharm, Eclipse), análisis estático (Pylint, FindBugs), frameworks de prueba (pytest, JUnit).
- Adicional: Estudios de casos sobre cómo la elección del lenguaje impactó la seguridad, como el uso de C en sistemas críticos.
Criterio 1.b: Describir diferentes modelos de ejecución de software
- Conceptos: Modelos como cliente-servidor, microservicios y monolíticos; implicaciones de seguridad en cada uno.
- Prácticas: Configurar aplicaciones simples en diferentes modelos; identificar riesgos de seguridad mediante análisis.
- Herramientas: Servidores web (Apache, Nginx), contenedores (Docker), pasarelas API.
- Adicional: Ejemplos de brechas de seguridad relacionadas con modelos de ejecución, como ataques a microservicios mal configurados.
Criterio 1.c: Reconocer elementos básicos del código fuente, dándoles significado
- Conceptos: Constructos de programación (variables, funciones, clases); cómo pueden introducir vulnerabilidades si se usan incorrectamente.
- Prácticas: Revisar código para identificar problemas de seguridad; refactorizar código inseguro.
- Herramientas: Editores de código con linting (Visual Studio Code), herramientas de análisis estático (SonarQube).
- Adicional: Introducir estándares de codificación segura, como CERT y OWASP.
Criterio 1.d: Ejecutar diferentes tipos de prueba de software
- Conceptos: Pruebas unitarias, de integración, de sistema; pruebas de seguridad como penetración y fuzzing.
- Prácticas: Escribir pruebas unitarias; realizar pruebas de penetración; usar herramientas de fuzzing.
- Herramientas: Frameworks de prueba (JUnit, pytest), herramientas de seguridad (Burp Suite, AFL).
- Adicional: Discutir la importancia de las pruebas en el ciclo de vida del desarrollo de software (SDLC) y su integración con DevOps.
Criterio 1.e: Evaluar lenguajes de programación según la infraestructura de seguridad que proporcionan
- Conceptos: Características de seguridad en lenguajes (e.g., seguridad de memoria en Rust); vulnerabilidades comunes por lenguaje.
- Prácticas: Comparar lenguajes mediante análisis de código; usar escáneres de seguridad específicos.
- Herramientas: Escáneres de seguridad (Bandit para Python, FindSecBugs), comprobadores de dependencias (OWASP Dependency-Check).
- Adicional: Explorar por qué lenguajes como Ada o Rust son preferidos en aplicaciones críticas de seguridad.