Analogias de Scrum y partida de Rol

Hace ya más de un año que llevo mirando temas de gestion de proyectos. Empecé mirando la certificación Six Sigma para la optimización de procesos pero decidí empezar a aprender qué se mueve en concreto en la gestion de proyectos software. Lo que he ido encontrando lo pondré en este blog en breve pero primero quiero poner unas analogias que se me ocurrieron entre la metodogia Scrum y lo que se mueve en un juego de rol.

Hay muchos que como yo, hemos pasado una parte de nuestra juventud jugando a juegos de rol. De algun modo el rol/comics/informatica esta raramente conectado. Bien, empecemos:

Scrum Team/ jugadores de rol

El scrum team es un grupo heterogeneo de especialistas que se compromenten en conseguir un objetivo en un tiempo dado (un sprint). Ese grupo puede estar compuesto por programadores/testeadores/expertos en BD,…

En el rol hay pocas cosas más heterogeneas que un grupo de rol (paladin, orcos con mala leche, elfos con más pluma que las de sus flechas,…). Ese grupo tiene una misión para hacer en un tiemplo dado (una partida).

Scrum Master/ Dungeon Master o Máster

El Scrum Master está a disposición del equipo. Les ayuda a elegir un grupo de tareas para completar en un sprint. Les ofrece toda la ayuda que está en su mano para que el equipo lo unico que tenga que hacer es centrarse en el objetivo. Es el interfaz entre el equipo y el resto de interesados en el proyecto y con la dirección.

El Dungeon Master les plantea el escenario a los jugadores y se preocupa en que el juego sea dinamico y que vayan avanzando en la misión con los personajes y situaciones que se inventa durante la misión. Normalmente es el que pone la casa, aporta las patatas fritas, hojas, lapices, refrescos ….

Daily Scrum/Turno

El Scrum Master se reune a primera hora de la mañana con el equipo y estos cuentan 3 cosas: qué han hecho desde la anterior reunion, qué haran hasta la proxima y qué dificultades tiene para  realizar ese trabajo.

En cada turno el master pregunta a cada uno de los jugadores qué va a hacer en ese turno y le cuenta las consecuencias de su elección hasta el siguiente turno.

Gestion de proyectos/Llevar una partida de rol

Scrum: Se debe conocer muchas metodologias y herramientas pero sólo usarlas si ayudan a realizar mejor su trabajo, que es el objetivo de esa misión. No intenta preveer al detalle todo el trabajo a realizar y realizar un analisis exaustivo sino saber responder rapidamente a las necesidades del equipo y ayudarles a orientarse.

Rol: El master conoce las normal del juego en cuestion pero las ignora cuando molestan. Si estan en plena batalla no se pone a hacer tiradas de probabilidades de que les salga un erpes labial aunque en el libro ponga que el contacto tiene 2/100 de que se les contagie. Esto puede afectar al objetivo principal de cualquier juego de rol (pasarlo bien). No tiene un mapa detallado de todos los puntos por los que pasaran con todos los PNJ y sus personalidades sino que se va inventando lo necesario y moviendo de sirio los lugares que ha ideado.

Si a alguien se le ocurren más analogias que me las comente y las voy añadiendo a la entrada.

Framework para objetos Mock propuesto

Ahora estamos peleando con Unit Testing y claro, a no ser que tu codigo solo calcule series fiabonacci o algoritmos de ordenación, existe una serie de elementos externos como bases de datos, hardware especializado, uso de ficheros y del sistema operativo. Para aislar el codigo a probar de esta serie de elementos se usa los objetos Mock.

Un objeto Mock es un objeto que es llamado por el codigo a probar y que permite especificar su comportamiento al detalle para forzar todas las situaciones posibles. El codigo a testear no debe tener logica que sea distinta segun sea en situacion de testeo o en produccion. Despues de darle muchas vueltas y un par de intentos fallidos se ha llegado a este framework. Esta diseñado en C++ que es el lenguaje que uso más que el castellano.

Se creará una clase abstracta que tendrá todos los metodos necesarios para simular la clase. De esta clase heredaran una clase que será la que realmente haga el trabajo en situacion real y otra clase que será la Mock.

