fundamento pruebas ingeniería del software

18
ING. SAIDA QUINTERO *

Upload: william-daniel

Post on 13-Jul-2015

142 views

Category:

Data & Analytics


2 download

TRANSCRIPT

Page 1: Fundamento pruebas Ingeniería del software

ING. SAIDA QUINTERO

*

Page 2: Fundamento pruebas Ingeniería del software

Piattini, Calvo-Manzano, Cervera y Fernández las pruebas

Probar si el software no hace lo que debe.

Probar si el software hace lo que no debe, es decir, si provoca

efectos secundarios adversos.

Glen Myers:

La prueba es el proceso de ejecución de un programa con la

intención de descubrir un error.

Un buen caso de prueba es aquel que tiene una alta probabilidad

de mostrar un error no descubierto hasta entonces.

Una prueba tiene éxito si descubre un error.

El diseño y ejecución de pruebas debe estar encaminado a:

Encontrar el mayor número de errores con la menor cantidad de

tiempo y esfuerzo posibles.

Mostrar hasta que punto las funciones del software operan de

acuerdo con las especificaciones y requerimientos del cliente.

Page 3: Fundamento pruebas Ingeniería del software

Estos son algunos términos empleados en el proceso de pruebas:

* Prueba (test)

«Una actividad en la cual un sistema o componente es ejecutado bajo condiciones

específicas, se observan o almacenan los resultados y se realiza una evaluación de

algún aspecto del sistema o componente.»

* Caso de prueba (test case)

«Un conjunto de entradas, condiciones de ejecución y resultados esperados, diseñados

para un objetivo particular.»

* Equivocación (mistake)

«Una acción del ser humano que produce un resultado incorrecto.»

* Error (error)

«La diferencia entre un valor calculado, observado o medido y el valor verdadero,

especificado o teóricamente correcto.»

Page 4: Fundamento pruebas Ingeniería del software

* Fallo (failure)

Un fallo puede ser definido como:

«La incapacidad de un sistema o de alguno de sus componentes para realizar las

funciones requeridas dentro de los requisitos de rendimiento especificados.»

* Defecto (defect, fault, bug)

Un defecto puede ser definido como:

* - «Un paso, proceso o definición de dato incorrecto en un programa de computadora. El

resultado de una equivocación.»

* - «Una variación de una característica deseada del producto.»

* Un defecto puede dividirse en dos categorías:

- Defectos en la especificación del producto: el producto construido varía del

producto especificado.

- Variaciones en las expectativas del cliente/usuario: estas variaciones son algo que

el usuario quiere que no esté en el producto final, pero éstas además no fueron

especificadas para ser incluidas en el producto.

Page 5: Fundamento pruebas Ingeniería del software
Page 6: Fundamento pruebas Ingeniería del software

* Depuración

«El proceso de localizar, analizar y corregir los defectos que se sospecha que contiene el

software »

* Verificación

- «El proceso de evaluación de un sistema o de uno de sus componentes para determinar

si los productos de una fase dada satisfacen las condiciones impuestas al comienzo de

dicha fase.»

* - «Un conjunto de actividades que aseguran que el software implementa correctamente

una función específica. (¿Estamos construyendo el producto correctamente?).»

* Validación

* - «El proceso de evaluación de un sistema o de uno de sus componentes durante o al

final del proceso de desarrollo para determinar si satisface los requisitos

especificados.»

* - «Un conjunto diferente de actividades que aseguran que el software construido se

ajusta a los requisitos del cliente. (¿Estamos construyendo el producto correcto?) »

Page 7: Fundamento pruebas Ingeniería del software

Para los grupos asociados al proceso de prueba son:

*

Cliente del software (Software customer): grupo u organización que realiza la contratación

para el software que va a ser desarrollado.

* Usuario del software (Software user): individuo o grupo que usará el software una vez este

puesto en funcionamiento.

* Desarrollador de software (Software developer): individuo o grupo que aprueba o asiste la

redacción de los requerimientos, el diseño del software, la construcción del software, la

gestión de cambios y el mantenimiento del software según lo solicitado.

En el desarrollo de software existen varios grupos fuertemente asociados al

proceso de pruebas, tales grupos varían dependiendo de la compañía y del

proyecto pero en esencia y de acuerdo con algunos autores los roles siguen

siendo los mismos.

Page 8: Fundamento pruebas Ingeniería del software

* Probador de software (Software tester): individuo o grupo que

realiza las funciones de verificación en el software. (Éste puede ser

un subgrupo de desarrolladores, un grupo independiente ó la

combinación de los dos.)

