@ebadilla10
@ebadilla10
Pruebas de software (Software testing)
Es el proceso de evaluar y verificar que un software o aplicación cumple con los requisitos especificados y funciona como se espera. Implica ejecutar un
sistema para identificar cualquier brecha, error o falta de requisitos en comparación con los resultados reales esperados.
Objetivos:
- Verificación y validación: Asegurarse de que el software hace lo que se supone que debe hacer (validación) y que cumple con los requisitos y
especificaciones (verificación).
- Calidad: Mejorar la calidad del software al identificar y corregir errores.
- Confiabilidad y estabilidad: Garantizar que el software es confiable y estable en diferentes condiciones y escenarios de uso.
@ebadilla10
Semilla en software testing
La "semilla" es un valor inicial utilizado en algoritmos generadores de números aleatorios para asegurar que las secuencias de números generados sean
reproducibles, lo cual es crucial para la consistencia y replicabilidad de las pruebas.
Características:
1. Reproducibilidad: La semilla permite generar la misma secuencia de números aleatorios en cada ejecución, garantizando condiciones de prueba
constantes.
2. Control del entorno: Facilita el control preciso del entorno de prueba, esencial para detectar y corregir errores de manera eficiente.
3. Facilita el debugging: Permite recrear exactamente el estado en que se produjo un error, mejorando la eficiencia en la resolución de problemas.
4. Documentación: Documentar las semillas utilizadas ayuda en la comunicación y colaboración del equipo, permitiendo replicar pruebas y compartir
hallazgos fácilmente.
@ebadilla10
Ciclo de vida del software testing
1. Análisis de requisitos: En esta fase, el equipo de pruebas analiza los requisitos y especificaciones de la aplicación de software para identificar el
alcance de las pruebas y los casos de prueba que deben ejecutarse.
2. Planificación de pruebas: El equipo de pruebas crea un plan de pruebas que define la estrategia de prueba, los objetivos, los escenarios de prueba y
los casos de prueba que deben ejecutarse. El plan también describe las funciones y responsabilidades de los miembros del equipo y el calendario de
pruebas.
3. Diseño de prueba: En esta fase, el equipo de pruebas crea casos de prueba detallados y escenarios de prueba basados en los requisitos y
especificaciones de la aplicación de software.
4. Configuración del entorno de prueba: El equipo de pruebas configura el entorno de pruebas que incluye el hardware, el software y las
configuraciones de red necesarias para las pruebas.
@ebadilla10
Ciclo de vida del software testing
5. Ejecución de pruebas: Esta fase implica la ejecución real de los casos de prueba y escenarios de prueba utilizando técnicas de prueba manuales o
automatizadas.
6. Informes de prueba: El equipo de pruebas genera informes que documentan los resultados de las pruebas e identifican cualquier defecto o problema
que se haya identificado durante el proceso de prueba.
7. Seguimiento de defectos: el equipo de pruebas registra y rastrea los defectos o problemas identificados durante el proceso de prueba y trabaja con el
equipo de desarrollo para resolverlos.
8. Cierre de la prueba: La etapa final del STLC implica evaluar el proceso de prueba general e identificar áreas de mejora. El equipo de pruebas prepara
un informe final que resume los resultados de las pruebas y el proyecto se considera completo.
@ebadilla10
@ebadilla10
Unit testing
Es una metodología de testing de software en la que se prueban las unidades más pequeñas de código de manera individual y aislada. Estas unidades pueden
ser funciones, métodos, clases u otros componentes que constituyen la base del software. El objetivo es asegurar que cada unidad funcione correctamente de
manera independiente.
Características
- Aislado: Cada prueba se realiza en un entorno aislado para evitar interferencias externas. Esto asegura que los errores detectados sean específicos de
la unidad probada.
- Automatizable: Las pruebas unitarias pueden y deben automatizarse para facilitar su ejecución repetida, lo que permite una rápida detección de
errores durante el ciclo de desarrollo.
- Rápido: Debido a su naturaleza aislada y pequeña, las pruebas unitarias son rápidas de ejecutar, lo que permite una retroalimentación inmediata a
los desarrolladores.
- Determinista: Las pruebas unitarias deben producir los mismos resultados cada vez que se ejecutan bajo las mismas condiciones, garantizando la
reproducibilidad.
Ventajas
- Detección temprana de errores: Permite identificar y corregir errores en las etapas iniciales del desarrollo, reduciendo el costo y el tiempo de
resolución.
- Facilita el refactoring: Proporciona una red de seguridad que permite a los desarrolladores refactorizar el código con confianza, sabiendo que los
cambios no introducen nuevos errores.
- Mejora la documentación: Las pruebas unitarias actúan como documentación en vivo del comportamiento esperado del código, facilitando la
comprensión del mismo por parte de otros desarrolladores.
- Aumenta la confiabilidad: Al probar cada unidad de manera exhaustiva, se incrementa la confiabilidad del software, asegurando que cada
componente funcione correctamente.
@ebadilla10
Unit testing
Herramientas populares para Unit Testing en C++
1. Google test: Una de las bibliotecas más utilizadas para realizar pruebas unitarias en C++.
2. Catch2: Otra popular biblioteca de pruebas unitarias que es conocida por su facilidad de uso y sintaxis amigable.
3. Boost.Test: Parte de la biblioteca Boost, ofrece capacidades avanzadas para realizar pruebas unitarias en C++.
Tipos de revisión
- EXPECT_: Permite que el test continúe incluso si la revisión falla. Es útil para realizar múltiples verificaciones en un solo test.
- ASSERT_: Termina el test inmediatamente si la aserción falla. Es útil cuando una falla hace que no tenga sentido continuar con el test.
Aserción: Acción y efecto de afirmar o dar por cierto algo.
@ebadilla10
Unit testing
@ebadilla10
Unit testing
@ebadilla10
Functional testing
Es una metodología de testing de software que se centra en verificar que el software funciona de acuerdo con los requisitos especificados. Este tipo de testing
se basa en la funcionalidad del software y no en la estructura interna del código. El objetivo es asegurar que el sistema hace lo que se espera que haga, sin
importar cómo lo hace.
- Orientado a requisitos: Se basa en los requisitos del software, asegurando que cada funcionalidad especificada se comporta correctamente.
- Caja negra: El functional testing es típicamente una técnica de "caja negra", donde los testers no necesitan conocer la estructura interna del código.
- Incluye diferentes niveles: Puede incluir unit testing, integration testing, system testing y acceptance testing, dependiendo del alcance de las pruebas
funcionales.
Tipos
- Unit testing: Prueba las unidades más pequeñas del código en aislamiento.
- Integration testing: Prueba la integración de diferentes módulos o servicios del sistema para asegurar que funcionan correctamente juntos.
- System testing: Prueba el sistema completo para asegurar que cumple con los requisitos especificados.
- Acceptance testing: Validación realizada por el usuario final para asegurar que el sistema cumple con sus expectativas y requisitos.
Beneficios
- Validación de requisitos: Asegura que todas las funcionalidades requeridas están implementadas y funcionan correctamente.
- Detección de defectos: Identifica defectos en las funcionalidades del software antes de que lleguen al usuario final.
- Aseguramiento de la calidad: Mejora la calidad del software al garantizar que cada componente cumple con su propósito.
- Mejora la satisfacción del cliente: Al entregar un producto que funciona según las especificaciones, se incrementa la satisfacción del cliente.
@ebadilla10
Functional testing
Existen diversas herramientas para realizar functional testing, dependiendo del tipo de aplicación y del entorno. Algunas herramientas populares incluyen:
1. Selenium: Una herramienta para pruebas funcionales de aplicaciones web.
2. JUnit: Comúnmente usada para pruebas unitarias y funcionales en Java.
3. Cucumber: Permite escribir especificaciones de funcionalidad en un lenguaje natural.
4. SoapUI: Herramienta para pruebas de servicios web SOAP y REST.
5. QTP (QuickTest Professional): Herramienta comercial para pruebas funcionales automatizadas.
6. Google Test: Es una biblioteca popular para pruebas unitarias en C++, pero también se puede utilizar para pruebas funcionales si se combina con
Google Mock para simular dependencias y comportamientos complejos.
Un mock es un objeto simulado que imita el comportamiento de objetos reales en pruebas de software. Se utiliza para reemplazar partes del sistema que son
difíciles de controlar o que no están disponibles durante las pruebas. Los mocks permiten aislar el código que se está probando y verificar que interactúa
correctamente con otras partes del sistema.
@ebadilla10
Functional testing
@ebadilla10
Functional testing
@ebadilla10
Infraestructura para googletest
Paso 1: Preparar el código e implementar los tests.
Paso 2: Configurar CMake
Paso 3: Crear la estructura de directorios
/CalculatorTests
|- CMakeLists.txt
|- calculator.h
|- test_calculator.cpp
Paso 4: Compilación
> mkdir build
> cd build
> cmake ..
> make
> ./test_calculator
@ebadilla10
Coverage (Cobertura de código)
Es una métrica utilizada en pruebas de software que mide el grado en el que el código fuente de un programa es probado. La cobertura de código ayuda a
identificar qué partes del código han sido ejecutadas durante las pruebas y cuáles no, permitiendo a quienes desarrollan mejorar la calidad de las pruebas y
asegurar que el código ha sido suficientemente probado.
Tipos de cobertura de código
- Cobertura de líneas: Mide el porcentaje de líneas de código que han sido ejecutadas durante las pruebas.
- Cobertura de sentencias: Similar a la cobertura de líneas, pero se enfoca en las sentencias del código.
- Cobertura de funciones/métodos: Mide el porcentaje de funciones o métodos que han sido ejecutados.
- Cobertura de condiciones: Verifica si todas las condiciones booleanas (true/false) en el código han sido evaluadas.
- Cobertura de ramas: Mide si todas las ramas de decisiones (if/else, switch) han sido ejecutadas.
Herramientas para cobertura de código en C++
- gcov: Es una herramienta de análisis de cobertura de código para programas compilados con GCC.
- lcov: Es una herramienta de análisis de cobertura que proporciona una interfaz gráfica para gcov.
- LLVM's llvm-cov: Utilizada con el compilador Clang para medir la cobertura de código.
@ebadilla10
Coverage (Cobertura de código)
@ebadilla10
Coverity
Es una herramienta de Synopsys para realizar análisis estático de código que ayuda a detectar defectos y problemas de seguridad en el código fuente sin
ejecutarlo. Es utilizada para mejorar la calidad y seguridad del software mediante la identificación temprana de defectos y vulnerabilidades.
Características
- Análisis estático: Analiza el código fuente sin necesidad de ejecutar el programa.
- Detección de defectos: Identifica errores comunes de programación, como desbordamientos de buffer, desreferencias de punteros nulos, fugas de
memoria, etc.
- Seguridad: Detecta vulnerabilidades de seguridad en el código.
- Integración: Se integra con sistemas de CI/CD y herramientas de gestión de código fuente.
- Informes detallados: Proporciona informes detallados con descripciones de defectos y recomendaciones para su solución.
@ebadilla10
CI/CD (Continuous Integration and Continuous Delivery)
CI: Es una práctica de desarrollo de software en la que los desarrolladores integran su código en un repositorio compartido frecuentemente. Cada
integración es verificada mediante la ejecución de pruebas automáticas para detectar errores lo antes posible.
- Detección temprana de errores: Los problemas se detectan y se corrigen rápidamente.
- Mejora de la calidad del software: Las pruebas frecuentes aseguran que el código cumple con los estándares de calidad.
- Mayor eficiencia: Reduce el tiempo de integración y facilita la colaboración en equipo.
- Entrega continua: Facilita la implementación de nuevas funcionalidades con mayor rapidez y confiabilidad.
CD: Lleva el concepto de CI un paso más allá. La CD asegura que el software está en un estado desplegable en todo momento y automatiza el proceso de
implementación del software en entornos de prueba o producción.
- Despliegues más rápidos y frecuentes: Facilita la implementación de cambios con rapidez y frecuencia.
- Reducción del riesgo: Automatiza y prueba cada cambio antes de implementarlo, reduciendo el riesgo de errores en producción.
- Retroalimentación rápida: Proporciona una retroalimentación rápida sobre el estado del software en entornos reales.
- Mayor productividad: Automatiza tareas repetitivas, permitiendo a los desarrolladores centrarse en el desarrollo de nuevas funcionalidades.
@ebadilla10
Herramientas populares para CI/CD
GitHub Actions
- Integrado en GitHub.
- Soporta pipelines personalizados para CI/CD.
- Fácil de usar y configurar directamente desde el repositorio.
Travis CI
- Integración profunda con GitHub.
- Configuración mediante un archivo .travis.yml.
- Amplio soporte para múltiples lenguajes y entornos de construcción.
Jenkins
- Plataforma de automatización extensible y autoalojada.
- Soporte para una amplia gama de plugins.
- Muy configurable y potente para grandes proyectos.
@ebadilla10
@ebadilla10
Ejemplo con GitHub Actions
Paso 1: Crear el repositorio en GitHub
Crear un repositorio en GitHub y subir el código, incluyendo
los archivos calculator.h, test_calculator.cpp, y CMakeLists.txt.
Paso 2: Configurar GitHub actions
En el repositorio de GitHub, ir a la pestaña "Actions".
Hacer clic en "New workflow" y seleccionar "Set up a workflow
yourself".
Paso 3: Crear el archivo de workflow
Crear un archivo .yml para definir el workflow. Por ejemplo,
ci-cd.yml dentro del directorio .github/workflows/.
@ebadilla10
Ejemplo con GitHub Actions
Explicación del archivo de workflow
- name: CI/CD Pipeline: Nombre del workflow.
- on: El workflow se ejecutará en cada push y pull request a la rama main.
- jobs: Define los trabajos que se deben ejecutar.
- build: Nombre del trabajo de construcción y pruebas.
- runs-on: ubuntu-latest: El trabajo se ejecuta en un contenedor de Ubuntu.
- steps: Define los pasos del trabajo.
- Checkout code: Usa la acción actions/checkout@v2 para obtener el código del repositorio.
- Set up CMake: Usa la acción lukka/get-cmake@v3.21.2 para configurar CMake.
- Install dependencies: Instala las dependencias necesarias, como build-essential y libgtest-dev.
- Build and run tests: Compila el proyecto y ejecuta los tests.
- deploy: Nombre del trabajo de despliegue.
- needs: build: Indica que este trabajo depende del trabajo build y se ejecutará solo si build pasa.
- runs-on: ubuntu-latest: El trabajo se ejecuta en un contenedor de Ubuntu.
- steps: Define los pasos del trabajo de despliegue.
- Checkout code: Usa la acción actions/checkout@v2 para obtener el código del repositorio.
- Deploy to production: Aquí se agrega el script o comando para desplegar la aplicación al servidor de producción.
Paso 4: Validar el workflow
Hacer un push del archivo de workflow al repositorio.
Ir a la pestaña "Actions" en el repositorio para ver la ejecución del workflow.
Verificar que el build, los tests y el despliegue se ejecutan correctamente.

