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].