* Gerencia en informática (Information technology management):

individuo o grupo con la responsabilidad de cumplir con la misión

informática. (Las pruebas ayudan a cumplir esta misión.)

* Alta gerencia de la organización (Senior organization

management): director general de la organización y otros altos

ejecutivos quienes tienen la responsabilidad de cumplir con la misión

de la organización. (La informática es una actividad que ayuda a

cumplir esta misión.)

* Auditor (Auditor): Uno o más individuos que tienen la

responsabilidad de evaluar la efectividad, eficiencia, y eficacia de los

controles en el área de la informática. Las pruebas son consideradas

un control por la función de auditoría.

Page 9: Fundamento pruebas Ingeniería del software

* Los administradores del proyecto, los administradores del programa, o

los directores (Project managers, program managers, or producers):

manejan el proyecto desde el inicio hasta el final. Son generalmente

responsables de escribir la especificación del producto, el manejo del

cronograma y los encargados de las decisiones críticas y de las negociaciones.

* Arquitectos o ingenieros de sistemas (Architects or system engineers):

son los expertos en tecnología. Generalmente poseen mucha experiencia y

por consiguiente son llamados los diseñadores de toda la arquitectura del

sistema o del diseño de todo el software. Trabajan conjuntamente con los

programadores.

* Los programadores, desarrolladores o codificadores (Programmers,

developers, or coders): diseñan y escriben el software y reparan los

defectos que son encontrados. Trabajan conjuntamente con los arquitectos y

los directores del proyecto para crear el software. Y trabajan conjuntamente

con los directores del proyecto y los probadores para conseguir reparar los

bugs.

Page 10: Fundamento pruebas Ingeniería del software

* Probadores o personal QA - Aseguradores de la calidad

(Testers or QA (Quality Assurance) Staff): son responsables de

encontrar y reportar los problemas en el producto de software.

Trabajan conjuntamente con todos los miembros del equipo

informándoles como se esta desarrollando y ejecutando las

pruebas y reportando los problemas encontrados.

* Escritores técnicos, asistentes de usuario, educadores de

usuario, escritores de manuales o ilustradores (Technical

writers, user assistance, user education, manual writers, or

illustrators): crean la documentación que viene en el producto

de software.

* Directores de configuración o constructores (Configuration

management or builder): manejan el proceso de colocar junto

todo el software escrito por los programadores y toda la

documentación creada por los escritores y de ponerla en un solo

paquete.

Page 11: Fundamento pruebas Ingeniería del software

* Pressman menciona algunos de los principios básicos que guían las pruebas del software:

* A todas las pruebas se les debería poder hacer un seguimiento hasta los requisitos del cliente.

* Las pruebas deberían planificarse mucho antes de que empiecen. La planificación de las pruebas

puede empezar tan pronto como esté completo el modelo de requisitos y la definición detallada

de los casos de prueba tan pronto como se tenga consolidado el modelo de diseño.

* Las pruebas deberían empezar por «lo pequeño»y progresar hacia «lo grande». Las primeras

pruebas planeadas y ejecutadas se centran generalmente en módulos individuales del programa. A

medida que se avanza en éstas, el enfoque de las pruebas cambia en un intento de encontrar

nuevos errores relacionados con la integración de éstos módulos y finalmente con la interacción

del sistema completo.

* No son posibles las pruebas exhaustivas. El número de permutaciones de caminos para incluso un

programa de tamaño moderado es demasiado grande. Por lo cual, es imposible ejecutar todas las

combinaciones de caminos durante las pruebas. Es posible, sin embargo elegir y ejecutar una serie

de caminos lógicos importantes que permitan probar adecuadamente el software.

* Para ser más eficaces, las pruebas deberían ser realizadas por un equipo independiente. El

ingeniero de software que creó el sistema no es el más indicado para realizar las pruebas debido a

que consciente o inconscientemente puede omitir casos de prueba importantes que conlleven a

descubrir nuevos errores. Por consiguiente, es recomendable organizar un grupo de trabajo

independiente para las pruebas que suministre una visión más objetiva del software.

Page 12: Fundamento pruebas Ingeniería del software

*

De acuerdo con James Bach la facilidad de prueba puede ser

definida de la siguiente manera:

La facilidad de prueba del software es simplemente la facilidad

con la que se puede probar un programa de computadora.

El alcance de esta facilidad de prueba adquiere gran importancia

por parte del equipo de desarrollo del software debido a que se

reconoce que las pruebas son unos de los procesos más difíciles y

costosos que se deben realizar. Por esta razón se hace necesario

