Ingeniero de Soporte

10:35 0 Comments

Códice Software desarrolla Plastic SCM, un sistema de control de versiones distribuido (DVCS) para desarrollos de todos los tamaños con la mejor implementación de “ramas por tarea” y totalmente visual.

¿De qué va el puesto?

Necesitamos un “ingeniero de soporte”. ¿Qué es eso? Pues un desarrollador de software (nuestros clientes son desarrolladores… así que hay que hablar su mismo lenguaje) al que le guste el trato con la gente, resolver problemas complicados, y ser la primera línea de nuestro equipo de desarrollo.

Alguno estará pensando: “pero si eso de ser de soporte es responder preguntas aburridas por email… paso!”.

Bueno, de eso no va el soporte de un producto como Plastic SCM. Va más bien de:

  • Que te llegue un equipo de 50 developers que quiere montar Plastic SCM en dos continentes diferentes con dos backends de base de datos, y hay que ponerlos en marcha en tiempo record.
  • Que otro día tengas que echar una mano para resolver bugs de concurrencia en un sistema Linux al otro lado del mundo.
  • Que en vez de cincuenta, sean 1200 developers (sí, mil doscientos) con una base de código más grande que todo lo que hayas visto y hablando un idioma que no conozcas.
  • Que tengas que escribir un blogpost para explicar un escenario de uso de cualquiera de las características del producto.
  • Que tengas que echar una mano para hacer un webinar (en Inglés) contando como usar las funcionalidades de Plastic SCM.

En el día a día vas a necesitar:

  • Conocimientos de desarrollo
  • Trabajo en equipo: vas a trabajar con gente
  • Dominio el Inglés (lo vas a usar todos los días)
  • Y muuuuchas ganas de aprender, trabajamos en lo que nos gusta

En tu incorporación pasarás por un intenso proceso de formación, trabajando codo con codo con nuestra estrella del soporte, con el que librarás todas estas batallas y muchas más.

Necesita refuerzos! Y tú podrías ser la persona que está buscando!

¿Qué te ofrecemos?

  • Competir contra software de nivel mundial como Perforce, Git, Mercurial, Subversion, ClearCase, Team Foundation Server, AccuRev… Luchar contra los mejores del mundo en el sector, cada día.
  • Retos de programación, problemas de software complicados, que pondrán a prueba tu mente cada día.
  • Evolucionar en una carrera técnica: siempre en contacto directo con el cliente, siendo pieza clave para que nuestros usuarios estén contentos.
  • Flexibilidad y libertad: controlar, de verdad, cómo y cuándo trabajas.
  • Incorporarte en un gran momento cuando todavía se puede ser parte del núcleo.
  • Remuneración económica muy competitiva.

¿Qué buscamos?

Necesitamos ingenieros con talento y apasionados, ansiosos por unirse a nuestro equipo y hacer grandes cosas, y lo suficientemente locos como para competir contra el resto de grandes desarrolladores SCM.

Necesitamos que demuestres amplios conocimientos en desarrollo de software, unas excelentes habilidades de programación y nociones en diferentes sistemas operativos así como en herramientas de SCM.

Añade capacidad de comunicación y que hables Inglés muy, muy bien.

Estamos interesados en perfiles y niveles de experiencia muy diversos, así que si de verdad te gusta desarrollar software, envíanos tu currículum a cv@codicesoftware.com y cuéntanos por qué eres el desarrollador que nos falta.


0 comentarios:

Inch-Pebble Check-Ins, o cómo hacer desarrollo de software autodocumentado

10:22 0 Comments

“Nada puede ser tan útil (valioso) como un comentario puesto en el lugar correcto” . Esta frase pertenece a Robert C Martin, autor de Clean Code.

Existen comentarios denominados “buenos”. Son aquellos que necesitas, por ejemplo, para entender por qué se realizó cierto cambio en su día, puede ser porque tú no estabas presente, o ni siquiera formabas parte del equipo de desarrollo en ese momento.

Pero también tenemos la cruz de la moneda, y claro, existen comentarios llamados “malos”. Son aquellos que intentan explicar un código que ya de por sí está mal escrito. El código debería ser autoexplicativo, hablar por sí mismo y darte todas las respuestas que necesitas cuando lo estás leyendo.

La línea de separación entre ambos tipos de comentarios es muy fina. Es cierto que tener buenos comentarios ayuda y mucho. También emplear técnicas como diff debugging o de revisión de código ayudan a mantener nuestro software en perfecto orden. Pero hay una operación que dentro de los equipos de desarrollo se realiza miles de veces cada día: check-in.

¿Qué pasaría si utilizáramos el check-in como una herramienta más que nos ayudara a documentar el código que desarrollamos? ¿Qué pasaría si nuestros checkins contasen una historia?

La técnica que se describe en este post, no sólo es buena cómo método de auto-documentación del código sino también sirve para captar la manera en la que en general el equipo trabaja. Además es un buen modo para enseñar a las nuevas incorporaciones dentro del equipo, las técnicas que se emplean y lo que necesitan aprender.

El Problema: El Software Cambia

Acepta el cambio para controlar el cambio

El software siempre está cambiando. Cuanto más abierto de mente seas y mejor te adaptes a esta verdad, más control tendrás sobre el código.

Michael Feathers en su libro “Working on effectively with legacy code” explica estrategias para entender los mecanismos de por qué el software cambia: añadir nuevas características, arreglar fallos, mejorar el diseño.

En Plastic SCM trabajamos con el patrón de Rama-por-Tarea. Ponemos mucho hincapié en que los cambios hechos en las ramas tienen que estar revisados antes de proceder con la integración (merge). Esta revisión se puede hacer utilizando la vista de Diferencias, pero en ocasiones los cambios son tantos y tan pequeños que no es de gran utilidad.

Voy a tratar de explicarlo mejor con un caso práctico. Hace un par de semanas, estaba desarrollando una nueva funcionalidad que precisaba algunos cambios, sobre el código legado y nuevos ficheros que incorporaran nueva funcionalidad.

