• No se han encontrado resultados

Verificación y Validación de Software

N/A
N/A
Protected

Academic year: 2022

Share "Verificación y Validación de Software"

Copied!
71
0
0

Texto completo

(1)

Verificación y Validación de Software

Ingeniería en Sistemas de Información

Departamento de Ciencias e Ingeniería de la Computación 2015

(2)

Verificación y Validación de Software

2015 / DCIC / UNS

VyVS

(3)

Testing Orientado a Objetos

Object Oriented Testing

Verificación y Validación de

Software

(4)

Herencia Múltiple

Verificación y Validación de

Software

(5)

The Yo-Yo Problem

(6)

TOO / Tablas de Decisiones

Podemos usar las tablas para modelar el flujo de control de lo que estamos testeando o las responsabilidades de la clase.

Verificación y Validación de

Software

(7)

TOO / Tablas de Decisiones

Criterios de Cubrimiento

All-Explicit Variants

All-Variants, All-True, All-False, All-Prime Each-Condition/All-Conditions

BDD-Determinants

Nonbinary Variable Domain Analysis

Verificación y Validación de

Software

(8)

Testing Orientado a Objetos

Object Oriented Testing

Verificación y Validación de

Software

(9)

Testing a Nivel de Métodos

Method Scope Testing

Verificación y Validación de

Software

(10)

Testing a Nivel de Métodos

Method Scope Testing

Las técnicas que vimos de caja blanca son aplicables en este caso

Grafo de Flujo de Control

Cubrimiento de Sentencias

Cubrimiento de Condiciones y Decisiones Cubrimiento de Caminos, etc.

Verificación y Validación de

Software

(11)

Testing a Nivel de Métodos

Method Scope Testing

Las técnicas que vimos de caja blanca son aplicables en este caso

Flujo de Datos

Verificación y Validación de

Software

(12)

Testing a Nivel de Métodos

Method Scope Testing

Las técnicas que vimos de caja blanca son aplicables en este caso

Clases de Equivalencia, Tablas de Decisión

Verificación y Validación de

Software

(13)

Testing a Nivel de Métodos / Recursive Function Test

Method Scope Testing

Verificación y Validación de

Software

(14)

Testing a Nivel de Métodos / Recursive Function Test

Method Scope Testing

Problemas conocidos:

La ejecución continua cuando la precondición no se satisface en el primer llamado o durante los llamados recursivos.

Se omite el caso base.

La lógica del caso base/recursivo es incorrecta.

La condición del caso base contiene el operador incorrecto.

El caso base retorna el valor incorrecto.

La postcondición no se satisface al volver de la recursividad.

Verificación y Validación de

Software

(15)

Testing a Nivel de Métodos / Recursive Function Test

Method Scope Testing

Problemas conocidos al recorrer estructuras:

No se reconoce una estructura corrupta.

Se inicializa en forma incorrecta o corrupta la estructura.

No se recorre correctamente la estructura.

El algoritmo no es apropiado para la estructura.

Verificación y Validación de

Software

(16)

Testing a Nivel de Métodos / Recursive Function Test

Method Scope Testing

Diseñar casos de test que:

Intenten violar la precondición en el primer llamado y por lo menos una vez durante la secuencia recursiva.

Intenten violar la postcondición en la vuelta de la recursividad.

Análisis de Valores Límites en la profundidad de la recursión, 0, 1 y máximo.

Buscar generar todas las excepciones posibles en el contexto donde está el método.

Verificación y Validación de

Software

(17)

Testing a Nivel de Métodos / Recursive Function Test

Method Scope Testing

Diseñar casos de test que:

Usar Análisis de Dominio sobre los parámetros de entrada.

Usar Análisis de Dominio sobre la estructura de datos.

Verificación y Validación de

Software

(18)

Testing a Nivel de Métodos / Polymorphic Message Test

Method Scope Testing

Verificación y Validación de Software

A +f()

B +f()++

C +f()++

No nos daría confianza un método al cual no se le testearon todos los posibles caminos de su ejecución.

De la misma manera, no nos daría confianza un método sobre el cual no se testearon todas las variantes posibles de un llamado polimórfico.

(19)

Testing a Nivel de Métodos / Polymorphic Message Test

Method Scope Testing

Verificación y Validación de Software

A +f()

B +f()++

C +f()++

No nos daría confianza un método al cual no se le testearon todos los posibles caminos de su ejecución.

