Beruflich Dokumente
Kultur Dokumente
Las primeras sirven para determinar la consistencia entre los requerimientos y el programa
terminado. Soporta metodologas formales de testeo, de mucho componente matemtico.
De todas maneras, hay que ser cuidadoso, porque no suele ser fcil encontrar qu es lo
que hay que demostrar. La verificacin consiste en determinar si estamos construyendo
el sistema correctamente, a partir de los requisitos.
En general a los informticos no les gustan las pruebas formales, en parte porque no las
entienden y en parte porque requieren un proceso matemtico relativamente complejo.
La validacin consiste en saber si estamos construyendo el sistema correcto. Las tareas
de validacin son ms informales. Las pruebas suelen mostrar la presencia de errores,
pero nunca demuestran su ausencia.
Las pruebas y el desarrollo de software
La etapa de pruebas es una de las fases del ciclo de vida de los proyectos. Se la podra
ubicar despus del anlisis, el diseo y la programacin, pero dependiendo del proyecto
en cuestin y del modelo de proceso elegido, su realizacin podra ser en forma paralela
a las fases citadas o inclusive repetirse varias veces durante la duracin del proyecto.
La importancia de esta fase ser mayor o menor segn las caractersticas del sistema
desarrollado, llegando a ser vital en sistemas de tiempo real u otros en los que los errores
sean irrecuperables.
Las pruebas no tienen el objeto de prevenir errores sino de detectarlos. Se efectan sobre
el trabajo realizado y se deben encarar con la intencin de descubrir la mayor cantidad de
errores posible.
Para realizar las pruebas se requiere gente que disfrute encontrando errores, por eso no
es bueno que sea el mismo equipo de desarrollo el que lleve a cabo este trabajo. Adems,
es un principio fundamental de las auditoras. Por otro lado, es bastante comn que a
quien le guste programar no le guste probar, y viceversa.
A veces se dan por terminadas las pruebas antes de tiempo. En las pruebas de caja blanca
(ver ms adelante) no es mala idea probar un 85% de las ramas y dar por terminado luego
de esto. Otra posibilidad es la siembra de errores y seguir las pruebas hasta que se
encuentren un 85% de los errores sembrados, lo que presumiblemente implica que se
encontr un 85% de los no sembrados. Otros mtodos se basan en la estadstica y las
comparaciones, ya sea por similitud con otro sistema en cantidad de errores o por el
tiempo de prueba usado en otro sistema.
En un proyecto ideal, podramos generar casos de prueba para cubrir todas las posibles
entradas y todas las posibles situaciones por las que podra atravesar el sistema.
Examinaramos as exhaustivamente el sistema para asegurar que su comportamiento
sea perfecto. Pero hay un problema con esto: el nmero de casos de prueba para un
sistema complejo es tan grande que no alcanzara una vida para terminar con las pruebas.
Como consecuencia, nadie realiza una prueba exhaustiva de nada salvo en sistemas
triviales.
En un sistema real, los casos de prueba se deben hacer sobre las partes del sistema en
los cuales una buena prueba brinde un mayor retorno de la inversin o en las cuales un
error represente un riesgo mayor.
Las pruebas cuestan mucho dinero. Pero para ello existe una mxima: pague por la
prueba ahora o pague el doble por el mantenimiento despus.
Todo esto lleva a que se deban planificar bien las pruebas, con suficiente anticipacin, y
determinar desde el comienzo los resultados que se deben obtener.
La idea de extreme programming es ms radical: propone primero escribir los programas
de prueba y despus la aplicacin, obligando a correr las pruebas siempre antes de una
integracin. Se basa en la idea bastante acertada de que los programas de prueba son la
mejor descripcin de los requerimientos. Esto lo analizamos en un tem especial.
Tipos de pruebas
Analizaremos 5 tipos de pruebas:
Revisiones de cdigo
Pruebas unitarias
Pruebas de integracin
Pruebas de sistema
Pruebas de aceptacin
Revisiones de cdigo
Las revisiones de cdigo son las nicas que se podran omitir de todos los tipos de
pruebas, pero tal vez sea buena idea por lo menos hacer alguna de ellas:
Pruebas de escritorio
Recorridos de cdigo
Inspecciones de cdigo
La prueba de escritorio rinde muy poco, tal vez menos de lo que cuesta, pero es una
costumbre difcil de desterrar. Es bueno concentrarse en buscar anomalas tpicas, como
variables u objetos no inicializados o que no se usan, ciclos infinitos y dems.
Los recorridos rinden mucho ms. Son exposiciones del cdigo escrito frente a pares. El
programador, exponiendo su cdigo, encuentra muchos errores. Adems, da ideas
avanzadas a programadores nuevos que se lleva a recorrer.
Las llamadas inspecciones de cdigo consisten en reuniones en conjunto entre los
responsables de la programacin y los responsables de la revisin. Tienen como objetivo
revisar el cdigo escrito por los programadores para chequear que cumpla con las normas
que se hayan fijado y para verificar la eficiencia del mismo. Se realizan siguiendo el
cdigo de un pequeo porcentaje de mdulos seleccionados al azar o segn su grado de
complejidad. Las inspecciones se pueden usar en sistemas grandes, pero con cuidado
para no dar idea de estar evaluando al programador. Suelen servir porque los revisores
estn ms acostumbrados a ver determinados tipos de errores comunes a todos los
programadores. Adems, despus de una inspeccin a un programador, de la que surge
un tipo de error, pueden volver a inspeccionar a otro para ver si no cay en el mismo
error.
Pruebas unitarias
Las pruebas unitarias se realizan para controlar el funcionamiento de pequeas porciones
de cdigo como ser subprogramas (en la programacin estructurada) o mtodos (en
POO). Generalmente son realizadas por los mismos programadores puesto que al
conocer con mayor detalle el cdigo, se les simplifica la tarea de elaborar conjuntos de
datos de prueba para testearlo.
Si bien una prueba exhaustiva sera impensada teniendo en cuenta recursos, plazos, etc.,
es posible y necesario elegir cuidadosamente los casos de prueba para recorrer tantos
caminos lgicos como sea posible. Inclusive procediendo de esta manera, deberemos
estar preparados para manejar un gran volumen de datos de prueba.
Los mtodos de cobertura de caja blanca tratan de recorrer todos los caminos posibles
por lo menos una vez, lo que no garantiza que no haya errores, pero pretende encontrar
la mayor parte.
El tipo de prueba a la cual se someter a cada uno de los mdulos depender de su
complejidad. Recordemos que nuestro objetivo aqu es encontrar la mayor cantidad de
errores posible. Si se pretende realizar una prueba estructurada, se puede confeccionar
un grafo de flujo con la lgica del cdigo a probar. De esta manera se podrn determinar
todos los caminos por los que el hilo de ejecucin pueda llegar a pasar, y por consecuente
elaborar los juegos de valores de pruebas para aplicar al mdulo, con mayor facilidad y
seguridad.
Un grafo de flujo se compone de:
Nodos (crculos), que representan una o ms acciones del mdulo.
Aristas (flechas), que representan el flujo de control entre los distintos nodos.
Los nodos predicados son aquellos que contienen una condicin, por lo que de ellos
emergen dos o ms aristas.
Pruebas de integracin
En el caso de las pruebas de integracin y de sistema, dado que ya se han realizado las
pruebas unitarias, se tomar a cada uno de los mdulos unitarios como una caja negra.
Las pruebas de integracin tienen como base las pruebas unitarias y consisten en una
progresin ordenada de testeos para los cuales los distintos mdulos van siendo
ensamblados y probados hasta haber integrado el sistema completo. Si bien se realizan
sobre mdulos ya probados en forma individual, no es necesario que se terminen todas
las pruebas unitarias para comenzar con las de integracin. Dependiendo de la forma en
que se organicen, se pueden realizar en paralelo a las unitarias.
El orden de integracin de los mdulos influye en:
La forma de preparar los casos de prueba
Las herramientas a utilizar (mdulos ficticios, muones, impulsores o stubs)
El orden para codificar y probar los mdulos
El costo de preparar los casos
El costo de la depuracin
Tanto es as que se le debe prestar especial atencin al proceso de eleccin del orden de
integracin que se emplee.
Existen principalmente dos tipos de integracin: La integracin incremental y la no
incremental. La integracin incremental consiste en combinar el conjunto de mdulos ya
probados (al principio ser un conjunto vaco) con los siguientes mdulos a probar. Luego
se va incrementando progresivamente el nmero de mdulos unidos hasta que se forma
el sistema completo. En la integracin no incremental o Big Bang se combinan todos los
mdulos de una vez.
Pruebas de sistema
Las pruebas de sistema se realizan una vez integrados todos los componentes. Su
objetivo es ver la respuesta del sistema en su conjunto, frente a distintas situaciones. Se
simulan varias alternativas que podran darse con el sistema implantado y en base a ellas
se prueba la eficacia y eficiencia de la respuesta que se obtiene. Se pueden distinguir
varios tipos de prueba distintos, por ejemplo:
Pruebas negativas: se trata de que el sistema falle para ver sus debilidades.
Pruebas de recuperacin: se simulan fallas de software y/o hardware para verificar
la eficacia del proceso de recuperacin.
Pruebas de rendimiento: tiene como objeto evaluar el rendimiento del sistema
integrado en condiciones de uso habitual.
Pruebas de resistencia o de estrs: comprueban el comportamiento del sistema
ante situaciones donde se demanden cantidades extremas de recursos (nmero de
transacciones simultneas anormal, excesivo uso de las memorias, etc.).
Pruebas de seguridad: se utilizan para testear el esquema de seguridad intentando
vulnerar los mtodos utilizados para el control de accesos no autorizados al sistema.
Pruebas de instalacin: verifican que el sistema puede ser instalado
satisfactoriamente en el equipo del cliente, incluyendo todas las plataformas y
configuraciones de hardware necesarias.
Pruebas de compatibilidad: se prueba al sistema en las diferentes configuraciones
de hardware o de red y de plataformas de software que debe soportar.
Pruebas de aceptacin
Las pruebas de aceptacin, al igual que las de sistema, se realizan sobre el producto
terminado e integrado; pero a diferencia de aquellas, estn concebidas para que sea un
usuario final quien detecte los posibles errores.
Se clasifican en dos tipos: pruebas Alfa y pruebas Beta.
Las pruebas Alfa se realizan por un cliente en un entorno controlado por el equipo de
desarrollo. Para que tengan validez, se debe primero crear un ambiente con las mismas
condiciones que se encontrarn en las instalaciones del cliente. Una vez logrado esto, se
procede a realizar las pruebas y a documentar los resultados.
Cuando el software sea la adaptacin de una versin previa, debern probarse tambin
los procesos de transformacin de datos y actualizacin de archivos de todo tipo.
Por otro lado, las pruebas Beta se realizan en las instalaciones propias de los clientes.
Para que tengan lugar, en primer trmino, se deben distribuir copias del sistema para que
cada cliente lo instale en sus oficinas, dependencias y/o sucursales, segn sea el caso.
Si se tratase de un nmero reducido de clientes, el tema de la distribucin de las copias
no representa grandes dificultades, pero en el caso de productos de venta masiva, la
eleccin de la beta testers debe realizarse con sumo cuidado. En el caso de las pruebas
Beta, cada usuario realizar sus propias pruebas y documentar los errores que
encuentre, as como las sugerencias que crea conveniente realizar, para que el equipo de
desarrollo tenga en cuenta al momento de analizar las posibles modificaciones.
Cuando el sistema tenga un cliente individual, las pruebas de aceptacin se hacen de
comn acuerdo con ste, y los usuarios se determinan en forma programada, as como
tambin se definen los aspectos a probar y la forma de informar resultados. Cuando, en
cambio, se est desarrollando un producto masivo, los usuarios para pruebas se
determinan de formas menos estrictas, y hay que ser muy cuidadoso en la evaluacin del
feedback que proveen. Por lo tanto, en este segundo caso hay que dedicar un esfuerzo
considerable a la planificacin de las pruebas de aceptacin.
Herramientas a usar por los propios programadores
A menudo los programadores pueden insertar lneas de cdigo que faciliten las pruebas y
la depuracin.
Un ejemplo de esto son los invariantes. Por ejemplo, si sabemos que a lo largo de un
programa la variable A debe tener un valor mayor que la B, podemos introducir el
invariante A>B, de modo tal que la implementacin nos avise cuando algn error provoque
la alteracin de ese invariante.
Algunos lenguajes de programacin permiten la definicin de invariantes, pero en la
mayora deben implementarse especialmente.
Otra herramienta prctica son las afirmaciones. Por ejemplo, si en determinado lugar del
cdigo debe cumplirse que A>0, puede declararse esto como un aserto o afirmacin, de
modo que la computadora lo verifique y avise al programador en caso de que no se
cumpla.
Sirven adicionalmente como precondiciones y postcondiciones de mdulos.
AUTOR 1:
http://materias.fi.uba.ar/7507/content/20101/lecturas/documentacion_pruebas.pdf
AUTOR 2:
Sommerville, Ian
Ingeniera de Software
Pgina: 205 CAPITULO 8
PEARSON EDUCACIN, Mxico, 2011 ISBN: 978-607-32-0603-7