miércoles, 13 de abril de 2011

Diseño de pruebas unitarias (Clase)

Clase: Semana 10 
Texto con diagramas que explica las pruebas unitarias a aplicar



¿Que son las Pruebas Unitarias?
Son como ensayos parara comprobar que funcionan diferentes partes del código, con estas pruebas podemos saber si nuestro proyecto esta fallando o no.


¿Porque hacer Pruebas Unitarias?

  • Detectar y encontrar nuevos errores o bugs .
  • Definir peticiones de cada función.
  • Saber si un método es efectivo.
  • Podemos aprobar un caso de estudio.
  • No siempre se encuentran todos los errores.
  • Separar la interfaz con la implementación.



De la iOS Development Guide nos dice que:
Xcode ofrece dos tipos de pruebas unitarias: pruebas de logica (Logic Tests) y pruebas de aplicación (Application tests).


Las pruebas de lógica son pruebas que verifican el correcto funcionamiento de nuestro código en un entorno "clean-room environment", esto quiere decir que el código no se ejecuta dentro de una aplicación, esto lo podemos utilizar para llevar a cabo pruebas en el código para asegurar que se comporta correctamente en situaciones en donde no estamos seguros como va a reaccionar nuestro programa, ayudan a hacer nuestro código robusto que funciona correctamente cuando se utiliza de maneras que no estamos anticipando, en xcode el código que se está probando se ejecuta durante la fase de "Builder".


Las pruebas de aplicación son pruebas que verifican la funcionalidad del código en una aplicación en ejecución. Debido a que las pruebas de aplicación se ejecutan en un solo dispositivo, también las podemos utilizar para realizar pruebas de hardware.


En mi proyecto, como explico en mi entrada de taller, por el momento realizo dos pruebas unitarias dentro de la clase MenuTestCase, aqui expongo mi diagrama de clases actualizado con la clase de las pruebas unitarias incluida, podemos ver la clase MenuTestCase, que hereda de SenTestCase



Mi diagrama UML


OCUnit
OCUnit es un framework de pruebas para Objective C en Mac OS X integrado con xcode. Podemos probar los frameworks, paquetes o aplicaciones y es basado en SUnit para Smalltalk y en JUnit para Java.


Incluye un framework "SenTestingKit" que nos ayuda a escribir casos de prueba, teniendo como ventajas que podemos implementar pruebas en el mismo Objective C y tiene una integración total con xcode.


Para descargar OCUnit aqui.


Usando OCUnit en mi proyecto..
Luego de instalar OCUnit, descargado de la pagina.


1. Necesitas agregar un nuevo "Unit Test Bundle".


2. Le pones un nombre al target y das Next..


3. Luego se modifica "Other linker flags" cambiando de Cocoa a Foundation, esto para permitir que compile en el iPhone simulator.


4. Buscas Cocoa.h y borras las referencias.


5. Agregas una nueva clase en el proyecto "Objective-C test case class"




6. Es importante que al final del nombre de la clase se llame TestCase y seleccionas el nombre del Target.




7. Todos los metodos deben empezar con test


8. Agregas el Target a los metodos que los necesitas probar.






9. Es importante que cuando quieras hacer el Build, necesitas activar el Target.




Cualquier duda o pregunta sobre la entrada, pueden comentar.
Pueden encontrar mas información en los siguientes enlaces.

Implementación de pruebas unitarias (Taller)

Taller: Semana 11
Implementación de las pruebas unitarias en código documentado y un reporte de los resultados de su ejecución


En la entrada de taller para esta semana tenemos que presentar código utilizando pruebas unitarias.

Para empezar, es necesario, como lo dije en mi entrada anterior activar el Target antes realizar el Build and Run.

Este es mi diagrama UML con la clase MenuTestCase, la cual contiene los metodos de test que implementados, se hereda de la libreria SenTestCase, y se agregan las librerías en este caso agregué la libreria Producto.h y Menu.h

Esta es la función a la cual le voy a hacer pruebas unitaria, esta agrega un producto a MiMenu, el cual es un NSMutableDictionary

 Ahora en mi código de test, lo que hice es crear un nuevo objeto, en este caso bebida, al igual que un nuevo menu, después con la función STAssertEquals, verifico que la función regrese un valor YES booleano.