Se pueden definir estas clases para simular DLL’s, acceso a bases de datos, acceso a ficheros, llamadas al api de windows (GetProfileInt, MessageBox, Sleep,…), tambien se puede crear una clase para las peticiones de datos con dialogos al usuario.

Ejemplo: Clase que simula al API de Windows

// Clase abstracta
class CWinApiBaseClass {
CWinApiBaseClass();
virtual CWinApiBaseClass();
virtual int MessageBox(HWND ventanaPadre,LPCTSTR mensaje,LPCTSTR title,int flags)=0;

}

//Clase real (wrapper sobre el codigo llamado)
class CWinApiWrapper:public CWinApiBaseClass {
CWinApiWrapper ();
virtual CWinApiWrapper ();
virtual int MessageBox(HWND ventanaPadre,LPCTSTR mensaje,LPCTSTR title,int flags);

}

int CWinApiWrapper::MessageBox(HWND ventanaPadre,LPCTSTR mensaje,LPCTSTR title,int flags){
return ::MessageBox(ventanaPadre,mensaje,title,flags);
}

//Clase mock
#define WinApiMock_MaxCalls 100 // Permite definir el maximo de los arrays de datos
class CWinApiMock:public CWinApiBaseClass {
CWinApiMock();
virtual CWinApiMock();
virtual int MessageBox(HWND ventanaPadre,LPCTSTR mensaje,LPCTSTR title,int flags);

//Para MessageBox
unsigned int m_nCallsMessageBox; // Permite saber si se ha llamado o no a la funcion
HWND m_ListMessageBoxHWND[WinApiMock_MaxCalls];
CString m_ListMessageBoxMessage[WinApiMock_MaxCalls];
CString m_ListMessageBoxTitle[WinApiMock_MaxCalls];
int m_ListMessageBoxFlags[WinApiMock_MaxCalls];
int m_ListMessageBoxRetValue[WinApiMock_MaxCalls]; //Permite indicarle qué va a retornar

}

CWinApiWrapper::CWinApiWrapper(){
// Se inicializa los contadores a 0 y todos los arrays que lo necesiten a 0 con ZeroMemory
}

int CWinApiWrapper::MessageBox(HWND ventanaPadre,LPCTSTR mensaje,LPCTSTR title,int flags){
m_nCallsMessageBox++;
m_ListMessageBoxHWND[m_nCallsMessageBox]=ventanaPadre;
m_ListMessageBoxMessage[m_nCallsMessageBox]=mensaje;
m_ListMessageBoxTitle[m_nCallsMessageBox]=title;
m_ListMessageBoxFlags[m_nCallsMessageBox=flags];
return m_ListMessageBoxRetValue[m_nCallsMessageBox];
}

Es importante tambien definir una variable global por cada clase que contenga el objeto wrapper real. Este objeto se usará para iniciar por defecto todos los usos al uso el produccion.

// En el WinApiBaseClass.h
#ifndef CWINAPIMOCK_CPP
#define CWINAPIMOCK_CPP
extern CWinApiWrapper glWinApiWrapper;
#endif

// En el WinApiBaseClass.cpp
CWinApiWrapper glWinApiWrapper;

// En el .h la clase a testear
protected:
CWinApiBaseClass *m_winapi;

//En el constructor de la clase a testear se inicia el puntero
CClaseATestear::CClaseATestear(){
m_winapi=&glWinApiWrapper;
}

//Cada vez que el codigo llame a MessageBox se usa el puntero a la clase abstracta, iniciada por defeco a la
// real para que no haya problemas en produccion

int ret=m_winapi->MessageBox(GetSafeHwnd(),_T(«¿Quiere continuar?»),_T(«Mi aplicacion»),MB_YESNO);

//Cuando se testea el codigo hay que cambiarle el puntero para que apunte al objeto mock

