Calidad de software y TDD

Preview:

DESCRIPTION

Tópicos sobre calidad de software y conceptos sobre TDD

Citation preview

CALIDAD DE SOFTWARE

Calidad de Software Introducción: Mas allá de la codificación Ciclo de vida: Desde la concepción hasta la

descontinuación Calidad: Lugar de la calidad en el desarrollo

de software Beneficios

¿Qué es Calidad?

Antes de Iniciar….

¿Qué es Calidad?

Hacer las cosas correctas

Hacer las cosas correctamente Cumplir normas como ISO

Satisfacción del ClienteCumplir con los requerimientos

Definiciones mayormente aceptadas(ANSI/IEEE 828, 1990)

El nivel en el cual un sistema, componente o proceso cumple con los requerimientos definidos.El nivel en el cual un sistema, componente o proceso cumple con las necesidad o expectativas del cliente.

Ciclo de Vida del Software

Introducción: Mas allá de la codificación. El ciclo de vida: Desde la concepción hasta la descontinuación. Calidad: Lugar de la calidad en el desarrollo de software. Beneficios de la calidad en el ciclo de vida.

Ciclo de Vida del Software

Ciclo de Vida del Software

Introducción: Mas allá de la codificación

HabilidadesROLES DE INGENIERÍA

Ciclo de Vida del Software

Introducción: Mas allá de la codificación

Ingeniería de Software

Disciplina de implementación

-Requerimientos- Arquitectura- Pruebas- Configuración de versiones- Gestión del proyecto

Ciclo de Vida del SoftwareEl ciclo de vida: Desde la concepción hasta la descontinuación

Ingeniería de Sistemas

Análisis de Requerimientos

Diseño

Codificación

Pruebas

Mantenimiento

Ciclo de Vida del SoftwareDesde la concepción hasta la descontinuación

- Concepción del proyecto- Interacción continua con el cliente- Recabación de información

- Necesidades del Cliente

Ingeniería de Sistemas

Ciclo de Vida del SoftwareDesde la concepción hasta la descontinuación

- Correcto entendimiento- Requerimientos correctos- Definición de requerimientos- Gestión de los requerimientos

- Requerimientos

Análisis de Requerimientos

Ciclo de Vida del SoftwareDesde la concepción hasta la descontinuación

- Modelos - Arquitectura- Procedimientos y Clases

- Arquitectura

Diseño

Ciclo de Vida del SoftwareDesde la concepción hasta la descontinuación

- Lenguajes de Programación- Implementación de modelos-Integración de componentes

- Software o prototipos

Codificación

Ciclo de Vida del SoftwareDesde la concepción hasta la descontinuación

- Verificación de componentes- Validación de requerimientos- Estándares y Procesos

- Certificación de Producto

Pruebas

Ciclo de Vida del SoftwareDesde la concepción hasta la descontinuación

- Gestión de Cambios

- Actualizaciones- Descontinuación

Mantenimiento

StatusStatusCodificación y Pruebas

Codificación y Pruebas

Document.Document.

CambiosCambios

Gestión de Config.

Gestión de Config.

EstándaresEstándares

Ciclo de Vida del SoftwareCalidad: Lugar de la calidad en el desarrollo de software.

Revisiones y AuditoríasRevisiones

y Auditorías

Gestión de Proyecto

Gestión de Proyecto

Revisión de Vendedores

Revisión de Vendedores

Revisión de Contratos

Revisión de Contratos

Empaqueta-miento y

envío

Empaqueta-miento y

envío

SeguridadSeguridad

Gestión de la Calidad

Ciclo de Vida del SoftwareCalidad: Beneficios

Cliente Proveedor

- Satisfacción- Confianza- Menos errores- Requerimientos cumplidos

-Cumplir con requerimientos- Estabilidad- Implementación- Verificación- Procesos consistentes- Mejora de procesos

Software Testing

AGENDA:

Conceptos Básicos Tipos de Testing Ciclo de vida del Software Testing Herramientas Mitos

Conceptos Básicos

¿Qué es Software Testing?

Conceptos Básicos

Software Testing

Para Recordar

QA

Establece y evalúa los procesos que producen

los productos

QC

Verifica y valida si los productos cumplen con

los requerimientos o estándares

Disciplina de Software Testing