Esta nueva funcionalidad que se iba a desarrollar, necesitaba compartir código ya existente, con lo que la mayor parte del trabajo iba a consistir en hacer una refactorización del código para dejarlo preparado. Cuando terminé con los cambios, lo primero que hice fue ir a la vista de Diferencias para verificar todo lo que había hecho. En esta ocasión como los cambios eran pequeños, la vista de Diferencias me fue muy útil. Pero si hubiera muchísimos cambios, la vista de Diferencias no habría ayudado mucho porque el código tendría demasiados cambios, que no podría controlar.

“Inch-Pebble” Check-Ins

La traducción de “Inch Pebble” sería algo así como, “guijarros pequeños”. En español, guijarro ya trae de por sí el adjetivo pequeño. Definición de la RAE: Pequeño canto rodado. Quizá una traducción literal más adecuada sería algo como “micro cambios”. Pero sigamos con nuestro caso práctico.

Todo el mundo sabe lo que es un hito, y todo el mundo sabe que tenemos que alcanzar ciertos hitos en nuestro trabajo. Pero ¿qué ocurre si esta suposición fuera errónea? ¿Qué ocurre si en vez de un único hito, nos esforzamos en alcanzar muchos pequeños hitos?

En nuestro caso, marcar el camino con muchos guijarros. “Inch-Pebble” es un término acuñado por Johanna Rothman en el siguiente artículo. Lo he tomado prestado, para describir el proceso en el cual realizas check-in de tu código de manera frecuente, es decir con cada pequeño cambio haces un check-in. Usar la filosofía “Inch-Pebble” significa realizar check-in contínuos, y dejar fuera el realizar sólo uno o dos a lo largo del día.

Lo que pretendía lograr con esto es mostrar los cambios que había ido realizando en mi tarea, pero en vez de hacerlo con un fichero de log, lo quería hacer mostrando los check-in que había ido realizando simplemente cuando modificaba o añadía unas pocas líneas.

Las versiones modernas de los sistemas de control de versiones, se comportan de tal manera que agrupan todos los ficheros sobre los que hayas realizado check-in juntos. Cada una de estas agrupaciones lógicas se llama changeset, commit, transaction dependiendo de la nomenclatura que utilice tu sistema de control de versiones. De este modo, cada changeset ayudará por ejemplo a la persona que esté revisando el código a entender lo que se hizo, paso a paso, y por qué se hizo de ese modo.

Vamos a pasar a ver todo lo que hice. Trabajé usando una rama, que era sobre la que realizaba todos los cambios. Y lo que fui haciendo es lo siguiente:

  • Moví un método privado desde la parte superior de la clase a la inferior, porque los privados deberían ir al final. Hice un changeset para describir este cambio.
  • Moví código heredado a una clase nueva, y lo combiné con código nuevo. Hice un nuevo changeset para indicar este cambio.
  • Creé un método nuevo para manejar parte de la nueva funcionalidad. Creé un nuevo changeset.

Continué con más pasos hasta finalizar. Cada uno de ellos, lo más atómico que podía y con su changeset correspondiente.

Ya he comentado que utilicé una sola rama para manejar estos cambios. ¿Qué significa esto? Significa sobre todo Libertad. Puedo hacer subidas de mi código a la rama, tan a menudo como quiera, sin preocuparme si rompo el build de la rama principal. El objetivo que tenía en mente era crear una secuencia documentada de cambios, de manera que si alguien se ponía a seguirla debería entender todos y cada uno de mis cambios. En realidad, era como estar grabando una película, escena a escena. Si lo piensas, es más fácil entender una refactorización paso a paso que mirar todo el proceso completo, cuando ha terminado.

En mi opinión, este proceso se puede aplicar no sólo en la refactorización, sino también cuando añadimos nuevas funcionalidades. De este modo, se va grabando el modo de trabajo y tan sólo los resultados finales, porque el proceso en sí mismo es la grabación que se ha realizado en el sistema de control de versiones. Se guarda la información importante que puede ser reutilizada por otros desarrolladores para entender cómo se trabaja en el equipo.

¿Cómo ayuda Plastic SCM en todo este proceso?

Lo primero es crear una rama, que es dónde vamos a trabajar y cambiamos el espacio de trabajo a esa rama.

Figure 1: Nueva rama

Ahora ya estamos listos para empezar a trabajar. Todos los cambios se harán en esta rama, y claro voy a hacer tantos check-in como necesite. Si vamos a la vista de Changeset, se pueden ir siguiendo de manera cómoda todos las actualizaciones que va teniendo la rama.

Figure 2: Vista de Changeset

Al final, si quiero saber cómo evolucionaron los cambios sobre el fichero original con el que empecé a trabajar, tendré la siguiente historia:

Figure 3: Vista de Cambios Pendientes

Figure 4: Historia de las Ramas (Inch-Pebble)


Revisando los cambios: tengo mi película gracias a los changeset

El hacer check-in con frecuencia, lo que produce es un conjunto de changeset que pueden ser revisados, uno a uno.

Figure 5: Plastic SCM -- Rama Selecciona

Figure 6: Vista de Menu Contextual


Si seleccionamos el menú contextual de la Vista de Menú, tenemos tres opciones disponibles:

  • Ver los changeset de la rama
  • Explorar los changeset de la rama
  • Explorar el repositorio de la rama

Si seleccionamos la vista de Changeset de la rama, lo que podemos ver es lo siguiente:

Figure 7: Explorar los Changeset en la Rama (Plastic SCM GUI)


Seleccionando “Explorar Changeset” en la rama, obtenemos la siguiente pantalla:

Cada changeset contiene un conjunto de ficheros modificados, que afortunadamente están asociados a un comentario explicativo. Con las herramientas adecuadas, puedes inspeccionar de manera gráfica el contenido de cada changeset de modo que todos los pasos que tú has dado pueden ser seguidos por el resto de desarrolladores cómo si una cámara en vivo te estuviera grabando mientras estás desarrollando código.

Figure 8: Explorar cada Changeset en cada Rama


Conclusión

Todo el proceso que he descrito no es nuevo, ni mucho menos, pero espero que haya servido para entender la gran ayuda qué nos brinda el realizar pequeños check-in de manera continua. No sólo porque realizando cambios o desarrollo a pasos pequeños es más fácil ir construyendo el código que lo pruebe todo. Sino que también, sirve como documentación propia, de manera que cualquiera que se acerque a mirar esos cambios, pueda entender si son correctos o no. Piensa además lo importante que es esto cuando estás trabajando en proyectos enormes, donde cada día se mueven miles de líneas de código.