De la misma manera, no nos daría confianza un método sobre el cual no se testearon todas las variantes posibles de un llamado polimórfico.

(20)

Testing a Nivel de Métodos / Polymorphic Message Test

Method Scope Testing

Verificación y Validación de Software

A +f()

B +f()++

C +f()++

No nos daría confianza un método al cual no se le testearon todos los posibles caminos de su ejecución.

De la misma manera, no nos daría confianza un método sobre el cual no se testearon todas las variantes posibles de un llamado polimórfico.

(21)

Testing a Nivel de Métodos / Polymorphic Message Test

Method Scope Testing

Verificación y Validación de Software

A +f()

B +f()++

C +f()++

No nos daría confianza un método al cual no se le testearon todos los posibles caminos de su ejecución.

De la misma manera, no nos daría confianza un método sobre el cual no se testearon todas las variantes posibles de un llamado polimórfico.

(22)

Testing a Nivel de Métodos

Method Scope Testing

Si nos limitamos solamente a testear a nivel de métodos podemos estar obviando problemas en las interacciones dentro de las clases.

Verificación y Validación de

Software

(23)

Testing a Nivel de Clase

Class Scope Testing

Verificación y Validación de

Software

(24)

Integración a Nivel de Clase

Class Scope Integration

La Integración a Nivel de Clase es un paso anterior a comenzar el testing de la clase. Lo que se busca es determinar si la clase está lista para ser testeada, esto es, que no contenga errores groseros.

Small Pop

Alpha-Omega Cycle

Verificación y Validación de

Software

(25)

Integración a Nivel de Clase / Small Pop

Class Scope Integration

El Small Pop es una Integración Big Bang pero a nivel de clase.

Se escribe la clase completa y cuando se termina se hace un driver para hacer un test general de la misma.

La clase debe ser simple

Los servidores que la clase usa deben ser estables Los elementos heredados deben ser estables

Hay poca interacción dentro de la clase

Verificación y Validación de

Software

(26)

Integración a Nivel de Clase / Alpha-Omega Cycle

Class Scope Integration

Alpha y Omega representan dos estados asociados a la vida de un objeto. Alpha es el estado en el que se está, antes de la creación del objeto y Omega es el estado al que se llega después de la destrucción del objeto.

La técnica Alpha-Omega Cycle tiene como objetivo llevar un objeto desde Alpha hasta Omega, enviando cada mensaje posible disponible en el objeto (por lo menos una vez).

Verificación y Validación de

Software

(27)

Integración a Nivel de Clase / Alpha-Omega Cycle

Class Scope Integration

No es el objetivo lograr un cubrimiento de sentencias ni de responsabilidades, sólo se busca ejecutar todos los métodos del objeto y llegar a Omega. Sí se logra cumplir este ciclo, entonces se puede pasar a test más complejos.

Verificación y Validación de

Software

(28)

Integración a Nivel de Clase / Alpha-Omega Cycle

Class Scope Integration

Existe un orden sugerido para ejecutar el ciclo:

1. Llamar al constructor

2. Llamar a los métodos get

3. Llamar a los métodos booleanos 4. Llamar a los métodos set

5. Llamar a los iteradores 6. Llamar al destructor

Verificación y Validación de

Software

(29)

Testing Orientado a Objetos

Object Oriented Testing

Algunos de los problemas que genera el paradigma orientado a objetos en el testing, no son exclusivos del testing.

Verificación y Validación de

Software

(30)

Testing Orientado a Objetos

Object Oriented Testing

Verificación y Validación de Software

Testing

Cálculo de Métricas Serialización

(31)

Tipos de Herencia

Recordemos los tres usos posibles de la herencia Extensión (me traigo todo lo que heredo)

Sobreescritura (cambio la implementación de lo que heredo) Especialización (agrego cosas nuevas)

Verificación y Validación de

Software

(32)

Principio de Sustitución de Liskov

Si S es un subtipo de T, entonces los objetos de tipo T pueden ser sustituidos por objetos de tipo S sin alterar ninguna de las propiedades deseables del sistema.

Verificación y Validación de

Software

(33)

OO Testing Manifesto

Principios:

● Unique Bug Hazzard. El testing debería primero centrarse en los bugs propios del paradigma y ser “expandido” con técnicas clásicas.

● Object-oriented Test Automation. Las herramientas de testeo deben ajustarse al paradigma.