Conjunto de actividades llevadas a cabo con el objetivo de encontrar

errores en el SW.

Software TestingConceptos Básicos(IEEE Std 829)

Proceso que consiste en ejercitar el software para verificar si este satisface los requerimientos especificados y para detectar errores. Proceso de analizar un sistema de software para detectar diferencias entre las condiciones existentes y las requeridas (osea bugs) y evaluar las características de dicho sistema de software.

Software Testing

¿Por qué hacer Software Testing?

Conceptos Básicos

Software TestingConceptos Básicos

Software Testing

¿Para qué hacer Software Testing?

Conceptos Básicos

Software Testing

¿Para qué hacer Software Testing?

Conceptos Básicos

Detectar defectos en el software

Reportar defectos

Sugerir mejoras

Facilitar implementación de requerimientos

Incrementar el nivel de calidad del software

Minimizar el número de errores encontrados por el cliente

Software TestingConceptos Básicos

¿Quién?

Equipo de QA de un proyectoEquipo de desarrollo de un proyecto

Departamento de calidad de una compañíaCompañía externa (Outsourcing)

En general: Todo el equipo involucrado en el desarrollo de un producto

Pruebas de Integración

Pruebas de Validación

Pruebas de Sistema

Pruebas de unidad

Software TestingConceptos Básicos

¿Cuando?

A lo largo de todo el ciclo de vida del proyecto

- Unidad- Integración- Funcionalidad- Usabilidad- Sistema-Performance- Seguridad

Tipos de Testing

Software Testing

REQSREQS TESTSTESTS

Tipos de Testing

Software Testing

Pruebas de Unidad

Valida que las unidades individuales de código fuente están funcionando apropiadamente.Una unidad es la parte mas pequeña testeable de una aplicación. El objetivo de las pruebas de unidad es aislar cada parte del programa y mostrar que cada parte individual es correcto.

Tipos de Testing

Software Testing

Pruebas de Integración

Las pruebas de integración es un tipo de pruebas en el cual diferentes módulos del software se combinan y testean como un grupo. El objetivo de este tipo de pruebas es verificar funcionalidades, la performance y la confiabilidad de un producto.

Tipos de Testing

Software Testing

Pruebas Funcionales

Utilizado para verificar si un producto cumple con los requerimientos y especificaciones funcionales.

Tipos de Testing

Software Testing

Pruebas de Usabilidad

Este tipo de pruebas sirve para evaluar un producto desde el punto de vista de un usuario y su rápida adecuación al sistema.Involucra input directo sobre como los usuarios reales usarán el sistema.

Tipos de Testing

Software Testing

Pruebas de Sistema

Es llevado a cabo en un sistema integrado y completo para evaluar los requerimientos especificados como un todo. Este no debería requerir conocimiento del diseño interno del código o lógica de programación.Es ejecutado en la totalidad del sistema.

Tipos de Testing

Software Testing

Pruebas de Performance

Permite determinar que tan rápido algunos aspectos del sistema funciona bajo una particular carga de trabajo.Es utilizado para determinar la velocidad o efectividad de un software.

Tipos de Testing

Software Testing

Pruebas de Seguridad

Proceso para determinar que un sistema de información protege los datos y mantiene la funcionalidad tal y como se espera que fuese.Básicamente, lo que se quiere verificar en este tipo de pruebas es que el software brinde confidencialidad, integridad, autenticación, autorización, disponibilidad y auditoría

White Box TestingBlack Box Testing

Tipos de Testing: Técnicas

Software Testing

Pruebas de Caja Negra: Pruebas en base a aun requerimiento como output sin necesidad de conocer la estructura interna o códigos del programa. Puede ser funcional o no funcional, aunque usualmente funcional.

OUTPUTINPUT

Pruebas de Caja Blanca: También conocido como “Glass Box”o “Clear Box” Testing, para cuya ejecución es necesario tener conocimiento acerca de la estructura interna y código fuente del programa

Ciclo de vida

Software Testing

PlanificaciónPlanificación

DefiniciónDefinición

Ejecución Ejecución

ReporteReporte

AnálisisAnálisis

AutomatizaciónAutomatización

Ciclo de vida

Software Testing

PlanificaciónPlanificación