Las herramientas SCM pueden ayudar a grabar estas películas de autor, creadas a través de los changeset, siendo incluso más efectivas que utilizando las herramientas de revisión de código.


0 comentarios:

No construyas equipos!

22:22 0 Comments

Desde el año 2005 en el que empezaron David y Pablo como únicos integrantes del equipo de Plastic SCM, al que se unieron Borja y Dani en seguida, ninguna persona que se ha incorporado al equipo de desarrollo lo ha dejado. Ni lo han hecho por voluntad propia, ni se la pedido que lo hagan.


Estamos en el año 2012, y el equipo de desarrollo de Plastic SCM está formado por 12 personas!!

¿Cual es el secreto?

¿Cual es el secreto? ¿Tienen la receta de la poción mágica de Panoramix?

Pues la receta es que hacen lo que les gusta.

El vivir experiencias de trabajo previas en otras empresas antes de arrancar Plastic SCM fue determinante a la hora de crear el equipo. Simplemente ayudaron a decidir todo lo que no querían para la persona que entrara en el equipo de desarrollo.

David y Pablo tuvieron la suerte de trabajar junto a un equipo de mucho nivel en Sony (Bélgica). Vivieron de primera mano todos los valores que han tratado de fomentar en Plastic SCM.

La lectura de libros como Peopleware, también han influido a la hora de como construir equipo, como encontrar a la gente adecuada.

Trabajo variado, desafios constantes (Web, software de sistema, GUI, seguridad..), libertad para lanzar propuestas, confianza. Todo puede sonar a cuento, a sueño no posible, pero cuando hablas con cada uno de ellos lo que te transmiten es: Orgullo y Felicidad

  • Orgullo porque saben lo que hacen como desarrolladores, un producto que ayuda a su gente, desarrolladores.
  • Felicidad, porque crean con calidad y reconocen la influencia que genera lo que están creando.

Uno de los 7 principios de Lean Software Development es: "Empower the team" No hay recursos, hay personas. No hay un líder que enarbola la bandera y al que se sigue.

Hay pequeñas celulas que se van creando de modo que comparten su forma de trabajo: libertad con responsabilidad, confianza, esfuerzo, aprendizaje. Cada vez que hay una persona nueva, se va integrando en el equipo, de modo natural, como la pieza perfecta que se necesita en el puzzle.

La mezcla de experiencia con la inexperiencia no es ningún problema. El equipo se encarga de arropar con paciencia y disciplina a las personas con menos experiencia. Así de manera natural se van creando esa espiral de trabajo: desarrollo, puesta en común del trabajo, proposición de ideas, responsabilidad de las tareas realizadas, seguimiento del producto, libertad,...

Plastic SCM no han construido un equipo de desarrollo. Han permitido que todos sus valores sean los artifices de crear ese fantástico grupo que cada día lanza una nueva release del producto.



0 comentarios:

"Pull" Mentoring

8:45 0 Comments

Recientemente se han producido tres nuevas incorporaciones en Plastic SCM. El equipo está creciendo con savia nueva. Para alguno de ellos no es su primer trabajo, pero para otros sí.

Al incorporarte a un nuevo equipo lo que sobran son las ganas de trabajar. La primera semana, utilizando simil de montañeros, podríamos decir que estás en el campo base aclimatandote. Se imparte un training en el que te familiarizas con la que será tu arma de trabajo: Plastic SCM. A partir de ese momento, comienza tu escalada hacia la cima de la montaña.

Mentor es un consejero o guía. Persona que da consejos, que dirige o encamina, como un sherpa en la montaña. En Codice Software no se nombra un sherpa por cada persona que entra, porque no tienes uno específico, tienes tantos sherpas como personas componen el equipo. Es verdad, que en esta escala hay un punto final, cómo una última referencia, pero en ningún momento hay que pensar que es más importante que el resto.

El equipo de Plastic SCM apoya, aconseja, ayuda, responde pero en ningún momento está buscando Robocop's . El “mentoring” lo hace realmente la persona que entra. Cada uno de manera personal se marca si quiere subir a un K2 o simplemente se conforma con el Mulhacen. Es “pull” mentoring. Básicamente todas “las operaciones” que realizas ocurren así. Cada instante en el que preguntas, muestras tu trabajo, compartes las ideas … estás haciendo “pull”.


Y cuando esto sucede:

  • Cada uno aprende las lineas base para realizar su trabajo
  • No necesitas que nadie te asigne las tareas
  • Las habilidades de las persona se van perfeccionando cada día de modo que dan más calidad tanto a su trabajo como al del equipo entero

Aunque ya no seas un novato, sigues haciendo “pulling” cada día?

0 comentarios:

Ciclo de Trabajo de Codice Software VI: Últimos pasos

0:05 0 Comments

Y llegamos al final de la serie. He intentado cubrir con una visión general todo el ciclo de trabajo que realiza el equipo de Plastic SCM, para sacar adelante el producto: herramientas, test, documentación.
¿Qué me falta por contar? Pues cómo sacamos una nueva versión de nuestro producto.

Nueva Release

Una vez que hay un número de tareas terminadas, probadas por Bamboo, revisadas y validadas… se crea una nueva release. Durante años se hacía una release nueva a la semana, muchas veces interna, otras veces la publicaban en la web. Con esto se pretendía tener:

  • Visibilidad de todo el proceso de trabajo (medible en releases) 
  • Solución de respaldo (frente a imprevistos) 
 Desde hace más de medio año dejaron de hacer releases semanales y pasaron a realizar una nueva release cada 24 horas. Sí, una cada día y no, no están locos al final de cada sprint. Cada día integran las tareas que se han sido revisadas, validadas y han pasado los tests.
Uno de los desarrolladores es el encargado de las releases o “integrador”.("The IntegraTHOR") En muchos equipos “top-agile” esto parece que no encaja, pero se trata de la base del proceso de integración controlada por el que primas versiones estables ante todo.

