• No results found

3.2 Instruments and Data

3.2.3 Supplementary Instruments

La t´actica de Particiones Est´andar (SP, por Standard Partitions) fue desarrollada por Stocks y Carrington [6,8] y consiste en utilizar los operadores matem´aticos que aparecen en la operaci´on para generar nuevas clases de prueba. Una metodolog´ıa tradicional en el testing basado en especificaciones es reducir una especificaci´on a Forma Normal Disyuntiva, como se vio en la secci´on anterior, y elegir entradas que satisfagan las precondiciones de cada t´ermino de la disyunci´on obtenida. Sin embargo, esto tiende a ser muy simplista porque, por lo general, los lenguajes de especificaci´on tienen operadores matem´aticos poderosos donde la complejidad de sus dominios de entrada no se hace evidente en una transformaci´on a DNF. Es esta complejidad a nivel de especificaci´on la que normalmente se ve refleja- da en la implementaci´on de los propios operadores, y por lo que omitir su an´alisis puede impedir que se revelen algunos errores existentes en el programa. Esta t´actica, por lo tanto, divide los dominios de estos operadores de acuerdo a lapartici´on est´andar de cada uno ellos. Una partici´on est´andar es una partici´on del dominio del operador en conjuntos llamados sub-dominios, los cuales pueden definirse como condiciones expresadas en funci´on de los operandos del operador. Es la condici´on que define cada subdominio la que determinar´a cada nueva clase de prueba.

A modo de ilustraci´on, se aplicar´a esta t´actica a las clases de prueba obtenidas en la secci´on anterior. Para esto, en primer lugar, hay que seleccionar una ocurrencia de un operador en el esquema de operaci´on Leer. Se eligir´a el operador Cde la expresi´on:

(1..longitud?)Cdatos

y se tendr´a en cuenta que para la restricci´on de dominio de un conjuntoS y una relaci´on R,S CR , una partici´on est´andar podr´ıa ser:

1. R={} 2. R6={} ∧S ={} 3. R6={} ∧S = domR 4. R6={} ∧S 6={} ∧S ⊂domR 5. R6={} ∧S 6={} ∧S ∩domR={} 6. R6={} ∧S ∩domR6={} ∧ ¬(S ⊆domR)

As´ı, lo que sigue es reemplazar los par´ametros formales que aparecen en el listado de sub-dominios de la partici´on (S yR) por los par´ametros reales que aparecen en la expresi´on original (1..longitud? y datos), para de esta forma obtener la partici´on en t´erminos de ´estos ´ultimos. El ´ultimo paso es considerar la clase de prueba sobre la que se quiere aplicar la t´actica y generar otras nuevas a partir de los sub-dominios de la partici´on resultante. En este caso se aplicar´a sobreLeer2DNF yLeer4DNF.

De esta forma, se obtienen nuevas clases de prueba, que est´an contenidas en las anteriores y que se representan en el ´arbol de pruebas como las primeras “colgando” de las ´ultimas. En los esquemas

CAP´ITULO 3. EL TESTING BASADO EN ESPECIFICACIONES FORMALES Z 29

correspondientes, deben incluirse unas dentro de otras, como se ver´a en el siguiente listado, que presenta todas las clases de prueba obtenidas hasta el momento:

Leer1SP == [Leer2DNF |datos ={}]

Leer2SP == [Leer2DNF |datos 6={} ∧1..longitud? ={}]

LeerSP

3 == [Leer2DNF |datos 6={} ∧1..longitud? = domdatos]

Leer4SP == [Leer2DNF |datos 6={} ∧1..longitud?6={} ∧1..longitud?⊂domdatos]

Leer5SP == [Leer2DNF |datos 6={} ∧1..longitud?6={} ∧1..longitud?∩domdatos ={}]

LeerSP

6 == [Leer2DNF |datos 6={} ∧1..longitud?∩domdatos 6={}

∧ ¬(1..longitud?⊆domdatos)]

Leer7SP == [Leer4DNF |datos ={}]

Leer8SP == [Leer4DNF |datos 6={} ∧1..longitud? ={}]

Leer9SP == [Leer4DNF |datos 6={} ∧1..longitud? = domdatos]

Leer10SP == [Leer4DNF |datos 6={} ∧1..longitud?6={} ∧1..longitud?⊂domdatos]

Leer11SP == [Leer4DNF |datos 6={} ∧1..longitud?6={} ∧1..longitud?∩domdatos ={}]

Leer12SP == [Leer4DNF |datos =6 {} ∧1..longitud?∩domdatos 6={} ∧ ¬(1..longitud?⊆domdatos)]

An´alogamente, se considerar´a el operador ≤de la expresi´on:

longitud?≤#datos

con la siguiente partici´on est´andar para a ≤b (que tambi´en vale para a <b,a >b,a ≥b ya =b): 1. a <0∧b<0 2. a <0∧b= 0 3. a <0∧b>0 4. a = 0∧b<0 5. a = 0∧b= 0 6. a = 0∧b>0 7. a >0∧b<0 8. a >0∧b= 0 9. a >0∧b>0 que se aplicar´a aLeer5DNF, obteniendo:

Leer13SP == [Leer5DNF |longitud?<0∧#datos <0]

Leer14SP == [Leer5DNF |longitud?<0∧#datos = 0]

LeerSP

15 == [Leer5DNF |longitud?<0∧#datos >0] Leer16SP == [Leer5DNF |longitud? = 0∧#datos <0]

Leer17SP == [Leer5DNF |longitud? = 0∧#datos = 0]

LeerSP

18 == [Leer5DNF |longitud? = 0∧#datos >0] Leer19SP == [Leer5DNF |longitud?>0∧#datos <0]

Leer20SP == [Leer5DNF |longitud?>0∧#datos = 0]

LeerSP

21 == [Leer5DNF |longitud?>0∧#datos >0]

Como para ninguna t´actica de testing existe la necesidad de aplicarse a todas las clases de prueba, en este caso se eligir´a no hacerlo con la claseLeer1DNF yLeer3DNF.

CAP´ITULO 3. EL TESTING BASADO EN ESPECIFICACIONES FORMALES Z 30

Es importante remarcar que cada clase de prueba est´a restringida tanto por la condici´on que aparece expl´ıcitamente como por la dada con la inclusi´on de esquemas. Por ejemplo, el predicado de

Leer7SP es en realidad longitud?>#datos ∧datos ={}. Teniendo en cuenta esto, se puede notar que varias de las clases reci´en listadas tienen predicados contradictorios (son conjunciones equivalentes a

false), como es el caso de Leer1SP, Leer5SP, etc. Dado que ´estas clases de prueba no est´an m´as que definiendo conjuntos vac´ıos de casos de prueba, no tienen ninguna utilidad, y se las puede descartar por completo5, quedando s´olo las que se listan a continuaci´on:

Leer2SP == [Leer2DNF |1..longitud? ={}]

Leer3SP == [Leer2DNF |1..longitud? = domdatos]

Leer4SP == [Leer2DNF |1..longitud?6={} ∧1..longitud?⊂domdatos]

Leer7SP == [Leer4DNF |datos ={}]

Leer12SP == [Leer4DNF |datos 6={}]

Leer20SP == [Leer5DNF |longitud?>0∧#datos = 0]

Leer21SP == [Leer5DNF |longitud?>0∧#datos >0]

En esta nueva presentaci´on de las clases de prueba se han simplificado los predicados, omitido aquellas condiciones, generadas por la partici´on est´andar, que puedan deducirse de las que ya intro- ducen los esquemas incluidos en las clases. Por ejemplo, no se ha hecho expl´ıcito que datos 6= {} en

LeerSP

2 ,Leer3SP yLeer4SP porque esto se deduce de la condici´on #datos >0 proveniente del predicado

de Leer2DNF. Se puede observar aqu´ı que las clases de prueba que se obtuvieron con la aplicaci´on de la t´actica de Particiones Est´andar especifican formas m´as particulares de ejecutar el programa. Como muestra de esto, vale considerar que la alternativa funcional que se especifica enLeerDNF

2 se dividi´o en:

Se quiere leer una cantidad de bytes que no sobrepasa el tama˜no del archivo, el cual no est´a vac´ıo y no tiene permiso de acceso prohibido... y esa cantidad de bytes a leer es nula.

Se quiere leer una cantidad de bytes que no sobrepasa el tama˜no del archivo, el cual no est´a vac´ıo y no tiene permiso de acceso prohibido... y esa cantidad de bytes es igual al tama˜no del archivo. Es decir, se quiere leer completamente un archivo no vac´ıo y que no tiene permiso de acceso prohibido.

Se quiere leer una cantidad de bytes que no sobrepasa el tama˜no del archivo, el cual no est´a vac´ıo y no tiene permiso de acceso prohibido... y esa cantidad de bytes es menor al tama˜no del archivo. Es decir, se quiere leer una porci´on de un archivo no vac´ıo y que no tiene permiso de acceso prohibido.

Es evidente que de esta manera se pondr´a a prueba el programa en las tres situaciones, mientras que con el enfoque anterior algunas de ellas podr´ıan no haberse tenido en cuenta.

5

A esta acci´on de eliminar las clases de prueba vac´ıas se la llamapoda del ´arbol de pruebas, y no est´a soportada por el prototipo actual de Fastest.

CAP´ITULO 3. EL TESTING BASADO EN ESPECIFICACIONES FORMALES Z 31

Si bien esta t´actica de testing podr´ıa utilizarse con cualquier operador matem´atico, incluso con los que pueden agregarse como extensi´on al lenguaje, es cierto que Particiones Est´andar depende de que est´e definida la partici´on est´andar del operador analizado. Como una alternativa, los mismos autores de esta t´ecnica proponen solamente definir las particiones est´andar de los operadores m´as simples y, expresando los operadores m´as complejos en funci´on de ´estos, derivar tambi´en sus particiones est´andar. A esta otra t´actica, a´un no implementada en Fastest, la denominaronPropagaci´on de Sub-dominios y pueden encontrarse m´as detalles de ella en [6,8].