Archive for the ‘Metodologías’ Category

  • Scrum desde otro punto de vista

    0
    La charla tiene como objetivo ser una introducción de Scrum para todos aquellos que no lo conozcan o para quienes quieran implantarlo en sus empresas o sus equipos de desarrollo.

     

    También se hablará desde el punto de vista de los desarrolladores. Lo normal en este tipo de charlas es que sean dadas por un Scrum Master (jefe de proyecto). Pero… ¿que piensa un desarrollador cuando entran en este tipo de metodología de desarrollo?

     

    Javier, dará su visión de como empezaron a utilizar Scrum en Deimos Space (durante casi 3 años), su evolución y sus errores.

     

    Javier es desarrollador autodidacta amante de las buenas prácticas. Su objetivo profesional es conseguir fundar su propia empresa con productos finales, y ya ha empezado a dar los primeros pasos con su startup Develplace ;)


    El objetivo: aprender de la experiencia de unos y otros, ponentes y público.

    Después de la sesión: esperamos que los que tengan todavía parte del camino por recorrer lo hagan de forma más saludable, y el ponente se lleve a casa un renovado saco de ideas.

    Día: 24/04/2012
    Hora: 19:30 –21:00
    LugarAgencia de Innovación y Desarrollo Económico – Valladolid

  • 12 meses haciendo Scrum

    11

    Buenas a todos!

    La verdad es que no sé muy bien como empezar… y este siempre ha sido un buen comienzo jejeje.

    Hace más o menos un año, conseguí que aceptaran mi propuesta de cambiar la forma de gestionar el proyecto “Estrella” de la división donde trabajo. Este cambio vino ocasionado por el semi-caos en el que nos encontrábamos a causa de problemas internos. En realidad, tuve suerte en este aspecto, fue recibido con buenos ojos, aunque con escepticismo, por parte de la dirección. Los cuales me dijeron “Adelante, necesitamos cambiar esta forma de llevar las cosas, y que todo el mundo vuelva a estar ilusionado con su trabajo”.

    Realmente este era uno de los principales problemas, gente desmotivada y quemada por siempre hacer lo mismo año tras año. El otro gran problema, fue el ir dando trabajo a cada miembro del equipo, según iba llegando, asignando tareas según carga, especialidad de cada persona, y urgencia. Es decir, saliendo adelante como bien se podía. La gestión del caos dirían algunos.

    Pues bien, Lo primero fue concienciar e informar a todo el mundo, de qué era eso de Scrum y la Agilidad. Tarea muy agradable y fácil para alguien que se había empapado bien de cómo funcionan estos temas, además de estar totalmente de acuerdo con los principios que ello conlleva (Manifiesto Ágil). Después de que todo el mundo diera su aprobado, nos pusimos manos a la obra.

    Lo siguiente que hicimos, fue repartir papeles.

    1. Propietario del producto (Product Owner). Esto fue fácil de elegir, cliente interno, mi responsable técnica de división.
    2. Equipo. También fue fácil, las 7 personas de mi equipo a las que gestionaba en el proyecto.
    3. Scrum Manager. Yo mismo, al menos por el principio, ya que era el que me había implicado más en este cambio y el que más conocía estos temas.

    Yo como “Scrum Manager” junto con el “Product Owner” definimos como tenía que ser la estructura del “Product Backlog” en un principio, y junto con el equipo, definimos el documento “Sprint Backlog”. Estos dos documentos han ido evolucionando en progresión junto con nosotros y nuestras necesidades.

    Teniendo todos los papeles asignados, decidimos una fecha que encajase, para que todas las tareas pendientes de terminar en ese momento, se finiquitaran y pudiésemos empezar el 1º Sprint, lo más limpio que se pudiera. Yo por mi lado, acaparé una pizarra de la sala de reuniones y la acondicioné, para eso que me llamaba tanto la atención “Gestión de tareas por Posit” con un tablero Kamban. Y después de tener todo organizado para empezar, dimos el primer gran paso, la reunión de inicio del 1º Sprint!!!

    El 1º Sprint fue el más complicado, pero también el más motivador, tanto para mí, como para el equipo. Creo que lo que más agradable fue ver como los miembros del equipo se divertían “jugando” a estimar con la técnica de “Planning Poker” y como se abalanzaban sobre las tareas para autoasignarselas.

    Los principales problemas que detecté en este Sprint, fue la difícil adaptación de los miembros del equipo hacia la auto-gestión y auto-organización. Desde el 1º día esperaban a que yo, como su antiguo jefe de proyecto, les diese las pautas de como implementar y realizar sus tareas, además de esperar igualmente a que les dijese que tarea tenían que asignarse después de terminar otra. Poco a poco esta “manía” se les fue quitando y al tercer o cuarto Sprint ya había desaparecido.
    Impresionante-mente al finalizar este 1º Sprint, todas las tareas estaban terminas y funcionando para pasar a producción.

    La demo también fue bastante motivadora, enseñando orgullosamente todas las funcionalidades implementadas. Más motivación al canto!

    A medida que fuimos metiéndonos en un Sprint tras otro, algunos problemas fueron aflorando. Principalmente la dificultad al estimar la duración de las tareas. Esta ha sido recurrente hasta ahora, y creo que siempre estará ahí. Ya que, aunque las estimaciones cada vez se han ido afinando mas, y la mayoría de veces son acertadas, muchas veces nos encontramos con problemas imprevistos que no supimos ver al discutir sobre la estimación de determinada funcionalidad.
    Después de discutir mucho sobre este tema en las retrospectivas, hemos llegado a la conclusión, de que la mejor forma para evitar estos problemas es, dividir al máximo las tareas complejas, para así evaluar más acertadamente las tareas resultantes mas simples.

    Otros problemas con los que hemos tenido que lidiar han sido los siguientes:

    • Cambios de tareas a mitad de sprint. Este problema fue de fácil solución. Solo dejamos añadir tareas, si hay alguna/as que el “Product Owner” esté dispuesto a retrasar a siguientes Sprints, que sumen lo mismo que esa nueva en su estimación, que no afecte a ninguna otra y si realmente es necesario para el cliente.
    Supongo que habrá gente que no esté de acuerdo con esto, y que diga que Scrum no permite estos cambios, pero yo pienso que así es la agilidad, adaptarse a las necesidades en cada momento :P

    • Mala comunicación con la parte comercial al no poder estar presentes en las demos. Nuestro centro está en Valladolid (Boecillo) y nuestros comerciales en Tres Cantos (Madrid). Con lo que no les suele ser fácil desplazarse cada dos semanas a la demo. Para solucionar este problema, junto con el “Product Owner” hacemos un documento de resumen de la demo, explicando cada nueva funcionalidad del producto, además de otro tipo de demos especiales para ellos, en las que digamos juntamos varias de las nuestras. Ahora estoy mirando para poner un streaming de vídeo de las mismas y que puedan verlas desde donde quieran, aunque ya sé que no es lo mismo, es mejor que perdérselas ;D
    • Implementación de una tarea, haciéndola algo diferente a lo que el “Producto Owner” había pensado. Por ejemplo exportar informes a formatos Office, el equipo hacerlo a formatos de OpenOffice en vez de Microsoft Office como se quería. Esto al principio solía ser habitual, pero lo hemos corregido (casi del todo) actualizando diariamente un servidor de desarrollo interno, en el que se pueden ver las funcionalidades que se van implementando. También me encargo de tener un documento explicativo de cada funcionalidad, antes de la reunión de inicio de Sprint, escrito entre el “Producto Owner” y yo. Así queda todo mucho más claro y los miembros del equipo, pueden pensar en cada tarea antes de esta reunión y tener las dudas preparadas.
    • Aparición de errores en las implementaciones después de la demo. Este problema es uno de los peores. Aquí hemos puesto varios frentes. El 1º, empezamos a meter poco a poco técnicas de TDDExtreme Programing, intentando plagar todo con test para que exploten al mínimo fallo (aún nos queda mucho). Y 2º metimos una 4º columna en el tablero Kamban, en la cual otra persona de la que ha hecho la implementación, tiene que probar la historia de usuario, para que este terminada-terminada, incluyendo revisión de código.

    Ha habido muchas cosas que destacar sobre cómo empezamos al principio y cómo vamos evolucionando con la opinión y experiencia de todos. Pero para no alargar esta entrada demasiado, os pongo solo unas pocas:

    • Al empezar a meter técnicas de Extreme Programing, la que más suele chocar es la programación en pareja. Normalmente se suele pensar, que se tira el tiempo de una persona, al ponerse dos a trabajar en el mismo ordenador.
      Pero como yo me convencí de que esto es erróneo, fue al poner a dos personas con unas habilidades, destacadamente distintas a programar juntas. Una sabe programar, estructurar el código y utilizar el lenguaje de programación bastante mejor que la otra. Y por su parte la otra, sabe abstraerse de la solución, pensar más globalmente y contener en su mente problemas más complejos. Esta combinación de mentes, a la hora de resolver un problema y plasmarlo en código es la mejor que me he encontrado, haciendo que los resultados sean impresionantes. Sin hablar ya, de todos los beneficios que conlleva, como el aprendizaje mutuo, la doble revisión, rápida entrada en estado de flow, mejora de moral, propiedad colectiva del código, etc. Si tenéis la suerte de poder probarlo, no dudéis en hacerlo, veréis los beneficios.
    • Como decía antes, el ajuste de las estimaciones suele ser bastante conflictivo. Pero con tan solo un año de ellas a nuestras espaldas, hemos podido comprobar la mejora evolutiva muy a detalle. Un ejemplo que suelo poner, es la estimación de un nuevo informe dentro de nuestro producto. Nuevos informes nos surgen continuamente, todos muy parecidos, pero con necesidades diferentes. Pues bien, en los primeros Sprint, el equipo solía coincidir muy poco en su estimación, unos decían 5 días, otros 1, etc. Con lo que nos salía una media de 3 normalmente. Después de todo un año estimando y todo el equipo repartiéndose los cíclicamente, ahora cada vez que sale uno a estimar, hasta el Product Owner se ríe y murmura 2, antes de que el equipo estime.
      Con esto quiero decir, que no solo ahora todo el equipo sabe de sobra que un informe medio se haga en 2 días, sino que, una tarea que hace un año tardábamos 3, ahora la hacemos en 2. Beneficios de la autoasignación de tareas y repartición del conocimiento al autoasignárselas. Posdata hemos conseguido recortar una media de un 33% una tarea que suele aparecer con frecuencia en nuestro trabajo.
    • La motivación ha sido otro de los puntos fuertes dentro del cambio. Antes de empezar con él, creo que casi ningún miembro del equipo, estaba contento día a día con su trabajo. Ahora puedo afirmar con seguridad, que todos y cada uno de ellos, no solo se sienten bien y trabajan mucho más y mejor que antes Sino que están tan convencidos de ello, que cada vez que me preguntan algo sobre Scrum delante de alguno, saltan antes de mi respuesta y les explican todo el funcionamiento de principio a fin entusiasmados. Esto es mi mayor motivación diaria.
    Aún nos faltan muchos pasos por andar y aún nos faltan muchas cosas por afinar y aprender. Pero sin duda, el producto ha mejorado muchísimo y tanto el equipo, el Product Owner, los superiores y yo mismo, estamos muy contentos con la dirección que todo va tomando poco a poco. Me gustaría hacer más a menudo retrospectivas y unificar en la rueda, la integración continua, la gestión de bugs, testing y despliegues, pero todo se va viendo más cerca y vamos poco a poco.

    En resumen, cada día que pasa haciendo Scrum, me convence más, de que para este tipo de proyectos, es la mejor gestión que existe, o que al menos yo conozco.

    Salu2!

  • 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.