Test de Release

Es una de la tareas del integrador y tiene su sitio de honor porque es donde se dispara toda la artillería de testing.
Se pasan todos los tests automáticos en todas las combinaciones soportadas.
  • Smoke tests: en todas las plataformas y backends (bases de datos) soportados. 
    • Windows: desde W2k (que todavía soportan porque son unos nostálgicos), XP, W2003 server, 2008, Vista, 7 y ahora W8. 
    • Mac OS X 
    • Un montón de “sabores” de Linux: openSuSE, ReadHat, Ubuntu.
Combinando arquitecturas 32 y 64 bits (y en ocasiones SPARC 64 aunque hace tiempo que no están incluyendo este juego de pruebas).
Se usan los mismos juegos que usamos para “Bamboo” más otros como tests de instalación en línea de comandos, tests de “restart”, es decir , reinician el servidor a mitad de cada test para comprobar que no hay problemas de cachés y juegos especiales de merge y localización. 

  • GUI tests: ahora lanzamos el mismo juego que usamos durante las pruebas de “Bamboo” sobre todas las plataformas soportadas (no sólo una) para asegurar la compatibilidad. Han lanzado juegos especiales para la Shell Extension, plugins para Eclipse, Visual Studio, etc.
  • Performance tests: usan Amazon EC2 para esto, tests especialmente diseñados para asegurar que no se rompe el rendimiento de ciertas operaciones básicas con gran carga de datos. Miden también memoria y uso de CPU. 
En total los Tests de Release necesitan más de 24h para ejecutarse, pero con 7 servidores y un buen número de máquinas virtuales se pueden reducir a aproximadamente 6 horas.
El siguiente objetivo es usar mucho más las máquinas en cloud y reducir el tiempo a menos de 1h antes de que acabe el año, lo que les dará mucha más flexibilidad en la creación de las releases. Utilizan herramientas como FxCop para mantener la limpieza del código. NCover para medir la cobertura de sus tests y medir la complejidad ciclomática del código.

Tareas del Integrador

Las ventajas son muchas, pero la más importante es que tienen un responsable encargado de avisar de lo bien (o menos bien) que ha ido la release.

El trabajo del integrador es, en esencia es como un guardia de tráfico:
  • Coger cada tarea, integrar su rama. Sólo coge ramas que hayan pasado todo el proceso de test, revisión y validación. Vigila que las tareas pasen por cada uno de sus estados: de Open a Resolved, Reviewed y Validated. Y además que estén correctamente introducidas en el control de tareas para posteriormente obtener estadísticas útiles.
  • Encargarse de que los conflictos de merge se resuelvan bien y hacer saltar las alarmas ante cualquier problema (es una fase más de revisión). 
  • Pasar un juego inicial de tests: todos los unitarios y smoke lo más rápido posible (usa unas 6 máquinas para esto, reduciendo el tiempo de “smoke” a menos de 20 minutos). 
  • Pasar y monitorizar todos los Tests de Release
  • Crear las Release Notes
  • Generar los binarios de release. 
  • Actualizar los servidores internos. 
  • Lanzar la subida de la nueva release a la web.
  • Dirigir el test manual, supervisión y control de bugs detectados
El integrador es el último responsable de que la release vaya bien, de que se cumplan los criterios de calidad, de hacer saltar las alarmas si algo no va bien, de mantener siempre funcionando el juego de tests de release (ya sea haciendo el tareas de mantenimiento o asignando a miembros del equipo dichas tareas). Dada la posición privilegiada del integrador, tiene unan visión global del proyecto, por lo que es capaz de detectar puntos de mejora en el proceso y de sugerir nuevas funcionalidades, mayor cobertura en los tests, etc.

Conclusión

Como habeis podido leer, en el proceso de trabajo tiene un peso muy importante toda la parte de pruebas, con un número bastante alto de tests automáticos que completan con tests exploratorios. Soportamos muchas plataformas y cómo ya hemos dicho la calidad es una constante en nuestro trabajo. Nuestro proceso tiene que seguir mejorando mucho porque Plastic SCM compite codo con codo con productos como Perforce, ClearCase, TFS, Subversion o Git.
El equipo de desarrollo es el más pequeño que el de ninguno de ellos, pero Plastic SCM cuenta con una lista de características de control de versiones más amplia.
No es un trabajo sencillo, pero se ve que les encanta su trabajo y se esfuerzan  cada día por ser los mejores.
 ¿Te gustaría venir a conocernos?

0 comentarios:

Ciclo de Trabajo de Codice Software V - Documentación

22:44 0 Comments


En los capítulos anteriores hemos hablado de herramientas, procesos de test... y hoy voy a enseñaros donde se guarda toda la sabiduría de este proceso.

Doc Snippets

El equipo de Plastic SCM quería salvaguardar todo el trabajo realizado por cada tarea. pero en formato texto (Texto, sí, has leido bien. Esto aumenta los puntos dentro del programa de hackers!).
Desde hace 8 meses, crean un fichero donde puedes encontrar:

  • Qué hace cada tarea
  • Por qué es importante esa tarea
  • Enlaces con otras tareas
  • Imágenes de la funcionalidad añadida
El repositorio donde se almacena recibe el nombre de Task Documentation.

Items en el repositorio de TaskDocumentation


Hubo un planteamiento de adjuntarlo todo en el issue tracker, pero les daba rabia no meterlo en un repositorio de Plastic SCM.
El idioma oficial dentro de Plastic SCM es el inglés así que excepto las tareas primitivas, todo lo que te vas a encontrar está escrito en inglés.

¿Cuál es el sentido de los doc snippets?

Cuando alguien del equipo está realizando una tarea, escribir un pequeño texto de no más de 10 líneas no lleva mucho tiempo, unos minutos.
Gracias a ese pequeño esfuerzo estás generando material muy valioso para:
  • Blog posts: con el texto que cuenta la explicación de la tarea, el por qué, capturas de pantalla, tienes el inicio para poder escribir un post.
  • Actualización de manuales: ayudamos a la "technical writer" de Estados Unidos, para que no tenga que buscar las mil y una diferencias entre versiones ella sola. Dejar la documentación coherente, sin faltas ortográficas, es su trabajo... pero explicar el sentido de la nueva característica, o la mejora en el rendimiento es labor de cada miembro del equipo.

