Академический Документы
Профессиональный Документы
Культура Документы
RESUMEN
El proceso de prueba en el desarrollo de sistemas software permite evaluar la calidad de una aplicacin.
Sin embargo las estrategias clsicas de pruebas del sistema software no son sencillas de aplicar a los
sistemas web debido a sus caractersticas intrnsecas como arquitectura cliente-servidor, mezcla de
elementos heterogneos (pginas HTML, lenguajes de script, etc.), necesidad de soporte de accesos
concurrentes y altas cargas de trabajo, clientes web muy heterogneos, etc.
En este trabajo se documenta un caso prctico en el que se toma como base una aplicacin web muy
sencilla desarrollada utilizando HTML, PHP y MySQL, y sobre la que se aplican tcnicas y herramientas
open-source para desarrollar un conjunto de pruebas funcionales tanto en la interfaz HTML del lado
cliente como en el cdigo PHP del lado del servidor. Por ltimo se desarrolla una prueba de carga o stress
sobre toda la aplicacin.
unitarias sobre dicha aplicacin. En el apartado 4
veremos como realizar pruebas de integracin.
1. INTRODUCCIN.
En el apartado 5, como ejemplo de prueba de
sistema, veremos como realizar una prueba de
Internet proporciona a los desarrolladores
carga y en el apartado 6 las conclusiones.
una forma innovadora para construir software y
un parque potencias de usuarios que
se
1.1. Definiciones.
contabilizan por millones [4]. Por esta misa
razn, los problemas que se presentan en una
aplicacin web, pueden afectar a cientos de miles
Una pgina web es todo tipo de
de usuarios y pueden causar cuantiosas prdidas
informacin que puede ser vista en una ventana
[2], adems de afectar tambin a las relacin
del navegador [2]. Generalmente est compuesta
entre los usuarios y la entidad duea de la
por cdigo HTML, generado de manera esttica
aplicacin web. Por este motivo las pruebas de
o dinmica, o por componentes ejecutables en el
software cobran una importancia vital en el
cliente, como un mdulo Flash.
desarrollo de aplicaciones web.
Se llama sitio Web a una agrupacin de
Las primeras aplicaciones web tenan un
pginas web, donde los elementos de las pginas
diseo muy simple, basado en pginas estticas
estn relacionados semnticamente por el
HTML. Actualmente, las aplicaciones web son
contenido y sintcticamente a travs de enlaces.
ms sofisticadas e interactivas, con interfaces de
El acceso a la aplicacin web de los usuarios se
usuarios, mediante pginas dinmicas. Analizar,
hace mediante peticiones HTTP, y la interfaz
evaluar, mantener y probar las aplicaciones web
ms utilizada es un navegador web ejecutado en
actuales presentan muchos y novedosos desafos
un PC.
para los desarrolladores y los investigadores del
Generalmente, una aplicacin web se
software.
construye utilizando diversas tecnologas,
A continuacin, en este apartado, se
incluyendo los lenguajes de scripting que
definirn algunos conceptos bsicos utilizados en
funcionan dentro del HTML en el cliente, los
todo el trabajo, se presentarn las caractersticas
lenguajes interpretados que funcionan en el
bsicas de una aplicacin web segn el modelo
servidor, los lenguajes compilados en el servidor,
cliente/servidor y se dar una breve definicin
las pginas de mdulos en el servidor, los
del proceso de prueba del software. En el
lenguajes de programacin de propsito general
apartado 2 describiremos una sencilla aplicacin
(servicios web), se suelen utilizar servidores de
web que servir de ejemplo para aplicar las
bases de datos como almacenes de informacin.
tcnicas de pruebas vistas en este trabajo. En el
Estas tecnologas cooperan entre s para construir
apartado 3 describiremos como realizar pruebas
Cliente
Servidor
Peticin
1.2. Arquitectura
Cliente/Servidor en aplicaciones
web.
Respuesta
Cdigo ejecutable en el
servidor
Servidor
Servidor de
bases de datos
Peticin
Respuesta
Momento de realizacin
2. DESCRIPCIN DEL
EJEMPLO.
Se va a tomar como base para aplicar las
pruebas descritas en los siguientes apartados una
aplicacin web muy simple cuya misin es
insertar entidades clientes en una base de datos.
La aplicacin consta de una interfaz, compuesta
por un formulario para la introduccin de
entidades clientes escrita mediante una pgina
HTML con cdigo de validacin escrito en
JavaScript, la lgica de negocio encargada de
validar dicho cliente e insertarlo en la base de
datos, escrita mediante un script en PHP [9], y
una tabla donde almacenar las entidades clientes,
alojada en un servidor de bases de datos MySQL
Cdigo de
validacin Formulario de
clientes
Servidor
Insercin de
clientes
MySQL
Cliente almacenado
correctamente
Error - Cliente no
almacenado
3. PRUEBAS UNITARIAS.
Como se ha visto en el apartado 1.3, las
pruebas unitarias tienen como objetivo probar la
funcionalidad de cada componente de manera
independiente al resto de los componentes. Para
esto vamos a dividir los componentes a probar en
dos grupo, los componentes del lado cliente,
pginas web, cdigo JavaScript, etc. y los
componentes del lado
del servidor, como
ficheros de script y bases de datos [1]. En la
aplicacin de ejemplo, los elementos que
pertenecen a cada divisin se muestran en la
ilustracin 5.
Cliente
Cdigo de
validacin
Formulario de
clientes
Servidor
Error - Cliente no
almacenado
Insercin de
clientes
Cliente almacenado
correctamente
MySQL
Paso Accin
1
Llamar a la funcin
insertarCliente con
un cliente de prueba
2
Buscar en la base de
datos el cliente de
prueba insertado en el
paso anterior
Verificacin.
Verificar que el
resultado de la funcin.
Verificar que el cliente
existe en la base de
datos y sus valores
coinciden con los
valores del cliente de
prueba.
<?
include_once('./PHPUnit/PHPUnit.php');
include_once('./FuncionInsertarCliente.php');
class InsertarClienteTest extends PHPUnit_TestCase {
var $cliente_prueba;
function testInsertarCliente() {
$this->PHPUnit_TestCase("testInsertarUnCliente");
}
function setUp() {
$this->cliente_prueba['entidad'] = "prueba_entidad";
$this->cliente_prueba['actividad'] = "prueba_actividad";
$this->cliente_prueba['direccion'] = "prueba_direccion";
$this->cliente_prueba['localidad'] = "prueba_localidad";
$this->cliente_prueba['codigo_postal'] = "00000";
$this->cliente_prueba['telefono'] = "000-00-00-00";
}
function testInsertarUnCliente() {
$resultado = insertarCliente($this->cliente_prueba);
$this->assertTrue($resultado);
}
function testClienteInsertado(){
$conn = mysql_connect("localhost", "", "")
mysql_select_db("Clientes")
$sql = "SELECT * FROM Clientes WHERE entidad='".
$this->cliente_prueba['entidad']."'";
$resultado = mysql_query($sql)
$cliente = mysql_fetch_array($resultado) ;
$this->assertEquals($this->cliente_prueba['entidad'],
$cliente['Entidad'], "Entidades distintas.");
// El resto de campos se comprueban de la misma manera.
mysql_free_result($resultado);
}
} // Fin de la clase.
echo "<HTML> <BODY>";
echo "<HR>";
echo "<BR> Prueba Insertar Cliente. <BR>";
$suite = new PHPUnit_TestSuite("InsertarClienteTest");
$result = PHPUnit::run($suite);
echo $result -> toString();
echo "<HR>";
?>
Line
function Validador(FormularioClientes) {
if (FormularioClientes.entidad.value == "") {
alert("El campo \"Entidad\" es obligatorio.");
FormularioClientes.entidad.focus();
return (false);
}
if (FormularioClientes.actividad.value == "")
{
alert("El campo \"Actividad\" es obligatorio.");
FormularioClientes.actividad.focus();
return (false);
}
// Igual para los dems campos obligatorios.
// ....
return (true);
}
4. PRUEBAS DE
INTEGRACIN.
Una vez verificado cada uno de los
componentes mediante pruebas unitarias, es
necesario comprobar que dichos componentes
son capaces de trabajar correctamente en
conjunto. Para ello desarrollamos pruebas de
integracin.
Dado que los elementos del lado cliente y
servidor en aplicaciones Web se comunican
mediante HTTP en vez de mediante llamadas a
mtodos o funciones, las herramientas tipo xUnit
utilizadas en el apartado anterior no son
adecuadas para probar la integracin de los
componentes del lado cliente y servidor.
Los dos mtodos principales para realizar
pruebas automticas de aplicaciones Web a
travs de su interfaz de usuario son mediante
macros grabadas que puedan reproducirse y
import
import
import
import
import
net.sourceforge.jwebunit.WebTestCase;
com.meterware.httpunit.*;
com.meterware.servletunit.*;
java.util.*;
junit.framework.*;
public TestFormularioClientes() {
super("TestFormularioClientes");
}
public void testInsertarCliente()
throws Exception
{
WebConversation wc = new WebConversation();
WebResponse resp = wc.getResponse( "http://localhost/
/FormularioClientes.htm");
Assert.assertEquals(resp.getTitle().compareTo("Formulario Clientes"), 0);
WebForm form = resp.getFormWithName("FormularioClientes");
Assert.assertNotNull(form);
form.setParameter("entidad", "entidad_prueba");
form.setParameter("actividad", "actividad_prueba");
form.setParameter("direccion", "direccion_prueba");
form.setParameter("localidad", "localidad_prueba");
form.setParameter("codigo_postal", "00000");
form.setParameter("telefono", "00000");
form.setParameter("persona_contacto", "persona_prueba");
form.setParameter("cargo", "cargo_prueba");
form.setParameter("telefono_contacto", "00-00-00");
5. PRUEBA DE CARGA.
Cmo ejemplo de prueba del sistema se ha
optado por desarrollar una prueba de carga. Una
prueba de carga es un tipo de prueba que permite
comprobar el rendimiento de un servidor o
aplicacin cuando el nmero de clientes o hilos
que acceden al l de manera concurrentemente es
elevado. Por ejemplo, para un servidor web, una
prueba de carga tpica ser crear un conjunto de
hilos que accedern simultneamente al servidor,
simulando de este modo clientes que acceden
concurrentemente.
Las pruebas de carga permiten verificar
aspectos como la escalabilidad, tiempo de
respuesta, consumo de memoria y de recursos.
Estas pruebas ayudan a garantizar que el sistema
funcionar en las peores circunstancias sin
ningn problema crtico. Tambin ayudan a
detectar problemas de concurrencia y
sincronizacin no detectados durante el
desarrollo del sistema.
Una prueba de carga tambin sirve para
medir la escalabilidad y potencia de los
servidores donde se aloje el sistema web.
Ilustracin 10. Definimos un grupo de veinte usuarios que realizarn dos peticiones al servidor.
Ahora se indica la accin a realizar de cada
hilo. Para ello se aade una peticin HTTP para
directamente
al
script
de
insercin
(InsertarCliente.php), definiendo las variables del
formulario que espera, como se muestra en la
ilustracin 13.
6. CONCLUSIONES.
Se ha visto en este trabajo como es
posible desarrollar una aplicacin web y realizar
varias etapas de pruebas de la misma nicamente
con tecnologas open-source. Todas las tcnicas
aqu presentadas son perfectamente aplicables a
otras plataformas (ASP.NET, JSP Servlets) y
REFERENCIAS.
[1] Ash, L. 2003. The Web Testing Companion:
The Insiders Guide to Efficient and Effective
Tests. John Wiley & Sons, Hoboken, USA.
[2] Ye Wu, Jeff Offutt, Xiaochen Du. 2004.
Modeling and Testing of Dynamic Aspects of
Web Applicationsy. Submitted for journal
publication
[3] M.J. Escalona, M. Mejas, J.J. Gutirrez, J.
Torres. 2004. Mtodos de Testing Sobre La
Ingeniera De Requisitos Web de NDT.
IADIS WWW/Internet 2.004. 353-360.
RESEA CURRICULAR.
Javier J. Gutirrez es Ingeniero Informtico
por la Universidad de Sevilla. Actualmente se
encuentra
realizando
los
trabajos
de
investigacin conducentes a la tesis doctoral en
el Departamento de Lenguajes y Sistemas
Informticos la Universidad de Sevilla. Sus reas
de estudio se sitan en el proceso de pruebas en
ingeniera del software, las metodologas giles
de desarrollo y la evolucin del modelo de
software libre.
Rafael Pineda cursa actualmente el ltimo
curso en Ingeniera Tcnica de sistemas en la
Universidad de Sevilla. Actualmente trabaja en
su proyecto de fin de carrera basado en pruebas
en sistemas web.
Daro Villadiego se titul como Ingeniero
Tcnico en Informtica de Sistemas en la
Universidad de Sevilla y actualmente trabaja en
el desarrollo de sistemas web, compaginndolo
con sus estudios en Ingeniera Superior
Informtica.
Mara Jos Escalona se doctor en Lenguajes
y Sistemas Informticos en 2004 con una tesis
basada en el aspecto navegacional de los
sistemas web. Hasta 2001 trabaj como analista
de sistemas para varios organismos pblicos y
actualmente trabaja como profesora en el
departamento de Lenguajes y Sistemas
Informticos de la Universidad de Sevilla. Su
trabajo de investigacin est orientado hacia las
metodologas de desarrollo y la Ingeniera web.
Manuel Mejas se titul como ingeniero
industrial en 1985 y se doctor como Ingeniero
Industrial en 1997 en la Universidad de Sevilla.