- Estructura de Definición de Trabajo (EDT)- Plan de Gestión de las Pruebas

Ciclo de vida

Software Testing

DefiniciónDefinición - Plan de Pruebas

Ciclo de vida

Software Testing

AutomatizaciónAutomatización - Scripts de prueba- Inventario de scripts

EjecuciónEjecución

- Total de Casos de Prueba:- Ejecutados- Exitosos- Fallidos- Modificados

Ciclo de vida

Software Testing

ReporteReporte

- Reporte de Defectos y Mejoras- Reporte de Performance- Reporte de Nivel de Seguridad

AnálisisAnálisis - Informe de Evaluación del Sistema

Ciclo de vida

Software Testing

ReporteReporte

- Reporte de Defectos y Mejoras- Reporte de Performance- Reporte de Nivel de Seguridad

AnálisisAnálisis - Informe de Evaluación del Sistema

Herramientas

Software Testing

HerramientasHerramientas

Software Testing y Software Development

AGENDA:

Introducción Que se Entiende por Pruebas Funcionales. Que se Entiende por Pruebas de Rendimiento. Desarrollo orientado a las pruebas. Como debe de estar preparado tu equipo de desarrollo. Tracking o seguimiento de errores. Como asegurar la calidad de nuestro código.

TIPOS DE PRUEBAQue entiendes por pruebas funcionales?Que entiendes por pruebas de

rendimiento?

Desarrollo orientado a las pruebas Test Driven Development “Desarrollo guiado por pruebas significa que

escribes un test automático y, a continuación, escribes el código suficiente para pasar dicho test y después refactorizar el código, principalmente para mejorar la legibilidad y eliminar duplicaciones.”

REFLEXIONES SOBRE TDD TDD es duro, los desarrolladores tardan tiempo

en poder entenderlo. La estrategia de aprendizaje es juntar a un desarrollador con experiencia con los de menos experiencia.

Una vez que un desarrollador le agarra la “onda” es difícil que pueda dejar de usar TDD.

TDD tiene un efecto positivo en el diseño y costos del sistema del sistema.

TDD reduce los costos ocultos del software.

REFLEXIONES SOBRE TDD Se tarda un tiempo en conseguir que TDD

funciona en un nuevo producto, especialmente con pruebas de integración tipo “caja negra”,pero el retorno de la inversión es justificado.

Asegúrate de que inviertes suficiente tiempo en hacer que a los desarrolladores les resulte fácil escribir código para pruebas. Esto significa conseguir las herramientas adecuadas, educar a las personas, proporcionarles las clases de utilidad o clases básicas adecuadas, etc.

HERRAMIENTAS PARA USAR TDD JUnit HttpUnit HSQLDB (como base de datos cargada en

memoria para pruebas) Jetty, Tomcat, Glassfish, JBoss como servidor de

aplicaciones El poderoso Framework Spring para montar

diferentes tipos de instalaciones de pruebas ( Con base de datos externas, en memoria, etc)

Apariencia de JUnit

Un típico caso de pruebas de caja negra Pruebas de aceptación (validar que el software

realiza lo esperado) de tipo caja negra. Estas pruebas arrancan todo el sistema en memoria,

incluyendo las bases de datos y servidores Web, y acceden al sistema utilizando únicamente sus interfaces públicos (por ejemplo HTTP).

Esto hace extremadamente rápidos los ciclos de desarrollo-compilación-pruebas. También actúa como una red de seguridad, proporcionando a los desarrolladores suficiente confianza como para refactorizar a menudo, lo que significa que el diseño se mantiene limpio y simple incluso mientras el sistema crece.

Grafica de un equipo de desarrollo preparado para pruebas

TRACKING O SEGUIMIENTO DE ERRORES

HERRAMIENTAS PARA EL TRACKING DE ERRORESBUGZILLATRACKOSTICKETClearQuest

COMO ASEGURAR NUESTRO CODIGO Primero se deben de identificar los parámetros o

indicadores mínimos de calidad que requieres para tu código (Ej. orden).

Luego puedes aplicar lo siguiente:Programación en paresRealizar revisiones de código periódicas Integración continuaStatic code analyzers (Ejemplo Analizador de Eclipse)Búsqueda de BugsCheckList de objetivosTDDAplicar patrones de diseñoSeguir estándares de programación.