Author Archive

  • Code Retreat con Enrique Comba Riepenhaunsen

    0

    Pero, ¿en qué consiste un CodeRetreat?

    Un Code Retreat es en realidad un día de diversión y aprendizaje. Durante un dia, programaremos de manera repetitiva un problema, practicando TDD (Test Driven Development), PP (Pair Programing)  y mejoras continuas sobre nuestro código ayudados por nuestro facilitador, Enrique Comba. Muchisimas gracias, Enrique!

    PROSPECTO de un Code Retreat

    Ingredientes

    • Problema a resolver: El juego de la vida de Conway
    • Día: 7 de Mayo de 2011
    • Horario: 9:00 a 19:00
    • Duración de cada pomodoro: 45 minutos
    • Portátil: trae tu arma de trabajo
    • Lenguaje: el que cada pareja decida para trabajar de forma cómoda

    Indicaciones

    Mediante Pair Programing, compartiendo conocimiento, se atacará el problema de Conway, ayudados por las indicaciones de nuestro facilitador.
    Se realizarán pomodoros de 45 minutos de duración y al final de los mismos 10 minutos de descanso y reflexión en común sobre el pomodoro ejecutado.
    Todo el código se borra al final de cada sesión y se realiza un cambio de pareja. La forma óptima de trabajo es usando TDD (Test Driven Development).

    Contraindicaciones

    Un Code Retreat es una actividad en la que se comparte y se aprende, no realizarlo si estas solo.

    Posología

    La administración de un Code Retreat se hace utilizando todos los sentidos:

    1. Vista: para ver lo que estamos escribiendo.
    2. Oido: escuchando las indicaciones de nuestro compañero en la sesión y del facilitador.
    3. Gusto: saboreando con TDD como se pasa de rojo a verde, refactorizamos y vuelta a iniciar el proceso.
    4. Tacto: deslizando nuestros dedos por todo el teclado.
    5. Olfato: estando atentos a esos “olores” en el código: nombrado, refactor, etc.

    Efectos secundarios

    Durante la realización del Code Retreat usted puede experimentar varios estados: alegría, frustración, desesperación, euforia. Pero al final tendrá lo que se viene a denominar como cansancio feliz y satisfacción.

    Intoxicación

    Los casos de intoxicación se resuelven con la realización de Katas, Coding Dojos y sobre todo con la práctica individual y constante en la soledad de nuestro dominio.


    LANZAMIENTO
    Próximamente se pondrán a disposición los tickets para el evento y se anunciará en el blog y en twitter

    PATROCINADORES
    Muchísimas gracias a nuestros patrocinadores, sin ellos no seria posible


    Wellness Telecom Agroguia
    EAM Kubbos
    Wiseri
  • Coding Dojo en Segovia

    4

    Tenemos la suerte de estar en una comunidad, Castilla y León formada por muchas provincias en las cuales hay mucha gente con ganas e ilusión.
    Desde Segovia, Javier Garcia Garrido , se ha lanzado y nos propone Coding Dojo todos los últimos viernes de cada mes

    Sitio: Escuela de Informática de Segovia

    Ver mapa más grande
    Cuando: Viernes 25 de Marzo de 2011
    Horario: 16:00 a 19:00
    Practicamos: La kata del mes de 12Meses12Katas

    Os esperamos a todos!!!

  • II Code Kata de Agile CyL

    0

    Día: 12/02/2011
    Hora: 10:00 –14:00
    Lugar: Centro Julian Sánchez El Charro, Plaza de la Concordia – Salamanca
    Como llegar: El centro está situado detrás del Corte Ingles de Salamanca

    II Code Kata
    Nos vamos a Salamanca a disfrutar programando.

    Tenemos dos posibles ejercicios:

    Objetivo: pasar un buen rato mejorando nuestras técnicas de desarrollo de software, buscando resolver un problema a partir de TDD y Pair Programming.

    Os esperamos a todos!!!

  • Reunion 22/01/2011

    1

    Día: 22/01/2011
    Hora: 10:00 –13:30
    Lugar: Sala 26, Centro Cívico Zona Sur, Plaza Juan de Austria – Valladolid

    Taller SCM
    Aprendizaje y comparativa acerca de distintos sistemas de control de versiones: GIT, Mercurial y Plastic SCM

    ASISTENTES

    1. Javier Santana
    2. Feliz Lopez
    3. Jose Da Rocha
    6. Isidro Merayo
    7. Javier Acero
    8. Javier Gamarra
    9. Jorge
    10. Rafael Cano Parra
    11. Daniel Primo
    12. Mario de Frutos
    13. Eduardo Ferrandez
    14. Susana
    15. Pablo Santos
    15. Amalia Hernandez
    16. Jorge Jimenez

    RESUMEN

    La charla/taller de hoy, consistía en hacer un acercamiento a Git, y PlasticSCM. De la mano de Pablo Codice Software , uno de los desarrolladores de Plastic SCM lo hemos tenido mucho más fácil.

    Pablo nos ha contado los entresijos de Git, utilizando una presentación de Scott Chacon y nos ha enseñado desde dentro como funciona Git (ls -C .git), para poder entender un poco más, que estamos haciendo en realidad cuando tecleamos git commit -m “Modificado fichero”.
    Conceptos como:

    • DAG, Directed Acyclic Graph, diciendolo de manera simple es la forma en la que se almacenan los objetos Git. Todos se comprimen y se identifican por un hash SHA-1.
    • Cuatro tipos de objetos en Git:

    Blob: todos los objetos son datos
    Tree: representan los directorios
    Commit: se refiere  a un tree
    Tag: etiquetas

    Como Pablo ha comentado, la implementación de Git es una pasada, brutal. Sencilla, pero tan eficiente: la distribución de información en varios directorios, sacar datos de todos los commmit, etc…

    La charla dio para mucho más: momentos distendidos acerca del buen marketing de Git, explicación de la forma de trabajo en Codice Software  por supuesto una presentación de Plastic SCM.

    Plastic SCM, es sobre todo una herramienta gráfica.

    Las joyas de la corona de Plastic son:  la creación de ramas, mostrar la diferencias entre ramas, facilidad para crear una nueva release  (http://www.plasticscm.com/features/task-driven-development.aspx)

    Se ofreció en streaming la charla como primer experimento porque fue un poco precipitado. Parte de la grabación de la charla la podeis encontrar aqui (perdonad la calidad, mejoraremos en siguientes reuniones):

    Algunas imágenes del Taller SCM:

    Muchísimas gracias a Pablo por su charla y a todos los asistentes.

    En las cañas agiles se plantearon proyectos, reuniones, … vamos a por ellos!!

  • Microsoft Security Development Lifecycle, SDL

    0

    SDL consiste en un proceso de garantía de la seguridad, centrado en el desarrollo software.

    SDL es el conjunto de procesos que marca Microsoft en el desarrollo software atacando de dos maneras:

    • Con 4 niveles dentro del Modelo
    • Colocando actividades en cada uno de las fases del ciclo de vida clásico del proceso de desarrollo

    Como todo producto Microsoft está orientado a integrase con lo suyo. Así dependiendo de la fase donde estemos diseño,  implementación ofrece plantillas o analizadores que se integran de manera perfecta con Visual Studio Team System 2008.

    Os adjunto un resumen muy breve del producto, que la verdad viene bien explicado en la web o en las MSDN.

    Desde 2004 se ha instaurado en Microsoft como algo obligatorio en toda la empresa para conseguir con SDL mejorar la seguridad del software. SDL  tiene como objetivo reducir tanto el número como la gravedad  de los bugs del software. SDL se introduce en todas las fases del desarrollo software.

    SDL está basado en tres conceptos básicos:

    1. Educación
    2. Mejora en el proceso continuo
    3. Responsabilidad

    La educación continua y la mejora de los miembros de un equipo de desarrollo software es crítica. Invertir en formación  ayuda a las empresas a estar preparadas ante los cambios tecnológicos y las amenazas que se deriven de ello. Porque el riesgo no es estático, SDL hace el énfasis más fuerte en entender la causa y el efecto de las vulnerabilidades (bugs)  en la seguridad. Necesita una evaluación periódica de los procesos SDL y una presentación de los cambios en respuesta a los cambios en la tecnología o a las posibles amenazas. Se recogen los datos obtenidos para evaluar la efectividad de la prueba realizada (entrenamiento); se usan procesos de métricas para confirmar la conformidad del proceso  y las métricas a posteriori (post-release) ayudan como una guía a futuros cambios. Finalmente, SDL almacenará todos los datos que podrán ser utilizados a posteriori. Cuando esto se combina con una respuesta detallada tanto de la seguridad de la aplicación como de los planes de comunicación, una empresa puede proporcionar una orientación concisa y convincente a todas las partes afectadas con el problema.

    Modelo de Optimización de Microsoft SDL

    La integración de los conceptos de desarrollo seguro en un proceso de desarrollo puede ser costosa e intimidante si no se hacen de forma correcta. El éxito o el fracaso dependen de variables como el tamaño del equipo de desarrollo, los recursos que se poseen (tiempo, talento, presupuesto) y el apoyo por parte de la gerencia. El impacto de estos intangibles pueden ser controlados mediante la comprensión de los elementos que componen las buenas prácticas en la seguridad y estableciendo implementaciones prioritarias basadas en los niveles de madurez del equipo.

    El modelo de optimización de SDL ha sido diseñado para facilitar de manera gradual una implementación consistente reduciendo los riesgos. El modelo permite hacer cosas tanto a los desarrolladores como a los managers:

    • Permite evaluar el estado de la seguridad del desarrollo mediante el uso de una escala de cuatro niveles  de madurez.
    • Los cuatro niveles de madurez de seguridad del Modelo de Optimizacion de SDL

    • Crear una visión practica y una hoja de ruta para ir avanzando por los niveles de SDL en cada una de las 5 areas del desarrollo software:
      • Formación, Normas, y características  a seguir
      • Requerimientos y diseño
      • Implementación
      • Verificación
      • Lanzamiento y Respuesta
    • Mostrar un esquema práctico y las actividades rentables en cada una de las 5 fases teniendo en cuenta el presupuesto, la planificación y los esfuerzos del equipo de desarrollo del software.

    El modelo de optimización de SDL consiste en:

    Una introducción a SDL e indicaciones de cómo usarlo
    Un cuestonario para mostrar el estado actual de la seguidad del desarrollo en los niveles de SDL
    Tres guias de implementacion con detalles de los pasos necesarios a realizar para ir avanzando en los distintos niveles de madurez en cada una de las 5 areas del desarrollo.

    Aplicación de SDL

    Es importante dejar claro los tipos de proyectos que pueden ser objeto de los controles impuestos por SDL. La experiencia sugiere que se elijan teniendo en cuenta una o más de las siguientes características:

    • Desarrollo de un producto propio
    • Procesos de identificacion personal (PII) u otra informacion confidencial
    • Comunicaciones periodicas con Internet o con otras redes.

    Roles, Responsabilidades de las personas encargadas de la Seguridad

    SDL incluye criterios generales y descripciones para los roles que van a llevar la seguridad y la privacidad. Estos roles se indican durante de la Fase de Requisitos del proceso SDL. Estos roles son de carácter consultivo y proporcionan a la empresa la estructura necesaria para identificar, catalogar y mostrar las cuestiones de seguridad presentes en el desarrollo de un producto software.

    Estos roles incluyen:

    • Rol de Asesorar, Revisar: estos roles se diseñan para tener una visión global acerca de la seguridad; con permisos para aceptar o rechazar los planes de seguridad del equipo
    • Un Equipo formado por los mejores: estos roles son los que negocian, aceptan y marcan un mínimo en los requisitos de seguridad y el mantenimiento de las líneas claras de comunicación durante el desarrollo del producto software.

    Actividades del Proceso SDL

    Es un conjunto de actividades de seguridad obligatorias, que se van a mostrar en el orden en que deberían ocurrir y agrupadas por las fases que marcan el ciclo de vida clásico en el desarrollo del software. Muchas de las actividades expuestas deberían proporcionar cierto grado de seguridad si su implementación se lleva a cabo de manera independiente. De todos modos, desde la propia experiencia, Microsoft recomienda que las actividades correspondientes a la seguridad se ejecuten como una parte más del proceso de desarrollo, consiguiendo mayor grado de seguridad que actividades desarrolladas por partes o hechas ad-hoc para un proyecto.
    Modelo SDL

    Es importante que si la empresa se centra en la calidad, utilice las herramientas y la automatización de SDL, puesto que le ofrece resultados completos y exactos y no se queda simplemente en un documento aislado obtenido en una fase del ciclo de desarrollo.

    Actividades Obligatorias de Seguridad

    Existen 16 actividades obligatorias de seguridad que todo equipo que vaya a emplear SDL debe realizar. Estas actividades se revisan de manera constante y son fruto del conocimiento y la experiencia de los equipos de Microsoft. Como se acaba de comentar estas 16 actividades marcan un mínimo de realización por parte del equipo, que puede añadir todas las actividades que considere necesarias.

    Requisitos Pre-SDL

    Practica 1, Formación: todos los miembros del equipo deben recibir la formación adecuada para tener todos los conceptos acerca de la seguridad y la privacidad que se va a llevar a cabo en el proyecto.

    La formación básica estaría centrada en temas como:

    • Diseño de seguridad: reducción de ataques, principios de mínimos privilegios, seguridad mínima establecida, etc.
    • Amenazas en el diseño (modelado): restricciones de la arquitectura, implicaciones propias del modelo, etc.
    • Codificación segura: errores aritméticos, bucles infinitos, Cross-site Scripting( de las aplicaciones Web), criptografía no muy robusta, etc.
    • Test de seguridad: diferencias entre test de seguridad y test funcionales, métodos de testeo de la seguridad, etc.
    • Privacidad: en lo relativo a los datos, asumir riesgos, aprender buenas prácticas, etc.

    Fase 1 Requisitos

    Practica 2, Requisitos de Seguridad: Lo fundamental en el desarrollo de un sistema de seguridad para un producto es considerar que la seguridad y la privacidad son lo primero. El punto óptimo donde definir la integridad del producto se debe decidir durante las etapas iniciales. Esta definición temprana de requisitos, permite a los equipos identificar las claves de los resultados, permitiendo la integración de la seguridad de manera que minimice “el encontronazo” con la planificación del desarrollo.

    Practica 3, Umbrales de Calidad: Se marca lo que se considera como nivel mínimo de calidad que se quiere adoptar. Definiendo estos criterios el equipo empieza a asumir los riesgos asociados a la seguridad y privacidad de los datos del proyecto. Por ejemplo, todos los “warning” de la compilación deben estar arreglados antes de subir el código al repositorio. También sería una buena práctica tener un gráfico donde reflejar los niveles de calidad alcanzados, es un indicador muy bueno con vida a lo largo de todo el proyecto.

    Practica 4, Seguridad y Evaluación de Riesgos: Son procesos obligatorios que identifican aspectos funcionales del software y para los cuales se necesita dedicación:

    • Aspectos relacionados con la seguridad:
      • ¿Que parte del proyecto necesita un modelo de riesgos antes de ser lanzada?
      • ¿Qué parte del proyecto necesita diseño de seguridad antes de ser lanzada?
      • ¿Existen test adicionales de seguridad o requisitos que se consideran necesarios para minimizar los riesgos en la seguridad?
      • ¿Cuál va a ser el ámbito de los requisitos de test?
      • ¿Cómo se evalúa el impacto de la privacidad de los datos?

    Fase 2 Diseño

    Practica 5, Requisitos de Diseño: El sitio ideal para marcar el grado de fiabilidad que deseamos en nuestro proyecto es en la parte inicial del ciclo de vida del proyecto, por eso es muy importante considerar todo lo relacionado con la seguridad y el control de los datos en la etapa de diseño. Además es importante que el equipo distinga entre características de seguridad y características seguras:

    • Características Seguras: son aquellas cuya funcionalidad cumple con unos mínimos como validación de los datos antes de procesarlos, o cuenta con una implementación de librerías robustas en materia de criptografía, etc.
    • Características de  Seguridad: describe características tales como autenticación, firewall, etc.

    Practica 6, Reducción de Posibles Puntos de Ataque: Se trata de reducir los riesgos de ataque, cuidando los posibles puntos débiles que se tengan en el producto: restringir los accesos a los sistemas, aplicando principios de privilegios en los perfiles, etc.

    Practica 7, Modelos de Amenazas: Este punto se indica sobre todo para sistemas donde el riesgo de la seguridad es alto. Con esta práctica se pretende que los equipos documenten y discutan acerca de las implicaciones que puede tener el modelo de seguridad planteado en el contexto real del proyecto. En realidad está pensado para realizarlo de manera conjunta entre desarrolladores, managers, testeadores.

    Fase 3 Implementación

    Practica 8, Herramientas: En el equipo, todos deben trabajar del mismo modo, con una lista de herramientas aprobadas por todos y que permitan la integración de las mismas con otras que lancen avisos acerca del cumplimiento o no de la seguridad marcada para el proyecto.

    Practica 9, Funciones Obsoletas: El equipo debe analizar las API’s que se utilizaran para descartar aquellas que se consideran obsoletas y por lo tanto inseguras. Una opción de trabajo es crear una lista con las funciones inseguras, utilizar ficheros tales como banned.h o strsafe.h, emplear últimas versiones de los compiladores, o utilizar herramientas para escanear el código y verificar que no existen las funciones obsoletas.

    Practica 10, Análisis Estático: Un análisis estático del código fuente puede permitir al equipo que de verdad se están cumpliendo los criterios de seguridad marcados. Esto se debería realizar combinado aplicaciones de análisis de código junto con un trabajo por parte del equipo.

    Fase 4 Verificación

    Practica 11, Análisis Dinámico del Programa: Los programas de verificación del código en tiempo de ejecución son necesarios para asegurar que el programa hace lo que se esperaba según el diseño marcado. La tarea de verificación especifica las herramientas que se emplean por ejemplo en hacer un seguimiento del estado de la memoria por si en algún momento se corrompe, o el cumplimiento de los permisos dados a los usuarios. En el proceso SDL se utilizan herramientas como AppVerifier, junto con otras técnicas como “fuzz testing” para asegurarse que se cumplen  los niveles de seguridad marcados.

    Practica 12, “Fuzz Testing”: Es una práctica por la que se induce al programa a fallar mediante datos incorrectos o aleatorios. Se parte de la funcionalidad prevista de la aplicación y se va ampliando el alcance de los test poco a poco.

    Practica 13, Revisión de los Puntos Débiles y la Amenazas: Una aplicación es algo vivo, y lo normal es que haya cambios respecto a lo especificado en la fase de diseño. Esto lo que implica es que también se debe revisar lo que en su día se puso como posible amenaza, o parte de débil de la aplicación y por lo tanto susceptible en la seguridad.

    Fase 5 Lanzamiento de la Aplicación

    Practica 14, Plan para responder a Incidencias: Dentro de los equipo se debe marcar desde donde incluir todas las incidencias, a como clasificarlas, quien contesta en cada caso, etc.

    Practica 15, Revision Final del Plan de Seguridad: Consiste en realizar una revisión sobre todas las prácticas llevadas a cabo acerca de la seguridad de la aplicación. No se pretende que esta práctica sea la oportunidad para incluir aquellas actividades que se han olvidado realizar, sino lo que hace es examinar los sistemas de excepciones, las posibles amenazas marcadas, etc.

    Practica 16, Archivo con los Datos Seguridad: Para completar el proceso SDL se pide que el equipo incorpore los datos que indican que como mínimo ha realizado las 16 practicas del proceso SDL. Además todos los datos se guardan, permitiendo de este modo revisarlos a posteriori. Esto incluye la revisión del código fuente, los documentos donde se marcan los puntos débiles, un plan de respuesta ante una emergencia, licencias de terceros, etc.

    Para todas las fases…

    En cada una de las fases existen una serie de herramientas que van desde plantillas para Visual Studio Team System 2008 hasta en la parte de implementación analizadores estáticos de los ensamblados, de código C/C++, de vulnerabilidades para prevenir XSS (Cross Site Scripting).

    En la página web se puede ver: http://www.microsoft.com/security/sdl/default.aspx

    y también hay información  en la MSDN: http://msdn.microsoft.com/en-us/library/cc307748.aspx

    Conclusión

    El objetivo de este trabajo es proporcionar un framework sencillo para introducir las prácticas de seguridad en el proceso de desarrollo de software. Esto se realiza mediante una  serie de actividades que se llevan a cabo durante el proceso de desarrollo por parte de un equipo que tendrá como objetivo final  cumplir con los objetivos marcados en el modelo Microsoft SDL, como óptimos.

    Mientras que el proceso mencionado establece un umbral mínimo para el cumplimiento de SDL, SDL no significa que no sea ampliable. Los equipos de desarrollo pueden utilizar SDL como una guía y adecuarse  a los recursos y las prácticas de la empresa.
    Normalmente los conceptos que se discuten están reconocidos como buenas prácticas de la seguridad y no son específicos de Microsoft o de  Windows. Todas se pueden aplicar sobre diferentes sistemas operativos, plataformas de hardware, y metodologías de desarrollo y hacer una aplicación gradual de algunas de estas técnicas probablemente tendría una influencia beneficiosa sobre la seguridad y la privacidad de una aplicación en fase de desarrollo.
    Se puede argumentar que incluso unas prácticas sencillas de los procesos de seguridad realizadas de común acuerdo por todo el equipo de desarrollo puede conducir a mejoras de manera  global que las realizadas de forma individual.

    El SDL Microsoft es un proceso de libre disposición para la mejora de software en los aspectos de seguridad y privacidad. Se ha aplicado en numerosos programas de software y sobre millones de líneas de código de producción. SDL se compone de medidas obligatorias que siguen el proceso de desarrollo de software tradicional, pero es lo suficientemente flexible como para permitir la adición de otras políticas y técnicas, creando así una metodología de desarrollo de software que sirva como una guía dentro de la empresa. La combinación de procesos, formación,  y herramientas  produce distintos beneficios: prevenir errores, mejor competencia técnica, optimización del software, lo que se traduce en un menor riesgo tanto para la producto como para el usuario del mismo.

  • REUNION 23/06/2010

    0

    LUGAR DE ENCUENTRO

    Ciudad: Valladolid

    Hora: Desde 19:30 a 21:00
    Punto de encuentro: Cafetería Púrpura (en la parte de arriba)

    Ver mapa

    • C/ Las Mercedes, 7 (en el portal) 47006 Valladolid

    OBJETIVOS

    • Resumen y conclusiones sacadas de las sesiones a las que asistimos en CAS2010

    REFERENCIAS

    Blogs

    Podcasts

    Presentaciones

    AGENDA

    1. Presentaciones individuales
    2. Revisión de los tracks de CAS2010
    3. Retrospectiva de la reunión.
    4. Actualización de Backlog de temas para los encuentros
    ASISTENTES
    1. Jorge Jiménez Pérez
    2. Amalia Hernández García
    3. Jezabel González Diez
    4. Alvaro Garcia Loaisa
    5. Jose Antonio Da Rocha Padilla
    6. Pencho Herrero
    7. Javier Acero Guerra
    8. Susana Mielgo Fernández

    RESUMEN

    Los miembros de Agile-CyL que asistieron a la CAS2010  realizaron un resumen de la coferencia para el resto del grupo. Lo que empezó en el bar, acabo en una terraza con una charla muy productiva pues el resultado de ella es este blog que podeis leer. Ya tenemos otro lugar donde compartir nuestras experiencias.

  • I Code Kata de Agile-CyL

    2
    Día: 29/05/2010
    Hora: 10:00 – 13:30
    Lugar: Sala 24, Centro Cívico Zona Sur, Plaza Juan de Austria – Valladolid
    Objetivo: pasar un buen rato mejorando nuestras técnicas de desarrollo de software, buscando resolver un problema a partir de TDD y Pair Programming.
    NO es necesario encontrar la solución, sino discutir los caminos que nos encontremos buscando mejores soluciones.
    El lenguaje de programación no es importante.
    Requisitos: Quien tenga portátil preparado para desarrollar y con xUnit será bienvenido ( no es una sala de informática, necesitamos equipos)
    Ganas de pasarlo muy bien.
    Procedimiento:
    1. Organizarnos por parejas
    2. Trabajar en base a Pomodoros de 25 minutos, con 5 de descanso y retrospectiva
    3. Cambio de pareja para siguiente pomodoro
    Asistentes:
    1. Jorge Jiménez Pérez
    2. Amalia Hernández García
    3. José Luis Balmaseda Franco
    4. Alvaro Garcia Loaisa
    5. Javier Acero Guerra
    6. Francisco Pascual
    7. Eduardo Ferrández

    KATA: STRING CALCULATOR

    El problema a resolver es el siguiente: se parte de una cadena formada por número que están separados por comas o por nuevas
    líneas (\n). Se trata de ir haciendo la suma de los números recibidos y devolver el valor total.
    Dos cosas a tener en cuenta:

    • Si la primera línea de la cadena es de la forma “//”, entonces es posible encontrar el delimitador *. Esto es válido para cualquier cadena.
    • No se admiten números negativos.

    Esta información está en la página:

    http://blog.extracheese.org/2010/01/string-calculator-kata-in-python.html

    Pero es que además la página de Osherove nos da toda una serie de pasos para ir desarrollando
    la Kata (http://osherove.com/tdd-kata-1)

    1. Crear una calculadora sencilla con un método int Add (números de serie)
      1. El método puede tener 0, 1 ó 2 números, y devolverá su suma (para una cadena vacía devolverá 0) por ejemplo ” ” ó “1″ ó ” 1,2 “
      2. Comience con el caso más simple de prueba de una cadena vacía y luego  pasar a 1 y 2 números
      3. Debes resolver las cosas de la manera mas sencilla posible, para forzarte a escribir los test que no habías pensado
      4. Hay que refactorizar después de pasar los test.
    2. Permitir que el metodo Add trabaje con una cantidad desconocida de números
    3. Permitir que  el método Add trate con el carácter nueva línea, situado entre los números (en lugar de comas).
      1. la siguiente entrada está bien: “1 \ n2, 3″ (será igual a 6)
      2. la siguiente entrada NO se acepta: “1, \ n”
      3. Asegurar la prueba para las entradas correctas. No hay necesidad de probar para las entradas incorrectas.
    4. Permitir el método Add trabaje un delimitador diferente:
      1. Para cambiar un delimitador, el comienzo de la cadena contendrá una línea independiente que tiene este aspecto: ”/ / [delimitador] \ n [números ...]” por ejemplo “/ /; \ n1; 2″ debe devolver tres cuando el delimitadorpor defecto es ‘;’.
      2. La primera línea es opcional. Todos los escenarios deben estar soportados.
    5. Las llamadas al método Add con un número negativo deben lanzar una  excepción “Números negativos no admitidos” – y mostrar  el numero negativo. Si existen múltiples negativos, se muestran todas en el mensaje de excepción.

      Hasta aquí, si eres un novato. Continúa si puede terminar los siguientes pasos  en menos de 30 minutos.


    6. Los números superiores a 1000 deben ser ignorados. La suma 2 + 1001 = 2
    7. Los delimitadores pueden ser de cualquier longitud con el siguiente formato: “/ / [delimitador] \ n”, por ejemplo: “//*** \ n1 *** 2 *** 3 “debe devolver 6
    8. Se pueden permitir  delimitadores múltiples de esta manera: “/ / [delim1] [delim2] \ n”, por ejemplo “//[*][%] \ n1 * 2% 3 “debe devolver 6.
    9. Se pueden tratar delimitadores múltiples con una longitud superior a un char.

    RESUMEN

    El sábado 29 de Mayo de 2010, 7 valientes acudimos a realizar la I Kata del grupo Agile-CyL practicando TDD y Pair Programming ( en algún caso se practicaron trios, pero esa es otra historia), donde pudimos ejercitar nuestras habilidades (skills).
    En las refactorizaciones y en los descansos de los Pomodoros se discutió sobre el diseño que emergía a través del TDD y Edu nos abrió los ojos hacia el destino de la Kata: refactorizar y hacer test sobre los diferentes SUT( Subject Under Test) que aparecían ante nuestros ojos: la calculadora y el separador de números  (Calculator y Splitter, respectivamente).
    Y de prueba unas fotos que atestiguan lo bien que lo pasamos. De las cañas no hya pruebas gráficas pero las gambas estaban muy buenas: foto 1 y foto 2

  • REUNION 25/05/2010

    0

    LUGAR DE ENCUENTRO

    Ciudad: Valladolid

    Hora: Desde 19:30 a 21:00
    Punto de encuentro: Cafetería Púrpura (en la parte de arriba)

    Ver mapa

    • C/ Las Mercedes, 7 (en el portal) 47006 Valladolid

    OBJETIVOS

    • Conocer Extreme Programming.
    • Técnicas de trabajo en XP.
    • Actualizar la lista de temas a tratar.

    REFERENCIAS

    Extreme Programming: A Gentle Introduction.

    Extreme Programming explained de Kent Beck

    Extreme Programming en la Wikipedia

    Texto en español sobre XP

    AGENDA

    1. Presentaciones individuales
    2. Presentación de XP (promovido por Edu Ferrández)
    3. Retrospectiva de la reunión.
    4. Actualización de Backlog de temas para los encuentros
    ASISTENTES
    1. Jorge Jiménez Pérez
    2. Isidro Merayo Castellano
    3. José Luis Balmaseda Franco
    4. Amalia Hernández García
    5. Javier Acero Guerra
    6. Eduardo Ferrández
    7. Pencho Herrero
    8. Alberto Sáenz
    9. Alvaro García Loaisa
    10. Julio César Arenas
    11. Olivier Salmon

    RESUMEN

    Edu nos dio las primeras pistas sobre lo que es XP, eXtreme Programming.

    Valores de XP:

    ·         Comunicación

    ·         Simplicidad

    ·         FeedBack

    ·         Coraje (Hard Work)

    Practicas para llevar a cabo  XP:

    ·         Planificación:  user-stories que desembocan en tareas

    ·         Versiones pequeñas

    ·         Sistema metafórico:  nombrando código

    ·         Diseño simple

    ·         Testeo continuo

    ·         Refactoring

    ·         Pair Programming: dos personas sobre el mismo ordenador, creando código para otros. Es una técnica apropiada para equipos maduros, donde la persona que no teclea conserva una visión global del problema y puede aleccionar al otro. Recodar que Peer Programming no es lo mismo. Álvaro comento que él suele juntar a parejas de distintos ámbitos como Informática y Telecomunicaciones. Y estas parejas le dan buen resultado cuando el informático escribe el código y el teleco es el que tiene la capacidad para afrontar la visión del problema.  Olivier comentó el tema productividad a corto plazo frente a productividad a largo plazo. Pair Programming permite aumentar la concentración.

    ¿Cuándo realizar el cambio de parejas? Depende de la tarea que se esté realizando.

    Pair Programming es una buena técnica para enseñar aprendizaje a alguien nuevo, acerca de la forma de trabajo

    Pair Programming es ideal aplicarlo sobre nuevos procesos, sobre tareas complejas.

    ·         TDD:  Desarrollo Dirigido por Pruebas. Diseñas el código por prueba, partiendo de algo sencillo y con el mínimo código, recordad que los programadores tendemos a escribir mas código del necesario. Ventajas: una mayor fiabilidad. TDD no es aplicable en todos los proyectos.

    ·         Propiedad Colectiva del código

    ·         Integración Continua

    ·         Semanas de 40 horas de trabajo

    ·         Cliente/Usuario cercano

    ·         Estándares de Codificación

  • REUNION 13/04/2010

    0

    LUGAR DE ENCUENTRO

    Ciudad: Valladolid

    Hora: Desde 19:30 a 21:00
    Punto de encuentro: Cafetería Púrpura (en la parte de arriba)

    Ver mapa

    • C/ Las Mercedes, 7 (en el portal) 47006 Valladolid

    OBJETIVOS

    • Conocer KANBAN y sus diferencias con SCRUM.
    • Debate sobre su incorporación a nuestro trabajo actual.
    • Actualizar la lista de temas a tratar.

    REFERENCIAS

    Traducción de “Kanban vs Scrum” de Henrik Kniberg.

    Vídeo y Presentación de la charla de Agustín Yagüe en el grupo local de Madrid

    Presentación utilizada en el Encuentro

    AGENDA

    1. Presentaciones individuales
    2. Presentación de Kanban  (promovido por Jorge Jiménez)
    3. Retrospectiva de la reunión.
    4. Actualización de Backlog de temas para los encuentros

    ASISTENTES

    1. Jorge Jiménez Pérez
    2. Amalia Hernández García
    3. Jezabel González Diez
    4. Alfonso Bernal
    5. Isidro Merayo
    6. Pencho Herrero
    7. Francisco Pascual
    8. Javier Acero
    9. Olivier Salmon
    10. Alvaro García

    RESUMEN

    Nueva reunión del grupo de Agile-CyL para tratar la metodología ágil Kanban, exponente claro de los principios Lean y que fue presentada por Jorge Jiménez.
    Se abrió debate sobre la metodología desde los primeros momentos de la exposición, con lo cual fue bastante interactiva la presentación exponiendo cada uno de los presentes las dificultades y ventajas que le veían a esta metodologÌa.

    Dudas que surgieron y diferentes respuestas aportadas por los asistentes fueron:

    ¿Quién marca la velocidad? Siempre va a estar definida por la fase más lenta del workflow, compartido por todo el equipo. Por esto influye en el tiempo de entrega de las tareas.

    ¿Kanban es ajustable a nivel de tarea? No piensan en tipo de desarrollo, cascada o agil, piensas en un desarrollo constante. Olivier recalcó que lo importante es el flujo del proyecto.

    Jeza le ve un peligro cuando se dice que no es tan prescriptivo como Scrum en cuento a los equipos multifuncionales, permitiendo equipos especializados ya que cuando sólo participas en una parte del proceso, no es como scrum en que tienes una visión completa del proyecto. Es como un operario en una cadena de montaje en que sólo vas a hacer una tarea sin aprender de las demás y del resto del equipo.

    Pencho- que tiene más experiencia en sectores muy diversos aportó su visión en contraposición del símbolo de la melé en Scrum, indicando que  Kanban es como una melé abierta, en cualquier momento se pueden incorporar recursos al sistema para darle valor y mejorar el flujo según las necesidades del proyecto. Es más flexible a modificaciones del equipo.

    En soporte o mantenimiento de software la aplicación de Kanban es donde todo el mundo estaba más de acuerdo en que lo veía más ajustado. En este caso, Pencho explicó el caso de Indal como proceso industrial, en que usaban gráficas similares a las de Kanban (Cummulative Flow Chart) para en la incorporación de nuevos trabajadores meterlos en la “curva de trabajo”, es decir, en coger el ritmo para la entrega de producto en los tiempos de ciclo definidos por el proceso.

    Entregas en cualquier momento:
    - Positivo: en tener actualizaciones en cualquier momento, el tratamiento de parches sobre el producto de manera instantánea.
    - Kanban se ve poco factible en producción pero sí en mantenimiento de producto.
    - Olivier (con su gorra de cliente): si el proveedor da información de sus necesidades futuras, facilita la comunicación para estar preparado ante nuevas peticiones u órdenes de trabajo, tareas…

    Estimaciones:
    - Se usa una velocidad que puede no ser real, ya que el cycle time es valor en términos de media.
    - Hay flujo de dinero y de trabajo a la par, aunque no haya estimaciones se puede pagar por lo que se entrega.
    - Mentalidad española: no dejar que la gente utilice todo el tiempo  estimado que tiene para ese desarrollo, hay que seguir el flujo y no provocar parones.
    - Puede funcionar bien con perfiles comerciales sin objetivos a conseguir, sino que cuanto más hagas mejores recompensas tendrás, pero no marcas mínimos (ejemplo aportado por Pencho acerca del Banco Popular en los años 80 y primeros 90).
    - Malo por no tener tareas homogéneas que su resolución y el tiempo de finalización o de avance en el flujo sea muy diferente entre ellas.

    Scrum / Kanban

    Sugió el clásico problema del tratamiento de las incidencias. Una incidencia no da valor al cliente, es un error del equipo que no debe ser asumido por el cliente.
    En Scrum, Olivier comenta la posibilidad de meter un 7% del tiempo para incidencias en el Sprint, es un colchón previo antes de que aparezcan. Jorge opina que es engañar al cliente, aunque se pueda compensar entre Sprints, pero le cobras por anticipado un tiempo dedicado por tus errores. Javi trata las incidencias desde el principio, dentro de los Story Points del Sprint y asumen que las incidencias se tratan ahí, es el equipo quien se las “come”.

    Fran comentó que Kanban es teoria de colas y de procesos, sin iteraciones, sin backlog y es como el Scrum llevado al limite. Para él, al fin y al cabo, al usarlo para temas de incidencias es como reflejar en un tablero cualqueir herramienta de gestion de incidencias, como Mantis o Bugtrack.

    Alvaro dijo que hay una variante que consiste en mezclar Kanban y Scrum, con lo que se denomina Scrumban en proyectos sobre todo muy grandes, con varios cajas departamentales y varios tableros kanban.

    Pencho aboga por el uso de Kanban utilizado como metodología de trabajo para saber cómo se ha trabajado midiendo eficiencia no eficacia aunque no es necesario utilizar Kanban para realizar esas medidads.

    Comentando las diferencias entre kanban y scrum, Jezabel definía kanban para trabajos repetitivos con tiempos muy definidos, y scrum es más parecido a una consultoría artesana. Su frase que puede definir el tema de la reunión fue:
    Kanban es más una forma de trabajo de consultoría industrial mientras que Scrum es un proceso mucho más artesanal.

  • REUNION 23/02/2010

    0

    LUGAR DE ENCUENTRO

    Ciudad: Valladolid

    Hora: Desde 19:30 a 21:00
    Punto de encuentro: Cafetería Zeus

    Ver mapa

    • C/ Estadio, 2 (esquina c/ Las Mercedes) 47006 Valladolid

    OBJETIVOS

    • Conocer cómo aplicar SCRUM y los problemas diarios de su empleo.
    • Compartir experiencias propias y trucos para salir adelante.
    • Actualizar la lista de temas a tratar.

    REQUISITOS

    Ninguno, ganas de conocer cómo es el trabajo diario y los problemas de usar metodologías ágiles, concretamente el marco de trabajo SCRUM.

    AGENDA

    1. Presentaciones individuales
    2. Debate “Dificultades del día a día en la aplicación de Scrum” (promovida por Jezabel González)
    3. Retrospectiva de la reunión.

    ASISTENTES

    1. Jorge Jiménez Pérez
    2. Amalia Hernández García
    3. Jezabel González
    4. Isidro Merayo Castellano
    5. Eduardo Ferrández
    6. Olivier Salmon
    7. Susana Mielgo
    8. Susana
    9. Ignacio Cruzado (1ª vez)
    10. Jose Antonio Da Rocha (1ª vez)

    RESUMEN

    Como es habitual la reunión comenzó con la presentación de cada uno y su relación con las metodologías ágiles. En esta ocasión contamos con tres nuevos componentes del grupo que acudían por primera vez a nuestros encuentros ágiles.
    Empezamos la charla preguntando por problemas que tenemos o casos que nos hemos encontrado y tratando esos temas para ver cómo entre todos llegábamos a algún tipo de conclusión.
    Rol del Cliente – Product Owner

    Nos encontramos con este caso en la mayoría de las situaciones, una de las herencias de tantos años de waterfallismo. El cliente no quiere conocer nada de metodologías ágiles y sólo espera tener el proyecto en las fechas concretadas en el contrato.
    En este caso no contamos con un product owner proporcionado por la empresa cliente, de manera que en la mayoría de los casos en las metodologías ágiles este rol lo asume una persona de la empresa que desarrolla el proyecto. Normalmente el papel lo toma el jefe de proyecto que es el mas cercano al cliente y el que debe saber las necesidades del mismo para darle soluciones y ponerse en su papel. En caso de dudas siempre estará cercano al cliente para completar la información que le falte. Otra persona que puede asumir este rol es el consultor por el conocimiento que tiene del negocio para el que se desarrolla el producto.
    Al final seguimos escondiendo la metodología ágil ante clientes con los que no tenemos confianza o seguridad para ser claros. Es algo que con el tiempo se debe superar, quizás explicando claramente las ventajas que para el cliente puede tener el desarrollar proyectos con estas metodologías, con un mayor conocimiento del trabajo desarrollado en ciclos más continuos y cortos.
    Siempre se puede traer al cliente a estas metodologías sin necesidad de darles un nombre, porque al final nadie se opondrá en ver en qué invierte su dinero, o en aclarar cualquier duda en las reuniones de seguimiento de proyecto. Esto escuchado por un cliente “prefiero saber lo que se hace día a día o semana a semana que no esperar 3 meses y ver lo que se me entrega, teniendo la fecha de cierre de proyecto más cercana y sin tiempo de rectificación”.
    Si el cliente está al alcance del equipo, involucrarle en los artefactos de scrum, tanto spring meeting como en la demo al final del sprint.
    Es fundamental la comunicación entre product owner y equipo.
    La priorización de tareas es fundamental que sea realizada por el cliente y no sustituido por otra persona. Hacerlo mal podría equivocar las prioridades del cliente y dar un resultado poco interesante para el cliente final cuando ejecute la demo del producto. Hay que aportar valor en cada iteración según las necesidades del cliente: dar más valor en las primeras iteraciones para aumentar el ROI del cliente.
    Una persona desplazada en cliente puede asumir el rol de producto owner al tener conocimiento de lo que se necesita, sería una solución a la falta de involucración del cliente.
    Hay una opinión generalizada de que no se pude tener al cliente de manera continua en contacto con el cliente o en todas las demos. Hoy en día hay solución para este problema, utilizando herramientas remotas como Skype o videoconferencia.
    Estimaciones

    Para realizar las estimaciones hubo un criterio casi general: estimar sólo por tareas extraídas de las historias de usuario, eso marca cuántas historias pueden meterse en el sprint. No hacerlo desde el punto de vista de estimación las historias del product backlog y una vez que se sepan las historias que entran en el sprint estimar sus tareas. Según se dijo era más fácil y a largo plazo se estima mejor que a corto plazo.
    ¿Qué hacer ante proyectos a precio cerrado? En este caso es complicado hacer estimaciones ya que siempre hay que terminar en un tiempo fijo para compensar los costes del proyecto. Puede que la estimación real te lleve a más tiempo que la estimación ideal realizada en preventa. Hay que intentar huir de ese tipo de proyectos
    Existe un problema en las metodologías ágiles, donde parece que se está trabajando por complacer al cliente y esto puede provocar que haya clientes que se tomen “barra libre”. Hay que fijar claramente al inicio del proyecto su alcance, y para ello será necesario un documento donde estén reflejados los requerimientos del sistema pedido por el cliente.
    Incidencias en un Sprint

    Se aclara que Scrum no se ajusta a trabajar en mantenimiento de productos, al aparecer tareas nuevas a lo largo del sprint que hay que solventar en cuanto aparecen.
    Estas tareas-incidencias son asumidas por el equipo y dependiendo de la importancia de la incidencia se ataca inmediatamente o se postpone para el sprint siguiente.
    Siempre se deja un colchón al final del sprint por si no se llega para poder tener tiempo y solucionar este tipo de tareas emergentes.
    Sprint Meeting
    Las estimaciones se realizan mediante planning poker, siguiendo la serie de Fibonacci, pero siempre hay un vicio en estimar lo que uno terminaría, no lo que cualquiera del equipo podría tardar.
    Si no hay claridad en la definición de la historia las estimaciones sufrirán.
    Si dura mucho el sprint meeting y se sale del timeboxing fijado es un coste muy elevado para el proyecto. No discutir soluciones técnicas.
    Daily Meeting

    Se habló de la dificultad de trabajar en Scrum con equipos distribuidos pero los casos reales que se explicaron reflejan que no hay impedimentos la usar herramientas como IM o Skype para las reuniones de equipos, manteniendo una reunión dentro del sprint con presencia física de todos los componentes del proyecto
    Conflictos personales

    ¿Qué pasa cuando el cliente pide sacar a alguien del equipo o desde la propia empresa se saca a gente del proyecto?
    Es un problema que hay que resolver intentando mantener en lo posible al equipo mediante intento de negociación. Si hace tiempo hubo un problema con alguien hay que dar la oportunidad nuevamente por si ha cambiado y puede ser ahora importante para la resolución del proyecto.
    Lo normal es lo contrario, es pedir que alguien en concreto se incorpore al equipo por el conocimiento y experiencia que puede aportar.
    Hay que luchar con las gerencias para el mantenimiento de los equipos y que no se modifique su composición durante un proyecto o por lo menos durante un sprint, aunque el movimiento de personas en nuestro sector es muy común y es complicado hacer equipos estables.
    La charla derivó a discusiones sobre técnicas de integración contínua, ramas, tags y desarrollo por features o por desarrollador que quedan fuera de este encuentro.
Page 2 of 3«123»