En este caso, el UnitTestBundle me no muestra el mensaje, ya que efectivamente regresa el valor igual a lo que yo queria que verificara.
 En este otro caso, cambie el valor de disponibilidad en el objeto de bebida con un valor de 1, según mi código cuando esta en uno no se encuentra disponible al publico, por lo tanto regresa un valor booleano NO.
Ahora vemos que en el Build del UnitTestBundle, me muestra el mensaje que regresa NO.


 Para el caso de testRemove, creo igual dos objetos, uno que es el Menu y otro que es la Bebida, lo agrega al NSMutableDictionary y tenemos otro STAssertEquals el cual si regresa un YES, quiere decir que se eliminó exitosamente.
Y mi prueba no me mostró ningún error, solamente un warning.



Esto es lo que implementé de pruebas unitarias en mi proyecto, conforme valla agregando mas código, mas pruebas unitarias haré para crear un sistema mas robusto e ir verificando mi lógica.

Si tienen alguna duda o sugerencia, comenten por favor.


martes, 12 de abril de 2011

Capturas de pantalla RMI

Esta es la captura de pantalla utilizando RMI, en este caso soy Cliente para el Servidor de la profe.
Ahora soy Cliente


Aqui puedes descargar el ejemplo de la clase.

Aqui estoy haciendo la funcion de cliente y servidor basado en un ejemplo que encontré en internet.


El demo lo pueden encontrar aqui.

miércoles, 6 de abril de 2011

Implementación de eventos, excepciones y errores propios

Taller: Semana 10
Incorporación de eventos, excepciones y errores particulares al software





Eventos

Eventos implementados en mi proyecto.
Para mostrar el mapa, utilizo una función que muestra la localización del usuario, al momento de tocar el botón, hace su trabajo.


Para escoger el evento, yo lo que hice es arrastrar en Interface Builder según la función que voy a elegir y el evento que quiero elegir, aqui elegí que pudiera tocar varias veces el botón para actualizar su ubicación.




Excepciones



Implementé la excepción para saber si un objeto Producto, ya sea bebida o comida, están disponibles, para eso pongo un try-catch-finally con una exception que al momento que la disponibilidad tenga un numero de uno, nos diga que ya no esta disponible, utilizando un throw.


Función addProducto();



Es importante decir que hice una clase que incluyera esta excepción y el framework de NSException



Este es el resultado en la consola.

Identificación de eventos, excepciones y errores propios

Clase: Semana 10
Texto con diagramas que explica los eventos, excepciones y errores particulares al software que se está diseñando


Eventos
Es un acontecimiento en el software que opera el evento mandando un mensaje a otro objeto apropiado, podemos decir que es la respuesta que puede producir un objeto, o sea la acto que ocasiona.


Eventos que puede generar mi proyecto

  • Al tocar el botón de Ubicame, por ejemplo, se muestra la ubicación del usuario.




  • Al tocar alguno de los submenus, cambiamos la vista según lo que el usuario desee.




  • Cuando se hace la vista, podemos seleccionar el evento que se va a realizar:

Podemos ver los diferentes eventos que se le pueden poner a un botón, en mi caso al momento de tocar, manda llamar a función Ubicar();

Excepciones.
Una excepción es un evento, este suele suceder cuando en algún momento se genera un hecho ocasional y este puede obstaculizar o evitar un la actividad normal del software.

Excepciones que pueden ocurrir en mi proyecto.

  • Por ejemplo cuando un usuario quiere ordenar algo que no esta disponible a su hora o simplemente se agotó en el restaurante,  se mostrará una excepción.




  • En el ejemplo, podemos ver que el usuario queria ordenar Cerveza, pero esto no estaba disponible.


En este diagrama podemos ver que si esta disponible, se agrega a mi pedido, si no, nos tira una excepción, en mi entrada de taller expongo el código.

  • Otra excepción que puede ocurrir es cuando se quiera enviar el pedido, no tenga el dispositivo conexión a internet para enviarlo.


Errores
Los errores son regularmente irreversible y puede que solo se cierre el programa.

Errores que pueden ocurrir en mi proyecto
  • Que no inicie el programa correctamente, generando un error y posteriormente simplemente cerrará.
  • Otro error, si en algún momento falla el abrir el menú o la visualización de imagenes, cerrará el programa.


Espero sus sugerencias en los comentarios para realizar una retroalimentación.