● Test-effective Process. El proceso de testing debe ser iterativo e incremental. El tester debe considerar testing a nivel de clase, método y paquete simultáneamente.

Verificación y Validación de

Software

(34)

Bugs de Herencia

¿Cuáles son los bugs más comunes relacionados con la herencia?

Verificación y Validación de

Software

(35)

Bugs de Herencia

Incorrect Initialization: Se omite la inicialización apropiada de una superclase o se hace en forma incorrecta.

Inadvertent Binding: Vinculaciones incorrectas por un mal entendimiento de las reglas de alcance.

Missing Override: No se indica explícitamente que un método es una sobreescritura de otro.

Verificación y Validación de

Software

(36)

Bugs de Herencia

Naked Access: Un atributo público de una superclase es visto por las subclases y modificado directamente.

Square Peg in a Round Hole: Una subclase está incorrectamente ubicada dentro de una jerarquía de clases.

Naughty Children: Una subclase no acepta todos los mensajes que su superclase acepta o la subclase deja al objeto en un estado inválido con respecto a la superclase.

Verificación y Validación de

Software

(37)

Bugs de Herencia

Worm Holes: La subclase computa valores que no son válidos con respecto al invariante de la superclase.

Spaghetti Inheritance: Mucha herencia múltiple + herencias muy profundas.

Gnarly Hierarchies: Una subclase modifica el dominio de una operación.

Verificación y Validación de

Software

(38)

Bugs de Herencia

Weird Hierarchies: Se abusa de la herencia para compartir código.

Fat Interfaces: Una subclase hereda métodos que son inapropiados para la clase. Nunca los va a utilizar pero igual están disponibles.

Verificación y Validación de

Software

(39)

Clase Aplanada

Class Flattening

Una clase aplanada es una clase que hace explícito todo lo que hereda.

Verificación y Validación de

Software

(40)

Clase Aplanada

Class Flattening

Verificación y Validación de Software

+a +b* -c

Clase A

+d +e -f

Clase B +a +b+

+d +e++

Clase C

+a +b++ +g +h

A

B

C

(41)

Clase Aplanada

Class Flattening

¿Cómo aplanar una clase?

Tenemos que tener en cuenta las semánticas involucradas en la herencia de Java.

Verificación y Validación de

Software

(42)

Clase Aplanada

Class Flattening

A nivel de visibilidad, tenemos cuatro modificadores:

público, privado, protegido y paquete

Una subclase puede acceder directamente a todo lo que esté declarado como público, protegido o paquete. Todo lo que sea privado sólo puede ser accedido directamente dentro de la clase que lo declara.

Verificación y Validación de

Software

(43)

Clase Aplanada

Class Flattening

A nivel de visibilidad, tenemos cuatro modificadores:

público, privado, protegido y paquete

Público, paquete y protegido lo vamos a llamar “visible”. Todo lo que sea privado lo vamos a llamar “invisible”.

Verificación y Validación de

Software

(44)

Attribute & Method Flattening

Los atributos que no son overridden y que son visibles, se bajan directamente de la superclase a la subclase. Si un atributo no es overridden y es invisible entonces tenemos que analizar si algún método visible lo accede en la superclase.

Sí un método de la superclase accede al atributo invincible (no overridden) entonces el atributo se debe bajar a la subclase, excepto que ninguno de los métodos que acceden a este atributo bajen (method flattening).

Verificación y Validación de

Software

(45)

Attribute & Method Flattening

Los atributos que son overridden se deben bajar de la superclase a la subclase sí también se están bajando los métodos que los utilizan. Es importante notar que en el caso de los atributos que son overridden se debe hacer un renombramiento del atributo y de cada referencia al mismo en los métodos que se bajan y lo utilizan. También hay que cambiar las referencias al atributo (si existen) en la subclase (super.)

Verificación y Validación de

Software

(46)

Attribute & Method Flattening

El único caso donde no se baja un atributo es cuando es invisible y no es utilizado por métodos que se bajan.

Verificación y Validación de

Software

(47)

Attribute & Method Flattening

El único caso donde no se baja un atributo es cuando es invisible y no es utilizado por métodos que se bajan.

El análisis es equivalente para los métodos.

Verificación y Validación de

Software

(48)

Attribute & Method Flattening

Verificación y Validación de Software

¿Visible?

¿Overridden?