Imagenes de una tarea en el TaskDocumentation


0 comentarios:

Ciclo de Trabajo de Codice Software IV - DoD

8:07 0 Comments

En el anterior post el tema fueron los test, en este será el DoD (Definition Of Done ) dentro del ciclo de trabajo de Codice Software.
En el proceso de mejora continua de Plastic SCM han incorporado dos nuevas actividades:

Revisión de Código de cada Tarea

Todas las tareas, independientemente del tipo que sean, se revisan. Al escribir una nueva tarea en su propio issue tracker, TTS, le asignan el revisor de la misma y dentro de su planificación le reservan el tiempo correspondiente a la revisión.

El code review de cada tarea se puede hace con el sistema incluido en Plastic SCM, o con simples notas añadidas desde la vista de WebUI, cómo se puede ver en la siguiente imagen.

Code reviews on WebUI (Plastic SCM)


Validación de cada Tarea

Una vez revisada la tarea, otro miembro del equipo que tiene asignada la validación, coge la tarea y verifica que hace efectivamente lo que tiene que hacer.
Busca errores típicos que un test no encontraría:

  • un label mal puesto en un formulario
  • errores ortográficos
  • tab orders rotos
  • código que no tenga ningún sentido
Si el resultado es un bug se intenta reproducir de nuevo y se verifica que no vuelve a suceder. Todo el equipo está metido en las actividades de verificación y validación.

¿Que obtienen?

Pues sobre todo implicación en el proceso de calidad. Todo el equipo está concienciado y sabe que no hay labores de “tester”. La calidad es indiscutible en Plastic SCM

Al implantar el proceso completo con la validación/revisión de las tareas se ha ralentizado mucho el proceso completo de desarrollo. Hay que hacer estimaciones teniendo en cuenta estas dos nuevas fases para cada una de las tareas.

Han sido un par de semanas a ritmo más lento, y sin duda han sufrido un impacto en el número de tareas cerradas, pero la idea es evitar regresiones, bugs, …

Ahora están muy contentos porque notan que vuelven a coger velocidad de nuevo. Revisión y Validación están completamente incorporados a su flujo de trabajo.

Y seguimos desgranando el ciclo de trabajo de Plastic SCM!!! Aún hay más!!!


0 comentarios:

Ciclo de Trabajo de Codice Software III: Test

9:18 0 Comments

En el capítulo anterior, os he mostrado las herramientas de trabajo.
En esta ocasión os voy a enseñar la parte del ciclo de trabajo de cada uno de los desarrolladores de Plastic SCM, correspondiente a los test.

Testear cada rama

Durante el desarrollo de una tarea, la persona del equipo encargada de llevarla a cabo pasaba una serie de test en su rama. Esto lo puede hacer al finalizar el desarrollo de la tarea o las veces que quiera mientras la está haciendo.
Hay tres tipos de test, que se mantienen entre todo el equipo:

  • Test Unitarios: realizados en NUNIT, son rápidos y efectivos.
  • Test de Línea de Comandos: permiten probar la parte Interfaz de Línea de Comandos (CLI ) de Plastic SCM. Hay cerca de 400 tests, y cada uno tarda un mínimo de 5 segundos por test. Prueban el sistema end-to-end. Desde hace más de un año, están intentando rebajar el número de tests de este tipo y aumentar los tests unitarios, pero durante mucho tiempo han sido el centro del sistema de pruebas y un salvavidas. El mayor inconveniente es el tiempo de ejecución: un juego completo puede tardar casi 50 minutos o 1 hora en una máquina "normal".
  • Test GUI (Graphical User Interface): en esta parte utilizan test complete. Hay más de 250 tests para la parte de interfaz gráfica. Estos test, se ejecutan por cada tarea, pero lo hacen en una máquina virtual, porque hacerlo en tu propia máquina significa quedarte sin control: se apoderan de ratón y teclado.
Al realizar esta parte, lanzar los test en la máquina de cada desarrollador, se han encontrado con que:
  • Ralentizan el trabajo: ya he comentado que los tests de GUI, pueden llegar a bloquear la máquina.
  • Saltar esta fase: es fácil hacerlo, pensando esto no falla seguro.
  • No hay log de registro: cada uno tiene la responsabilidad de hacerlo. Saben que las pruebas que no hagan se las pasan a la persona responsable de los merges, porque nada se queda sin probar.

Conclusión

Tenían que lograr pasar los test sobre cada tarea de forma controlada.
Esto lo han conseguido con Bamboo (Atlassian) empleando, a qué no lo adivinas?... pues sí "Rama por Tarea".



 El proceso de trabajo es el siguiente:
  1. Bamboo escucha con los scripts de Plastic SCM hasta que encuentra una rama con el atributo "status" colocado a "finish"
  2. Cambia el estado a "testing"
  3. Utilizando el update de Plastic SCM, optimizado para bajar sólo lo que ha cambiado desde el punto anterior que tuviera Bamboo, baja el código de la rama.
  4. Compila, si falla lanzará un error.
  5. Pasa FXCop buscando nuevos fallos.
  6. Pasa tests unitarios.
  7. Pasa Smoke Test, los test para la parte de Interfaz de Linea de Comandos (CLI)
  8. Pasa los test GUI, para la parte gráfica.
Si todos los tests han ido bien y no han lanzado error, la rama se pasa a estado "tested" y se va a por la siguiente rama.
Ahora el proceso es fantástico, se pasan los test de Bamboo en Windows y en Linux en paralelo.

0 comentarios:

Ciclo de Trabajo de Codice Software II - Herramientas

21:25 1 Comments

Ya conocemos los inicios de Plastic SCM, ahora veamos cómo trabajan.

Las armas del equipo de Plastic SCM son muchas y variadas. Son guerreros preparados para cualquier batalla :P. Pero hay tres que destacan por encima de todas, son las que utilizan a diario:


TTS

TTS es su propio issue tracker con el que manejan todas las tareas. TTS son las siglas de Task Tracking System.  La primera versión de TTS data de 2001!!. La desarrollaron David y Pablo.



