Pruebas Unitarias para Los Lenguajes de Programación PHP y JavaScript Con Las Herramientas PHPUnit y QUnit
Pruebas Unitarias para Los Lenguajes de Programación PHP y JavaScript Con Las Herramientas PHPUnit y QUnit
Investigacin
Pruebas unitarias
PHPUnit PHP y QUnit Javascript
Profesora
Marlen Trevio Villalobos
Responsables:
Araya Gmez Jeimy Pamela 201158146
Pacheco Corella Uriel Isaac 201132743
Salas Aguilar Jean Carlos 2011
Tabla de contenidos
ndice de figuras .................................................................................................................................. 3
ndice de tablas ................................................................................................................................... 3
ndice de cdigos ................................................................................................................................. 4
Introduccin ........................................................................................................................................ 5
Pruebas unitarias................................................................................................................................. 6
Qu son las pruebas unitarias? .................................................................................................... 6
PHPUnit-PHP ................................................................................................................................... 7
Qu es PHP? Para qu sirve PHP? .......................................................................................... 7
Las primeras versiones de PHP .................................................................................................. 8
Caractersticas de PHP ................................................................................................................ 8
Qu es PHPUnit? ....................................................................................................................... 9
Patrones para realizar assert con PHPUnit .............................................................................. 10
QUnit Javascript ......................................................................................................................... 13
Qu es Javascript? .................................................................................................................. 13
Cmo nace Javascript?............................................................................................................ 14
Qu es Qunit? ......................................................................................................................... 16
Cmo nace Qunit? .................................................................................................................. 17
Caractersticas o atributos de QUnit ........................................................................................ 17
Conclusiones ..................................................................................................................................... 23
Bibliografa ........................................................................................................................................ 25
Glosario de trminos ......................................................................................................................... 26
Anexos ............................................................................................................................................... 28
Gua de instalacin y manual de uso de PHPUnit PHP ............................................................. 28
Agregando PHP al PATH ............................................................................................................ 29
Instalacin de PEAR ................................................................................................................... 34
Instalacin de PHPUnit .............................................................................................................. 40
Manual De PHPUnit .................................................................................................................. 44
Gua de instalacin y manual de uso de QUnit - Javascript ........................................................ 51
pg. 2
ndice de figuras
Figura 1: Logo PHP............................................................................................................................... 7
Figura 2: Logo PHPUnit........................................................................................................................ 9
Figura 3: Logo JavaScript ................................................................................................................... 13
Figura 4: History of JavaScript ........................................................................................................... 14
Figura 5: Error.................................................................................................................................... 29
Figura 6: Configuracin Avanzada del sistema.................................................................................. 29
Figura 7: Propiedades del sistema .................................................................................................... 30
Figura 8: Variables de entorno .......................................................................................................... 31
Figura 9: Editar la variable del sistema ............................................................................................. 32
Figura 10: Consola ............................................................................................................................. 32
Figura 11: Consola ............................................................................................................................. 33
Figura 12: Ruta PATH......................................................................................................................... 34
Figura 13: Consola ............................................................................................................................. 35
Figura 14: Consola. ............................................................................................................................ 35
Figura 15: Consola ............................................................................................................................. 36
Figura 16: Consola ............................................................................................................................. 37
Figura 17: Consola ............................................................................................................................. 38
Figura 18: Consola ............................................................................................................................. 38
Figura 19: Ventana ............................................................................................................................ 39
Figura 20:Mensaje ............................................................................................................................. 39
Figura 21: Mensaje ............................................................................................................................ 39
Figura 22: Consola ............................................................................................................................. 40
Figura 23: Consola ............................................................................................................................. 40
Figura 24: Consola ............................................................................................................................. 41
Figura 25: Consola ............................................................................................................................. 42
Figura 26: Consola ............................................................................................................................. 42
Figura 27: Consola ............................................................................................................................. 43
Figura 28: Consola ............................................................................................................................. 47
Figura 29: Consola ............................................................................................................................. 49
Figura 30: Consola ............................................................................................................................. 50
Figura 31: QUnit:: A JavaScript Unit Testing framework ................................................................... 51
Figura 32: Guia de Qunit ................................................................................................................... 55
Figura 33: Error.................................................................................................................................. 56
ndice de tablas
Tabla 1: Funcionalidades comunes de pruebas unitarias ................................................................. 46
pg. 3
ndice de cdigos
Cdigo 1: Resulting State Assertion .................................................................................................. 10
Cdigo 2: guard assertion ................................................................................................................. 10
Cdigo 3: Delta assertion .................................................................................................................. 11
Cdigo 4:Custom assertion ............................................................................................................... 11
Cdigo 5: Interaction Assertion......................................................................................................... 12
Cdigo 6: Qunit.module .................................................................................................................... 18
Cdigo 7: Test .................................................................................................................................... 19
Cdigo 8: Trows ................................................................................................................................. 19
Cdigo 9: strictEqual ......................................................................................................................... 19
Cdigo 10: ok..................................................................................................................................... 20
Cdigo 11:noStrictEquial ................................................................................................................... 20
Cdigo 12: notEqual .......................................................................................................................... 20
Cdigo 13: notDeepEqual.................................................................................................................. 20
Cdigo 14: equal................................................................................................................................ 21
Cdigo 15: deepEqual ....................................................................................................................... 21
Cdigo 16: propEqual ........................................................................................................................ 21
Cdigo 17: notPropEqual .................................................................................................................. 22
Cdigo 18: PruebaTest.php ............................................................................................................... 43
Cdigo 19: Ejemplo1_PHPUnit .......................................................................................................... 45
Cdigo 20: SalidaEjemplo .................................................................................................................. 47
Cdigo 21: RemoteConnect.php ....................................................................................................... 48
Cdigo 22: RemoteConnectTest........................................................................................................ 48
Cdigo 23: require_once ................................................................................................................... 49
Cdigo 24: FalloPrueba ..................................................................................................................... 50
Cdigo 25: Crear archivo HTML......................................................................................................... 52
Cdigo 26: Funciones ........................................................................................................................ 53
Cdigo 27: Archivos test.................................................................................................................... 54
pg. 4
Introduccin
El software se crea a travs de una serie de procesos de desarrollo los cuales
representan las tareas fsicas y los requerimientos lgicos del producto. Disear un
software que requiera la participacin simultnea de muchos usuarios trabajando
durante un largo periodo es un proceso complejo que significa una cuidadosa
planificacin y ejecucin para cumplir los objetivos, por lo que es una necesidad el
mantener una gestin del producto de software (Dustin, Rashka, Paul, 2004, p. 6).
El mantenimiento de la calidad del software impide el desarrollo de software de
ritmo rpido as como muchos ciclos de prueba que son necesarios para garantizar
productos de calidad. Existen pruebas unitarias para diferentes entornos, entre ellos se
pueden incluir PHPUnit para PHP y QUnit para Javascript, de los cuales hablaremos en
esta investigacin, se explicar cmo trabajan, algunas caractersticas de estos y sus
funcionalidades.
Las pruebas unitarias pueden ser expresadas como un medio para comprobar el
correcto funcionamiento de una regla de cdigo, estas tiene sus ventajas y beneficios,
sin embargo crear una prueba unitaria no puede considerarse eficiente si no cumple
una serie de requisitos entre los cuales se puede mencionar que deben permitir que la
prueba unitaria sea reutilizable. Las pruebas unitarias no son perfectas y a pesar de ser
muy eficientes, estas no resuelven todo, se darn a conocer algunas de las limitaciones
de estas.
pg. 5
Pruebas unitarias
Qu son las pruebas unitarias?
En programacin, una prueba unitaria es una forma de comprobar el correcto
funcionamiento de un mdulo de cdigo. Esto sirve para asegurar que cada uno de los mdulos
funcione correctamente por separado.
Las pruebas unitarias son el medio que se emplea para que por medio de un entorno de
prueba se consiga verificar los mdulos de un sistema. Estas pruebas unitarias deben conservar un
formato, el cual debe mantener un estndar de independencia entre cada prueba, adems deben
tratarse como una porcin ms del proyecto y como tal debe conservar su mismo formato y
profesionalidad.
Algunos de los requisitos que tienen las pruebas unitarias son:
Automatizable: No debe solicitar una manipulacin manual, esto quiere decir que debe
funcionar sin la necesidad de que el programador deba digitar algo al tener que realizar la
prueba.
Completas: Se debe envolver la mayor parte del cdigo posible. Significa que entre ms
completa sea la verificacin de los mtodos se puede mantener una mayor certeza sobre la
fiabilidad del producto.
Independientes: No debe existir una dependencia entre las pruebas, por tanto no se deben
afectar entre ellas durante la ejecucin.
Profesionales: Las pruebas deben ser tratadas como parte del cdigo de la aplicacin, esto
quiere decir que las mismas formalidades deben aplicarse a las pruebas, por ejemplo
colocarle documentacin.
(Canarias, 2012, p.3).
Las pruebas unitarias permiten un mayor alcance que otros tipos de pruebas, facilitan el trabajo en
equipo, reducen el uso de la depuracin, debido a que las pruebas funcionan para comprobar los
pg. 6
mtodos no es necesario depender tanto de la depuracin para encontrar el error, son tiles en la
labor de refactorizacin (refactoring). La refactorizacin permite la optimizacin de un cdigo
escrito previamente, favorecen el mejoramiento del diseo y sirven como documentacin.
(Universidad de Sevilla, 2004, p.8).
A continuacin hablaremos de las pruebas unitarias para PHP y Javascript, haciendo primero
una pequea introduccin de estos lenguajes.
PHPUnit-PHP
Qu es PHP? Para qu sirve PHP?
Enrique Gonzlez en su entrega n3 del Tutorial bsico del programador web: PHP desde
cero explica que PHP es un lenguaje de cdigo abierto (significa que es de uso libre y gratuito para
todos los programadores que quieran usarlo), y que puede ser Incrustado en HTML (significa que
en un mismo archivo se puede combinar cdigo PHP con cdigo HTML, siguiendo unas reglas.)
Figura 1: Logo PHP
se
procesa
en
servidores
(potentes ordenadores con un software y hardware especial) y cuando se escribe una direccin tipo
http://www.______.com/index.php en un navegador web (por ejemplo Internet Explorer, Firefox,
Chrome, etc) los datos de la solicitud son enviados al servidor que los procesa, este rene los datos
y devuelve una pgina HTML como si fuera esttica.
Con PHP se puede procesar la informacin de formularios, generar pginas con contenidos
dinmicos, o enviar y recibir cookies, entre muchas ms cosas. PHP lo utilizan desde pequeas
pginas web hasta grandes empresas, muchas aplicaciones web estn construidas usando PHP, por
ejemplo se puede citar Joomla y Drupal (gestores de contenido de pginas web), osCommerce y
pg. 7
Prestashop (tiendas on-line para comercio electrnico), phpBB y SMF (sistemas de foros para
pginas web), Moodle (plataforma educativa para educacin on-line), etc.
PHP tambin puede utilizar y presentar resultados en otros estndares de datos o lenguajes
propios de los desarrollos web, como XHTML y cualquier otro tipo de ficheros XML. PHP puede
autogenerar estos archivos y almacenarlos en el sistema de archivos en lugar de presentarlos en la
pantalla, utilizando estos ficheros para generar contenido dinmico. Es decir, el contenido dinmico
puede surgir de otros sitios adems de desde bases de datos.
Tambin se puede interactuar con otros servidores usando cualquier protocolo. Por ltimo,
PHP puede enlazarse con otros lenguajes muy potentes como Java.
En resumen, PHP es un lenguaje potente, muy usado y de gran inters para los desarrollos
web.
Caractersticas de PHP
PHP es un lenguaje interpretado (script), pensado fundamentalmente para aadir
funcionalidad a los servidores de pginas web.
Sintctica y gramaticalmente es una mezcla de C, Java y Perl, pero tiene la ventaja de ser un
lenguaje especialmente diseado para la programacin en un entorno web. Incorpora la mayora de
las funciones que un programador web utiliza habitualmente y adems da soporte a las bases de
datos ms utilizadas (en entorno Unix/Linux sobre todo): Oracle, Sybase, mSQL, MySQL, dBase... y
ODBC para acceder a travs de este interfaz a cualquier otro gestor de bases de datos.
pg. 8
Como ventajas de PHP destacan la facilidad de aprendizaje y utilizacin y, por supuesto, que es un
producto de libre distribucin.
Al ejecutarse desde un navegador web el usuario trabaja en un entorno conocido y no tiene
que aprender nada nuevo para poder utilizar el programa.
Los programas PHP se ejecutan en la mquina del servidor (server side) como bloques
individuales o como scripts intercalados entre cdigo HTML. Al estar guardados en el servidor el
cdigo est protegido de la manipulacin por parte de los usuarios y del ataque de virus.
Qu es PHPUnit?
Segn Carlos Nacianceno, PHPUnit es un
framework open source para el desarrollo, orientado
a pruebas TDD para cualquier cdigo PHP. Es decir,
es un framework que nos ayuda a probar nuestro
cdigo.
Sebastian Bergmann (creador de PHPUnit)
dice todos los programadores cometen errores,
pero la diferencia entre los buenos programadores y
los malos programadores es que los buenos programadores prueban su cdigo Figura 2: Logo PHPUnit
para encontrar esos errores lo ms pronto posible.
La propuesta de PHPUnit y otros frameworks para pruebas es crear pequeas unidades que
revisen funcionalidades puntuales del cdigo y probar que funcionen como debe, adems de la
posibilidad de automatizar estas pruebas para ejecutarlas frecuentemente, tanto como el cdigo
cambie.
La va tpica para instalar PHPUnit es a travs de PEAR, aunque tambin algunos IDEs como
Zend Studio ya lo traen integrado. Una vez instalado hay que crear los tests, (mtodos clases en
PHP), y ejecutarlos por lnea de comando o desde el IDE; as se obtiene un resultado para cada test.
Para que una prueba sea exitosa, todos los tests unitarios deben pasar y obtener un alto porcentaje
en la cobertura de cdigo.
pg. 9
En este test se puede comprobar que cuando se crea un array y se le aade un elemento su tamao
despus de aadir el elemento es 1.
Validando hiptesis (guard assertion)
Otra opcin a la hora de hacer testing es hacer explcitas las hiptesis antes de invocar al mtodo
que queramos probar.
public function testListIsNoLongerEmptyAfterAddingAnItemToIt()
{
$list = array();
$this->assertTrue(empty($list)); //guard assertion
array_push($list,'something');
$this->assertFalse(empty($list)); //state verification
}
Cdigo 2: guard assertion
Vemos cmo se puede verificar que la lista al ante de ejecutar el mtodo array_push est
vaca y despus de aadirle un elemento ya no lo est. Lo normal es combinar los 2 patrones
anteriores para lo tests, normalmente primero se confirma el estado del objeto antes de ejecutar el
mtodo a probar y despus se valida el resultado obtenido.
pg. 10
Este ejemplo puede parecer algo ridculo pero resume muy bien los fundamentos del patrn de
triangulacin para pruebas unitarias. Es cierto, que estas aserciones pueden llegar a ser complejas
de escribir, pero se centran en la esencia de lo que se est poniendo a prueba.
Custom assertion
A veces se necesita mucho cdigo para poder invocar a la funciones que queremos probar (Mocks,
Stubs,). Cuando esto sucede es una buena idea extraer toda la asercin a un mtodo con el fin de
encapsular toda lgica compleja. As se gana algo de legibilidad en el cdigo e incluso se puede
utilizar nuestra asercin en otros test si fuese necesario.
public function testTimeslotsAreOnWeekdays()
{
$calendar = new MeetingCalendar();
//omitido: aadir citas al calendario hasta
//final de las horas de oficina el prximo viernes
$time = $calendar->nextAvailableStartingTime();
$this->assertIsDuringOfficeHoursOnWeekday($time);
}
protected function assertIsDuringOfficeHoursOnWeekday(DateTime $time)
{
// Asercin: Omitida por brevedad
}
Cdigo 4:Custom assertion
Una razn muy comn para utilizar este tipo de custom assertion es la capacidad de realizar
diferentes tipos de fuzzy matching. Por ejemplo, si necesitamos comparar 2 objetos pero solo por
un subconjunto de propiedades. Adems creando custom assertion podemos hacer que se lancen
pg. 11
diferentes mensajes en caso de que el test falle y as sabremos en qu punto est fallando nuestro
test.
Interaccin (Interaction Assertion)
El ltimo patrn para las aserciones es Interaction Assertion. Esta es la asercin ms divertida. Con
este patrn no se comprueban los resultados del cdigo, sino que se verifica que el cdigo interacta
con el resto de objetos como esperamos que lo haga.
public function testPaperBoyShouldDeliverPapers()
{
$david = new MockCustomer();
$ana = new MockCustomer();
$paperboy = new PayperBoy();
$paperboy->addToRoute($david);
$paperboy->addToRoute($ana);
$this->assertTrue(in_array($david, $paperboy->deliever));
$this->assertTrue(in_array($ana, $paperboy->deliever));
}
}
Cdigo 5: Interaction Assertion
Este test es solo un ejemplo y no debemos tenerlo demasiado en consideracin, ya que solo
nos sirve para ilustrar el patrn interaccin. En este ejemplo, se ve como interactan entre s clases
Mock con clases que queremos crear.
En la prctica podemos combinar todos estos patrones assert para poder testear SUT (cdigo bajo
test).
pg. 12
QUnit Javascript
Qu es Javascript?
JavaScript (abreviado comnmente JS) es un lenguaje de
programacin interpretado, dialecto del estndar ECMAScript. Se define como
orientado a objetos, basado en prototipos, imperativo, dbilmente tipado y
dinmico.
Se utiliza principalmente en su forma del lado del cliente (client-side),
implementado como parte de un navegador web, el cual interpreta el cdigo
JavaScript integrado en las pginas web. Para interactuar con una pgina web
se provee al lenguaje JavaScript de una implementacin del Document Object
Model (DOM)
(Bitcora del desarrollador, s.f).
Para Jorge Mohedano, Jos Saiz, Pedro Salazar desde el punto de vista tcnico, JavaScript
es un lenguaje interpretado, que significa que las instrucciones son analizadas en secuencia por el
intrprete de JavaScript, () de manera que su ejecucin es inmediata a la interpretacin. Esto
permite que, una vez escrito un programa en JavaScript () y sea embebido el cdigo en un fichero
HTML, el navegador es capaz de interpretarlo y ejecutarlo sin necesidad de procesos intermedios
JavaScript es un lenguaje de programacin que se utiliza principalmente para crear pginas
web capaces de interactuar con el usuario (). Cuando un desarrollador incorpora JavaScript a su
pgina, proporciona al usuario cierta capacidad de interaccin con la pgina web, es decir, cierto
dinamismo y por lo tanto se incrementan las prestaciones de la misma al aadir procesos en
respuesta a las acciones del usuario. Es importante sealar que estos procesos se ejecutan en la
mquina del cliente (navegador) y por tanto no implican intercambio de datos con el servidor (sic)
(Jorge Mohedano, Jos Saiz, Pedro Salazar, 2012)
pg. 13
pg. 14
En los aos de 1990, Netscape creo Livescript; las primeras versiones de este lenguaje
fueron principalmente dedicadas a pequeos grupos de diseadores Web que no necesitaban
utilizar un compilador, o sin ninguna experiencia en la programacin orientada a objetos.
Es a mediados de 1990 cuando la necesidad de disponer de pginas web ms amigables y con ms
servicios se hizo ms fuerte. Brendan Eich, por aquel entonces ingeniero informtico de Netscape,
tuvo el encargo de desarrollar un nuevo navegador web. Aprovech la ocasin para desarrollar un
lenguaje de Script, originalmente denominado LiveScript, que deba ser en teora un complemento
de Java (estos dos lenguajes suelen confundirse debido a su denominacin casi idntica a pesar de
no tener casi nada en comn). El objetivo de este lenguaje de programacin era desarrollar pginas
web ms atractivas y amigables para el usuario, sin tener que usar para ello una programacin en
el lado del servidor. Para poder realizar esto, era necesario que el navegador pudiera interpretar el
cdigo JavaScript. Netscape decide entonces implementar de manera nativa LiveScript en la versin
2.0 de su navegador (bautizado entonces Netscape Navigator) a partir del ao 1995
(Emmanuel Gutierrez, 2009).
pg. 15
Qu es Qunit?
pg. 16
Esta gran herramienta fue diseada y desarrollada por John Resig un programador y
empresario, que fue el creador de la biblioteca JQuery y autor de un libro tecnico sobre JavaScript.
La elaboracin de Qunit se realiz en el mismo momento que el proyecto JQuery, por esto es que
cada desarrollador que utilice JQuery debe usar Qunit para testear el cdigo, ya que ambas se
complementan de manera natural.
Para el ao 2008 QUnit tiene su propia casa, nombre y documentacin del API, por eso, a
partir de aqu otras personas pueden empezar a usar esta herramienta para las pruebas unitarias.
El problema era que en ese momento, QUnit dependa mucho de JQuery, fue hasta despus del ao
2009 que se hicieron algunos cambios en la herramienta, y este ya se poda ejecutar solo.
pg. 17
hacer.Despuss se debe crear las expectativas de resultados que debe dar la prueba. Aqu
se recomienda que cada una de las pruebas evale una sola funcionalidad del cdigo, es
decir, en una prueba no se puede evaluar dos resultados del mismo cdigo.
3. Se escribe el codigo para ver si se cumple la expectativa, una buena prctica es crear
diferentes pruebas a evaluar para una misma seccion de codigo.
4. Por ltimo, se debe repetir los pasos anteriores por cada archivo de cdigo fuente que se
quiera evaluar.
Mdulos
Los mdulos se definen para mantener todas las pruebas organizadas, estos mdulos
tambin se puede ejecutar de forma unitaria.
Para definir mdulos en QUnit se debe usar la funcin module(nombre, [ciclo de vida])
donde nombre es un String y hace referencia al nombre del mdulo y ciclo de vida permite
establecer callbacks (ms adelante se hablar sobre estos elementos) que se ejecutarn antes y
despus de cada prueba que compone el mdulo, esta parte es opcional.
Todas las pruebas que estn despus de la definicin de un mdulo, van a pertenecer a ese modulo.
Cdigo 6: Qunit.module
Pruebas
Una prueba es un bloque de cdigo en donde se define lo que debe hacer un cdigo especfico, se
le asigna un valor esperado y despus se compara ese valor esperado con el resultado de la prueba.
pg. 18
En caso de que ambos resultados coincidan, la prueba se considera correcta, si sucede lo contrario
entonces se mostrar un mensaje con el valor esperado y el obtenido para as proceder a corregir
el error.
Una prueba se define de la siguiente manera: test(nombre, prueba), donde nombre es un String
y representa el nombre de la unidad que va ser testeada, y prueba representa la funcin que se
probara.
Cdigo 7: Test
Afirmaciones (asserts)
Las afirmaciones o asserts nos permiten comparar de una forma especfica, los valores esperados
con los resultados obtenidos de un cdigo en particular. A continuacin se presentan las
afirmaciones que se puede aplicar usando QUnit:
trows: Evala si una funcion enva una excepcin cuando se ejecuta.
Cdigo 8: Trows
Cdigo 9: strictEqual
pg. 19
Cdigo 10: ok
Cdigo 11:noStrictEquial
pg. 20
deepEqual: Afirmacin recursiva de comparacin que se busca que sean idnticos el resultado y la
expectativa.
pg. 21
pg. 22
Conclusiones
El desarrollo de aplicaciones en los diversos entornos que se exigen en la actualidad
trae consigo un problema que se desarrolla durante la gestin del mismo, este corresponde
a la bsqueda de posibles errores o fallos que puedan ocurrir durante las pruebas e
integracin del software.
Para velar por un producto que sea fiable y que no sea entregado sin demora, se han
creado herramientas de testeo o entornos de prueba los cuales son una ayuda para
encontrar los posibles fallos a los que puede atentar la aplicacin. Estos entornos de prueba
tienen muchos beneficios para quien los utiliza, ya que en proyectos grandes es importante
tener la certeza de que todo funciona como debe. Los entornos de prueba facilitan el
trabajo en equipo y permiten un mayor control sobre gran parte del cdigo ya que por
medio de pruebas unitarias y siguiendo los estndares que cada mtodo debe cumplir, se
puede corroborar que la aplicacin no presenta fallos.
En programacin, una prueba unitaria es una forma de comprobar el correcto
funcionamiento de un mdulo de cdigo. Esto sirve para asegurar que cada uno de los
mdulos funcione correctamente por separado. Las pruebas unitarias deben ser
automatizables, completas, repetibles o reutilizables, independientes y profesionales.
Sin embargo las pruebas unitarias no resuelven todo, estos traen sus limitaciones,
en los que por ejemplo pueden presentar desventajas, como el de verificar todos los
posibles casos de entradas. Adems no siempre se puede depender de que si la aplicacin
no ha mostrado errores funciona bien, esto porque el rendimiento de la aplicacin no es
algo que toma en cuenta.
Existen diferentes entornos de prueba, ya sea PHPUnit para PHP o Qunit para
JavaScript, el uso de estas herramientas facilitan una gestin ms eficiente en el desarrollo.
Y permiten un control del programador sobre su aplicacin.
pg. 23
pg. 24
Bibliografa
Bitcora del desarrollador. Jherax (s.f). JavaScript. Recuperado
https://jherax.wordpress.com/category/front-end/javascript/
el
20/09/2014
de:
Damin Prez Valds (3 de julio del 2007). Qu es Javascript?. Recuperado el 19/20/2014 de:
http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/
Dextructables Tutoriales y Programacin (s.f). Instalar PHPUnit en Windows. Recuperado el
27/09/2014 de: http://dextructables.com/instalar-phpunit-en-windows/
Emmanuel Gutierrez (2009). JavaScript: Conceptos bsicos y avanzados. Recuperado el 20/09/2014
de: http://books.google.co.cr/books?id=gsxVpvEC4iUC&dq=Javascript&source=gbs_navlinks_s
Enrique Gonzlez (). Qu es PHP? y Para qu sirve? Un potente lenguaje de programacin para
crear
pginas
web.
(CU00803B).
[ONLINE]
Available
at:
http://aprenderaprogramar.com/index.php?option=com_content&view=article &id=492:ique-esphp-y-ipara- que-sirve-un-potente-lenguaje-de-programacion-para-crear-paginas-web-cu00803b&
catid=70:tutorial-basico-programador-web-php-desde-cero&Itemid=193. [Last Accessed Agosto
2014].
Fabien Potencier, Franois Zaninotto (2008). Symfony, la gua definitiva. Recuperado el 28/09/2014
de: http://www.jesusda.com/docs/ebooks/symfony_guia_definitiva.pdf
Jorge Mohedano, Jos Miguel Saiz, Pedro Salazar Romn (2012). Iniciacin a Javascript.
Recuperado el 19/09/2014 de:
http://books.google.co.cr/books?id=iy8bAgAAQBAJ&dq=que+es+Javascript&source=gbs_navlinks_
Miguel ngel Snchez Maza (2012). Javascript, Innovacin Y Cualificacin. Recuperado el
19/09/2014
de:
http://books.google.co.cr/books?id=3x09sewjaHIC&dq=Javascript&source=gbs_navlinks_s
Patrones para mejorar tests con PHP y PHPUnit - TDD. (n.d.). Retrieved September 19, 2014, from
http://jesuslc.com/2014/07/04/patrones-para-mejorar-tests-con-php-y-phpunit-tdd/
PHP desde Cero: Clases & Objetos - CODEHERO. (n.d.). Retrieved September 29, 2014, from
http://codehero.co/php-desde-cero-clases-objetos/
Que es PHP, cmo surgi y para qu se utiliza? (n.d.). Retrieved September 29, 2014, from
http://www.nociondigital.com/webmasters/php-tutorial-que-es-php-como-surgio-y-para-que-seutiliza-detalle-191.html
Qu es PHPUnit? (n.d.). Retrieved September 08, 2014, from http://blog.eltallerweb.com/que-esphpunit/#sthash.nYphcLlt.dpuf
pg. 25
Glosario de trminos
Interpretado: Un lenguaje interpretado es un lenguaje de programacin que est diseado para ser
ejecutado por medio de un intrprete, en contraste con los lenguajes compilados. (Wikipedia).
ECMAScript: ECMAScript es una especificacin de lenguaje de programacin publicada por ECMA
International. Actualmente est aceptado como el estndar ISO 16262. Comenz a ser desarrollado,
basndose en el lenguaje JavaScript propuesto por Netscape Communications Corporation.
ECMAScript define un lenguaje de tipos dinmicos ligeramente inspirado en Java y otros lenguajes
del estilo de C. Tiene caractersticas de programacin orientada a objetos mediante objetos basado
en prototipos y pseudoclases. (http://www.alegsa.com.ar/Dic/ecmascript.php, Diccionario De
Informtica Y Tecnologa)
Una definicin ms simple es: Es el estndar de lo que la gran mayora de la gente conocemos como
JavaScript. Hablando en sentido estricto, JavaScript y ECMAScript no son exactamente lo mismo.
JavaScript es un dialecto de ECMAScript, pero las diferencias son, en general, irrelevantes y vienen
sobre todo ocasionadas por motivos histricos de compatibilidad con versiones anteriores. (Modo
Estricto de ECMAScript, DesarrolloWEB.com, http://www.desarrolloweb.com/articulos/modoestricto-ecmascript.html)
Document Object Model (DOM): Es un conjunto de utilidades especficamente diseadas para
manipular documentos XML. Por extensin, DOM tambin se puede utilizar para manipular
documentos XHTML y HTML. Tcnicamente, DOM es una API de funciones que se pueden utilizar
para manipular las pginas XHTML de forma rpida y eficiente. (Introduccin a AJAX, Librosweb.es,
http://librosweb.es/ajax/)
HyperText Markup Language (HTML): Es el lenguaje bsico de casi todo el contenido web. La
mayor parte de lo que ves en la pantalla de tu navegador est escrita, fundamendalmente, usando
HTML. Especficamente, HTML es el lenguaje con el que se escribe la estructura y la semntica del
contenido
de
un
documento
web.
(HTML,
Fundacin
Mozilla,
https://developer.mozilla.org/es/docs/Web/HTML)
European Computer Manufacturers Association (ECMA): "Ecma International es una organizacin
internacional basada en membresas de estndares para la comunicacin y la informacin. Adquiri
el nombre Ecma International en 1994, cuando la European Computer Manufacturers Association
pg. 26
(ECMA)
cambi
su
nombre
para
expresar
su
alcance
internacional.
(Wikipedia,
http://es.wikipedia.org/wiki/Ecma_International)
Organizacin Internacional de Normalizacin (ISO): Es una federacin de entidades a nivel mundial,
que se dedican a estndares que agrupan ms de 100 pases. Su objetivo primordial es fomentar el
desarrollo mundial de actividades de normalizacin, y as hacer ms fcil el intercambio de bienes y
servicios entre pases. (ISO, Organizacin Internacional de Normalizacin: Historia, Funciones y
Estructura,
ISOTools
Excellence,
http://www.isotools.org/2013/06/20/iso-organizacion-
internacional-de-normalizacion-historia-funciones-y-estructura/#sthash.12oXl6ER.dpuf)
Netscape: Netscape Communications Corporation es una empresa de software famosa por ser la
creadora del navegador web Netscape Navigator. Fue comprada por AOL en 1999. (Wikipedia,
http://es.wikipedia.org/wiki/Netscape_Communications_Corporation)
ASP (Active Server Pages): Es la tecnologa desarrollada por Microsoft para la creacin de pginas
dinmicas del servidor. ASP se escribe en la misma pgina web, utilizando el lenguaje Visual Basic
Script o Jscript (Javascript de Microsoft).
http://www.desarrolloweb.com/articulos/393.php)
PHP (acrnimo recursivo de PHP: Hypertext Preprocessor): Es un lenguaje de cdigo abierto muy
popular especialmente adecuado para el desarrollo web y que puede ser incrustado en HTML.
(Pgina Oficial De PHP, http://php.net/manual/es/intro-whatis.php)
PATH: Es una variable de entorno de los sistemas operativos POSIX y los sistemas de Microsoft,en
ella se especifican las rutas en las cuales el intrprete de comandos debe buscar los programas a
ejecutar. Las variables de entorno forman un conjunto de valores dinmicos que normalmente
afectan
el
comportamiento
de
los
procesos
en
una
computadora.
(Wikipedia,
http://es.wikipedia.org/wiki/Variable_de_entorno)
pg. 27
Anexos
Gua de instalacin y manual de uso de PHPUnit PHP
Para este manual se asume que se tiene instalado PHP en el sistema. Si no lo tienen instalado,
pueden instalar Wamp o Xampp, que son paquetes para Windows que instala Apache, PHP y MySQL.
Enlace de Descarga: Xampp Wampp
Existen diferentes formas de instalar Php-Unit, la primera que utilizaremos es mediante PEAR.
Qu es PEAR?
PEAR, o PHP Extension and Application Repository, es un framework y sistema de distribucin
para componentes PHP reutilizables, un entorno de desarrollo y sistema de distribucin para
componentes de cdigo PHP. El proyecto PEAR fue fundado por Stig S. Bakken en 1999 para
promover la reutilizacin de cdigo que realizan tareas comunes.
PEAR permite descargar, instalar, actualizar y desinstalar scripts de PHP. Si se utiliza un paquete de
PEAR, no es necesario decidir donde guardar los scripts, cmo hacer que se puedan utilizar o cmo
extender la lnea de comandos (CLI).
PEAR es un proyecto creado por la comunidad de usuarios de PHP, est desarrollado con PHP y se
incluye en las distribuciones estndar de PHP. (Fabien Potencier, Franois Zaninotto, 2008)
Verificar que PHP se encuentre en el PATH:
Primero tenemos que asegurarnos que PHP se puede ejecutar mediante consola desde cualquier
ubicacin. Para esto abrimos la consola de Windows o Smbolo del sistema y ejecutamos el
comando:
1. php --version
pg. 28
Si nunca hemos agregado PHP al PATH (variable de entorno de Windows) o ningn programa lo ha
hecho por nosotros, lo ms probable es que nos aparece el siguiente mensaje de error.
Figura 5: Error
pg. 29
Se abrir una ventana con opciones avanzadas del sistema. Aqu hay que hacer clic al botn
Variables de entorno
pg. 30
En esta nueva ventana, en la lista de la parte de abajo (Variables del sistema), hay que buscar la
opcin que dice PATH y hacer clic en el botn Editar
pg. 31
En Wamp, el ejecutable de PHP para consola se encuentra en una ubicacin similar a la que se
aprecia en la imagen. En este caso la carpeta se llama php5.4.16 pero el nombre puede variar
dependiendo de la versin que venga con la instalacin de Wamp (la misma situacin ocurre con
Xampp). Tambin hay que notar que la ruta del ejecutable no incluye el nombre del archivo.
Ya que hayamos agregado la ruta de PHP al PATH aceptamos, y reiniciamos el sistema. No siempre
es necesario pero normalmente el PATH no reconoce la nueva ruta hasta que el sistema haya sido
reiniciado.
Despus de reiniciar comprobamos que funcione correctamente. Para ello abrimos la consola y de
nuevo ejecutamos el comando:
1. php --version
pg. 32
Ya que comprobamos que PHP se puede ejecutar desde cualquier ubicacin, procederemos a la
instalacin de PEAR.
pg. 33
Instalacin de PEAR
El primer paso para la instalacin de PEAR es descargar el siguiente archivo: go-pear.phar y copiarlo
a la carpeta del ejecutable de consola de PHP (la misma ruta que se aadi al PATH).
pg. 34
El instalador nos preguntar si deseamos instalar PEAR de forma local o a nivel de sistema. La
segunda opcin (de forma local) es la que viene por default, as que simplemente presionamos
Enter
pg. 35
El instalador nos mostrar despus una serie de rutas y nos preguntar si son correctas. En caso de
que alguna no pueda ser determinada tendremos que teclearla manualmente.
pg. 36
pg. 37
Es muy probable que nos aparezca una advertencia como la siguiente, informando que la ruta de
libreras instaladas mediante PEAR no se encuentra en el include_path de PHP. El instalador nos
preguntar si deseamos agregar la ruta al archivo PHP.ini.
Simplemente hay que teclear Y y presionar Enter.
Una vez que haya finalizado la instalacin se nos avisar que se ha creado un archivo .reg que se
encargar de actualizar el PATH de Windows.
pg. 38
Simplemente hay que ejecutar el archivo PEAR_ENV para actualizar las entradas de registro. Es
probable que se nos muestre alguna advertencia pero es normal con este tipo de archivos por el
tipo de informacin que modifican.
Presionar S
Figura 20:Mensaje
pg. 39
Ahora debemos comprobar que efectivamente PEAR sea accesible desde la consola. Para ello
escribimos lo siguiente en la consola:
1. pear versin
Se debe mostrar algo similar a lo que se aprecia en la imagen, en este caso muestra la versin de
PEAR 1.9.5, esto significa que PEAR se encuentra instalado correctamente.
Ahora procederemos a instalar PHPUnit.
Instalacin de PHPUnit
Hay que abrir la consola y ejecutar lo siguiente para que PEAR identifique de forma automtica las
fuentes de donde obtendr los archivos de PHPUnit.
1. pear config-set auto_discover 1
pg. 40
A continuacin hay que escribir y ejecutar lo siguiente en la consola de comandos para comenzar la
instalacin de PHPUnit.
1. pear install -a pear.phpunit.de/PHPUnit
La opcin -a se asegura de obtener las dependencias necesarias para la instalacin.
pg. 41
Este paso es opcional pero es una buena prctica que evita que existan problemas si despus se
instalan otros paquetes mediante PEAR
Al igual que con PHP y PEAR, vamos a comprobar que PHPUnit se ejecute correctamente. Para ello
vamos a desplegar en consola la versin instalada mediante el siguiente comando:
pg. 42
El desarrollo guiado por pruebas es un tema muy extenso, el cul queda fuera del objetivo del
tutorial, por lo que creamos un ejemplo muy sencillo. En el editor de nuestra preferencia vamos a
crear un archivo llamado PruebaTest.php y lo guardamos donde deseemos. El archivo deber
contener el siguiente cdigo:
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?php
class PruebaTest extends PHPUnit_Framework_TestCase
{
public function testPrueba()
{
$this->assertTrue(true);
}
}
?>
Cdigo 18: PruebaTest.php
pg. 43
Manual De PHPUnit
Con PHPUnit, lo ms bsico que escribiremos es un caso de prueba. Pero primero existen algunas
reglas que necesitamos considerar a la hora de escribir los casos de prueba, esto a fin de que
trabajen con PHPUnit:
Ejemplo #1
En el primer ejemplo vamos a crear solo una clase prueba que contenga los mtodos a probar (sin
el uso de otra clase). El nombre del archivo es ArrayTest.php y en el caso nuestro lo guardamos
en la direccin del wampp: C:\wam_x86\www\PHP-Unit\ArrayTest.php
El proyecto tiene dos mtodos:
testNewArrayIsEmpty: Verifica que la matriz arrayTest sea vaca, es decir; que el tamao
sea 0.
testArrayContainsAnElement: Verifica que el tamao de la matriz sea igual a 1.
pg. 44
Podrn percibir que la clase principal ArrayTest extiende la clase TestCase de PHPUnit, por lo que
una gran cantidad de funcionalidades se aaden con ella. Si notas, en el cdigo hay un assertEquals,
esa es una de las funciones de ayuda de PHPUnit.
pg. 45
A continuacin una lista de algunas de las funcionalidades ms comunes que podemos utilizar en
nuestras pruebas:
AssertTrue/AssertFalse
AssertEquals
AssertGreaterThan
AssertContains
AssertType
AssertNull
AssertFileExists
AssertRegExp
Continuando con el ejemplo, ejecutar las pruebas es tan sencillo como llamar al ejecutable phpunit
y sealar las pruebas. Aqu tenemos el ejemplo de cmo llamar a nuestra prueba:
Primero en la consola de comandos nos ubicamos dentro de la carpeta donde se encuentra nuestro
cdigo de prueba, y ejecutamos el siguiente cdigo
phpunit ArrayTest.php
pg. 46
Por cada una de las pruebas del caso de prueba, PHPUnit se ejecuta a travs de ellos y recoge
algunas estadsticas como el nmero de pruebas y aserciones. He aqu una vista de la salida de
nuestro ejemplo:
PHPUnit 4.0.17 by Sebastian Bergmann
.
Time: 111 ms, Memory: 3.75MB
OK(2 test, 2 assertions)
Cdigo 20: SalidaEjemplo
Para cada prueba que ejecutamos, veremos un punto (.) si se tiene xito (como arriba), una F o
una E si ocurri un error, y una I si la prueba est marcada como incompleta o una S si se ha
marcado como Omitida (Skipped).
pg. 47
Ejemplo #2
Y la segunda clase que es la que contendr la prueba unitaria y ser la que ejecutemos con el phpunit
se llamara RemoteConnectTest.php
pg. 48
En este caso utilizaremos el assertTrue que lo nico que hace es comprobar que una expresin
booleana es true, es decir en nuestra prueba verifica que la conexin con el servidor sea diferente
de falso, es decir; verdadero, la prueba tendr xito si el programa consigue establecer la conexin,
en este caso con www.google.com.
Ejecutamos la prueba de la misma manera que la anterior.
phpunit RemoteConnectTest.php
Y el resultado nos muestra que la prueba fue exitosa. Ahora para variar probemos con la conexin
a una direccin web que no existe, para que el resultado de la prueba sea fallido.
pg. 49
pg. 50
Para esto, hay que ir a la pgina oficial http://qunitjs.com/ y se descargar estos dos archivos. Estos
dos archivos son la interfaz de los resultados del test.
pg. 51
2.
Crear el archivo HTML
Este va ser el archivo que vamos a ejecutar para ver los resultados del test. Este archivo HTML debe
contener la referencia a los dos archivos descargados en el paso 1.
3.
Archivo de funciones (funciones.js)
Para mantener el orden, se procede a realizar un archivo.js del programa que contiene las funciones.
Y se llama (hace referencia) como se hizo en el paso anterior. En nuestro caso, el archivo de
funciones .js va ser las 4 funciones bsicas de una calculadora.
pg. 52
4.
Archivo de pruebas (test.js)
Este archivo tambin es recomendable crearlo aparte de los otros cdigos y despus hace referencia
a el en el archivo HTML que se debe ejecutar, como en el ejemplo del paso 2.
En nuestro caso, se crea dos mdulos de pruebas, uno es para probar cuando uno de los nmeros
de la operacin est indefinido y el otro mdulo prueba con ambos nmeros definidos.
pg. 53
5.
Ejecutar el archivo HTML
Una vez hecho los pasos anteriores, ejecutamos nuestro archivo HTML para ver los resultados de la
prueba, el archivo puede ser ejecutado en cualquier navegador.
pg. 54
De esta manera es que se observan los test realizados. Aqu hay varias opciones para ver los
resultados como ms se desee.
Hide passed tests: Aqui se puede esconder los test pasados satisfactoriamente.
Check for Globals: Crea una lista de los elementos que tiene el objeto Window antes y
despus del test, para despus hacer una comparacin.
No try-catch: Ejecuta la prueba fuera de un try-catch para encontrar excepciones de cada
navegador en que es ejecutado.
pg. 55
Para este caso, la funcin suma fall porque en el test se puso que el nmero 5 era el que se
esperaba al sumar 2+4 por tanto no es correcto, y el resultado correcto era 6. El informe tambin
ensea la ubicacin del archivo que tiene la falla.
pg. 56