CTestClaseATestear::TestFuncionATestear(){
CWinApiMock mock;
CClaseATestear miClase;

miClase.m_winapi=&mock;
mock.ListMessageBoxRetValue[0]=IDYES; //Forzamos el retorno del messagebox
CPPUNIT_ASSERT(miCLase.FuncionATestear());
CPPUNIT_ASSERT(mock.m_nCallsMessageBox==1); // Comprobamos que realmente se ha llamado
}

Y esto es todo. Espero vuestros comentarios

Six sigma o Seis sigma. Primera entrada

Hasta hace poco menos de un mes no tenia ni idea de qué era esto. Unos amigos que trabajan en Amsterdam me lo comentaron como lo mas normal del mundo pero parece que eso para España no se ha estrenado mucho.

Segun la wikipedia es una metodologia de gestión de proyectos en la que se analizan los procesos de produccion de modo estadistico para optimizarlos eliminando las causas de los problemas y mejorando la calidad.
http://es.wikipedia.org/wiki/Six_Sigma
http://en.wikipedia.org/wiki/Six_Sigma

Fue inventado por Motorola y es usado por muchas compañias en todo el mundo. Habla de procesos de producción en general pero para mi como jefe de proyecto me interesa el cómo aprovecharlo en el desarrollo de software. Hay webs que indican claramente que no soy el unico que cree que se puede aprovechar para el software.
http://software.isixsigma.com/

Establece unos niveles de conocimiento y responsabilidades a la hora de usar la metodologia. Esos niveles se establecen como cinturones en las artes marciales. El cinturon amarillo lo deben tener los operarios/programadores que usan six-sigma en su trabajo. La persona que los coordina debe tener el cinturon verde. Despues estan los cinturones negro, masters , campeones y Liderazgo Ejecutivo que ya es el CEO de la empresa. Para tener los cinturones hay que hacer examenes certificados como por ejemplo esta web http://www.sixsigmaonline.org/ donde se puede conseguir online pero aun me queda comprobar si realmente su certificacion es oficial. Lo normal es hacer un curso presencial pero en España no he visto que den ninguno.

Yo voy a ver de sacar el cinturon verde e intentar aplicarlo en el trabajo de jefe de proyecto. Todo lo que vaya descubriendo lo intentare añadir a este blog.

Personas autistas como perfecto tecnico de test

Hace ya unas semanas leí en el diario «El Mundo» que una compañia de software danesa estaba triunfando en todo el mundo. Su «secreto», tener el 75% de sus empleados eran personas autistas. La compañía en especial se dedicaba al outsorcing del testing, es decir, en ser subcontratadas por empresas de software para que su producto tuviera calidad. Por más que lo he conseguido no he conseguido encontrar una referencia online en español para indexarla aqui. La empresa en cuestion es Specialisterne. Segun el presidente, que tiene un hijo autista, las cualidades que debe tener un perfecto tester son las que tiene un autista, al menos con alguno de los tipos de autismo: memoria fotografica, ejecucion mecanica de una serie de pasos y responder ante los minimos cambios en una rutina programada.

Esta noticia me gustó primero porque soy desarrollador de software y despues por el lado humano porque confirma que todos nosotros podemos ser utiles, seamos como seamos.

Noticia en ComputerWeekly

Web de la empresa

Masoca's tools

Así llamabamos a los juegos y aplicaciones que instalabamos hace 15 años con una pila de 20 discos de 3 1/2. Eran epocas gloriosas. Para hacer funcionar un juego (backup o con los discos originales) teniamos que trastear el autoexec.bat para cargar unas cosas sí y otras no. Todo esto para liberar las 640 K de memoria base y el juego arrancara.

Aplicaciones como el ‘a.exe’ que le autocompletaban directorios cuando cambiabas usandolo en lugar del ‘cd’, comprimiendo y descomprimiendo con el pkunzip, arj,  formateando los discos con el 2MF para lograr que los discos de 1,4 se conviertieran en 2MB, … Habia que complicarse para lograr pequeños hacks que ibamos necesitando para el dia a dia.