¿Accessible?

¿Accessible?

No se baja Sí se baja

Renombrar y bajar

¿Overridden?

No

No

No No

No

(49)

Class Scope & Flatten Class Scope

Class Scope = “A nivel clase”, hace referencia a todo lo visible a nivel de una clase; sus atributos y métodos.

Flatten Class Scope = “A nivel clase aplanada”, hace referencia a todo lo visible de una clase, más todo lo que contiene por herencia.

Verificación y Validación de

Software

(50)

Testing a Nivel de Clase

Class Scope Testing

Algunas clases pueden aceptar un mensaje en cualquier momento, bajo cualquier estado. Sin embargo, existen clases que imponen restricciones sobre cuándo pueden recibir cierto mensaje.

Estás restricciones pueden involucrar mensajes anteriores o el contenido del objeto. Esta situación se conoce como Class Modality

Verificación y Validación de

Software

(51)

Testing a Nivel de Clase

Class Scope Testing

Hay 4 tipos de Modalities

Nonmodal Class: La clase no impone restricciones sobre la secuencia de llamados.

Unimodal: La clase impone restricciones sobre la secuencia de llamados, pero las restricciones no involucran el contenido del objeto sino los llamados anteriores.

Quasi-Modal: La clase impone restricciones sobre la secuencia de llamados y las restricciones sólo dependen del contenido del objeto.

Modal: La clase impone restricciones sobre la secuencia de llamados y las restricciones dependen del contenido del objeto y de los llamados anteriores.

Verificación y Validación de

Software

(52)

Testing a Nivel de Clase / Nonmodal Class Test

Class Scope Testing

Testear una clase que no impone restricciones sobre la secuencia de llamados. ¿Cómo seleccionamos secuencias de llamados que puedan revelar problemas en la clase?

Verificación y Validación de

Software

(53)

Testing a Nivel de Clase / Nonmodal Class Test

Class Scope Testing

Verificación y Validación de Software

ALPHA OMEGA

constructor 1

constructor 2

constructor constructor1

constructor1 ...

(54)

Testing a Nivel de Clase / Nonmodal Class Test

Class Scope Testing

Estrategias

Define-use sequence: Esa secuencia consiste de un método def, seguido de todos los métodos use posibles.

Random sequence: La secuencia de sets y gets se genera en forma aleatoria.

Suspect sequence: Si existen secuencias que son sospechosas, por alguna razón, entonces se prueban.

Verificación y Validación de

Software

(55)

Testing a Nivel de Clase / Unimodal Class Test

Testing at Class Scope

Testear una clase que impone restricciones sobre la secuencia de llamados y dichas restricciones sólo dependen de llamados anteriores.

Los autores Kirani & Tsai desarrollaron una propuesta para esta situación, denominada “Especificación de Secuencia de Métodos”

Verificación y Validación de

Software

(56)

Testing a Nivel de Clase / Unimodal Class Test

Testing at Class Scope

Dada una clase C, Methods(C) es el conjunto de métodos públicos definidos en C. Una secuencia de métodos S, es una secuencia finita de métodos pertenecientes a Methods(C).

C = Clase Pila;

Methods(Clase Pila) = {Push, Pop, isEmpty}

S1 = {Push . Push . Pop}

S2 = {isEmpty . Pop}

Verificación y Validación de

Software

(57)

Testing a Nivel de Clase / Unimodal Class Test

Testing at Class Scope

Se pueden usar expresiones regulares para declarar el uso correcto de los métodos.

Clase Caja_Ahorro;

Methods(Caja_Ahorro) = {Crear, Verificar, Depositar, Retirar, Borrar}

SeqSpec(Caja_Ahorro) -> Crear . Verificar . Operar . Borrar Operar -> Depositar . Transacciones

Transacciones -> (Depositar | Retirar)*

Verificación y Validación de

Software

(58)

Testing a Nivel de Clase / Unimodal Class Test

Testing at Class Scope

SafeSeq(C) es el conjunto de todas las secuencias Si que se pueden derivar de SeqSpec(C).

Esta técnica es posible utilizarla tanto para un análisis estático como para un análisis en ejecución.

Verificación y Validación de

Software

(59)

Testing a Nivel de Clase / Quasi-modal Class Test

Testing at Class Scope

Testear una clase cuyas restricciones en la secuencia de llamados dependen del contenido del objeto.

