Pixelscode 2012 04

596 views

Published on

Argentinian Magazine

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
596
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Pixelscode 2012 04

  1. 1. 1
  2. 2. 2 SUMARIO ENTRY POINT 4 INTRODUCCIÓN A LAS BASES DE DATOS RELACIONALES(XII) 6 PROYECTO #CODE: PANEL DE CONTROL FEROZO 14 DESARROLLO DE SOFTWARE ÁGIL CON SCRUM 22 TESTING DE APLICACIONES 30 LAS LEYES DE PROGRAMACIÓN DE TAYLOR (PARTE II) 40 CHOQUE DE GIGANTES: F ACEBOOK VS GOOGLE+ 48 Las opiniones expresadas en los artículos son exclusiva responsabilidad de sus autores y no coinciden necesariamente con la opinión de Dattatec.com SRL.
  3. 3. STAFFDIRECTORA Y JEFA DE REDACCIÓNDébora OruéCOLUMNISTASGabriel Walter Gaitano OrniaJuan GutmannMariano SalvettiMatías IáconoRoxana MiguelDISEÑO EDITORIAL Y CREATIVIDADwww.americanbread.netArte de tapa: Esteban PaniaguaCOMERCIALIZACIÓNDATTATEC.COM SRLCórdoba 3753, Rosario, Santa fewww.dattatec.comREDACCIÓNlectores@pixelscode.comDATOS DE CONTACTODirección comercial:publicidad@pixelscode.com 3
  4. 4. 4ENTRYPOINTENTRYPOINTGADGETS: SEGURIDAD E INTERNETY, finalmente, la empresa de la manzana lo hizo Luego de las películas le llega el turno a los libros.de nuevo: Apple presentó en sociedad una nueva Un importante grupo de casas editoriales de EE.UU.versión de su popular tableta iPad, largamente y Europa ha apuntado su artillería contra el sitioesperada por el aficionado a la tecnología. Library.nu, que era considerado como un formidable reservorio de ebooks y que, con una modalidadEquipada con un procesador más rápido, dotada similar a Megaupload, alcanzaba una recaudacióncon tecnología 4G, es considerada una verdadera en publicidad de más de 10 millones de dólares.revolución. Esta es la tercera versión que llega a lasvitrinas, con la que espera conservar el liderazgo En este sitio los usuarios subían sus datos y recibíandel mercado que le es intensamente disputado por un link que podían compartir con sus otros contactos.empresas como Amazon y Samsung, entre otras. Aún Los servicios eran utilizados generalmente para elno se la ha liberado en nuestro país, pero ya hay gran alojamiento de libros digitales que, de este modo,expectativa por su desembarco en estas playas. podían ser compartidos o leídos en formato PDF . El sitio ha sido dejado inoperativo por requisitoria judicial, dejando en claro que la batalla por el modelo de comercialización y compartición de los medios por la red no ha hecho más que empezar.
  5. 5. Gabriel Gaitano Ornia gabriel.gaitanoornia@pixelscode.comWEB PARA IT NEWS:CONOCER:A pesar de estar fuertemente orientada a los productos Problemas con el nuevo Windows 8Microsoft, si nuestro trabajo nos lleva a utilizarloscomo developers tenemos un excelente Microsoft había, sin duda, imaginado que algunosrecurso disponible para utilizar en el sitio http:// usuarios encontrarían la transición y cambio desdewww.codeproject.com. el actual producto líder, Windows 7, a su planeado sucesor Windows 8 como algo desafiante. Pero es pocoAquí vamos a encontrar una sabrosa combinación probable que estuviera preparada para la reacción dede artículos, Blogs técnicos con datos de su propia comunidad base. Esta se ha manifestadoconsultas, trucos interesantes de programación en el Windows 8 Consumer Preview, o revisión inicialy, como no podía faltar, un foro de discusión, de consumidores. Especialmente denostadas en losasí como un repositorio de preguntas donde comentarios de los usuarios han sido la nueva interfazpodemos plantear nuestras propias dudas. C#, estilo tablet, llamada Metro y concebida para competirASP .NET y otras tecnologías de la empresa de con el popular iPad de Apple; y la desaparición delRedmond aparecen en estos medios con abundante viejo y querido botón de Inicio. De hecho, muchosinformación práctica y muy útil en nuestro trabajo usuarios han señalado que el producto entero es uncon esas tecnologías. “substancial paso hacia atrás”. Las opciones para Microsoft son, ahora, demorar el producto para tratar de suavizar los cambios, por ejemplo, haciendo la nueva interfaz optativa (salvo para tabletas y teléfonos) o seguir adelante confiando que el usuario acabará por acostumbrarse a los cambios. Que esta vez son mucho más de lo acostumbrado. 5
  6. 6. 6 INTRODUCCIÓN A LAS BASES DE DATOS RELACIONALES(XII) Hace unas semanas, un lector nos escribía Ni hablar si lo comparamos contra un gran servidor consultándonos acerca de la posibilidad de trabajar corporativo, donde normalmente corre el software con una base de datos relacional en una aplicación de base de datos relacional en las empresas para smartphones. Esta es una pregunta que se medianas y grandes. ¿Esto significa que tenemos escucha cada vez más en los últimos tiempos. que renunciar a programar como más nos gusta, Cuando se desarrolla para dispositivos embebidos, para complicarnos la existencia almacenando la ya sean equipos muy pequeños y específicos (como información de otra manera? Afortunadamente, no. un controlador de maquinaria industrial) o más Aunque tendremos que prescindir de bases potentes y voluminosos y versátiles -smartphones o tablets- flexibles, como lo es PostgreSQL, existen alternativas nos encontraremos con una situación en la que pensadas para estos casos que permiten trabajar necesitamos hacer mucho con pocos recursos. La con un motor relacional lo suficientemente funcional cantidad de memoria y el poder de procesamiento como para satisfacer las necesidades de cualquier del CPU de este tipo de aparatos son más bien aplicación escrita para este tipo de plataformas. Aquí limitados, en comparación con una PC hogareña. presentamos una de ellas: SQLite.
  7. 7. Juan Gutmannjuan.gutmann@pixelscode.com 7
  8. 8. 8 CARACTERÍSTICAS DE SQLITE SQLite no es un motor de base de para su empleo en dispositivos datos relacional, aunque trabaja móviles y embebidos, ya que al no de forma idéntica a uno. Ocurre existir un motor propiamente dicho, que no se trata de un programa (o el empleo de la base de datos tiene conjunto de programas) “servidor”, costo cero en recursos, ya que no que se encuentra corriendo existe un servidor que requiera de permanentemente (como un memoria RAM, espacio en el sistema demonio), atendiendo peticiones de archivos y ciclos de CPU para en un puerto de red. En cambio, funcionar. Los recursos consumidos toma la forma de una pequeña dependerán exclusivamente de librería desarrollada en lenguaje la forma en la que programemos C. Sus principales virtudes están nuestro aplicativo. Para su pequeño bien descriptas en la página web “footprint”, SQLite es notablemente del proyecto, [http://sqlite.org/]: flexible. Aunque debemos renunciar es “self-contained” (no posee al empleo de Stored Functions dependencias de otras librerías), (los Procedimientos Almacenados, “serverless” (según acabamos de que nos vienen dando tan buenos describir, no requiere de un proceso resultados con PostGres), sí cuenta ejecutándose en forma constante), con la posibilidad de crear Triggers, “zero configuration” (no requiere aunque su funcionalidad -claro realizar tareas de instalación ni está- es acotada. SQLite corre en configuración) y “transactional” prácticamente cualquier plataforma (transaccional; como nuestros para la que exista un compilador de lectores ya saben, esto quiere decir lenguaje C, y lo mejor de todo es que que pueden agruparse una serie de para programar software que la utilice cambios realizados a la información no nos encontramos limitados a este contenida para que sean confirmados mismo lenguaje, sino que podemos o deshechos en conjunto en el caso de hacerlo en casi cualquier tecnología existir algún tipo de error). Al escribir de desarrollo que se nos ocurra: una aplicación que trabaje con ella, C++, Java, JavaScript, Lisp, Perl, podemos leer y escribir datos en un PHP Python, Ruby y Tcl son apenas , archivo “base”. Por ello es apropiada algunos de ellos.
  9. 9. ORÍGENESDE SQLITELa librería SQLite fue creada por el una especie de “wrapper” de gdbm, A esta altura del proyecto, miles deprogramador norteamericano Richard que le permitía escribir en SQL los usuarios estaban involucrados en suHipp, cuya labor ya era reconocida comandos para crear, modificar o utilización y mejora, entre ellos unen el mundo del Software Libre y borrar la información contenida en número importante de empresas.de Código Abierto por ser uno de la base, delegando al código original Una de las más grandes, AOL, pusolos desarrolladores del lenguaje Tcl. del Proyecto GNU la tarea de realizar una suma importante de dinero paraCuando fue empleado por la empresa físicamente las lecturas y escrituras acelerar el desarrollo de SQLite, trasGeneral Dynamics para mantener necesarias en el sistema de archivos. lo cual fue liberada la siguiente versiónel software encargado de controlar La segunda versión de SQLite (la (3.0), que incorporó un sinfín debarcos de guerra de la U.S. Navy (la 2.0) sustituyó definitivamente el mejoras. La última versión estable, lamarina de guerra norteamericana), código de gdbm, implementando 3.7.10, publicada los primeros días delse le solicitó modificar los programas una base propia, basada en B-trees. corriente año, se basa en dicha versión.críticos para poder prescindir delpesado motor de base de datosrelacional con el que trabajaban(Informix). Richard estaba muyfamiliarizado con el Proyecto GNU, elemprendimiento de Richard Stallmanpara crear un Sistema Operativototalmente libre, gracias a su trabajoen el lenguaje Tcl. Sabía que unode los paquetes que componen elproyecto, llamado gdbm (una versiónno propietaria de la librería dbm paraUNIX, que permite implementar unsencillo sistema de base de datos)cumplía con los requerimientos que lehabían sido especificados. Tomandoel código de gdbm, Hipp puso manosa la obra, y luego de algunas semanasde trabajo nació la versión 1.0 deSQLite. Esta primera versión era SQLite es una base de datos ideal para emplear en teléfonos móviles, a punto tal que tanto el Sistema Operativo del iPhone (iOS) y el de los teléfonos basados en Android incorporan esta librería. 9
  10. 10. 10 LICENCIA DE SQLITE Un factor determinante a la hora de elegir un sistema de base de datos es su licencia. La licencia GPL de MySQL, por ejemplo, impide incorporarla a una aplicación propietaria, salvo que se opte por recurrir a una versión privativa del motor, que sí permite este tipo de usos, pero no es gratuita. La licencia de SQLite es otro punto a favor en este sentido a la hora de desarrollar para dispositivos con escasos recursos. Tanto las versiones binarias de la librería como el código fuente se encuentran liberadas en el “dominio público”, lo que permite su uso, copia, modificación, distribución e incluso su venta bajo cualquier circunstancia, incluyendo su incorporación a un software propietario. El shell de SQLite permite acceder a las bases de datos sin necesidad de escribir programas en alguno de los lenguajes soportados.
  11. 11. DESCARGA E SOPORTE YINSTALACIÓN DOCUMENTACIÓNAlgunos lenguajes, como PHP o En el sitio web de SQLite se encuentra módico”. También figuran en el sitioPython, ya incluyen SQLite en publicada abundante documentación algunas listas de correo a las quesus paquetes de instalación. Para sobre sus características y utilización, suscribirse para enterarse de lasdesarrollar en otros lenguajes con así como una completa referencia de últimas novedades, intercambiarSQLite tenemos diversas alternativas. la librería, sus APIs desde distintos información y solicitar ayuda.Bajo GNU/Linux, puede obtenerse lenguajes (como C++ y Tcl), tutorialesmediante el administrador de y ejemplos, y también enlaces hacia Por último, aunque SQLite es librepaquetes correspondiente a cada libros (online y en papel) publicados y gratuito, pueden conseguirsedistribución. Pueden descargarse por distintos autores sobre el allí enlaces hacia extensionesdel sitio oficial de SQLite los fuentes desarrollo de aplicaciones en conjunto propietarias (algunas de ellas pagas)de la librería y compilarlos con el con esta base de datos relacional. que agregan funcionalidad nocompilador de C de su preferencia, ofrecida por la versión estándar de labajar directamente los binarios Además, su autor original, Richard librería. La más interesante de ellasprecompilados para diversas Hipp, y su empresa (Hwaci) ofrecen es SEE (SQLite Encryption Extension)plataformas. soporte e inclusive la posibilidad de que permite trabajar con una base de realizar modificaciones específicas datos cifrada con potentes algoritmosEn el sitio se ofrecen binarios para a pedido, según ellos “por un precio AES de 128 y 256 bits.Linux, Mac OS X, Windows y .NET.También se ofrecen junto con losbinarios de las librerías un shell decomandos ejecutable, que permiteingresar directamente en la consolalas órdenes SQL para manipularlas bases de datos SQLite. Porúltimo, debe obtenerse la librería de“binding” que corresponda a cadalenguaje. Para este último paso, seaconseja recurrir a la ayuda online dedicho lenguaje. Como casi todos los motores relacionales que se precien de tal, SQLite también cuenta con sofisticadas herramientas visuales desarrolladas por terceros que permiten administrar y mantener la base de datos. 11
  12. 12. 12 UN EJEMPLO EN PYTHON A continuación, un ejemplo de código Python que trabaja con el “binding” de SQLite. En este ejemplo, que se extiende por apenas unas pocas líneas de código (siguiendo la tradición “pythónica”) se comienza por crear una base permanente en el sistema de archivos raíz (puede crearse una base temporal en memoria, que desaparecerá cuando finalice la ejecución de la aplicación), prosigue creando una tabla y ejecutando SQL INSERTs para generar dos registros, y finaliza leyendo el contenido de la tabla y volcándolo a pantalla. Gráfico comparativo de la performance de MySQL contra la de SQLite. Aunque MySQL gana por poco, su consumo de recursos muy superior inclina la balanza en favor de la librería que nos ocupa en esta edición.
  13. 13. Richard Hipp, creador y principal mantenedor de SQLite. CONCLUSIONESfrom sqlite3 import dbapi2 as sqlite Unos pocos conocimientos del trabajoconnection = sqlite.connect(‹/tmp/ con cualquier motor relacional, yprueba.db›) un equipo informático con algo decursor = connection.cursor() RAM libre alcanzan para trabajar conquery = «CREATE TABLE empleado SQLite.(legajo INTEGER PRIMARY KEY, cargoVARCHAR(10),» El lenguaje SQL es una forma sencillaquery += «apellido_y_nombre y eficaz de almacenar, modificarVARCHAR(100), supervisor y recuperar información de ciertaINTEGER)» complejidad. No por nada entre loscursor.execute(query) usuarios de esta excelente libreríaquery = «INSERT INTO empleado se cuentan gigantes de la industriaVALUES « informática, como Mozilla, Google,query += «(1, ‹GTEGRAL›, ‹Carlos Apple, Nokia y Adobe. Por supuesto,Gomez›, 1)» el hecho de que esta base seacursor.execute(query) ideal para trabajar en dispositivosquery = «INSERT INTO empleado embebidos y móviles no lo limita aVALUES « estas plataformas; emplearla en unaquery += «(2, ‹SUPERVISOR›, ‹Jorge aplicación hecha y derecha para lasGonzalez›, 1)» PC tradicionales es una buena idea,cursor.execute(query) si tenemos estructuras complejasconnection.commit() de datos con las que queremoscursor.execute(«SELECT * FROM interactuar, y preferimos obviar laempleado») dependencia de un motor tradicional,resultset = cursor.fetchall() como MySQL.for row in resultset: print row[0], row[1], row[2], En definitiva, contar a SQLite entrerow[3] nuestro arsenal de conocimientosconnection.close() dentro del mundo de las bases de datos amplía nuestros horizontes en gran manera, y por lo tanto es imprescindible tener aunque sea nociones básicas de su empleo. 13
  14. 14. 14 PROYECTO #CODE: PANEL DE CONTROL FEROZO ENTREVISTA Ing. Daniel Lázaro,. Coordinador Área Desarrollo de Dattatec. Bienvenidos a esta nueva sección de Pixels&Code que En esta primera entrega de Proyecto #Code, hemos decidido llamar “Proyecto #Code”. La idea de decidimos empezar por casa y reunirnos con Daniel esta sección es que sea una puerta para compartir con Lázaro, quien es la persona encargada de una de ustedes los diferentes programas que revolucionan el las piedras basales de Dattatec: el panel de control mundo del software. Para ello nos comprometemos a Ferozo, un software que tiene como objetivo construir involucrarnos de lleno en los diferentes proyectos que proyectos Web de fácil administración, con el cual aquí destaquemos, yendo directamente a las fuentes podamos tener presencia en internet de manera y entrevistando a las personas que están directamente inmediata, para volcar nuestras ideas y tener una relacionadas con el proyecto del mes. amplia llegada hacia nuestros clientes.
  15. 15. Franco Riverofranco.rivero@pixelscode.com 15
  16. 16. 16 Pixels&Code: Daniel, contale a nuestros lectores de qué se trata Ferozo. Daniel Lázaro: Ferozo es un panel de control para hosting, pionero a nivel nacional, 100% desarrollo propio, con versiones en las dos plataformas más importantes de hosting (Linux y Windows), y dividido convenientemente en módulos que abarcan todos los estratos de usuarios y necesidades (panel para usuarios de hosting, panel para revendedores de hosting y administradores de servidores, panel para usuarios de webmail y constructor on-line de sitios web). Ferozo es un proyecto enteramente desarrollado en Rosario, que tiene alcance mundial a través del uso que y servicios para que otras compañías almacenen los clientes de Dattatec le dan como panel de control cualquier información que quieran que sea accesible para (auto) gestionar los recursos del servicio de por una red, desde sus páginas web, hasta la hosting que la empresa brinda. información de su red interna o Intranet y sus casillas de correo. P&C: ¿Qué diferencias radicales distancian a Ferozo de otros sistemas de gestión de contenidos como Siguiendo con este ejemplo, los paneles de control de Wordpress? hosting vendrían a ser, en la web, algo así como los conserjes y el servicio de cuarto de nuestro hotel del DL: Bueno, para empezar, las diferencias son muchas ejemplo. En definitiva, una suerte de administradores, ya que Ferozo no es un Sistema de Gestión de coordinadores y árbitros del servicio. Contenidos (CMS) como WordPress, sino un Panel de Control para Hosting. P&C: ¿Cuáles son las ventajas de operar con un panel de control? Para explicarlo de una forma sencilla voy a hacer abuso de un ejemplo comparativo que me agrada. DL: ¡Muchísimas! Hoy en día casi no se concibe Las empresas que se dedican al servicio de hosting administrar un servidor de hosting en forma manual. son como los hoteleros de la red: ofrecen espacio Además, eso sólo es posible en casos muy específicos.
  17. 17. Por lo general, los administradores de servidoresde hosting prefieren dejar convenientemente enmanos de los usuarios tareas como crear cuentasde correo, agregar dominios a un sitio, instalaruna aplicación como Wordpress, etc. Creo quees muy clara la ventaja, por parte del usuario, deno tener que depender de un administrador deservidor para realizar tareas rutinarias como lasmencionadas anteriormente. Y mucho más: porejemplo, los revendedores de hosting pueden crearnuevas cuentas para sus clientes sin interactuarcon ningún “Sysadmin”; y los usuarios de webmailpueden configurar su filtro antispam sin necesidadde depender del webmaster.P&C: ¿Cuánto tiempo tardaron en desarrollarloy cuál fue el capital humano involucrado en elproyecto? 17
  18. 18. 18 DL: Las primeras versiones de cada plataforma buscado desde edad temprana de Ferozo para tardaron alrededor de un año cada una para alcanzar el éxito en materia del servicio de hosting. desarrollarse e involucraron un equipo de un total Por otro lado, a nivel estratégico empresarial, Ferozo de 4 personas entre las dos. significó la integración vertical y la independencia de la empresa Dattatec de proveedores externos, El proyecto Ferozo continúa hoy en día más vigente obteniendo de estos factores grandes ventajas que nunca, con un equipo de más de 15 personas, competitivas. entre arquitectos de software, desarrolladores, sysadmines y diseñadores web. P&C: ¿Qué devolución han obtenido de los usuarios finales? P&C: Teniendo en cuenta que con esta herramienta podemos generar y tomar el control rápidamente de DL: Los usuarios siempre se muestran complacidos sitio web, ¿cuál fue el aporte de Ferozo en el meteórico por los avances y mejoras que Ferozo les va ascenso que ha tenido Dattatec en los últimos años? brindando. Recibimos de ellos una buena cantidad de feedback, casi siempre a modo de sugerencias DL: Puedo afirmar que el poder generar fácilmente y oportunidades de mejora. La realimentación que un sitio desde una herramienta anexa al panel de recibimos de parte de nuestros usuarios es siempre control, fue un factor clave y estratégicamente uno de los más valiosos motores que generan los cambios y los agregados de funcionalidades y tecnologías. La verdad, siempre hemos sentido esa sinergia con nuestros usuarios. Esa sensación de ir avanzando juntos en el camino. Siempre mejorando y haciéndonos mejorar mutuamente. Estamos muy agradecidos de haber logrado esa relación. P&C: ¿Cuáles son las nuevas características en el desarrollo que incluyeron últimamente y cómo crecerá Ferozo en este año? DL: Últimamente estuvimos trabajando más que nada en las interfaces y la usabilidad. Le agregamos un modo simple a la interfaz de Ferozo en el panel
  19. 19. para usuarios de hosting, con las opciones mínimasy más usadas en la etapa de “set up” de un sitio,de forma que cada cuenta de hosting que es creadautiliza por defecto este modo simple que, porun lado, facilita al recién iniciado en materias dehosting la configuración inicial de su sitio, y por otro,le deja un cómodo acceso a las funcionalidades másrequeridas a los más experimentados.También hemos estrenado nuevas interfaces para elclásico “modo avanzado” de Ferozo para usuarios dehosting. Hemos re-hecho las interfaces resultando lasnuevas con características totalmente Web 2.0: Ajax,recargas parciales, mejor usabilidad y funcionalidadesampliadas en general.Con respecto a este año, podemos adelantar que prontose viene el soporte de acceso seguro (SSL/HTTPS) 19
  20. 20. 20 DL: Ferozo está incluido en los planes del servicio de hosting de Dattatec y se lo puede utilizar al contratar cualquier plan. Pueden visitar los siguientes enlaces para probar Ferozo y para obtener ayuda y más información asociada al panel: http://ferozo.net Panel de Control del Constructor de Sitios Ferozosite URL: http://ferozositedemo.dattatec.com:2085/ Usuario: fsdemo / Contraseña: fsdemo Panel de Control para usuarios de Hosting, plataforma Windows: URL: http://windows.dattatec.com:2082/ Usuario: demo / Contraseña: demo para el panel y la integración con nuestra solución de comercio electrónico. Panel de Control para usuarios de Hosting, plataforma Linux: P&C: Contanos cómo fue la experiencia personal al presentar a Ferozo en los premios Sadosky. DL: Sinceramente, fue algo natural. Después de trabajar tantos años en un proyecto de alcance internacional que les es útil a más de 80.000 usuarios, nada más sentimos que era hora de presentarlo como candidato a tan distinguido premio. Por supuesto, siempre nos sentimos orgullosos de lo que hacemos y nuestro mejor premio es el reconocimiento de nuestros usuarios. P&C: Por último, ¿cuáles son los costos finales de Ferozo para los usuarios y cómo pueden acceder a una demo para evaluar su potencial?
  21. 21. URL: http://demopanel.dattatec.com:2082/Usuario: demo / Contraseña: demo¿POR QUÉFEROZO?Mientras charlamos con Daniel, durante la entrevistano podía dejar de preguntarme el origen del nombreFerozo. La respuesta vino de la mano de Diego Vitali(Marketing Manager de Dattatec), quien amablementearrojó algo de luz sobre el tema.“Durante los tiempos en que Guillermo Tornatore(CEO y fundador de Dattatec) toma la decisión decomenzar a desarrollar nuestro propio panel dehosting, él viaja con su familia unos días a Córdobapara descansar, y por supuesto, definir un nombrepara el panel era una de las cosas que «viajaban ensu cabeza». Por aquel entonces, su hija mayor tenía 3años. En un momento del viaje, Guillermo manejabapor una zona de bosques frondosos al costado delcamino y ante este paisaje, le comenta a su hija queen esos bosques vivía el Lobo Feroz del cuento deCaperucita Roja, con el objetivo de entretenerla yllamar su atención, a lo cual su hija le pregunta ¿Ahívive el lobo Ferozo?... Esto quedó en la mente deGuillermo y al regresar a Rosario el tema del nombredel panel estaba resuelto. Quien en otro momentohabía sido motivo de la decisión de Guillermo dedesarrollar Dattatec desde Argentina, puso también elnombre al panel de control”. 21
  22. 22. 22 DESARROLLO DE SOFTWARE ÁGIL CON SCRUM Cuando hablamos de desarrollo de software muchas Pero en la gestión es especialmente compleja debido veces sólo nos quedamos en la superficie de lo que a que existen diferentes vertientes paradigmáticas que en realidad es el vasto, y muy profundo, mar de la intentan sobresalir de otras. Debido a esto es que se ingeniería de software. Es común que hablemos de han llegado a entablar peleas internas en empresas, creación de líneas de código, técnicas y herramientas separando a las personas en bandos. Aquellos que para mejorar nuestro rendimiento, velocidad o apoyan un modelo, otros que no están tan seguros y facilidad en la escritura de código, menos errores o prefieren pivotear entre varios, y otros que prefieren una mejor calidad visual de nuestras aplicaciones, los métodos ya conocidos y con más tiempo de pero el desarrollo de software no se reduce sólo implementación en el mundo del desarrollo. a esta tarea. Por detrás (o acompañando) a esta también se encuentra la gestión de los proyectos. De cualquier manera podríamos colocar a la gestión de software en dos grandes áreas, aunque cada una LA GESTIÓN de estas tendrá sus matices, una que llamaremos formal, y la otra ágil. Pudiendo ir de un lado a Como decíamos, el desarrollo de software no se reduce otro de estos extremos e incluso quedándonos a la escritura de líneas de código, la gestión de los parados en la ausencia de gestión por completo. Por proyectos es tan importante como el producto, o en supuesto, la ausencia de gestión sería un desastre todo caso, la gestión, como la búsqueda y correcciones seguro para nuestro proyecto. de errores, el diseño arquitectónico y muchos otros elementos hacen al todo del producto final de software. Estos modelos de gestión tienen su historia, lo que Si nos faltara alguna de estas patas simplemente le da inicio a los mismos y por lo tanto cada uno estaríamos jugando a hacer software y no haciendo de ellos posee una filosofía que lo lleva a gestionar software realmente. los proyectos de la forma en cómo lo hacen. Por
  23. 23. Matias Iacono matias.iacono@pixelscode.comejemplo, los modelos de desarrollo de software másestrictos en sentido de documentación, seguimientoy control heredan su filosofía de procesos degestión que provienen de otras industrias, poniendo,posiblemente, más el acento sobre la cosa quese produce y tratando de controlar las variablesinvolucradas en dicho proceso más que en el valordel equipo que lo produce; es por este motivoque muchas veces hablamos de industria, ya quesolemos imaginarnos las empresas que desarrollansoftware como aquellas que creaban automóviles enserie. De cualquier manera, y tratando de matizaresto, no debemos caer en extremismos, ya que estepensamiento extremo dependerá de la empresa queimplemente este modelo y por otro lado, el tipo deproyecto que estemos creando. Esto quiere decir quemuchos proyectos de carácter crítico, como softwarede alto rendimiento, para control de tráfico aéreo,manejo de redes y telecomunicaciones, entre otros,donde se necesita realizar la mayor cantidad decontroles y verificaciones sobre el producto antes deque este llegue a ser utilizado. 23
  24. 24. 24 En el área de la agilidad, por el contrario, el objetivo orientadas al valor entregado con el producto. se centra principalmente en la reducción de costos Normalmente, la primera rama se distingue por la innecesarios de la producción, en la entrega de creación de documentación, fichas de seguimiento, productos con valor al cliente y en el valor que el procesos escalonados y otras actividades que, sin equipo de producción puede otorgarle al producto ser ni malas ni buenas, son parte de todo proceso que está construyendo. Por lo tanto este tipo de que se oriente al control. Esto quiere decir que para formas de gestión suele eliminar el papeleo excesivo poder saber qué pasa en cada momento dentro de al mismo tiempo que pretende interactuar más un proyecto, conocer los estados de las diferentes de cerca con el cliente, mostrándole avances del materias, cómo pasan de uno a otro y demás, es producto, o requiriéndole retroalimentación del necesario llevar controles exhaustivos, lo que deriva producto de forma seguida. en el uso de herramientas y documentos constantes. Por supuesto, y al igual que el otro polo de gestión, Por otro lado, cuando el desarrollador se topa con aquí tendremos un abanico de posibilidades de la agilidad, uno de los primeros atractivos será la gestión donde cada uno aplicará sus conceptos y sugerencia de no requerir la documentación que prácticas, por lo que no debemos confundirnos y se proponía en los modelos anteriores. Esto es mal considerar que todos los modelos ágiles, así como interpretado fácilmente y deriva en la ausencia los modelos orientados al control, aplican las absoluta de documentación, entre las que se incluirán mismas prácticas, aunque posiblemente sí, estén la planificación de tareas y tiempos, documentos amparados por el mismo paraguas filosófico. arquitectónicos, manuales de usuarios y muchos otros documentos inherentes al desarrollo de software. Pero esto es un error, un concepto de agilidad mal entendido ESTO NO ES y que es esgrimido por desarrolladores y gestores para AGILIDAD no tener que realizar las prácticas de ingeniería que todo proyecto demanda. En este punto, la agilidad, y Es importante que destaquemos qué es y qué no es dependiendo del modelo que elijamos, nos sugerirá agilidad, o por lo menos, algunos de los vicios que reducir la carga documental, en la medida que esto sea se suelen encontrar cuando se habla de agilidad, los posible, pero no la abolición total de cualquier pieza cuales han llevado a la mala interpretación y malas de seguimiento en la construcción del producto. prácticas en proyectos de desarrollo de software. Por lo tanto, cuando hablamos de agilidad, también Como veíamos al principio, dividimos la gestión en hablamos de estimaciones de tiempos, documentos dos grandes ramas: las orientadas al control y las y diagramas.
  25. 25. EL PROBLEMA DE SCRUMCOMO MODELO ÁGILLos modelos ágiles son muchos, variados en su Scrum fomenta valores deaplicación y con diferentes grados de dificultad en profesionalismo, donde todos lossu entendimiento, de esta forma podemos encontrar integrantes del equipo deben trabajarnombres como Lean, Kanban, XP y otros, aunque en conjunto para conseguir un objetivo.Scrum posiblemente sea el que haya tenido mayorpopularización y por lo tanto se haya inmiscuido enlas empresas mucho más fácilmente.Lamentablemente, esta popularización no hizo, en etiquetas, declarándose agilistas y dirigiéndose almuchos casos, más que dañar la credibilidad sobre fracaso garantizado y, con éste, generando malaesta herramienta y al mismo tiempo toda la idea que fama al modelo.rodea a la agilidad y lo que tiene para ofrecernosen la gestión de nuestros proyectos. Este daño vino De cualquier manera, aquellas empresas que pudieronde la mano de malas aplicaciones del modelo o una entender la propuesta fueron las que equilibraronfalta de entendimiento del mismo y su aplicación. la balanza a favor de Scrum y la agilidad. No sóloPosiblemente una de las grandes fallas de Scrum sea aplicando los pasos propuestos sino generando unel hecho de parecer muy simple de aplicar debido a cambio interno en la estructura de la empresa, nosu simpleza conceptual; concepto que resulta simple esperando que la jerarquía de la misma tome lase incluso elegante pero que encierra grandes decisiones sino dejando a aquellos que estaban máscomplicaciones debido a la cantidad de ideas inmiscuidos en los proyectos, que decidieran cuálesy conceptos que se deben manejar, así como eran los pasos a seguir; dejando que los grupos deparadigmas y prejuicios culturales, de gestión y desarrollo se consolidaran, limaran sus asperezas y quepersonales. cada miembro no fuera considerado un mero recurso, como una máquina más plausible de ser intercambiadaUn claro ejemplo ha sido, en muchas empresas, la en cualquier momento a otro equipo creyendo que laadopción de los nombres propuestos por Scrum matemática de la gestión solucionaría el problemapara las diferentes ceremonias que éste presenta, humano; educando al cliente para que entienda que elpero la ejecución de la gestión del modo tradicional, proyecto de software no es una mera pieza compradajerarquizado, con gestiones realizadas desde las en un supermercado y que para que el mismo tengacúpulas, impidiendo que los equipos se estabilicen, éxito él también deberá participar con sus ideas, conentre otros factores de fracaso comunes. Por lo su visto bueno, con sugerencias y que su trabajo no setanto, estas empresas terminarían cambiando reduce a firmar cheques. 25
  26. 26. 26 LOS PASOS ROLES EN DE SCRUM SCRUM Posiblemente lo más atractivo de Scrum es, como Normalmente, en el desarrollo de software los decíamos anteriormente (y esto se suele aplicar en equipos de desarrollo suelen estar conformados todos los modelos ágiles), que no se dictaminan por personas con diferentes especialidades, y cada reglas metodológicas estrictas para seguir, sino especialidad actúa sobre el proyecto en determinado que se pretende o se otorgan ciertas referencias momento. Por ejemplo, los arquitectos podrán para que al aplicar el modelo, se opte por la mejor plantear el diseño del producto en el inicio del solución. Posiblemente este es el punto más difícil mismo, los desarrolladores crearán el código luego, de concebir, ya que al no contar con un manual lleno y los encargados de realizar las pruebas sobre el de lineamientos rápidamente se cae en las malas producto y detectar errores al final. Esta delimitación prácticas, olvidando incluso los pasos mínimos y por áreas, especialidades y procesos se puede necesarios para llevar adelante el modelo. ver más claramente en modelos de procesos de desarrollo llamados en cascada. Una diferencia fundamental en Scrum es que no se realiza una distinción a nivel granular, limitándose a sólo tres roles: el Product Owner (o dueño del producto), el Scrum Master y el equipo propiamente dicho.
  27. 27. Proceso de desarrollo de software en cascada.Este proceso es comúnmente utilizado enmetodologías orientadas al control.EL PRODUCT EL SCRUMOWNER MASTEREl dueño del producto o Product Owner es el El Scrum Master es una pieza fundamental dentrorepresentante del producto y el conocimiento de de Scrum. Su principal labor es la de convertirse enqué es lo que dicho producto pretende hacer, por lo un facilitador para el equipo, intentando removertanto, este rol está encargado de velar por el valor obstáculos del camino que impidan el normalque ese producto generará, sabiendo qué partes del avance del desarrollo del producto.mismo pueden o no producir mayores beneficios siéste viera la luz. Comúnmente suelen surgir en el proceso de desarrollo problemas de comunicación entreNormalmente, se asocia a esta figura con el cliente en el equipo y el Product Owner, o la estructurasí mismo, pero es posible contar con la ayuda de otra empresarial y el equipo, por lo que el Scrum Masterpersona que actúe en nombre de él y se responsabilice podrá interceder para que el proceso productivode las decisiones tomadas a nivel de producto. siga un flujo normal.El Product Owner podrá, por ejemplo, elegir Por el contrario, el Scrum Master no es un líderfuncionalidades a quitar, o nuevas a añadir dentro de proyectos o gestor del mismo, rol que suele serde la lista de funcionalidades para ese producto. confundido fácilmente cuando este modelo es malEste tipo de decisiones pueden ser tomadas en base aplicado, por lo tanto, el Scrum Master no tienea un mercado variable, donde lo pensado para un permitido decidir sobre cómo realizar el producto,producto ya no sea válido con el correr del tiempo qué miembro del equipo hará determinada funcionalidad, realización de estimaciones, entre otras funciones. 27
  28. 28. 28 LOS PASOS DE EL EQUIPO SCRUM Por último y uno de los más importantes es el Por último, en Scrum contamos con algunos equipo de desarrollo. Decimos que es uno de los mecanismos que nos garantizarán la obtención de más importantes debido a que es éste el que se cierto ritmo en el proceso productivo. Este ritmo no encargará de producir el producto, y sólo éste sabe se reduce sólo a la creación de código sino también cuál será la mejor forma de hacerlo así como cuánto a las estimaciones de tiempo, las interacciones con tiempo tomará. Esto quiere decir, por un lado, el equipo y con el cliente. que un equipo Scrum deberá estar formado por todas las personas que sean necesarias para poder Todo proyecto de Scrum nace con una lista de tareas crear este producto, las cuales deberán trabajar a desarrollar que representan el producto en su conjuntamente, tomando decisiones, eligiendo totalidad. Esta lista es comúnmente llamada Product arquitecturas, probando herramientas, analizando el Backlog. Además de tener la lista de tareas, esta código y un largo etcétera. debe estar priorizada en base a las necesidades del cliente, por lo que esta tarea de priorización suele Aquí es donde encontramos una diferencia ser realizada por el Product Owner. fundamental y funcional sobre otras formas de gestión, ya que tanto arquitectos, desarrolladores, Con nuestro Product Backlog completo, esto es, testers, diseñadores y demás, no esperan su turno priorizado y estimado, iniciamos una ventana para actuar y poner en práctica sus conocimientos de desarrollo que suele durar entre dos a sobre el producto, sino que trabajan de forma cuatro semanas – el tiempo que elijamos será sinérgica entre ellos. Así, mientras el desarrollador una constante, por lo que es importante elegir escribe las líneas de código para una funcionalidad, correctamente. Esta ventana de tiempo recibe el el tester escribe casos de pruebas para la misma, nombre de Sprint y es un momento donde el quipo, el arquitecto plantea mejores formas de manejar seleccionando una cantidad de ítems del Product los flujos de información y el gestor de bases de Backlog se pondrá en la tarea de crearlos. Por lo datos optimiza consultas. De esta forma todos tanto, es vital que durante este tiempo el equipo no tienen noción del proyecto como una unidad y la sea perturbado ya que su tarea es la de realizar las responsabilidad de su correcta finalización recae piezas elegidas para esta iteración. sobre todos. Durante el tiempo que dure el Sprint, el equipo tendrá una reunión diaria, sólo entre ellos y el Scrum
  29. 29. El proceso de Scrum resulta simple, peroencierra en sí mismo una demanda deprofesionalismo y prácticas de ingeniería que nomuchos están dispuestos a llevar adelante.Master si fuese necesario, donde se abordarán, entonces, nos darán una oportunidad para poder hacerpor cada integrante, tres temas. Cada uno de los un viraje de timón sobre el proyecto y de esta formaintegrantes deberá contestar a las preguntas: - ¿Qué alcanzar un producto que efectivamente genere algúnhice ayer? ¿Qué haré hoy? ¿Existe algún impedimento valor para el cliente.que no me permita trabajar?Con estas preguntas en la mesa, todo el equipo RESUMENpuede saber cuál es el estado de cada uno delos integrantes del mismo y así poder solucionar Lo que hemos visto aquí es sólo la punta de Scrumproblemas o colaborar en determinadas situaciones. como forma ágil de gestión. Como podemos notar,Debemos recordar que la responsabilidad del queda mucho recorrido, tanto a nivel de la aplicaciónproducto recae sobre todos sus miembros, por lo del modelo, como de la interacción entre el clienteque el mantener una comunicación fluida y clara es y el proveedor del servicio. Y es aquí donde se vende vital importancia. las fallas en la aplicación del modelo en la vida real, ya que muchas veces los que lo llevan a la prácticaEl último paso se lleva a cabo cuando el Sprint finaliza, suelen quedarse con la historia corta sin ahondar enesto es, al finalizar las dos o cuatro semanas de los detalles más importantes. De cualquier manera,producción. En este momento es cuando se requiere las formas ágiles de gestión ya han podido torcermayor soporte del Product Owner, ya que el objetivo la media de desconfianza y se han probado comoserá mostrarle lo que se ha producido en base a los modelos válidos y útiles, por lo que se ha dejado deítems por los cuales el equipo se comprometió al inicio lado la experimentación para formar parte de unadel Sprint. En este punto, el Product Owner podrá realidad en las empresas de desarrollo de software.validar o no cada uno de los elementos presentados,pero más importante será que en este momento se En siguientes artículos profundizaremos más en estapodrá saber si lo producido coincide con las ideas práctica, detallando cada uno de los artefactos, asíoriginales o con las demandas del mercado. Si tenemos como las responsabilidades y prácticas que deberáen cuenta que el mercado fluctúa y las necesidades cumplir cada miembro del proyecto. Finalmente,del mismo cambian, puede ser que en este punto el aprenderemos sobre las herramientas de gestión queproducto deba tomar otro rumbo. Estas iteraciones nos recomienda Scrum y cómo podemos saber delcortas y contactos con el cliente de forma seguida, estado y evolución del proyecto. 29
  30. 30. 30 TESTING DE APLICACIONES No importa la cantidad de tiempo COMENZANDO que se invierte en el diseño de una aplicación Android, o incluso Al momento de crear un proyecto qué tan cuidadosos somos en la Android podemos crear el Proyecto programación, los errores son Android que realice el Testing. Pero inevitables y los errores aparecerán. en este caso, vamos a trabajar En esta nota, queremos ayudar a sobre un Proyecto Android ya todos los lectores de Pixels&Code creado anteriormente, y le vamos a conseguir rápidamente tener a crear su Proyecto de Testing algunos test de unidad, y luego asociado. Usaremos el «Hola Mundo presentaremos un framework Android», aquel que realizamos la para testear de forma automática primera vez que instalamos el Kit de la interfaz de usuario, llamado Desarrollo de Android. Para quienes Robotium. quieran tener ya un proyecto «Hola Mundo Android» andando de forma súper rápida (sin usar el wizard de Eclipse), en este link pueden descargar un «Hello Pixel&Code «: http://pixelscode.com/downloads/ HelloPixelAndCode.zip
  31. 31. Mariano Salvetti mariano.salvetti@pixelscode.comCREANDO ELPROYECTODE TESTINGEl testing de una aplicación Androides también una aplicación Android.El wizard de Eclipse para un «NuevoProyecto Android de Test» nos creaun proyecto de testing y el frameworknecesario, al mismo tiempo. Veamoscómo hacer esto:1- En Eclipse, vamos a: New > Project> Android > Android Test Project c- Select Build Target: Seleccionamos2- En la ventana del Wizard, le la plataforma mínima de la aplicación,ingresamos los siguientes valores: en este caso Android 1.6 o superior;a- Project clic en Finish.Name: “HelloPixelAndCodeTest”, clicen Next. 3- Vemos cómo el wizard nos tomab- Select TestTarget: seleccionamos automáticamente el Application name“An existing Android project”, y luego (HelloPixelAndCodeTest) y el packageseleccionamos “HelloPixelAndCode” name, todo reflejado en el nuevode la lista de proyectos en nuestro proyecto que aparece en nuestroWorkspace; clic en Next. Package Explorer. 31
  32. 32. 32 CREANDO LA CLASE CON EL CASO DE TEST Ahora ya tenemos todos los archivos nombre de la Actividad a testear. y directorios que necesitamos para c- Sin cambiar ningún otro valor, crear y ejecutar una aplicación de damos clic en Finish. testing, a excepción de la clase 3- Ahora, ya tenemos el archivo que contiene los tests (la clase de MiPrimerTest.java en el proyecto, casos de prueba). Vamos a crear que es una clase que extiende a dicha clase Java que contenga el la clase para Testear Actividades, código que testea la Actividad y que llamada ActivityInstrumentationTestC extienda una de las clases de Test ase2<T> que trae Android, especialmente diseñada para Actividades. Nuestra 4- Abrimos el archivo MiPrimerTest. clase va a contener la definición de java y veremos este código: cuatro métodos, de los cuales luego explicaremos su función. package com.msalvetti.pixelandcode. Con esto en mente, creamos la clase: helloworld.test; 1- En Eclipse, realizamos «clic import android.test. derecho» sobre el paquete ActivityInstrumentationTestCase2; «com.msalvetti.pixelandcode. helloworld.test» del proyecto public class MiPrimerTest extends «HelloPixelAndCodeTest» : New > ActivityInstrumentationTestCase2<H Class elloPixelAndCodeActivity> { } 2- En la ventana del Wizard, le ActivityInstrumentationTestCase2 ingresamos los siguientes valores: nos permite realizar testing funcional a- Name: “MiPrimerTest”. para una sola Activity. También se b- Superclass:”android.test. puede obtener la Activity inyectada que ActivityInstrumentationTestCase2 se está probando, llamando al método <HelloPixelAndCodeActivity> la getActivity(). Y como la actividad se superclase está parametrizada por el pone en marcha antes de cada test,
  33. 33. nos permite ver cómo la interfaz de antes de llamar a cada método de referencia al objeto no es nula, esusuario está siendo probada. test, es por eso que inicializamos decir, si se inicializa correctamente.5- Agregamos el constructor y el las variables y preparamos elmétodo setUp() a la clase, y luego entorno de prueba. Para este caso, 9- Ahora, el método que valida eltres variables de clase necesarias, inicializamos la aplicación Android texto:que se muestran a continuación: a testear, recuperamos el texto que public void testText() {public MiPrimerTest() { se muestra en pantalla y el texto que assertEquals(resourceString,(String)super(“com.msalvetti.pixelandcode. está en los archivos de recursos. mView.getText());helloworld”,HelloPixelAndCodeActivi }ty.class); 7 - En estos momentos, es necesario Este método testText() llamará a} que importemos lo que nos pide un método Assert de JUnit paraprotected void setUp() throws Eclipse (el TextView y la Actividad comprobar si el TextView se muestraException { HelloPixelAndCodeActivity). con el texto esperado.super.setUp(); Para este ejemplo, la pruebaactividadTestear = this.getActivity(); 8- Ahora, agregamos un método que espera que el TextView estémView = (TextView) actividadTestear. testea las precondiciones: mostrando el recurso (la String)findViewById(com.msalvetti. public void testPrecondiciones() { // que se declaró originalmente en lapixelandcode.helloworld.R.id. se ejecuta una sola vez este metodo. aplicación a testear. La llamada atextTitulo); assertNotNull(mView); assertEquals(String, String) compararesourceString = actividadTestear. } el valor esperado, el recursogetString(com.msalvetti. Aunque una prueba de precondiciones String, con el texto mostrado porpixelandcode.helloworld.R.string. puede comprobar diferentes el TextView, obtenido a partir delhello); condiciones, en esta aplicación TextView. El test tiene éxito sólo si} sólo necesitamos comprobar si la los textos coinciden.private HelloPixelAndCodeActivity aplicación sometida a prueba seactividadTestear; inicializa adecuadamente y si existe 10- En este link pueden descargar elprivate TextView mView; el TextView. Para esto, se llama al código fuente de este proyecto paraprivate String resourceString; método heredado assertNotNull(), testear: http://pixelscode.com/ pasando una referencia al TextView. downloads/HelloPixelAndCodeTest_6 - El método setUp() se ejecuta La prueba tiene éxito sólo si la simple.zip 33
  34. 34. 34 EJECUTANDO ROBOTIUM, EL CASO TEST DE TEST AUTOMÁTICO DE INTERFAZ En el Package Explorer hacemos Robotium es un framework creado clic en el proyecto de testing para implementar test automáticos HelloPixelAndCodeTest y de aplicaciones Android. Con esta seleccionamos Run As> Android herramienta se puede testear JUnit Test, para que a continuación cualquier tipo de aplicación Eclipse inicie la aplicación de visual como Activity o Dialogs. testing y la aplicación sometida Comparándolo con el mundo del a prueba. Luego, el framework de desarrollo web, se podría decir que pruebas ejecuta los tests y reporta Robotium es el Selenium de Android. los resultados a la vista JUnit de La dinámica de trabajo con este Eclipse, que muestra los resultados framework es la programación de de las pruebas en un panel superior, acciones que simulen al usuario. Por con un resumen de los tests que se ejemplo, se puede realizar la acción ejecutaron, y en un panel inferior de realizar clic en un texto específico, presenta los rastros de los tests que ingresar valores en una caja de texto fallaron. En este caso, los tests se concreta o buscar un texto en una han ejecutado correctamente, por lo pantalla. Realizando varias de estas que no hay ninguna falla reportada acciones se puede comprobar si existe en la vista inferior. Ya estamos un texto, mediante un Assert por familiarizados con el proyecto ejemplo, y de esta forma validar si la de testing, continuemos con la aplicación funciona bien y pasa las automatización de pruebas. pruebas.
  35. 35. Nuestra aplicación a probar seráampliada; modificaremos la únicaActivity para que sea una simplecalculadora. Ingreso dos valores, y alhacer clic en ‹Multiplicar› se mostraráel resultado de multiplicarlos entre sí.Por simplicidad se deja este ejerciciopara el lector, y queda disponibleel proyecto en el siguiente link:http://pixelscode.com/downloads/HelloPixelAndCode_Calculadora.zip. >Build path->Configure Build Path • Abrimos el archivoAsí que ahora, vamos a probar esta y en Properties, clic en la pestaña MiPrimerTestAutomatico.java ymini-calculadora. Libraries, para agregar el jar de veremos este código: Robotium, como se muestra en laPara usar Robotium en un proyecto de siguiente imagen: package com.msalvetti.testing, realizamos estos pasos: pixelandcode.helloworld.test; • Dentro de nuestro proyecto de test,• Descargar el archivo robotium- creamos una nueva clase con un test import android.test.solo-3-1.jar que contiene el de ejemplo: New->Class, derivamos ActivityInstrumentationTestCase2;framework desde: http://code.google. esta clase de ActivityInstrumentatiocom/p/robotium/ nTestCase2 , como se muestra en la public class MiPrimerTestAutomtico captura de pantalla: extends ActivityInstrumentationTestCSerá necesario que tengamos unproyecto Android con la aplicación quedeseamos testear, y como en nuestrocaso, ya creado un proyecto de TestAndroid (si no, crearlo como vimosanteriormente: File->New->Project->Android->Android Test Project).• Necesitamos una referencia aRobotium desde nuestro proyecto.Para eso, vamos a agregar el archivojar: clic derecho en el proyecto- 35
  36. 36. 36 ase2<HelloPixelAndCodeActivity> { nuestro caso de test, vamos a probar } el contenido del formulario y su • Los métodos tearDown() y el funcionalidad, realizando los siguientes constructor los creamos de la misma cuatro pasos: forma que en el test con JUnit. 1. Manejar los controles de entrada • Tenemos que instanciar un objeto (EditFields) de Robotium en el método setUp(), 2. Introducir los valores de nuestra esto lo realizaremos a través de la propia elección clase “Solo” del Framework. Para eso agregamos la siguiente variable 3. El acceso y clic al botón Multiplicar de clase “Solo” a nivel de clase y 4. Poner valores para verificar el modificamos el método setUp() así: resultado de la multiplicación, en el private Solo solo; //la instancia para campo de resultado. trabajar con el Robotium • ¿Y cómo usamos la variable privada protected void setUp() throws “Solo”, dentro de nuestro Test Case? Exception { Fácil, acá tenemos unos ejemplos de super.setUp(); sentencias de test, con Robotium: solo = new Solo(getInstrumentation(), getActivity()); solo.sendKey(solo.MENU); } solo.clickOnText(“Nuevo”); La clase “Solo” se utiliza para hacer las pruebas de instrumentación Assert.assertTrue(solo. más fácil. Es compatible con los searchText(“Crear nuevo archivo”)); casos de prueba que se extienden sobre múltiples actividades. Todo • Ahora, en nuestro test, el primer es manejado automáticamente por método que ingresa valores en las Robotium-Solo, por eso tenemos cajas de texto, las limpia, reingresa que tener una instancia por test, e valores y luego realiza clic en el botón: inicializarla al comenzar las pruebas, public void testIngresoTexto() { en el método setUp(). solo.enterText(0, “10”); Recordemos que, con este framework, solo.enterText(1, “20”); los casos de prueba están escritos solo.clickOnButton(“Multiplicar”); desde la perspectiva del usuario. En assertTrue(solo.searchText(“200”)); }
  37. 37. • Ahora, vemos un método de pruebamás completo:public void testMasCompleto() {float primerNumero = 10;float segundoNumero = 20;float resultado = primerNumero *segundoNumero;EditText FirsteditText = (EditText)solo.getView(R.id.EditText01);solo.enterText(FirsteditText, String.valueOf(primerNumero));EditText SecondeditText = (EditText)solo.getView(R.id.EditText02); CONCLUSIONESsolo.enterText(SecondeditText,String.valueOf(segundoNumero)); de los EditFields , y realizará clic Android nos ofrece un frameworksolo.clickOnButton(«Multiplicar»); en el botón Multiplicar. Al terminar muy poderoso y fácil de usarassertTrue(solo.searchText(String. la ejecución, se mostrará la barra que está bien integrado con lasvalueOf(resultado))); verde que muestra la ejecución herramientas de desarrollo que nosTextView outputField = (TextView) exitosa. descargamos cuando comenzamossolo.getView(R.id.TextView01); a desarrollar.ArrayList currentTextViews = solo.ge En este link pueden descargar eltCurrentTextViews(outputField); código fuente de este proyecto Cómo realizar testing es una parteassertFalse(currentTextViews. para testear automáticamente, importante de cualquier desarrollo;isEmpty()); utilizando JUnit y Robotium: http:// en esta nota realizamos unaTextView salida = (TextView) pixelscode.com/downloads/ introducción al testing con JUnitcurrentTextViews.get(0); HelloPixelAndCodeTest_completo.zip y les ayudamos con el puntapiéassertEquals(String. inicial, de forma rápida, para luegovalueOf(resultado), salida.getText(). El principal problema que nos presentar una interesante forma detoString()); podemos encontrar es con la automatización de casos de test, modificación de la interface de la mediante JUnit y Robotium.Ejecutamos con clic derecho en el aplicación, algo habitual cuandoproyecto, Run As>Android JUnit se está desarrollando. Si ocurriese Con este framework podemosTest. Si las cosas salen bien, el alguna modificación en algún texto, automatizar nuestros tests yEmulador carga la aplicación, y los test afectados se deberían cambiar ejecutarlos diariamente a medidaentrará automáticamente los valores modificándolos a los nuevos textos. que vamos desarrollando. 37
  38. 38. 38 LAS LEYES DE PROGRAMACIÓN DE TAYLOR (PARTE II) Este mes continuamos por la senda iniciada en la edición anterior, tomando las leyes de Taylor como faro. El Sistema Operativo UNIX y sus herederos ofrecen a sus usuarios una importante cantidad de herramientas, que en mano de un programador que tenga un conocimiento mínimo de cómo trabajar con ellas se vuelven extremadamente poderosas, permitiendo hacer más en menos tiempo. En esta ocasión nos vamos a centrar en un programita muy interesante: “sed” (stream editor). Sed implementa un mini-lenguaje de programación, que permite automatizar transformaciones a un archivo de texto, de forma similar a como ya vimos con “tr”. Este último está pensado para realizar sustituciones sencillas de un caracter por otro, mediante una serie de reglas que se le establecen. En cambio, sed puede realizar acciones mucho más complejas, gracias a su soporte de expresiones regulares. Veamos cómo hacerlo.
  39. 39. Juan Gutmannjuan.gutmann@pixelscode.com 39
  40. 40. 40 TAYLOR, SIEMPRE USOS SIMPLES PRESENTE DE SED Pero primero, recordemos el enunciado del misterioso La mayoría de los casos en los que suele utilizarse Taylor, que como ya mencionamos en la primera sed son sencillos, y por lo tanto pueden entenderse parte, deben leerse de abajo hacia arriba, es decir, a simple vista. No obstante, este minilenguaje es lo en orden de complejidad decreciente. suficientemente complejo y poderoso como para que un script más largo y complicado sea lo suficientemente “Nunca programe en ‘C’ si puede hacerlo en ‘awk’; críptico para que sólo un usuario avanzado del mismo Nunca lo haga en ‘awk’ si ‘sed’ puede manejarlo; pueda interpretarlo rápidamente. Para colmo, la Nunca use ‘sed’ cuando ‘tr’ puede hacer el trabajo; documentación más a mano (las páginas de man) no Nunca invoque ‘tr’ cuando ‘cat’ sea suficiente; es de lo más accesible y completa. Por lo general, en Evite usar ‘cat’ siempre que sea posible.” el trabajo con sed, como dijo un gran poeta, “se hace camino al andar”. En nuestro “episodio anterior” aprendimos las distintas posibilidades que nos ofrecen cat y tr, El uso más común de sed es equivalente a la además de cubrir otras herramientas que permiten función “Buscar y Reemplazar” que ofrecen muchos automatizar el tratamiento de textos, como cut. editores de texto. La diferencia es que con ellos Siguiendo este orden, entonces, le toca el turno a hay que hacerlo en forma interactiva, mientras que sed. Escrito originalmente por Lee McMahon durante sed (como casi todo este tipo de herramientas de la década del 70, cuando se desempeñaba en los consola en UNIX) está pensado para operar en forma Bell Labs, cuna del UNIX original, ha sido portado a automatizada. Para hacer un “search & replace” de una infinidad de plataformas, aunque sigue siendo sed, entonces, escribimos: un componente central de los clones de UNIX, como GNU/Linux y *BSD. Inclusive, se dice que el sed s/cadena_a_reemplazar/nueva_cadena/ gran Larry Wall, experto en sed, se inspiró en esta archivo_original.txt > archivo_nuevo.txt herramienta y en awk -que veremos en nuestra próxima entrega- al crear Perl, un lenguaje de La “/” (barra, o en inglés “slash”), que se emplea como scripting extremadamente poderoso y muy popular delimitador, es solamente una convención, ya que en nuestros tiempos, particularmente entre los sed toma al caracter que sigue inmediatamente a la sysadmins. “s” (comando que ordena el reemplazo) como tal. Si se pretende reemplazar una cadena que contenga la
  41. 41. barra (como una ruta de archivos en UNIX), es buena Entre los diversos caracteres especiales de lasidea optar por otro separador, aunque muchos optan expresiones, como aquellos empleados para especificarpor usar el caracter de escape “”. Otras elecciones las expresiones regulares (paréntesis, corchetes,comunes como separador son el underscore “_”, el pipe asterisco, punto, etc.) se destaca el ampersand “&”,“|”, o los dos puntos “:”. que representa la cadena encontrada en base a la expresión de búsqueda. Esto puede ser muy útil. EsLa expresión del ejemplo anterior, tal como fue escrita, fácil reemplazar “hola” por “_hola_” cuando conocemossólo reemplaza la primera ocurrencia de la cadena a exactamente la palabra que estamos buscando, peroreemplazar especificada. Si se quiere sustituir todas las ¿qué ocurre cuando desconocemos la totalidad de laocurrencias, debe indicarse que la orden “s” es global, cadena a procesar? Veamos:agregando luego de la cadena nueva un delimitador y laletra “g”, de esta manera: echo ‹agrego underscores› | sed ‹s/[a-z]*/_&_/g› _agrego_ _underscores_sed ‘s/cadena_a_reemplazar/nueva_cadena/g’archivo_original.txt > archivo_nuevo.txt Si alguno de los caracteres especiales que se emplean para especificar la expresión regular de búsqueda seAquí también encerramos la expresión entre comillas encuentra dentro de la cadena a matchear, debemossimples, algo imprescindible si es que la cadena “escaparlo” con una contrabarra “” (backslash), comoa reemplazar o la nueva contienen caracteres se hace en muchos lenguajes emparentados con UNIXespeciales, como el espacio en blanco. Para hacer (como los scripts de shell) para que sed comprendauna prueba sin necesidad de contar con un archivo que nos estamos refiriendo literalmente a ese caracter,de texto, podemos hacerlo con el comando “echo” y y no lo intreprete como un caracter especial:un pipe, tal como vimos la vez pasada: echo ‹agrego [underscores]› | sed ‹s/[[a-echo «Hola Juan» | sed ‘s/Hola/Buen día/’ z]*]/_&_/› agrego _[underscores]_Da como resultado: Noten el uso de la contrabarra para escapar losBuen día Juan corchetes, provocando que de las dos palabras que componen el string a procesar solamente sea 41
  42. 42. 42 SED SCRIPTS modificada aquella que está encerrada entre los Podemos escribir con el editor de nuestra preferencia caracteres “[“ y “]”. un “sed script” y luego indicarle a sed con el switch -f que lea los comandos directamente de ese archivo. Ahora, si tenemos varias palabras entre corchetes, Veamos un ejemplo. Editamos un archivo que llamamos podemos recurrir al modificador global “g” para “descastellaniza.sed”, e ingresamos lo siguiente: sustituirlas a todas. Pero si quisiéramos omitir el reemplazo de la primera ocurrencia, podemos # Este script elimina los acentos y la eñe indicarle a sed que lo haga sólo de la segunda s/á/a/g ocurrencia en adelante, de esta forma: s/é/e/g s/í/i/g echo ‘[agrego] [underscores] [parcial]’ | sed ‘s/ s/ó/o/g [[a-z]*]/_&_/2g’ s/ú/u/g [agrego] _[underscores]_ _[parcial]_ s/ñ/n/g s/Á/A/g Podemos “encadenar” más de un reemplazo de s/É/E/g dos maneras. La primera es la obvia para todos los s/Í/I/g usuarios de consola: s/Ó/O/g echo “Hola Juan. Chau.” | sed “s/Hola/Buen día”/ s/Ú/U/g | sed “s/Chau/Hasta Luego/” Buen día Juan. Hasta Luego. Cada comando sed debe escribirse en una línea separada. Si deseamos ingresar comentarios, los En lugar de usar un pipe, podemos pasarle a sed prefijamos con el caracter numeral “#”. Ahora múltiples patrones, aclarándole delante de cada uno que editamos un archivo que bautizamos “prueba.txt” se trata de un juego de órdenes a través del switch -e: con el siguiente contenido: echo “Hola Juan. Chau.” | sed -e “s/Hola/Buen “En la ortografía del idioma español, se denomina día”/ -e “s/Chau/Hasta Luego/” acento diacrítico a la tilde que se emplea para Buen día Juan. Hasta Luego. distinguir significados en pares de palabras, Por supuesto, si las órdenes a encadenar son habitualmente monosílabas, de las cuales una es muchas, esto ya es poco práctico. Hay una forma regularmente tónica, mientras que la otra átona en mejor de resolverlo. el habla, marcando el acento de la tónica.”
  43. 43. Lo probamos de esta forma: drwxr-xr-x 3 root root 4096 2011-09-30 02:31 boot drwxr-xr-x 2 root root 4096 2010-12-14 21:53 cdromsed -f descastellaniza.sed prueba.txt drwxr-xr-x 19 root root 3540 2012-03-15 17:54 dev“En la ortografia del idioma espanol, se denominaacento diacritico a la tilde que se emplea para Cabe destacar que con esta línea estamos lograndodistinguir significados en pares de palabras, lo mismo que si hubiéramos escrito:habitualmente monosilabas, de las cuales una esregularmente tonica, mientras que la otra atona en ls -l / | head -n 5el habla, marcando el acento de la tonica.” Veamos otro comando de sed, “q” (quit) que nos permite obtener idéntico resultado:TRABAJANDOCON RANGOS ls -l / | sed “5 q”Una posibilidad útil es decirle a sed sobre qué líneas Esto se interpreta como “luego de procesar la quintatiene que aplicar las órdenes recibidas. Esto puede línea, termine la ejecución.”hacerse escribiendo directamente el número delínea a procesar, en el caso de que sea una sola, oespecificando un rango desde-hasta, en la forma “N,M”. OTROSProbemos esta funcionalidad en conjunción con el COMANDOSswitch -n, que le dice a sed que por defecto no envíea standard output los patrones “matcheados”, y de Hay más instrucciones útiles. La “a” de add, agregapaso aprendemos un nuevo comando (parece mentira, una línea con el texto que se le indique tras el patrónpero hasta ahora usamos solamente el comando de especificado:búsqueda “s”, o “substitute”). La instrucción “p” deprint, se usa en conjunto con el switch -n para indicar echo ‘/* Comentario de código */’ | sed ‘//*/ an’que el rango especificado sí debe imprimirse. Aquí se agrega una línea en blanco (recordemos quels -l / | sed -n “1,5 p” “n” equivale a NEWLINE) luego de cada línea quetotal 108 contenga el principio de un comentario escrito en ladrwxr-xr-x 2 root root 4096 2012-03-15 18:04 bin forma “/* ... */”. Para ello, basta con especificar el 43
  44. 44. 44 patrón del principio del comentario (/*), pero como echo ‘// Comentario de código’ | sed ‘//// c’ tanto la barra como el asterisco son meta-caracteres, es necesario escaparlos con la contrabarra “”. En Para esto mismo es también útil el comando “d” vez de agregar texto al final del patrón encontrado, (delete) que borra las líneas que coincidan con la puede insertarse texto en una línea previa usando expresión especificada: “i” (insert) en vez de “a”. Si quisiéramos agregar una línea antes y otra después del patrón, podemos sed ‘/cadena_o_expresion_regular/d’ agrupar los comandos, encerrándolos entre llaves “{“ y “}”. Claro que aquí hay que tener en cuenta algo que Es común el empleo de la orden “d” en conjunto con aclaramos antes: cada comando sed debe estar en los rangos que vimos antes. Es posible borrar las una única línea, y eso incluye tanto las llaves como los primeras 10 líneas de un archivo de esta manera: comandos agrupados en su interior. Para facilitar la escritura de este tipo de scripts sed, es conveniente sed ‘1,10d’ editarlos y grabarlos, para invocarlos posteriormente con el switch -f, como hicimos antes. ALGUNOS # Agrega líneas antes y después de un comentario EJEMPLOS //*/ { ÚTILES a n Siempre es bueno ver la aplicación de lo aprendido i en algo práctico. Aquí van algunos “one-liners” n útiles con sed. Debe tenerse en cuenta que hacen } un uso más avanzado de las expresiones regulares (un terreno complejo y fascinante por su utilidad, echo “/* Comentario de código */” | sed -f coment. que amerita una nota en sí mismo) que las aquí sed mostradas. Por ejemplo, se incluyen los meta- caracteres “^” (que representa el comienzo de una /* Comentario de código */ línea) y “$” (que representa el final de la misma). Otra posibilidad es cambiar la línea donde se encuentre Eliminar el espacio en blanco (espacios y el patrón con “c” (change) por el texto ingresado a tabuladores) al principio de una línea continuación de la orden, o ninguno si queremos sed ‘s/^[ t]*//’ eliminarlo. Para eliminar todas las líneas de comentario prefijadas con una doble barra (//) podemos usar: Ídem, pero al final de una línea:
  45. 45. sed ‘s/[ t]*$//’Ídem, pero tanto al principio como al final:sed ‘s/^[ t]*//;s/[ t]*$//’Imprimir las líneas que contengan una expresiónregular (igual que “grep”)sed -n ‘/regexp/p’Eliminar todos los tags HTML de un archivo:sed -e ‘s/<[^>]*>//g’ index.html... Y HASTAAQUÍ LLEGAMOSAunque parezca demasiada información para una solaherramienta, lo cierto es que apenas hemos logradorascar la superficie de lo que sed es capaz de hacer.Utilizando los comandos que vimos en conjunto,más otras funciones que por razones de espaciotuvimos que dejar afuera, se pueden lograr cosas muyinteresantes. Es que para cubrir sed en su totalidad,al igual que para awk (al que dedicaremos la terceraparte de esta serie) no alcanzan unas pocas páginas,e incluso hay libros enteros escritos sobre el tema,tanto digitales como en papel. Por lo tanto, dejamos enlas manos de los lectores el seguir profundizando susconocimientos. Como se dice en el ambiente UNIXERO,el mejor administrador o desarrollador es aquel queadquiere la mayoría de sus conocimientos por la vía dela práctica y la experimentación. 45
  46. 46. CHOQUE DE GIGANTES: FACEBOOK VS GOOGLE+WEB 2.0 YEL NUEVOCIBERESPACIOEn los últimos tiempos se ha producido un notablecambio en el ciberespacio. A diferencia de losprimeros tiempos de la web, ha comenzado a gestarseun fenómeno de masas al que suele referirse comoWeb 2.0. No más páginas que brinden información oservicios a usuarios pasivos, sino una transición quese ha dado de aplicaciones comunes y tradicionaleshacia utilidades que funcionan a través de internet,específicamente la web, y todas ellas enfocadas alusuario final. Se trata de aplicaciones que generencolaboración y de servicios que reemplacen lasaplicaciones de escritorio dando en todos los casosun papel activo a ese mismo usuario final.Podemos mencionar como algunos ejemplos losblogs, las wikis (especialmente la más conocida delmundo, Wikipedia) y una vasta gama de sitios en loscuales la presencia del usuario y su feedback es yserán esenciales. Y de todas las clases de aplicacionesque podemos referir, probablemente, las que másencarnan este nuevo espíritu de la red son las llamadasredes sociales. YouTube, Twitter, Orkut: todas ellas senutren de los usuarios y son ellos los que brindan elcontenido a la red, no la red la que se los provee a ellosen su tradicional rol de consumidores pasivos de lainformación. Subiendo el video que realizó, comentandoun suceso o actualizando su perfil, el usuario es elcreador de su propio rostro de cara al mundo.
  47. 47. Gabriel Gaitano Orniagabriel.gaitanoornia@pixelscode.com 47
  48. 48. 48 Es aquí cuando mencionamos al fin a la red social más conocida, Facebook. En ella se resume la web de hecho para muchos usuarios, y desde sus humildes orígenes a la fecha ha crecido exponencialmente en cantidad de usuarios y, sobre todo, en participación de los mismos. Y eso es la clave de su éxito, más allá de sus cualidades técnicas, ya que para toda red social la participación de sus usuarios es fundamental, la sangre que le da vida. Porque, ¿qué es una red social sin tráfico de información entre usuarios, sean estas opiniones, fotos, videos u otros recursos? La experiencia y la lógica nos dicen que nada en absoluto. Por eso, Facebook creció a pesar de que muchos usuarios se quejaban (y lo siguen haciendo) sobre aspectos fallidos como ser la interfaz, la privacidad, los frecuentes cambios de apariencia, etc. Simplemente “hay que estar ahí” a fin de mantener el contacto, y ese efecto de masa crítica constituye su bien más preciado y, por cierto, más envidiado por el resto de los jugadores de la red.

×