Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

martes, 23 de diciembre de 2008

Precaución, amigo conductor...

... tu enemigo es la velocidad... Vale, vale, ya me callo. Se vaya a liar a llover justo en Nochebuena y la liemos :) . El caso es que el título viene muy al caso para lo que quiero contaros hoy.


Aprovechaba un momento de solaz, días atrás, para echar un vistazo a un MSDN Magazine que me había pasado un amigo, y veía en el mismo cómo para la próxima versión de Visual Studio, que llegará a nuestras manos allá por 2010, trae “de serie” algunas de las herramientas y librerías con las que Microsoft nos está dejando jugar a través de Microsoft Research y sus proyectos beta. Entre otras, podíamos ver hace unos días y pocas entradas atrás, cómo Pex ya permite su integración con VS2008 y VS2010, y a esto podemos sumarle un sistema de depuración y pruebas en programación concurrente en el que, imagino, bastante tendrá que decirnos el equipo que está desarrollando CHESS, y que permite incluso depurar las aplicaciones sabiendo en cada momento sobre qué núcleo está corriendo cada hilo de las mismas, tener en cuenta la ocupación del mismo y comprobar todo tipo de condiciones de carrera para evitar que lleguen a producirse, pongamos por ejemplo, interbloqueos durante su ejecución.


A lo que iba (que ya comienzo a divagar) es que VS2010 dará un soporte importante a la programación multihilo, como venía diciendo, incorporando herramientas de interés para los desarrolladores de este tipo de sistemas. Y al hilo de esto (chiste malo :P), he de comentar que estuve echando un vistazo a la librería Accelerator, que Microsoft lanzó hace algo más de un año, aunque sigue en desarrollo y, obviamente, en beta. Su interés fundamental es permitir el desarrollo de aplicaciones en .NET que sean capaces de aprovechar el potencial de cálculo de las modernas GPUs (¿recordáis hace unos meses las noticias sobre ruptura de cifrados a través de fuerza utilizando estos dispositivos?). La verdad es que su uso es bastante simple, como todo lo que nos llega desde Redmond, y básicamente se trata de incluir una referencia a la librería de Accelerator en nuestro proyecto de Visual Studio y empezar a trabajar con ella. Eso sí, la tarjeta gráfica que usemos deberá ser compatible con DirectX9 y tener soporte para Pixel Shader 2.0, como mínimo. Esto es así porque las operaciones parelas con datos a código optimizado para la GPU y llamadas a la API correspondiente, permitiendo así una ejecución mucho más rápida de dichos cálculos. La librería Accelerator (en concreto, el espacio de nombres Microsoft.Research.DataParallelArrays) incorpora varios tipos de datos nuevos, como son el FloatParallelArray, IntParallelArray o BoolParallelArray, con operadores aritméticos sobrecargados para los mismos.


Obviamente, el uso más indicado para esta librería es, aparte de los cálculos relacionados con temas gráficos como el renderizado de imágenes u operaciones con objetos en 3D, el de llevar a cabo operaciones complejas que requieran cálculos matemáticos exhaustivos o muy precisos a una velocidad considerable. De este modo, la GPU puede constituir un soporte muy eficiente para la CPU, sea esta última multinúcleo o no.


Para finalizar, ya que trato el tema de la CPU, y volviendo al comienzo del artículo, me ha llamado la atención el publicado por Rodrigo Corral bajo el título ¡La broma ha terminado!, en el que reflexiona sobre el fin de la Ley de Moore, y cómo a partir de ahora los desarrolladores deberemos preocuparnos un poco más sobre cómo se ejecutan nuestras aplicaciones en el hardware disponible. De ahí que Microsoft y compañía se preocupen tanto de proporcionarnos ahora este tipo de herramientas, vengan incluidas en los frameworks, sean librerías externas, o lleguen de la mano de nuestro IDE preferido.

Disponibilidad, nula