Es muy probable que esta clase tenga algún tipo de estructura asociada, por lo que debemos prestar atención a la misma. También es muy probable que existan invariantes y precondiciones asociadas a las restricciones.

Verificación y Validación de

Software

(60)

Testing a Nivel de Clase / Quasi-modal Class Test

Testing at Class Scope

Estrategia

Describir las restricciones de contenido como un diagrama de estados o tabla de transiciones.

Utilizar los invariantes y precondiciones como condiciones guardia en las transiciones.

Verificación y Validación de

Software

(61)

Testing a Nivel de Clase / Quasi-modal Class Test

Testing at Class Scope

Verificación y Validación de Software

ALPHA VACIA CON OMEGA

COSAS LLENA

add(x)

[sizeOf==Max-1]

add(x) new()

(62)

Testing a Nivel de Clase / Quasi-modal Class Test

Testing at Class Scope

Verificación y Validación de Software

Estado Actual Evento/Condición Acción Nuevo Estado

Browsing Click link Display Browsing

Browsing Add to cart Selection Dialog Selecting

Browsing Continue Shopping Undefined Undefined

Browsing Check out Undefined Undefined

Browsing Login[bad] Undefined Undefined

Browsing Login[good] Undefined Undefined

Browsing Purchase[bad] Undefined Undefined

Browsing Purchase[good] Undefined Undefined

Browsing Abandon <no action> Left

Browsing Resume Shopping Undefined Undefined

Browsing Go elsewhere Undefined Undefined

Selecting Click link Undefined Undefined

(63)

Testing a Nivel de Clase / Quasi-modal Class Test

Testing at Class Scope

Verificación y Validación de Software

Estado Actual Evento/Condición ALPHA VACIA ….

ALPHA new OK

ALPHA add(x)

... ... ... ... ...

(64)

Testing a Nivel de Clase / Modal Class Test

Testing at Class Scope

Testear una clase que impone restricciones sobre la secuencia de llamados, las restricciones dependen del contenido del objeto y de llamados anteriores.

Verificación y Validación de

Software

(65)

RESUMEN

(66)

Testing a Nivel de Métodos

Method Scope Testing

Las técnicas que vimos de caja blanca son aplicables en este caso

Grafo de Flujo de Control

Cubrimiento de Sentencias

Cubrimiento de Condiciones y Decisiones Cubrimiento de Caminos, etc.

RESUMEN

(67)

Testing a Nivel de Métodos / Polymorphic Message Test

Method Scope Testing

RESUMEN

A +f()

B +f()++

C +f()++

No nos daría confianza un método al cual no se le testearon todos los posibles caminos de su ejecución.

De la misma manera, no nos daría confianza un método sobre el cual no se testearon todas las variantes posibles de un llamado polimórfico.

(68)

Testing a Nivel de Métodos

Method Scope Testing

Si nos limitamos solamente a testear a nivel de métodos podemos estar obviando problemas en las interacciones dentro de las clases.

RESUMEN

(69)

Clase Aplanada

Class Flattening

RESUMEN

+a +b* -c

Clase A

+d +e -f

Clase B +a +b+

+d +e++

Clase C

+a +b++ +g +h

A

B

C

(70)

Testing a Nivel de Clase

Class Scope Testing

Hay 4 tipos de Modalities

Nonmodal Class: La clase no impone restricciones sobre la secuencia de llamados.

Unimodal: La clase impone restricciones sobre la secuencia de llamados, pero las restricciones no involucran el contenido del objeto sino los llamados anteriores.

Quasi-Modal: La clase impone restricciones sobre la secuencia de llamados y las restricciones sólo dependen del contenido del objeto.

Modal: La clase impone restricciones sobre la secuencia de llamados y las restricciones dependen del contenido del objeto y de los llamados anteriores.

RESMEN

(71)

Verificación y Validación de Software

Ingeniería en Sistemas de Información

Departamento de Ciencias e Ingeniería de la Computación 2015

Referencias

Documento similar

If certification of devices under the MDR has not been finalised before expiry of the Directive’s certificate, and where the device does not present an unacceptable risk to health

Where possible, the EU IG and more specifically the data fields and associated business rules present in Chapter 2 –Data elements for the electronic submission of information

The 'On-boarding of users to Substance, Product, Organisation and Referentials (SPOR) data services' document must be considered the reference guidance, as this document includes the

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)