implementar métricas y métodos que faciliten este proceso.

Page 13: Fundamento pruebas Ingeniería del software

Operatividad: hace referencia al aspecto funcional del

software.

Principalmente esta característica plantea que en cuanto mejor

funcione el software más eficiente será el proceso de pruebas.

Lista de comprobación:

* El sistema tiene pocos errores. –

* Ningún error bloquea la ejecución de las pruebas.

* El producto evoluciona en fases funcionales, lo que permite

ejecutar simultáneamente el desarrollo y las pruebas.

A continuación se enuncian algunas características junto con algunos

ítems de comprobación que llevan a que un software sea fácil de probar

Page 14: Fundamento pruebas Ingeniería del software

*Observabilidad: puede ser descrita con la siguiente frase «Lo

que ves es lo que pruebas»

Lista de comprobación:

* Se genera una salida distinta para cada entrada.

* Los estados y variables del sistema están visibles o se pueden

consultar durante la ejecución.

* Todos los factores que afectan a los resultados están visibles.

* Un resultado incorrecto se identifica fácilmente.

* Los errores internos se detectan automáticamente a través de

mecanismos de auto-comprobación.

* El código fuente es accesible.

Page 15: Fundamento pruebas Ingeniería del software

* Controlabilidad: cuantas más revisiones y controles se realicen al

software más fácil será lograr su adecuada automatización y optimización.

Lista de comprobación:

Todos los resultados posibles se pueden generar a través de alguna combinación

de entrada.

* Todo el código es ejecutable a través de alguna combinación de entrada.

* El ingeniero de pruebas puede controlar directamente los estados y las

variables del hardware y del software.

* Los formatos de las entradas y los resultados son consistentes y

estructurados.

* Las pruebas pueden especificarse, automatizarse y reproducirse

convenientemente.

Page 16: Fundamento pruebas Ingeniería del software

Capacidad de descomposición: hace referencia al grado de modularización del

software. Entre mayor sea éste, más rápido se podrán aislar los problemas y será posible

llevar a cabo mejores pruebas de regresión.

Lista de comprobación:

* El software está construido con módulos independientes.

* Los módulos del software se pueden probar independientemente.

Simplicidad: cuanto más entendible, estandarizado y estructurado esté el software

menos pruebas deberán realizarse y más rápido avanzará la planificación y ejecución de

pruebas.

Lista de comprobación:

* Simplicidad funcional.

* Simplicidad estructural.

* Simplicidad del código.

* Estabilidad: entre menor sea el número de cambios realizados al software, el proceso

de pruebas avanzará rápidamente ya que no se presentarán mayores interrupciones.

Lista de comprobación:

* Los cambios del software son infrecuentes, están controlados y no invalidan las pruebas

existentes.

* El software se recupera bien de los fallos.

Page 17: Fundamento pruebas Ingeniería del software

* Facilidad de comprensión: está característica plantea que entre mayor información se

tenga del proceso de software más inteligentes serán la definición y ejecución de las pruebas.

Lista de comprobación:

* El diseño se ha entendido perfectamente.

* Las dependencias entre los componentes internos, externos y compartidos se han entendido

perfectamente.

* Se han comunicado los cambios del diseño.

* La documentación técnica es instantáneamente accesible.

* La documentación técnica está bien organizada, es específica, detallada y exacta.

En general la «facilidad de prueba» dependerá en gran medida del diseño del

software y deberá tenerse en mente ya que ayudará a los ingenieros a proponer casos

de prueba más fácilmente.

Page 18: Fundamento pruebas Ingeniería del software

Característica de una buena

prueba

* Una buena prueba tiene un alta probabilidad de encontrar un error. El

ingeniero de software debe tener un alto nivel de entendimiento del software a

construir para poder diseñar buenos casos de prueba que encuentren el mayor

número de defectos.

* Una buena prueba no debe ser redundante. Uno de los objetivos de las pruebas es

«encontrar el mayor número de errores con la menor cantidad de tiempo y

esfuerzo posibles», por lo cual no se deben diseñar casos de prueba que tengan el

mismo propósito que otros sino que se debe buscar diseñar el menor número de

casos de prueba que permitan probar adecuadamente el software y que permitan

optimizar los recursos.

* Una buena prueba debería ser la mejor de la cosecha. La limitación en tiempo y

recursos puede impedir que se ejecuten todos los casos de prueba de un grupo de

pruebas similares por lo cual en estos casos se debería seleccionar la prueba que

tenga la mayor probabilidad de descubrir errores.

* Una buena prueba no debería ser ni demasiado sencilla ni demasiado compleja.