Ahora la administracion de los PCs se ha vuelto mucho más intuitiva, con el boton derecho del raton tienes acceso a todas las opciones que te brinda el sistema operativo, en Internet tienes informacion de cómo mejorar tu sistema operativo hasta hacerlo tan rapido como si tuviera la version anterior del mismo 😉  Sin embargo en cuestiones de administracion uno se vuelve muy perezoso. Puedo aguantar meses y meses pulsando una tecla al arranque para que no me analice mi C: porque tarda la vida, el escritorio se me va llenando de iconos, tengo el mismo wallpaper desde hace más de 2 años,…

Sin embargo en cuestion de programación aun tengo esa costumbre de intentar saber bien que hace exactamente el código que escribo. Desde hace más de 5 años programo en C++ con Visual Studio 6. Me manejo con mucha soltura con MFC, que es una pesadilla para los programadores de Visual Basic pero para los que sabemos que habria que hacer para programar lo mismo con el API de Win32 es una maravilla. Pero el tiempo avanza…

Llegan nuevas tecnologias y APIs de programacion: Windows Presentation Fundation, Windows Communication Fundation, las clases ya trabajadas que se usan en .NET,.. Todo un mundo de tecnologias ya hechas que, aunque quiera resistirme (que no es el caso), noto que necesito aprender y adaptarme. Donde trabajo tenemos mucho, mucho codigo en proyectos como he comentado (C++ con MFC). Hemos decidido dar el gran paso, pero darlo como Dios manda. Cuando empezamos no sabiamos de .NET, de patrones Modelo-Vista-Controlador (MVC) y practicamente nada de Unit Testing. ¿Que hacer para arreglarlo? Hacerlo todo a la vez mientra migramos a Visual Studio 2008.

En este blog voy a intentar ir publicando las cosas que vamos descubriendo que espero que le sirva a otros programadores, tan «masocas» como yo que prefieren seguir usando C++ con toda la parafernalia de nuevas tecnologias que nos llegan.

Empezamos el viaje…

Windows CardSpace, breve descripción y comentarios

Como se habrá visto en mi anterior post de programación, estoy haciendo el curso de desarrollador 5 estrellas de microsoft (www.dce2005.com). El primer curso de la cuarta estrella trata de Windows CardSpace. Esto es una idea de Microsoft para intentar reducir el problema de phising (peticion de password al usuario creando una web haciendose pasar por la original).

El uso de password lo sustituye por tarjetas de identificacion que se almacenan en el ordenador del usuario. Estas tarjetas no contienen informacion del usuario sino que se usan para pedir esa informacion de modo cifrado a una tercera entidad llamada proveedor de identidad (identity provider). Esta entidad le devuelve el grupo de informacion en un token al usuario que a la vez lo envia a la web para identificarse. El token esta formado por una serie de claims que cada uno es un dato, puede ser usuario, dirección, … De estos datos la web coge los que necesita para identificar al usuario.

De aqui surgen varios inconvenientes.

Primero que la informacion se almacena en el ordenador del usuario y necesita exportarlo por ejemplo a un USB e instalarlo en el ordenador que vaya a usarlas, por ejemplo un Cybercafe. Microsoft entiende que esto es un problema e informa que en la proxima version se podrá usar directamente del USB sin instalarla. Esto sí es una buena idea ya que igual que tus llaves de casa puedes llevar encima tus tarjetas de identidad para usar en distintas webs.
Segundo que tampoco eliminan el problema del phising al completo, ya que una persona maliciosa podria crear una web falsa que solicitara el token del usuario. Es el usuario es que debe distinguir la web original de la copia y no aceptar a entregarle la informacion si no es de su confianza. Si el usuario es un poco avispado puede darse cuenta que si ya ha entrado en esa web anteriormente no deberia pedirle el sistema confirmacion para entregar la informacion ya que se hace de forma automatica. Microsoft informa que para evitar esto se esta estudiando el certificar las imagenes de la web (logos) para que el usuario confirme que realmente son de la web que espera. Aqui mi pregunta es: ¿por que no se hace eso directamente con el sistema de password actual?