presentacion de programacion Software testing.pdf

  • 1.
  • 2.
    @ebadilla10 Pruebas de software(Software testing) Es el proceso de evaluar y verificar que un software o aplicación cumple con los requisitos especificados y funciona como se espera. Implica ejecutar un sistema para identificar cualquier brecha, error o falta de requisitos en comparación con los resultados reales esperados. Objetivos: - Verificación y validación: Asegurarse de que el software hace lo que se supone que debe hacer (validación) y que cumple con los requisitos y especificaciones (verificación). - Calidad: Mejorar la calidad del software al identificar y corregir errores. - Confiabilidad y estabilidad: Garantizar que el software es confiable y estable en diferentes condiciones y escenarios de uso.
  • 3.
    @ebadilla10 Semilla en softwaretesting La "semilla" es un valor inicial utilizado en algoritmos generadores de números aleatorios para asegurar que las secuencias de números generados sean reproducibles, lo cual es crucial para la consistencia y replicabilidad de las pruebas. Características: 1. Reproducibilidad: La semilla permite generar la misma secuencia de números aleatorios en cada ejecución, garantizando condiciones de prueba constantes. 2. Control del entorno: Facilita el control preciso del entorno de prueba, esencial para detectar y corregir errores de manera eficiente. 3. Facilita el debugging: Permite recrear exactamente el estado en que se produjo un error, mejorando la eficiencia en la resolución de problemas. 4. Documentación: Documentar las semillas utilizadas ayuda en la comunicación y colaboración del equipo, permitiendo replicar pruebas y compartir hallazgos fácilmente.
  • 4.
    @ebadilla10 Ciclo de vidadel software testing 1. Análisis de requisitos: En esta fase, el equipo de pruebas analiza los requisitos y especificaciones de la aplicación de software para identificar el alcance de las pruebas y los casos de prueba que deben ejecutarse. 2. Planificación de pruebas: El equipo de pruebas crea un plan de pruebas que define la estrategia de prueba, los objetivos, los escenarios de prueba y los casos de prueba que deben ejecutarse. El plan también describe las funciones y responsabilidades de los miembros del equipo y el calendario de pruebas. 3. Diseño de prueba: En esta fase, el equipo de pruebas crea casos de prueba detallados y escenarios de prueba basados en los requisitos y especificaciones de la aplicación de software. 4. Configuración del entorno de prueba: El equipo de pruebas configura el entorno de pruebas que incluye el hardware, el software y las configuraciones de red necesarias para las pruebas.
  • 5.
    @ebadilla10 Ciclo de vidadel software testing 5. Ejecución de pruebas: Esta fase implica la ejecución real de los casos de prueba y escenarios de prueba utilizando técnicas de prueba manuales o automatizadas. 6. Informes de prueba: El equipo de pruebas genera informes que documentan los resultados de las pruebas e identifican cualquier defecto o problema que se haya identificado durante el proceso de prueba. 7. Seguimiento de defectos: el equipo de pruebas registra y rastrea los defectos o problemas identificados durante el proceso de prueba y trabaja con el equipo de desarrollo para resolverlos. 8. Cierre de la prueba: La etapa final del STLC implica evaluar el proceso de prueba general e identificar áreas de mejora. El equipo de pruebas prepara un informe final que resume los resultados de las pruebas y el proyecto se considera completo.
  • 6.
  • 7.
    @ebadilla10 Unit testing Es unametodología de testing de software en la que se prueban las unidades más pequeñas de código de manera individual y aislada. Estas unidades pueden ser funciones, métodos, clases u otros componentes que constituyen la base del software. El objetivo es asegurar que cada unidad funcione correctamente de manera independiente. Características - Aislado: Cada prueba se realiza en un entorno aislado para evitar interferencias externas. Esto asegura que los errores detectados sean específicos de la unidad probada. - Automatizable: Las pruebas unitarias pueden y deben automatizarse para facilitar su ejecución repetida, lo que permite una rápida detección de errores durante el ciclo de desarrollo. - Rápido: Debido a su naturaleza aislada y pequeña, las pruebas unitarias son rápidas de ejecutar, lo que permite una retroalimentación inmediata a los desarrolladores. - Determinista: Las pruebas unitarias deben producir los mismos resultados cada vez que se ejecutan bajo las mismas condiciones, garantizando la reproducibilidad. Ventajas - Detección temprana de errores: Permite identificar y corregir errores en las etapas iniciales del desarrollo, reduciendo el costo y el tiempo de resolución. - Facilita el refactoring: Proporciona una red de seguridad que permite a los desarrolladores refactorizar el código con confianza, sabiendo que los cambios no introducen nuevos errores. - Mejora la documentación: Las pruebas unitarias actúan como documentación en vivo del comportamiento esperado del código, facilitando la comprensión del mismo por parte de otros desarrolladores. - Aumenta la confiabilidad: Al probar cada unidad de manera exhaustiva, se incrementa la confiabilidad del software, asegurando que cada componente funcione correctamente.
  • 8.
    @ebadilla10 Unit testing Herramientas popularespara Unit Testing en C++ 1. Google test: Una de las bibliotecas más utilizadas para realizar pruebas unitarias en C++. 2. Catch2: Otra popular biblioteca de pruebas unitarias que es conocida por su facilidad de uso y sintaxis amigable. 3. Boost.Test: Parte de la biblioteca Boost, ofrece capacidades avanzadas para realizar pruebas unitarias en C++. Tipos de revisión - EXPECT_: Permite que el test continúe incluso si la revisión falla. Es útil para realizar múltiples verificaciones en un solo test. - ASSERT_: Termina el test inmediatamente si la aserción falla. Es útil cuando una falla hace que no tenga sentido continuar con el test. Aserción: Acción y efecto de afirmar o dar por cierto algo.
  • 9.
  • 10.
  • 11.
    @ebadilla10 Functional testing Es unametodología de testing de software que se centra en verificar que el software funciona de acuerdo con los requisitos especificados. Este tipo de testing se basa en la funcionalidad del software y no en la estructura interna del código. El objetivo es asegurar que el sistema hace lo que se espera que haga, sin importar cómo lo hace. - Orientado a requisitos: Se basa en los requisitos del software, asegurando que cada funcionalidad especificada se comporta correctamente. - Caja negra: El functional testing es típicamente una técnica de "caja negra", donde los testers no necesitan conocer la estructura interna del código. - Incluye diferentes niveles: Puede incluir unit testing, integration testing, system testing y acceptance testing, dependiendo del alcance de las pruebas funcionales. Tipos - Unit testing: Prueba las unidades más pequeñas del código en aislamiento. - Integration testing: Prueba la integración de diferentes módulos o servicios del sistema para asegurar que funcionan correctamente juntos. - System testing: Prueba el sistema completo para asegurar que cumple con los requisitos especificados. - Acceptance testing: Validación realizada por el usuario final para asegurar que el sistema cumple con sus expectativas y requisitos. Beneficios - Validación de requisitos: Asegura que todas las funcionalidades requeridas están implementadas y funcionan correctamente. - Detección de defectos: Identifica defectos en las funcionalidades del software antes de que lleguen al usuario final. - Aseguramiento de la calidad: Mejora la calidad del software al garantizar que cada componente cumple con su propósito. - Mejora la satisfacción del cliente: Al entregar un producto que funciona según las especificaciones, se incrementa la satisfacción del cliente.
  • 12.
    @ebadilla10 Functional testing Existen diversasherramientas para realizar functional testing, dependiendo del tipo de aplicación y del entorno. Algunas herramientas populares incluyen: 1. Selenium: Una herramienta para pruebas funcionales de aplicaciones web. 2. JUnit: Comúnmente usada para pruebas unitarias y funcionales en Java. 3. Cucumber: Permite escribir especificaciones de funcionalidad en un lenguaje natural. 4. SoapUI: Herramienta para pruebas de servicios web SOAP y REST. 5. QTP (QuickTest Professional): Herramienta comercial para pruebas funcionales automatizadas. 6. Google Test: Es una biblioteca popular para pruebas unitarias en C++, pero también se puede utilizar para pruebas funcionales si se combina con Google Mock para simular dependencias y comportamientos complejos. Un mock es un objeto simulado que imita el comportamiento de objetos reales en pruebas de software. Se utiliza para reemplazar partes del sistema que son difíciles de controlar o que no están disponibles durante las pruebas. Los mocks permiten aislar el código que se está probando y verificar que interactúa correctamente con otras partes del sistema.
  • 13.
  • 14.
  • 15.
    @ebadilla10 Infraestructura para googletest Paso1: Preparar el código e implementar los tests. Paso 2: Configurar CMake Paso 3: Crear la estructura de directorios /CalculatorTests |- CMakeLists.txt |- calculator.h |- test_calculator.cpp Paso 4: Compilación > mkdir build > cd build > cmake .. > make > ./test_calculator
  • 16.
    @ebadilla10 Coverage (Cobertura decódigo) Es una métrica utilizada en pruebas de software que mide el grado en el que el código fuente de un programa es probado. La cobertura de código ayuda a identificar qué partes del código han sido ejecutadas durante las pruebas y cuáles no, permitiendo a quienes desarrollan mejorar la calidad de las pruebas y asegurar que el código ha sido suficientemente probado. Tipos de cobertura de código - Cobertura de líneas: Mide el porcentaje de líneas de código que han sido ejecutadas durante las pruebas. - Cobertura de sentencias: Similar a la cobertura de líneas, pero se enfoca en las sentencias del código. - Cobertura de funciones/métodos: Mide el porcentaje de funciones o métodos que han sido ejecutados. - Cobertura de condiciones: Verifica si todas las condiciones booleanas (true/false) en el código han sido evaluadas. - Cobertura de ramas: Mide si todas las ramas de decisiones (if/else, switch) han sido ejecutadas. Herramientas para cobertura de código en C++ - gcov: Es una herramienta de análisis de cobertura de código para programas compilados con GCC. - lcov: Es una herramienta de análisis de cobertura que proporciona una interfaz gráfica para gcov. - LLVM's llvm-cov: Utilizada con el compilador Clang para medir la cobertura de código.
  • 17.
  • 18.
    @ebadilla10 Coverity Es una herramientade Synopsys para realizar análisis estático de código que ayuda a detectar defectos y problemas de seguridad en el código fuente sin ejecutarlo. Es utilizada para mejorar la calidad y seguridad del software mediante la identificación temprana de defectos y vulnerabilidades. Características - Análisis estático: Analiza el código fuente sin necesidad de ejecutar el programa. - Detección de defectos: Identifica errores comunes de programación, como desbordamientos de buffer, desreferencias de punteros nulos, fugas de memoria, etc. - Seguridad: Detecta vulnerabilidades de seguridad en el código. - Integración: Se integra con sistemas de CI/CD y herramientas de gestión de código fuente. - Informes detallados: Proporciona informes detallados con descripciones de defectos y recomendaciones para su solución.
  • 19.
    @ebadilla10 CI/CD (Continuous Integrationand Continuous Delivery) CI: Es una práctica de desarrollo de software en la que los desarrolladores integran su código en un repositorio compartido frecuentemente. Cada integración es verificada mediante la ejecución de pruebas automáticas para detectar errores lo antes posible. - Detección temprana de errores: Los problemas se detectan y se corrigen rápidamente. - Mejora de la calidad del software: Las pruebas frecuentes aseguran que el código cumple con los estándares de calidad. - Mayor eficiencia: Reduce el tiempo de integración y facilita la colaboración en equipo. - Entrega continua: Facilita la implementación de nuevas funcionalidades con mayor rapidez y confiabilidad. CD: Lleva el concepto de CI un paso más allá. La CD asegura que el software está en un estado desplegable en todo momento y automatiza el proceso de implementación del software en entornos de prueba o producción. - Despliegues más rápidos y frecuentes: Facilita la implementación de cambios con rapidez y frecuencia. - Reducción del riesgo: Automatiza y prueba cada cambio antes de implementarlo, reduciendo el riesgo de errores en producción. - Retroalimentación rápida: Proporciona una retroalimentación rápida sobre el estado del software en entornos reales. - Mayor productividad: Automatiza tareas repetitivas, permitiendo a los desarrolladores centrarse en el desarrollo de nuevas funcionalidades.
  • 20.
    @ebadilla10 Herramientas populares paraCI/CD GitHub Actions - Integrado en GitHub. - Soporta pipelines personalizados para CI/CD. - Fácil de usar y configurar directamente desde el repositorio. Travis CI - Integración profunda con GitHub. - Configuración mediante un archivo .travis.yml. - Amplio soporte para múltiples lenguajes y entornos de construcción. Jenkins - Plataforma de automatización extensible y autoalojada. - Soporte para una amplia gama de plugins. - Muy configurable y potente para grandes proyectos.
  • 21.
  • 22.
    @ebadilla10 Ejemplo con GitHubActions Paso 1: Crear el repositorio en GitHub Crear un repositorio en GitHub y subir el código, incluyendo los archivos calculator.h, test_calculator.cpp, y CMakeLists.txt. Paso 2: Configurar GitHub actions En el repositorio de GitHub, ir a la pestaña "Actions". Hacer clic en "New workflow" y seleccionar "Set up a workflow yourself". Paso 3: Crear el archivo de workflow Crear un archivo .yml para definir el workflow. Por ejemplo, ci-cd.yml dentro del directorio .github/workflows/.
  • 23.
    @ebadilla10 Ejemplo con GitHubActions Explicación del archivo de workflow - name: CI/CD Pipeline: Nombre del workflow. - on: El workflow se ejecutará en cada push y pull request a la rama main. - jobs: Define los trabajos que se deben ejecutar. - build: Nombre del trabajo de construcción y pruebas. - runs-on: ubuntu-latest: El trabajo se ejecuta en un contenedor de Ubuntu. - steps: Define los pasos del trabajo. - Checkout code: Usa la acción actions/checkout@v2 para obtener el código del repositorio. - Set up CMake: Usa la acción lukka/get-cmake@v3.21.2 para configurar CMake. - Install dependencies: Instala las dependencias necesarias, como build-essential y libgtest-dev. - Build and run tests: Compila el proyecto y ejecuta los tests. - deploy: Nombre del trabajo de despliegue. - needs: build: Indica que este trabajo depende del trabajo build y se ejecutará solo si build pasa. - runs-on: ubuntu-latest: El trabajo se ejecuta en un contenedor de Ubuntu. - steps: Define los pasos del trabajo de despliegue. - Checkout code: Usa la acción actions/checkout@v2 para obtener el código del repositorio. - Deploy to production: Aquí se agrega el script o comando para desplegar la aplicación al servidor de producción. Paso 4: Validar el workflow Hacer un push del archivo de workflow al repositorio. Ir a la pestaña "Actions" en el repositorio para ver la ejecución del workflow. Verificar que el build, los tests y el despliegue se ejecutan correctamente.