TTS, no es un producto comercial, aunque muchas veces han pensado en que sería un buen complemento para Plastic SCM. Puede que una de las razones para no hacerlo, es que saben el trabajo que hay detrás del lanzamiento y el mantenimiento de un producto.
 Dicho esto, TTS está en el ciclo de mejora continua. El equipo propone ideas que se valoran y se van implementando.
 ¿Pero qué contiene el TTS? Pues todas las descripciones de:
  • Información de Bugs: priorizados usando el cálculo del user pain. Basado en este artículo de Jonathan decidieron utilizar estas reglas para pensar de manera más estructurada, y no simplemente aventurarse en la calificación de las incidencias con un muy alto o muy bajo. 
  • Nuevas tareas: suelen llevar un análisis y/o un diseño asociados, normalmente bastante visuales, ya sea en un documento o en la wiki, dependiendo del ánimo de quien escriba. 
  • Rendimiento:horas estimadas vs horas trabajadas. Las trabajadas (un poco anti-Scrum) les sirven para tener una base de datos de estimaciones propias muy buena, muy Steve McConnell

Wiki Interna

En al wiki se guarda y actualiza información acerca de documentación del proyecto, artículos técnicos,  infraestructura, y un divertidísimo apartado con frases míticas del equipo:
"No he pasado los test, pero este cambio no puede romper nada...

fatal error
 "Es un fallo muy raro que no le va a salir a nadie..."

El arma secreta

 Dentro de las herramientas ocultas existe una poderosa hoja de cálculo. Es su particular gurú que les ayuda a hacer el cross-check del plan, la estimación de las tareas en horas (con PERT) y alguna que otra banal tarea. Creo que la erradicarán cuando terminen Plastic SCM version 9.

En el siguiente capítulo hablaremos de la parte de test dentro del ciclo de trabajo de desarrollo.

1 comentarios:

Ciclo de Trabajo de Codice Software I - Historia

0:09 0 Comments

Hace tiempo que el equipo de Codice Software tenía ganas de ganas de contar cómo es su ciclo de trabajo para crear Plastic SCM. Pero son tímidos, así que voy a aprovechar que acabo de unirme a ellos para desvelaros los detalles más secretos.

Un poco de historia

El desarrollo de Plastic SCM empezó allá por Agosto de 2005. Comenzaron siendo tan sólo dos desarrolladores, los fundadores insensatos de esta locura. Para crear el núcleo del equipo, se unieron dos intrépidos más. Y ahora, Plastic SCM se elabora cada día gracias a este fantástico y ya numeroso grupo.

Desde el principio se tenía claro el modo de trabajo, “Rama por Tarea”. ¿Por qué? Porque era lo que querían que Plastic SCM soportara desde el principio y que mejor forma de ponerlo a prueba que usándolo ellos mismos. 


La metodología de trabajo adoptada fue Scrum, porque simplemente encajaba a la perfección. Un backlog lleno de historias, con sus tareas correspondientes, cada una realizada en una rama. Iteraciones y entregas incrementales de producto. Era lo que necesitaban. Comenzaron realizando sprint de 30 días (4 semanas).  

En el año 2007 fueron la primera PYME en conseguir CMMi2, y trabajando con el modelo Scrum.
Fue un periodo bastante duro, puesto que a finales de 2006, Noviembre exactamente, ya habían lanzado Plastic SCM 1.0 y en esos momentos estában trabajando en la version 1.5.   El equipo se fue afinando en todos los ámbitos: en las estimaciones, en el desarrollo... La consecuencia fue comenzar a realizar mejoras en el modelo de trabajo.
Manejan un “product backlog” bastante dinámico, en el que congelan todo lo que pueden cada dos semanas. Es decir, ahora el Sprint se ha reducido a dos semanas.

La estimación de las tareas la realizan en horas. Llegan a ser tan precisos en las estimaciones como un reloj suizo. El máximo de tiempo que puede alcanzar una tarea es de 16 horas. Todas las tareas están bajo control y manejadas por todos desde su propio issue tracker, sean del tipo que sean: bugs, nuevas funcionalidades, performance, refactor, tests,.... Y a partir de aquí comienza la parte más divertida: el desarrollo
Regla de oro: no hay código sin tarea asociada, aunque sea tan sólo una línea

Trabajan sobre tres pilares fundamentales e indiscutibles: testing, control de versiones y control de tareas. Los tres forman el core para el desarrollo de software.

El tiempo pasa y PlasticSCM ha ido creciendo. Unos datos muy simples para que os hagais una idea de su evolución:
  • Julio 2007: 180.000 líneas de código
  • Julio 2012: 845.000 líneas de código, de las cuales 250.000 son de test. (casi un 30% de test)

No os perdais nuestra siguiente entrega... las armas con las que desarrollamos Plastic SCM

0 comentarios:

Plastic contra Perforce

15:53 0 Comments

Esto de crear un producto para desarrolladores tiene su gracia: no hay productos 'locales' así que a la fuerza tu software tiene que ser global.

Y para un equipo en el Parque Tecnológico de Boecillo, Valladolid, la idea de competir en la liga mundial suena genial (suena a palabras mayores, la verdad).

Pero el tema es que, efectivamente, en cada oportunidad nos vemos con Perforce, AccuRev, ClearCase, Mercurial, Git, Subversion, TFS... cada uno de ellos de un tamaño comparativamente considerable.

Vamos, que vas a la empresa de la puerta de al lado y usan o piensan en usar uno de los de la lista anterior... y el hecho de "estar cerca", no juega casi nunca a tu favor.

Perforce

Perforce es uno de los sistemas de control de versiones más utilizados. Por supuesto Mr. Torvalds también lo criticó a muerte en su famosa charla (eso de destruir empresas, empleos y no llevarse nada a cambio se le da bien :P), lo que no quiere decir que sea un producto muy, muy, muy potente.

Se usa en muchísimas industrias pero en la que es casi el estándard es en videojuegos. Casi cualquier equipo que se precie ;) tiene un P4 instalado.