La seguridad informática es una disciplina que se dedica a proteger la confidencialidad, integridad y disponibilidad de la información. Para conseguir todo esto, habitualmente se realizan inversiones de mayor o menor índole en la empresa y se contrata a empresas dedicadas a dar soporte y auditar los procesos de la compañía. Pero pocas veces se forma adecuadamente al personal propio, o se le dan unas mínimas directrices a seguir cuando se produce algún problema y ha de seguirse un protocolo que minimice las pérdidas de información y, por ende, pecuniarias.
La semana pasada me encontré con ante un caso así, en el que los servicios on-line que ofrece una conocida Caja del sur de España permanecían indisponibles durante tres días consecutivos. Y lo más grave no fue esto, sino que hacían caso omiso a los clientes cuando daban aviso de la incidencia. Pero permitidme que os cuente la historia completa, desde la perspectiva que pude vivir en primera persona.
Esta “Caja del sur”, llamémosla X, ofrece como tantas otras entidades bancarias diversos servicios a través de Internet, desde la consulta de saldo y movimientos de las cuentas y tarjetas que poseamos en la misma, como la realización de transferencias, gestión de recibos, etc. Hasta ahí, lo normal. El pasado martes (hace, por tanto, una semana exacta) intenté consultar los movimientos de mi cuenta, para ver si había sido adeudada una cantidad determinada. Sin embargo, el acceso no era posible. Tras intentar acceder a la zona de la web en la que hacer login, ésta quedaba totalmente en blanco sin aparecer el formulario de autenticación. Lo dejé estar, porque tampoco me urgía, y terminé por olvidar el asunto.


Un día después, mi pareja me comentaba que no podía acceder a su cuenta, precisamente por obtener el mismo problema. Era tarde, por lo que únicamente les escribió un correo electrónico indicando el problema, pero cuál no sería la sorpresa al constatar, un día después, que la respuesta del servicio de asistencia de la Caja era, básicamente, el siguiente: “A nosotros nos funciona. Limpie las cookies y si no se soluciona el problema, pruebe a reinstalar su Internet Explorer”. Mi pareja, comprensiblemente indignada, les indicó que el problema se reproducía con Firefox y, de paso, también con Explorer. También que usamos a diario CCleaner y el ordenador está limpio, de una sesión a otra, como una patena.





Vaya, con la iglesia hemos topado. ¿Qué YO reinstale mi navegador? ¿Por un problema que se reproduce en tres ordenadores distintos, con tres navegadores distintos en cada uno de ellos (ya puestos, incluí a Chrome en el juego ya que, no os comenté, Google lo sacó de beta la semana pasada), con distintas conexiones a Internet? Molesto por la respuesta que ofrecía la entidad, decidí echar un vistazo a ver qué podía estar ocurriendo. Lo primero fue constatar que las cookies se descargaban correctamente, así como el certificado digital que daba acceso a sus servicios. Hasta ahí, todo correcto. Descargo los ficheros Javascript asociados a la página sin ningún problema, y les echo un vistazo. Vaya, contienen código encargado de la validación del usuario y el control de las cookies. Bueno, vamos a depurar. Accedo a la página con Chrome, habilitando el inspector de recursos. Et voilà: error en la carga de uno de ellos, acceso.js. Ay amiguitos, que estáis usando una variable sin declararla. Habilito el depurador Javascript, y comienzo la ejecución paso a paso del código. Para entonces ya había visto que el archivo contenía una rutina de inicialización consistente, básicamente, en llamar a tres funciones:


recogida_parametros();
analytics();
entrada();


El error está dentro del código de analytics(), donde han incluido funciones de seguimiento de Google. Al depurar ocurría exactamente lo que preveía: se produce el error, y al tratarse de una excepción no controlada el javascript no sigue ejecutándose, lo que provoca que nunca se llame a la función entrada(), que se encarga de hacer un submit automático del formulario y cargar el de login que, por tanto, nunca era mostrado.



Comprobado esto, escribí un correo a la entidad, explicando el proceso seguido, y con varias capturas adjuntas del error. Me contestaron agradeciendo el aviso, e indicando que efectivamente el martes habían hecho cambios y mejoras en la web. Diez minutos después la página estaba nuevamente operativa, pero a su vez tres días después de dar servicio.


Lo grave de todo esto, obviamente, no estuvo en el error en sí (que también), sino en la poca disposición a comprobar lo que los clientes están informando. ¿Qué pueden hacer las empresas para asegurar la disponibilidad de los servicios si sus propios empleados no llevan a cabo correctamente su trabajo? ¿Es realmente necesario que “alguien de fuera” tenga que darles mascado un trabajo tan simple que puede ser depurado y comprobado sin ningún tipo de privilegio sobre el sistema? Mi confianza en esta entidad se ha dañado irremisiblemente, pero esto no es lo malo. Lo malo será que no la recomendaré a nadie, y posiblemente cancele mis cuentas y recomiende hacer lo mismo a mis allegados. Lo malo es que sé que esto no habrá servido de mucho y seguirán haciendo mal su trabajo. Lo peor será que, por regla general, son muchas las empresas que trabajan así. Y en el caso de los bancos, bastante respaldo gubernamental están recibiendo como para que sigan de espaldas a la gente. A sus clientes, reales o potenciales.

domingo, 21 de diciembre de 2008

La-breithe mhaith agat!

Co` latha breith sona dhut! Grattis pa fodelsedagen! Ilanga elimndandi kuwe! Hyvaa syntymapaivaa!


Ledicia no teu cumpreanos! Zorionak! Bon aniversari!


Pues eso: que feliz cumpleaños… ¡a mí! O más bien a una parte de mí, el blog de Lobosoft, que cumple un añito hoy. Bueno, esto es bastante relativo, porque lo cierto es que la idea del blog se fue conformando aproximadamente en diciembre de 2007, aunque el dominio lo tenía desde un poco antes para ver qué proyectos iba desarrollando, y luego ir dejando dándoles alguna difusión en Internet. Sin embargo, tiempo antes ya había empezado a escribir en otro blog (de temática bastante distinta a la de éste, y que a día de hoy lleva un tiempo en vía muerta), y me picaba el gusanillo de escribir algo más, pero esta vez en lo tocante a mi profesión, y en particular a dos temas que me apasionan de la misma: el desarrollo de software (al que me dedico, efectivamente) y la seguridad (que es más una afición que otra cosa, como mis más eruditos lectores en estas lides habrán podido constatar durante este tiempo). Y así nació Lobosoft, con dos artículos (uno, un comentario de un libro sobre seguridad, otro respecto a eliminar la publicidad al navegar), y comenzó a tomar fuerza conforme pasaba el tiempo.


Aunque inicialmente los temas tocados en el blog eran especialmente tecnológicos, acogiendo ocasionalmente noticias sobre tecnología, divertimentos varios sobre programación (disfruté mucho con artículos sobre metaprogramación, lenguajes esotéricos y otras infumables curiosidades informáticas algo frikis), y artículos de opinión. Sin embargo, con el paso del tiempo el blog se convirtió irremediablemente en un batiburrillo de todo lo que soy. Porque es difícil dejar de lado temas candentes, cuando duelen, si están vinculados aunque sea mínimamente a nuestro mundillo. El coltan ha sido uno de los más recientes, pero tenemos otros como el despilfarro energético o posibles mejoras que podemos aplicar a nuestro trabajo para hacerlo eficientemente, sí, pero sin malgastar recursos e intentando impactar menos en nuestro medio. También los relacionados con los derechos digitales y la ética en las relaciones interpersonales. Estoy de acuerdo en que nuestro campo de actuación, como técnicos, es brindar la mejor de las tecnologías posibles a los usuarios. Pero como usuarios que somos también, y especialmente como ciudadanos que tenemos mucho que decir aquí, debemos optar por soluciones éticamente correctas.



Entradas publicadas por mes.


Respecto a los números, la verdad es que no me quejo de Lobosoft. Sé que podría haber sido mucho más, que habría podido publicitar el blog en diversos medios, en la blogosfera, pero fui muy perro a este respecto. Escribía porque me gustaba hacerlo, y que llegase gente al blog era interesante, satisfactorio, pero no el objetivo principal. Sin embargo, he de admitir que los ataques hackers que sufrí en el verano me tocaron la fibra sensible, y pasé a blindar el blog. Flaco favor sería hablar de seguridad y tener un sistema que se demostrase así de vulnerable. Salvando esto (y un pequeño escarceo con Drupal que redundó en mayor tranquilidad veraniega, y en una bajada en el Page Rank de Google con tanto meneo en el blog), los números empezaron a casar a partir de septiembre, cuando comenzaron a remontar las visitas, y llegó algo que, por inesperado, resultó doblemente satisfactorio: llegasteis vosotros.



Visitas semanales.


Sí, vosotros. Tú, y tú, y tú. Aquellos que estáis leyendo ahora esta entrada, no por haber buscado saber quiénes os bloquearon en el Messenger, o cómo evitar la publicidad al navegar, o cómo proteger software usando un dispositivo USB, sino que estáis aquí porque queréis, libremente me seguís cada cierto tiempo, por los feeds RSS del blog, por entrar algún día a ver qué ha escrito el loco este de Miguel… Aquellos que comentáis, que calláis, pero que estáis ahí. El blog, desde aquel entonces, es mucho más rico, está más vivo, me aporta mucho más. Porque no soy yo gritando a la montaña y escuchando el eco que me devuelve. No soy yo, viniendo ocasionalmente a ser consultado y abandonado inmediatamente después (¿la prostitución de los blogs? :D), sino que lo que opino es rebatido o respaldado, vuestras opiniones me abren la mente y me hacen pensar. Ganas de saber más. De leeros, a aquellos que tenéis blog propio. Saber que estáis ahí me da fuerzas para seguir con este proyecto que, bien lo sabéis, monetariamente no dará mucho (más bien nada), pero que enriquece mucho más que cualquier otro.



Visitantes por país.


Por eso, me despido con un feliz cumpleaños… pero no a mí, como abría la entrada de hoy, sino a todos vosotros.


Muchas gracias por todo.


¡Salud!

Fin de semana tardío

Llevo un par de semanas algo alejado del blog porque, por motivos personales, no me es posible dedicarle ahora todo el tiempo que quisiera. De hecho, estimo que esto seguirá así aproximadamente dos meses, hasta que la mudanza se haga efectiva y reorganicemos un poco nuestro habitáculo y nuestra propia vida :) Sin embargo, ahora que se avecina el periodo navideño, imagino que se iniciará un pequeño lapsus en el que poder escribir y retomar el afán bloguero que tanto lució en tiempos pretéritos en Lobosoft. Tengo, además, varios proyectos y artículos a medias, así que conforme vaya cerrándolos los iré subiendo por aquí. De momento, sin embargo, y ya que no pude hacerlo así la semana pasada, os dejo con una serie de lecturas recomendadas, recomendables o, cuanto menos, interesantes. A mí me lo parecieron, a ver si os gustan.


En el blog sobre Apuntes de seguridad de la información, Javier reflexiona sobre las implicaciones que tiene el “barrido informático” que eliminó datos trascendentes de la última legislatura del Partido Popular en el Gobierno. Esta eliminación, de existir, no debió ser fortuita y, por tanto, deberían existir responsables que rindan cuentas sobre dichas acciones. Javier trata este tema eliminando aquellas hipótesis que no habrían sido posibles, hasta sacar unas interesantes conclusiones sobre lo que pudo ocurrir y, de paso, sobre el tema siempre presente, ¿qué somos los informáticos?


Si os preocupa la seguridad y las implicaciones éticas de la informática (por ejemplo, ¿por qué un Gobierno podría, impunemente, destruir información sobre sus actuaciones, que deberían ser rendidas a todos los ciudadanos o, por ejemplo, de qué manera nos vigilan), puede interesaros ver también la entrada que El Proyecto Matriz dedica al tema de la videovigilancia: Alguien nos vigila a todas horas.


Aunque no todo es malo. Personalmente guardo ciertos recelos sobre tecnologías emergentes como RFID, aunque Lonifasiko nos cuenta una buena experiencia con las mismas: su trazabilidad. Lo que demuestra que, de querer, podemos hacer buen uso de la tecnología. El caso es, ¿quieren hacerlo así las grandes corporaciones y gobiernos?


Precisamente por esto deben existir las auditorías y, un tema muy interesante, los análisis forenses. GigA nos trajo un artículo en su blog Todo es Seguro sobre metodologías y la a ISO / IEC 17025:2005 que puede aclararnos un poco qué requerimientos se aplican a laboratorios que realizan ensayos o calibraciones.


En el blog PHP Senior reflexionan sobre la orientación a objetos y los posibles perjuicios en cuanto a rendimiento en el caso de programación PHP, claro está. Si bien es cierto que la orientación a objetos y una excesiva modularización del código pueden resentir en un pequeño grado el rendimiento de nuestras aplicaciones, tampoco es cuestión de bajar a las catacumbas de la programación en ensamblador para optimizar nuestro código (algo que ya hacen bastante bien por regla general los compiladores :) ). Sin embargo, sí es cierto que hoy día es más barato el hardware que el tiempo de los programadores, como viene a contarnos Jeff Atwood en Coding Horror, por lo que es más ventajoso para la empresa un código “mantenible” que eficiente a la hora de ser ejecutado.


Y poco más, de momento. ¡Disfrutad del fin de semana o, al menos, de lo que queda del mismo! ¡Saludos!

viernes, 19 de diciembre de 2008

La marabunta furibunda (o eso dicen por ahí)

Vengo hoy con un tema candente, que ha traído cola (y seguirá trayéndola), como son las opiniones vertidas por Javier Marías, el autor genial, compañero columnista de Pérez-Reverte en cierto semanario, editor de libros singulares y preciosos en Redonda, y pésimo articulista que hace gala de aquello que critica. Y es que, señores, a Marías Internet le parece una soberana –perdónenme ustedes por la expresión– mierda. Lo dice así, y se queda tan pancho, haciendo gala de su ignorancia. “El ordenador ha vuelto a no gustarme”, dice, a lo que añade, “aproveché para navegar un poco por Internet, por primera vez en mi vida o casi. Así, logré visitar por fin, al cabo de unos diez años desde su creación, la web que lleva mi nombre”. Página web ciertamente poco accesible, señor Marías, en la que la navegación depende, toda ella, de una lista desplegable en la que se encuentran los enlaces. Pero no es a esto a lo que me refería, sino a que “Lo que más me ha desagradado, sin embargo, son los llamados blogs y foros, por algunos de los cuales me he dado un paseo. No entiendo que tantos escritores tengan un blog propio y le dediquen, por fuerza, numerosas horas de su tiempo, porque me parece equivalente a esto: uno va a un bar, se sienta a una mesa y habla de lo que sea, y a continuación está expuesto a que cualquiera coja una silla y le suelte a su vez su rollo o -con demasiada frecuencia- sus imprecaciones.


Si bien es cierto que en Internet hay de todo, y no todo tiene porqué ser bueno, esto ha ocurrido en todos los tiempos con todos los medios de comunicación. Ahora más, porque hay más información, pero dígame usted si en un diario no se encuentran chorradas de un calibre similar. E incluso personas que hacen gala de su ignorancia: “yo no he leído nunca un libro, pero un día me aburría y empecé a ojear los que había en la biblioteca de mis padres. Hojeé alguno que otro, y me parecieron aburridos, llenos de letras y no entendí lo que decía. Ergo, los libros son un aburrimiento”. Esta simplificación tan burda es la que lleva a cabo el señor Marías con Internet y el mundo de los blogs. Una lástima, habida cuenta de su calidad literaria, pero es lo que hay. En este país de gente zafia que se pone a caer de un burro en blogs y foros (a diferencia, oh, del mundo anglosajón, tan correcto y civilizado), señor Marías, también sienta cátedra sobre lo que no sabe cualquiera que llegue al corrillo. Y a cuento de todo esto, le voy a contar uno, del que existen numerosas versiones, en una que viene muy al caso:




Tres filósofos ciegos debían responder a la pregunta de cómo es un elefante. El primero llegó, agarró una pata y afirmó que un elefante era como una columna, fuerte, recio. El segundo lo agarra por la cola y afirma que es como una brocha, llena de pelo. Viene el tercero, se aproxima, y grita afirmando: ¡que alguien me saque de aquí, qué mal huele esto!



Pues eso, que en el mundo que tenemos, que no es ni de lejos un mundo ideal, Internet ha venido a democratizar la comunicación (es lo que viene a llamarse la neutralidad tecnológica, un concepto que nos ha venido a muchos a la mente después de la última jugada del Gran Hermano Google). Es una herramienta de por sí, y que sea buena o mala dependerá de nosotros. También dependerá de nuestra cultura y formación el determinar qué es válido y qué no en Internet. Como bien dice usted, autores y periodistas deberían contrastar ideas y documentarse bien antes de escribir. Y como el movimiento se demuestra andando, a ver si su próximo artículo sobre Internet, aunque mantenga su opinión (totalmente respetable) al respecto, hace gala de una mayor labor documental.


Citándole una vez más para finalizar, dice usted que “en los españoles, en cambio, veo una sobreabundancia de rabiosos y cabreados, de individuos a los que todo parece una mierda, o que dedican horas y horas a estudiar la obra de un autor, por ejemplo, con el solo ánimo de ponerla a caldo, en vez de abstenerse -como quizá sería lo lógico- de seguirla leyendo.” ¿No ve ninguna similitud entre dicha actitud y la que demuestra usted en el artículo? Porque no es lo que dice, es cómo lo dice.


¿Y vosotros (os interpelo explícitamente, para que no haya ningún cualquiera que llegue a opinar sin que se le pregunte), qué opináis del fenómeno “blog”, del que tanto se ha escrito, y su aporte a Internet?


Buen fin de semana.

miércoles, 10 de diciembre de 2008

50BR3 35CR17UR4 Y 0TR45 H13RB45

Durante un tiempo en el pasado impartí clase a adultos que, en general, tenían escasos conocimientos sobre informática. A ellos, explicarles que, como norma, la contraseña que debían seleccionar para la cuenta de correo que estaban creando en ese momento, debía ser compleja y poco relacionada con ellos suponía un problema que terminaba, no pocas veces, con el olvido de la misma. De poco valía decirles que, a ser posible, la contraseña no debía ser el nombre de su hijo o su mascota, y que al menos debían incluir algunas cifras en la misma (¡¡distintas al año de nacimiento, por San Kernel!! :) ). En cualquier caso, visto el éxito obtenido, cuando me topaba nuevamente con ellos, algo más desenvueltos en los lances de la informática, o tenía a un grupo algo más avanzado, les introducía en los beneficios de la escritura LEET. Sí, es precisamente esa en la que las p414Br45 intercambian algunas letras por números, creando combinaciones legibles con ligeras dificultades para los neófitos de la práctica, pero que trae algunos beneficios asociados. Por ejemplo, puestos a usar contraseñas de longitud suficiente y que incluyan letras mayúsculas y minúsculas, resulta bastante más fácil recordar una frase que una serie más o menos compleja de caracteres, y esta peculiar codificación mejora la seguridad de las contraseñas. Claro que siguen siendo vulnerables a ataques por fuerza bruta o de diccionario, pero aun así el tiempo necesario para romperlas será habitualmente mayor.


Ya os comento que mi mayor interés en este tipo de contraseñas es facilitarle a los usuarios la generación de las mismas dándoles una herramienta que mejore aunque sea un poco la calidad de las mismas, así como la facilidad para recordarlas. Sin embargo, el fenómeno es tan geek que como todos sabréis, ha venido extendiéndose desde los tiempo de las BBS hasta nuestros días. Incluso Google tiene una versión 1337 del buscador, existiendo además traductores automáticos de texto plano a LEET. Para muestra, un botón:


Ya os comento que mi mayor interés en este tipo de contraseñas es
Y4 05 c0m3n70 qu3 m1 m4y0r 1n73ré5 3n 3573 71p0 d3 c0n7r453ñ45 35
`/@ 0$ (0|\/|3|\|+0 q|_|3 |\/|1 |\/|@`/0|2 1|\|+3|2é$ 3|\| 3$+3 +1|*0 [)3 (0|\|+|2@$3ñ@$ 3$

¿Y vosotros, qué opináis de este tipo de trucos nemotécnicos? ¿Los veis útiles para su uso cotidiano por parte de los usuarios?

viernes, 5 de diciembre de 2008

De puente a puente...

Llega un nuevo fin de semana y, siendo algo más prolongado de lo habitual, es el momento ideal para ponernos al día con tantas cosas como quedan pendientes debido al ajetreo diario y la semana de trabajo. Entre otras, podríamos citar las lecturas atrasadas, probar tal o cual elemento que despertó nuestro interés (desde software a un dispositivo del tipo que sea), investigar un poco o, simplemente, descansar. Sirvan como propuestas algunas de las lecturas que despertaron mi interés durante la semana, y alguna que otra situación que me resultó curiosa.


Empiezo, como viene siendo habitual, dando un pequeño (brevísimo) repaso a algunas entradas de blogs de informática que me llamaron la atención. El primero de ellos es un nuevo descubrimiento, el blog de Versvs que he llegado a conocer gracias a la entrada que publicaba días atrás Sergio Hernando, y que os recomiendo encarecidamente. De su autoría es también el libro La sociedad de control, un texto más que interesante que he empezado a leer con fruición, y que por lo que veo en su web ya está a la venta en formato, digamos, tradicional. Así que una buena descarga para disfrutar y aprender (a la par que reflexionar) estos días, y un (auto)regalo seguro.


Muy relacionada con esta sociedad de control, en los últimos días se han producido bastantes manifestaciones de repulsa en contra de la última jugada del Gobierno en connivencia con la siempre “amiga de los niños” SGAE. Se trata, claro está, de la ingeniosa, imaginativa y singular campaña, Si eres legal, eres legal. Me habría gustado escribir algo al respecto, pero la verdad es que la semana vino un poco cargada y apenas pude preparar ese par de entradas que “adornaron” el blog, más parado que nunca. Sin embargo, material de lectura hay, y mucho. Os recomiendo, por ejemplo, las entradas de Informática Verde, de Mangas Verdes (que es un punto de entrada a muchas otras que giran en torno a la misma cuestión). Por cierto, y aunque no venga al caso más que por el nombre de la campaña: si eres informático, ¿qué se supone que eres? Curioso dilema, digno de figurar en alguno de los libros de Smullyan, ¿verdad?


En fin, ya que sigo hablando de libros os voy a recomendar otro. Viene directo de la imprenta del Imperio, pero resulta muy interesante. Es la Application Architecture Guide 2.0 del grupo de patrones y buenas prácticas de Microsoft. Es un documento Beta 2 (que debe ser algo así como 0.0.0.1.1), pero que ya os adelanto que pinta bien. Podéis descargarlo desde su página web y es free, colegas. Otra lectura para la saca.


Seguimos con la programación, y en esta ocasión con el blog PHP Senior, de Enrique Palace, que también resultar ser un descubrimiento reciente, de la última semana, gracias a una serie de artículos-guía que debe seguir un programador para convertirse en un as del PHP. De hecho, lo que buscaba no era eso, sino buenas prácticas en programación orientada a objetos para brindar lecturas interesantes a unos alumnos de .NET, y en cualquier caso, como os digo, resulta un blog con artículos de calidad. Por cierto, días después me sorprendí encontrando un enlace desde el blog de DES, en un artículo sobre buenas prácticas de desarrollo.


Se me quedan en el tintero bastantes cositas de interés, como siempre, pero no quería despedir la semana sin recomendaros una página que vi a través de Eco Microsiervos. Se trata de un buscador inmobiliario (Real State Tool) que se encarga de encontrar la vivienda ideal en función de nuestra vida diaria (familiar). Le damos información sobre nuestros trabajos, la escuela de los niños, la dirección de la biblioteca que más frecuentamos o nuestro gimnasio, y se encarga de buscar la localización más idónea para la vivienda, minimizando los desplazamientos hasta el lugar. Una forma más de ser un poquito más eco, y perjudicar menos nuestro medio ambiente. Por lo pronto he hecho la prueba y creo que a mi querida Lycis le daré una alegría. Nos sugiere mudarnos (lo haremos en breve) a una zona que ella se había planteado.



¡Buen fin de semana!

martes, 2 de diciembre de 2008

Pruebas de caja blanca automatizadas en .NET


Una de las tareas más tediosas a la hora de desarrollar pruebas unitarias sobre código existente es tener en cuenta todas las posibles entradas y flujos de ejecución. Sin embargo, es necesario (imprescindible incluso) un correcto control de ambos aspectos durante el desarrollo de nuestras aplicaciones. Durante el proceso de desarrollo, las prácticas recomendadas por metodologías como la Programación eXtrema (XP) y el Desarrollo Guiado por Pruebas (TDD) nos dicen que debemos escribir los tests necesarios para validar el código que estamos creando. Sin embargo, no se nos dice qué pruebas debemos escribir, aunque sabemos que las pruebas, si están bien escritas son, además de una herramienta insustituible para la verificación del código, un modo de reflejar mediante código las especificaciones que deberá cumplir nuestro código.


Por todo esto, Microsoft ha preparado un nuevo framework (sí, uno más, a mí también me sorprendió cuando me hablo del mismo un compañero de trabajo) que permite facilitar la tarea del desarrollador mediante la creación de pruebas unitarias mediante la inspección automática del código. Estoy hablando de Pex (Program EXploration), que puede ser descargado desde la página de Microsoft Research, y que durante su instalación nos adelanta una futura integración con Visual Studio 2010, el próximo IDE de la compañía. Aunque el sistema operativo recomendado es Windows Vista, no he tenido problema alguno para probarlo con mi Windows XP SP2 y Visual Studio 2008. Tras instalarlo, a ser posible incluyendo los complementos para Visual Studio, tendremos un nuevo grupo de programas con el propio Pex, una carpeta de ejemplos para juguetear un poco y una documentación bastante completa y muy interesante.


Ahora podemos hacer uso del mismo simplemente incluyendo una referencia a Microsoft.Pex.Framework en nuestro proyecto, y etiquetando adecuadamente las clases y métodos con los atributos PexClass y PexMethod respectivamente.



Hecho esto, podemos acceder al menú contextual dentro del código y seleccionar la opción “Run Pex Explorations”. Aparecerá un panel con los resultados de la exploración, y el análisis que ha llevado a cabo Pex en nuestro código.



Como se puede observar, podemos analizar las diversas entradas que Pex habrá usado como parámetros de entrada en nuestros métodos, un pequeño resumen o control de excepciones y el mensaje de error obtenido, si es el caso.



Si seleccionamos una de las entradas, aparecerá una zona con los detalles del código que Pex generará por nosotros para ejecutar la prueba correspondiente. Si esa entrada provoca una excepción, es posible automatizar incluso el control de la excepción, etiquetando el método que ejecutará la prueba para que la misma sea una excepción esperada.






En el cuadro de diálogo Herramientas->Opciones, podemos establecer una serie de configuraciones sobre Pex como, por ejemplo, la generación de informes. Si habilitamos dicha opción, en la carpeta destino de la compilación se creará una carpeta con el informe en formato HTML. Podemos observar en el mismo los tests que han sido generados y la cobertura que suponen sobre el código.





La verdad es que Pex pinta realmente bien. Parece una herramienta interesantísima a la hora de gestionar y generar las pruebas unitarias de forma automatizada. La documentación es muy completa e incluye, además del manual de uso de Pex, una serie de documentos sobre patrones de pruebas para un uso eficiente de Pex, o el uso de stubs. Conforme vaya profundizando en él iré dejando por aquí mis impresiones.


Ah, y no es lo único que se nos viene encima. Los chicos de DevLabs en Microsoft tienen en mente proyectos tan interesantes como CHESS, una herramienta para la búsqueda automática de interbloqueos, condiciones de carrera y otros heisenbugs en nuestro código concurrente.

El ascenso de Ícaro


El desarrollo guiado por pruebas o TDD nos permite codificar nuestras aplicaciones de una forma más segura, ya que ante cambios en el código existente o inclusión de nuevas funcionalidades, basta pasar nuevamente todas las pruebas (incluyendo, en su caso, las nuevas que sean pertinentes) para asegurarnos que las modificaciones no han alterado su funcionamiento anterior. Una de las herramientas que nos permiten llevar a cabo este desarrollo son los frameworks de prueba, de los que existen de todos los sabores y gustos conocidos para cada lenguaje de programación o plataforma de desarrollo. En el caso del .NET Framework podemos citar, entre otros, el extendidísimo NUnit en sus líneas de desarrollo 2.x y 3.x, MbUnit muy orientado a la extensibilidad del mismo, MSTest que viene “de serie” con Visual Studio (excepto las ediciones Express) y xUnit.net, que nació tras las lecciones aprendidas de otros frameworks de pruebas unitarias y que poco a poco va adquiriendo mayor peso entre la comunidad de desarrolladores.



Estos frameworks suelen consistir en un core de pruebas que nos permite, gracias al etiquetado mediante atributos de nuestras clases y métodos, la ejecución automatizada de los tests. También incorporan clases de extensión y demás funcionalidades, y suelen permitir la ejecución de las pruebas desde la propia consola del sistema, o a través de una interfaz gráfica que nos hace la vida más fácil a los usuarios de los mismos. Pues bien, días atrás estuve evaluando xUnit.Net como alternativa a NUnit de cara a nuevos desarrollos, y su inclusión dentro del proceso de integración continua que facilitan herramientas TeamCity, de la que me gustaría hablar algún día. El caso es que, probando xUnit.net, el GUI que ofrece “de serie” el framework es ciertamente triste, aunque sea una versión temprana del mismo. Así las cosas, me planteé probar su funcionamiento con alguna otra aplicación que permitiese llevar a cabo campañas de prueba de una forma más sencilla y con un mayor control sobre los resultados arrojados por los tests. Aunque la oferta a este respecto, por lo que pude ver, no es demasiado extensa (buscaba un GUI suficientemente flexible como para permitir la ejecución de pruebas con xUnit.net sin demasiado trabajo de configuración previa, o sin tener que desarrollar scripts en NAnt, MSBuild o similares), encontré mi opción ideal en Gallio, una plataforma de automatización, abierta y extensible, que puede integrarse con numerosos frameworks de pruebas en .NET. De hecho, es tan flexible que permite la ejecución de series de test desarrollados sobre diversos frameworks sin mayor problema. Incorpora un GUI, Icarus, cuya instalación y uso es tan simple como el propio GUI de NUnit, permitiendo además obtener informes muy vistosos como puede observarse en las diversas capturas que acompañan a la entrada de hoy.



El Explorador de Tests nos permite seleccionar aquellas pruebas que deseamos ejecutar.



Una ejecución de tests con un resultado ideal.



El Explorador de Tests correspondiente a la ejecución anterior.



El log de ejecución con algunos tests fallidos.


No voy a entrar demasiado en profundidad en la aplicación, ya que su uso es muy intuitivo y simple, y lo único de lo que quería dejar constancia es del interés que ha suscitado en mí precisamente por eso, porque permite incluso desarrollar nuevas pruebas sobre el código existente en un framework de pruebas distinto al ya existente, y pasar las pruebas en su totalidad desde una misma aplicación. En contra suya únicamente he notado una ligera lentitud en la carga y ejecución de los ensamblados que contienen las pruebas a pasar.



Un completo informe en HTML.


¿Y en vuestro equipo, desarrolláis basándoos en TDD? ¿Qué framework de pruebas usáis? ¿Cuál os gusta más y por qué?