Me parece que es un buen intento pero no soluciona nada y complica demasiado el sistema de autentificación sobre todo para el desarrollador de la web. Para el usuario se le presenta un sistema muy intuitivo y bonito con tarjetas e imagenes pero aun tiene un par de flecos por mejorar.

Espero vuestros comentarios y correcciones.

Enlaces:

White paper de Microsoft. http://msdn2.microsoft.com/en-us/library/aa480189.aspx
Un pdf de cómo implementarlo (hands on labs) http://www-sor.inria.fr/~galland/papers/HOL07techdays.pdf

Al fin la quinta estrella de desarrollador .NET

Hola.

Existe un curso de programacion online hecho por Microsoft en el que van enseñando las tecnologias .NET de más interes: ASP .NET, Windows Presentation Fundation, Windows Communication Fundation, etc… Es totalmente gratuito y segun vas aprobando examenes te van concediendo estrellas hasta llegar a un total de cinco. Hace unos pocos dias por fin han puesto el contenido para llegar a la quinta estrella y además si haces despues otros cursos te asignan el titulo de Desarrollador Gold o Platinum. Yo por el momento estoy estudiando el primer curso de la cuarta estrella (CardSpace). Se lo recomiendo a todo aquel que quiera estar a la ultima en desarrollo para Windows. El link es www.dce2005.com Date prisa que si sacas la 5ª estrella antes de fin de febrero te envian un diploma a tu casa.

Mi opinión sobre las psicoimágenes

En todo el tiempo que estuve como colaborador en Nostromus la Nave del Misterio pude investigar por mi cuenta y llegar a mis propias conclusiones. Le dediqué todo el tiempo que creí necesario para ello.

El tener una cámara de video enfocando la pantalla del ordenador crea una serie de imágenes aleatorias ya que cada pequeño detalle es repetido y aumentado, como cuando se produce acople con un microfono justo al lado de un altavoz. Cuando se graban estas secuencias de imágenes se generan 25 imágenes por segundo (o 30 en regiones con NTSC) y si se graba por ejemplo 30 segundos se genera 750 imágenes.

Revisando imagen a imagen cada una de las 750 imagenes en sólo 30 segundos de grabación las posibilidades de que una agrupacion aleatoria de formas se transforme en algo reconocible es muy alta.

Ahora con los portatiles y las camaras digitales es posible probar a capturarlas sin los equipos que se usaban. En el tiempo de mi participación en Nostromus hice un software que usaba la camara digital y un portatil e hice innumerables pruebas. Los escasos resultados que recogí estan en este blog. Si estas interesado en probar por tí mismo puedes descargar una versión de prueba aquí

Tambien hay que tener en cuenta un proceso mental denominado paraedolia. Este proceso es la capacidad de encontrar formas conocidas en agrupaciones aletorias. Por ejemplo encontrar formas en las nubes. Con las caras esto es más acusado ya que desde pequeño lo primero que aprendemos a reconocer son las caras de nuestros padres. Este reflejo ha sido creado tras muchos años de evolucion y permitia a los recien nacidos de hace miles de años caer bien a sus padres y tener más probabilidades de sobrevivir.

Las psicoimagenes no son más que eso, imágenes aleatorias que se reconocen como objetos o personas por nosotros mismos. He visto vídeos de psicoimagenes con caras de niños en movimiento y otras cosas que sorprenden mucho pero todos los investigadores medio serios del tema lo máximo que han conseguido tras mucho tiempo son formas medianamente reconocibles como las que aparecen y apareceran en este blog. De todos modos si alguien quiere demostrar lo contrario éste es su sitio.

Un saludo a todos

Primer post en el blog (para que luego digan de anglicismos)

Hola a todos.

Aqui intento estrenarme en la creación de un blog. Es lo que se lleva ahora y no he querido desaprobechar la oportunidad de ver a dónde puede llevar todo esto.

Las primeras categorías que he creado son sobre los temas que más conozco. Llevo más de 5 años desarrollando aplicaciones para una empresa de referencia en sotware para cadenas de televisión y en todo este tiempo algo se ha aprendido.

Espero sugerencias de temas e intentaré que esto sea un poco de todos.

Un saludo a la gente del «Interné».