Las características particulares que se usan en gaming son:

  • Manejo de ficheros muy, muy gordos
  • Velocidad... tiene que ser rápido

    Plastic entra en acción

    Competir contra Perforce (una empresa que factura unas cuantas decenas de millones, 200 empleados, fundada en el 95) no es sencillo, pero la oportunidad viene por:
  • No es muy bueno manejando ramas (hasta hace poco hasta decía que eran 'evil').
  • No es distribuido (vale, puedes montar un proxy pero no es lo mismo... un proxy es la aproximación 'pobre') (ojo, nosotros, además de ser distributed, también tenemos un proxy, por aquello de tener 'de todo').
  • Tampoco es que sea brutal con los merges

    De hecho, una de las características de Perforce solía ser "the fast scm", pero claro, con Git a la vista... lo de "the fast" quedó fuera... y supongo que tampoco se iban a poner "the furious", así que pasaron a "version everything" (por cierto, un slogan no muy bueno que nosotros también usamos en nuestros screencasts hace aaaaaaños, aunque no, no nos han copiado ;P).

    No obstante, aunque la batalla de la velocidad es complicada, a nosotros siempre nos gusta entrar al trapo. Esto son unos tests hechos con un repo de ejemplo basado en el código de uno de nuestros clientes:

    Y es una de las razones por las que algunos equipos que usan Perforce no pueden usar ramas: no pueden esperar 30 minutos para crear una rama cuando otros productos lo hacen en 2 segundos...
  • 0 comentarios:

    Que las ramas te dejen ver el bosque

    1:14 2 Comments

    Ya, ya, ya sé que el dicho no es así... pero es que en el mundo de desarrollo de software se está imponiendo justo lo contrario.

    Habéis visto las release notes de Bamboo 4.0? Pues efectivamente: es todo sobre branching y merging.

    Me gusta mucho leer esto porque cuando arrancamos Plastic hace ya unos cuantos años, nuestro objetivo era precísamente ese: ramas por todos lados.

    Hace mucho tiempo escribí sobre cómo hacer "branch per task" con CruiseControl (Bamboo no estaba tan de moda... ¿existía?) y hace poco Luis preparó el plugin de Bamboo (versión 3!) para monitorizar ramas independientes, así que, como decía, leer sobre Bamboo soportando ramas "por defecto", me ha encantado!

    Ramas malditas

    "Branches are evil" era el lema de Subversion y también de Perforce hace unos pocos años... "No crees ramas, son malas, malditas, dan miedo y te llevarán al infierno" (o algo peor) era lo que los profetas del "mainline" predicaban todos los días. Trabaja en "mainline" (línea principal, vamos, que una sóla rama y hagas checkin), decían.

    Como casi siempre que alguien dice "no hagas esto" es por una razón bastante patética: Subversion es horrible manejando ramas (Perforce también es horrible manejando ramas: crea una rama en un repo de 100mil ficheros... media horita de nada... es por eso que las empresas de video-juegos están saltando del barco como si fuera el Titanic).

    (Aquí entra el punto en el que los que usáis SVN os cabreáis y decís "sí, si que se puede, eso no es verdad". Entonces tengo que explicar un rollo del tipo: "vale, te sirve para escenarios 'hola mundo' con 3 ramitas de juguete. Prueba con 1000 ramas, o 5000, y con un montón de ficheros, y prueba a hacer refactor de verdad, renombrando un fichero y modificándolo en una rama, cambiándolo en otro... y haz merge... Se rompe, ¿verdad? Pues eso, de juguete". Si te pones pesado con el tema de SVN invocaré al sumo pontíce: "tío, Torvalds hizo Git justo porque el merge de SVN era una porquería...". Normalmente eso funciona.)

    Así que... sí, afrontémoslo: los predicadores de Subversion engañaron a una generación entera de programadores en todo el mundo (2000-2008) mutilando su forma de pensar, haciéndoles creer en la religión única de "las ramas son malignas".

    Es momento de abrir los ojos.

    Parche tras parche

    Como eso de manejar ramas era una castaña y las versiones se rompían todos los días, hubo que poner un poco de pegamento alrededor.

    Y así nació la integración continua, que como idea está genial, pero que la ausencia de ramas es un pegote: haz checkin continuamente y pasa tu test-suite mágica y si rompes el build, enciende un semáforo (o que te electrocute tu ratón) y lo arreglas en un plis-plas antes de que tus colegas te cuelguen de la pizarra de tareas del scrum.

    A ver... es mejor que no hacer tests, seguro, y como muchos vivíamos en la inmundicia sin esto... pues era un avance.

    Lo malo es que se convirtió en religión: "no, no necesito ramas porque hago CI".

    Y bueno... duró un poco la cosa.

    El tema es: haces checkin, petas un test, el sitema de CI te avisa pero... ¡¡tienes a todos tus compañeros echando humo porque has petado el build!!

    Es reactivo. Lo rompes, lo arreglas.

    No está mal en ausencia de algo mejor, pero supone que:

  • Te da miedo hacer checkin por si rompes el build
  • Haces checkin mucho menos frecuentemente que cuando aprendes CI siguiendo el ejemplo del "hola mundo", del "juego de póker" o de cualquier otro invento de esos que funcionan siempre
  • No usas el control de versiones más que para... entregar código... que bueno, ha sido lo que la generación subversion ha aceptado como bueno... a falta de algo mejor

    Regreso al futuro

    Hace unos años en la casi-biblia de continuous integration, el señor Duvall (no confundir con el actor) veía un futuro pre-claro en el que para evitar el problema de los broken builds en CI usando un "two phase commit".

    Independientemente de que lo que diga tenga o no sentido, usó una receta mágica: nadie en su sano juicio le lleva la contraria a alguien que dice "commit de dos fases", no vaya a ser que encima le toque explicar el algoritmo!! Así que, cuando alguien usa "two phase commit", seguro que no es en vano... creámosle! :P

    Bien, el mecanismo del futuro perfecto consiste en:

  • Evita romper los builds
  • Creando un "almacenamiento temporal" en el que tus cambios viajan hasta el CI server, se compilan, se prueban y, si todo va bien, se completa el checkin

    Hablé del tema hace tiempo y la sigo pensando lo mismo: puede usted hacerlo más complicado todavía introduciendo una paloma mensajera para enviarte los resultados de build de vuelta...

    ¡¡Vaya montaje por no usar ramas!!

    El invento, y de ahí lo de "regreso al futuro" llevaba años inventado: usa ramas para tus tareas y déjate de cuentos!

    Ya estaba inventado

    Si hoy dices "ClearCase" tu índice de "cool" cae en picado... así que no lo digas.

    Pero ClearCase era un sistema de control de versiones que ya hacía ramas y merges buenísimos en el año 95, 5 años antes del "Subversion doom's day".

    Casi todo lo que sepas sobre control de versiones ya lo hacía ClearCase (CC para los amigos) hace 15 años. Es como el "xerox park" de los controles de versiones, parece que no se inventó nada después...

    El tema es que ClearCase era caro. Caro de narices. Caro como cuando se pagaba por el software una fortuna. Una licencia de CC costaba entre 3 y 4mil Euros por usuario. 5mil si era de multi-site (capacidad distributed, con réplica y todo, pero en plan pantalones campana).

    Hacer algo mejor que ClearCase pero rápido y barato fue nuestra primera motivación para desarrollar Plastic...

    Al tema: CC ya podía crear todas las ramas que quisieras, y mezclarlas bien. Lo que pasa es que CC tenía algunos problemillas:

  • Tiraba una barbaridad de la red (vistas dinámicas y otras maravillas), así que en una LAN bien configurada (difícil de configurar) iba bien... pero muy pocos sysadmins de verdad eran capaces
  • Cuando la red no iba bien... era leeeeeento
  • Instalarlo era un dolor. En 8 horitas, con experiencia, montas uno sin problema. Sí, 8 horas... (para que luego digan que instalar plastic, en 40 segundos, es lento :P)
  • Cambió de manos: lo compró primero Rational, le pusieron una capa "metodológica" por encima, para hacerlo más sencillo, y se lo cargaron. Nació UCM, con streams, sobre 2000. Un sistema con todas las desventajas de ClearCase y Subversion juntas... Lo mataron.
  • He dicho que era caro?

    Así que el "xerox park" del control de versiones cabó su propia tumba...

    No obstante, hasta hace bien poco, incluso en el máximo esplendor de Subversion, para que os hagáis una idea de lo que es la pasta..., CC facturaba el 50% del negocio del control de versiones, frente a un 0,7% de SVN... mucho ruido y pocas nueces, que se dice.

    El segundo advenimiento de Torvalds

    Y entonces en 2005 todo cambió.

    Los "falsos profetas" de SVN tuvieron que ver como regresaba el mesías del open source para dividir las aguas y cargarse a SVN rápidamente: una charla de Torvalds anunciando, en google, eso sí, que había creado, en 3 días (muy trascendente) un nuevo control de versiones que:

  • Manejaba bien las ramas
  • Hacía bien los merges
  • Era distribuido

    Y mató a SVN en 3 años.

    Todos, sí, todos, los proyectos open source importantes del mundo dejaron SVN y pasaron a Git (o Mercurial, el hermano siniestro de Git) antes de que terminase 2008.

    No está mal para Mr. Torvalds, el tío que más pasta ha hecho ganar a otros con su software y que menos se ha quedado... todo un mesías.

    Vete por las ramas!

    Git es distribuido, que mola, porque puedes tener tu repo en tu máquina y hacer push y pull con el central, pero trabajar totalmente desconectado.

    Pero, el principal tema no es que sea "dvcs" (que sí, que mola!) es que maneja muy, muy bien las ramas.

    Crea ramas para lo que quieras, para cada tarea (sí, por cada entrada en tu issue tracker favorito, una rama), y trabaja en ellas, y luego haz merge, sin problema.

    De eso va el cambio. De usar ramas.

    Así que los "profetas de svn" se quedaron compuestos y sin novia.

    SourceForge se fue a pique frente a GitHub (el sitio por antonomasia que logra que un sistema distribuido sea, uhm... centralizado!), la gente de Perforce ya no tiene narices para decir "branches are evil" y dice todo lo contrario (con el mismo producto, eso sí, que lo hace igual de mal que antes), "distributed" y dvcs son las palabras de moda (hasta SVN intentó convencer de que era dvcs... por tener un puerto abierto... argh!), y el control de versiones ya no es "una herramienta coñazo" sino lo que hace que tu proyecto sea "cutting edge". Tela!

    Dónde estábamos nosotros?

    A nosotros, con Plastic, no nos suena raro. En 2005 queríamos hacer algo tan potente como ClearCase pero rápido, fácil, simple de instalar y asequible. Pronto vimos como Git nacía y nos pisó nuestro sueño de versionar el Kernel de Linux, aunque era un sueño loco dadas las guerras religiosas que se montaron alrededor del control de versiones (nota: años después, en la otra punta del mundo, plastic 4 versiona repositorios comerciales que incluyen todo el código de linux, android, chromium, el quake y hasta el grep y el tar... 300 mil ficheros... no está mal!).

    El caso es que la base era la "rama por tarea": hacer ramas bien, rápidas, muy rápidas, poder tener muchísimas, y poder hacer bien los merges también. Y además hacerlo fácil.

    Así que en 2006, cuando lanzamos Plastic 1.0, la gente nos miraba raro en las demos cuando les decíamos lo de "sí, sí, crea ramas".

    Ahora, años después, y gracias a Git, Mercurial y el cambio total de tendencia, lo que nos piden es precísamente eso: ramas, ramas, ramas.

    Nuestro objetivo era diferente al de Git (vale, y no podemos decir lo que nos de la gana en una charla, como Torvalds, y quedarnos tan anchos... porque no hemos creado un sistema operativo) porque al final siempre hemos estado centrados en crear un sistema no para proyectos open sino para empresas: de cualquier tamaño, pero empresas.

    Se hace "mainstream"

    Así que ahora la gente de los "continuous integration systems", como Atlassian y su Bamboo, por fin ha pillado el rollo y adapta su sistema a "branching". El paso natural. La puntilla final, espero, para los que viven anclados en el pasado "sin ramas", y un paso adelante enorme que evangelizará a muchísimos usuarios.

    Espero que por fin el legado "evil" de SVN se diluya...

  • 2 comentarios: