• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Testing Con Visual Studio Team System 2008
 

Testing Con Visual Studio Team System 2008

on

  • 4,626 views

Tuve el gusto de dar esta presentación con mi amigo y colega Mauro Castagnasso. La subo para quien le pueda servir e interesar.

Tuve el gusto de dar esta presentación con mi amigo y colega Mauro Castagnasso. La subo para quien le pueda servir e interesar.

Statistics

Views

Total Views
4,626
Views on SlideShare
4,582
Embed Views
44

Actions

Likes
1
Downloads
56
Comments
0

2 Embeds 44

http://www.slideshare.net 42
http://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Mi nombre es Diego Ferreyra y estoy a cargo del área de Core Technologies de HuddleGroup, equipo encargado de brindar servicios de consultoría especializados en tecnologías Microsoft. Mauro Castagnasso es un consultor del equipo y ambos hemos trabajado en varios proyectos utilizando TeamFoundationSystem, por lo que mucho de la charla está basado en historias que hemos recopilado desde las trincheras.  
  • 189 = 1 minuto y medioElobjetivo de la charla es que podamos definir el porqué de la existencia del testing unitario, comprender sus ventajas y ver las herramientas que nos provee Visual Studio TeamSystem 2008 para poder llevar a cabo estas tareas. El formato de la charla nos gustaría que sea bastante interactivo. Con esto me refiero a que iremos planteando temas y nos gustaría realmente escuchar sus opiniones y experiencias para poder aprender nosotros también a partir de su experiencia.La agendaque proponemos consiste de 3 partes principales. En la primera sentaremos algunas bases con respecto a lo que es UnitTesting, luego presentaremos algunas características que provee Visual Studio TeamSystem 2008 para realizar testing unitario tanto de clases como de páginas web y luego haremos una pequeña demo de estas características para que quede en concreto cómo la herramienta contribuye a esto.La demo la haremos en una máquina virtual que puede descargarse gratuitamente del site de Microsoft, que viene con TeamFoundation Server y la versionTeam Suite de Visual Studio 2008. Al final de la charla daremos los links para quien esté interesado en este material.
  • 101 = 1 minutoPara comenzar la charla, nos gustaría plantear una pregunta muy básica. ¿Porqué es bueno aplicar testing unitario?COMENTAR: Experiencia en proyectos acerca de cómo mejorar la calidad del códigoMuchos de estos temas nos ayudan en definitiva a tratar de detectar defectos tempranamente. Lo que es bueno considerar en este caso, es que esto nos provee ventajas adicionales en el ciclo de vida del proyecto, más allá de la tarea específica del desarrollo. Para explicar mejor esta idea, lo mejor es mostrar cómo la detección temprana de un bug afecta al costo del proyecto, considerando las consecuencias que esto trae.
  • 169 = 68 segundosEn base a la experiencia que tenemos, es fácil ver porqué cuando más cerca de la entrega final se está, más nos cuesta un bug. Si lo detectamos tempranamente, cuando estamos recién diagramando la solución o tirando las primeras líneas de código, nos lleva algunos minutos corregirlo. Si un bug es detectado en la etapa de testing, esto implica que el equipo de testingdeba insumir tiempo para especificar correctamente el ticket. Luego el desarrollador invertirá tiempo para reproducirlo, detectar la causa y corregirlo. Esto puede empeorar si no es el mismo developer que codificó el componente o pasó mucho tiempo desde que se construyó. Avanzando en la etapa del proyecto, si el bug es detectado por el cliente, puede costar mucho más que eso, puede costar el proyecto. Y si es detectado en producción, bueno, todos sabemos las consecuencias que esto puede acarrear. Por lo tanto, si somos capaces de detectar la mayor cantidad de bugs en las primeras etapas, estaremos afectando directamente el costo de nuestro proyecto. 
  • 301 = 2 minutosUna vez que vimos la utilidad de realizar testing unitario, nos gustaría diferenciar este tipo de testingdel resto de los tipos de pruebas que pueden realizarse. Por ejemplo, tests de performance que es llevado a cabo para analizar el comportamiento de la aplicación con determinada carga de trabajo. También existe el test de integración, que consiste en probar varios componentes del sistema, logrando de esta manera detectar los problemas que surgen al trabajar estos en conjunto. También están los tests de aceptación, que deben ser llevados a cabo por parte del usuario para certificar que la aplicación funciona según sus requerimientos.Por lo tanto, en esta charla pondremos el foco en el testing unitario de componentes. CLICKEste tipo de testing se centra en la prueba de partes pequeñas y bien acotadas de funcionalidad. Esto nos ayuda a aislar la problemática a lo que esa pieza en particular quiere resolver. Esto nos lleva a encontrarnos con varias consideraciones a la hora de realizar testing unitario. Por ejemplo, el caso más común es el acceso a la base de datos. Debemos considerar en esto si el objetivo de nuestro test en particular es probar que el componente acceda correctamente a la base de datos o la realización de una lógica en particular. Lo que se suele realizar, es generar una batería de tests para probar el ABM de las entidades del modelo de dominio y luego abstraer de esto al resto de los tests, considerando que esta funcionalidad está probada y es correcta. Para esto hay varios patrones conocidos, como por ejemplo Repository, y luego se generan MockObjectspara que sean utilizados en el resto de los tests que no es necesario acceder a la base de datos. Pero de este tema se hablará más en detalle en la siguiente charla.
  • 309 = 2 minutosOtra de las preguntas clavesen esto, es cómo adoptar el testing unitario si no es algo ya que nuestros equipos están impulsando. PREGUNTAR: Cuantos ya están utilizando testing unitario fuertemente y no ocasionalmente?Llevar a que el testing unitario sea una cosa de todos los días no es algo que se aprende de un día para el otro. Implica un cambio cultural, ya que la mayoría de la gente ve la tarea de hacer los tests de su aplicación como una tarea tediosa que no agrega ningún valor. Nunca más errado. Ya hemos visto que esto redunda en beneficios al proyecto por lo que es algo necesario y que se paga solo. Por lo tanto, es importante mostrar a los miembros del equipo las ventajas que trae aparejadas este enfoque y cómo nos ayudará a brindar mejores soluciones a nuestros clientes. Esto es importante plantearlo a los equipos, para que puedan tener bien presente cuales son los objetivos de esto y qué se puede esperar de esta técnica.Por otro lado, es importante remarcar que a realizar testing unitario se aprende con la experiencia. A medida que se vayan realizando más tests, se irá aprendiendo mejores formas de realizarlo y la tarea llega realmente a convertirse en algo instintivo. Una vez que uno se acostumbra a aplicar testing unitario, le da miedo pensar en un desarrollo sin tests y no logra imaginarse cómo hizo en tantos años de desarrollo para estar seguro de que cuando se aplicaba un cambio no se afectaba otra parte del sistema.Una vez que está planteada la necesidad del cambio cultural y que no es algo que se aprende rápidamente, es importante considerar las herramientas que darán soporte al proceso. Para esto, Visual Studio TeamSystem 2008 brinda una serie de herramientas que contribuyen en todas las etapas de desarrollo de la aplicación.
  • 212 = 2 minutosPara adentrarnos dentro de las herramientas que provee Visual Studio TeamSystem 2008 para realizar testing, nombraremos algunas características importantes dentro de este enfoque.En primer lugar se debe considerar que TeamSystem considera el testing desde diferentes roles. No solo los desarrolladores pueden realizarlo, sino también los testers y DBAs, cada uno con su correspondiente versión del producto.Luego, dentro de Visual Studio encontramos que tenemos varias vistas de los tests. Para crear los tests, administrar listas de tests a ejecutar, analizar su ejecución y los resultados de multiples corridas. Adicionalmente, esto alimenta métricas que indican el código cubierto durante la ejecución.Adicionalmente, es factible correr tests desde la línea de comandos o integrarlos con el build server.Por otro lado, considera la ejecución de los tests dentro del contexto de proyecto, pudiendo obtener reportes variados en cuanto al resultado de ejecución de los tests. Permite crear automáticamente workitemsal detectar tests fallidos, integrarlo con el control de código fuente por medio de políticas de checkin.Ya desde el punto de vista de desarrollo, lo más utilizado es el framework de testing que provee. Por medio de esto se pueden realizar los Asserts necesarios como así también decorar los métodos con atributos para la ejecución de los tests, inicializadores, etc.
  • 119 = 1 minutoDependiendo de la versión de TeamSystemque se esté utilizando, hay diversos tipos de tests que pueden o no utilizarse. Los que nos centraremos ahora son los tests unitarios y los tests Web.Los otros tipos de tests son útiles para diversos escenarios. Por ejemplo los tests manuales, son para aquellos casos en que no se pudo automatizar un test de un determino escenario o userstory. Esto es muy común para pruebas funcionales de caja negra realizadas por el usuario final. En este caso, Visual Studio provee una herramienta para que queden detallados los pasos a ejecutar para llevar a cabo el tests y pregunta durante la ejecución sobre el resultado de la ejecución de tal paso.
  • 194 = 1 minuto y medioDentro de los templates disponibles para la creación de tests, Visual Studio nos provee de los tipos mostrados en la imagen.Dentro de un proyecto de tipo Test, se pueden agregar diversos tipos de archivos de test. Los UnitTests son utilizados para testing unitario de componentes, permitiendo ejecutar código generalmente de backend.Los tests de tipo Load son tests que se encargan de ejecutar concurrentemente los tests automáticos especificados, para determinar cómo se comporta el sistema ante una determinada carga.Los testsWeb son los que permiten ejecutar tests en interfaces Web. Se puede grabar una macro con el recorrido del test, que luego será reproducida al momento de ejecutar el test. En esta macro se pueden parametrizar valores de los fields de los formularios, del header del post HTTP, obtener datos desde una fuente de datos y utilizar esto como valores de prueba, etc.Los testsmanuales son realizados en los casos en que no se puede automatizar un test y es necesario dejar certificado que tal funcionalidad ha sido probada.Los testsOrderedconsiste en una batería de tests que se ejecutan en el orden especificado. Está formado por varios tests.
  • 145 = 1 minuto y medioYa centrándonos en las herramientas de desarrollo propiamente dichas, hay varias opciones muy útiles. Primero que nada el framework de testingque provee Visual Studio. Con este realizaremos las tareas más comunes y en conjunto con otras herramientas tales como MoQ o RhinoMocks u otros, contamos con lo necesario para crear los tests. Luego la obtención de métricas a partir de la ejecución de los tests. Esto es muy útil para detectar puntos de mejora o posibles fallas. Otra importante herramienta es la posibilidad de utilizar una fuente de datos para testing. Esto se logra por medio de atributos que indican el data source y luego accediendo al TestContext para obtener el valor correspondiente a cada ejecución del test.Dentro de las nuevas características de TeamSystem 2008, es bueno mencionar la ejecución contextual. Ahora se puede hacer click derecho y correr los tests!
  • 110 = 1 minutoAdemás de los tipos de proyectos y herramientas varias para la ejecución de los tests, Visual Studio provee un framework de testing que simplifica las tareas a realizar. Si alguien trabajó con Nunit en algún momento, le resultará familiar.Provee una clase para realizar afirmaciones sobre pruebas realizadas (que se llama Assert). Adicionalmente se provee de un conjunto de decoradores de métodos útiles para indicar diversos pasos de ejecución del tests (Initializse, CleanUp, etc), como así también atributos adicionales tales como Owner que permite indicar la persona que hizo el test.Por otro lado, provee un mecanismo para crear clases que acceden a miembros privados de las clases a probar. Quizás no es lo más recomendable, pero está disponible 
  • 25 minutosExplicar ejemplo (5 minutos)  Agregar proyecto de testing   Tests unitarios (5m) Framework Ejecución de tests (5m) Tools, métricas Web Tests (10m) 
  • 171 = 1 minutoComo conclusiones finales nos gustaría repasar los objetivos que mencionábamos al principio de la charla.Hemos visto que el testing unitario realmente contribuye en los proyectos, brindándonos una imagen real del estado de la aplicación, guiándonos hacia la revisión y mejora del código realizado y sobre todo, apuntando a la reducción de costos totales del proyecto a realizar. Llegar a trabajar con esta filosofía no es algo que se pueda realizar de un día para el otro, pero se puede hacer y es cuestión de decidirlo y planificarlo.Por otro lado, hemos visto que Visual Studio provee una serie de herramientas que contribuyen en varias etapas del ciclo de vida de la aplicación, por lo que no es algo que incumbe al desarrollo únicamente. Esto es importante saberlo ya que quizás muchos ya poseemos esta herramienta y no se la ha aprovechado a fondo, o quizás se está en proceso de mejora de los procesos de desarrollo y de esta manera puede encontrarse en Visual Studio un aliado para lograr esto.

Testing Con Visual Studio Team System 2008 Testing Con Visual Studio Team System 2008 Presentation Transcript

  • Visual Studio Team System 2008Testing Unitario
  • .2
    VS TS 2008 – Unit Testing
    Agenda
    Unit Testing
    Visual Studio Team System 2008
    Demo
  • UnitTesting
    ¿Porquéutilizar UnitTesting?
    Brinda estado real de la aplicación
    Ayudan a detectar bugs tempranamente
    Más código hecho bien, menos ciclos de testing
    Contribuye a la calidad del código
    Código probado
    Código que se ejecuta realmente
    Trazabilidad de requerimientos
    Anticipa problemas
    Integración, deployment
    Es documentación REAL y ACTUALIZADA
    En definitiva, Time ToMarket, Calidad, Flexibilidad
    .3
  • UnitTesting
    .4
    Cuantomáscercano el Release,
    máscostosoes el bug.
    $1,000+
    $100
    $10
    $1
    Costo / $
    EspecificaciónDiseñoCodificación Testing Release
    Momento en que se detecta el bug
  • Unit Testing
    .5
    Alpha testing
    Beta testing
    Usability testing
    Stress testing
    Procedimiento utilizado para validar unidades de código individuales.
    Provee un contrato escrito que una pieza de código debe satisfacer.
    Unidad de código: método.
    Cada caso de test debe ser independiente de los otros.
    Son realizados por el desarrollador, no por testers o usuarios finales.
    Recovery testing
    Install/uninstall testing
    Black box testing
    Functional testing
    White box testing
    Load testing
    Compatibility testing
    Unit testing
    System testing
    Performance testing
    Comparison testing
    Incremental integration testing
    Security testing
    End-to-end testing
    Integration testing
    Acceptance testing
    Sanity testing
    Manual testing
    Web testing
    Regression testing
  • UnitTesting
    Cambio cultural
    Setear correctamente expectativas
    Definir Herramientas
    Sólo se aprende con la experiencia
    Es un camino de ida!
    .6
    ¿Cómoadoptarlo?
  • Visual Studio Team System 2008
  • Visual Studio TeamSystem 2008
    ¿Qué provee Visual Studio TeamSystem 2008?
    Múltiples roles
    Múltiplesvistas:
    Test View – Creación
    Test List - Management
    Test Explorer – Ejecución
    Test Results – Evidencia
    Code Coverage Results – Efectividad de laspruebas
    Soportepara Command line y Automated Build Server
    Integradodentro del contexto de proyecto
    Work item tracking
    Source code control
    Reporting system
    Framework de testing
    .8
  • Visual Studio TeamSystem 2008
    .9
    Tipos de tests
  • .10
    Visual Studio TeamSystem 2008
    Templates & Items
    Unit Test
    Load Test
    Web Test
    Manual Test
    Ordered Test
    Generic Test
  • Visual Studio TeamSystem 2008
    Herramientas de desarrollo
    Visual Studio Team System 2008 Development Edition
    Framework de Tests
    Soporte de Code coverage
    Se puedenobtenerdatos de pruebadesde un datasource
    Se puedenpublicar los resultados a TFS
    Ejecución contextual
    Se mejoró la performance
    Ya en la versión de Professional de Visual Studio se cuenta con herramientas
    .11
  • .12
    Visual Studio TeamSystem 2008
    Tests Management
    • Test View
    Filtrado, search
    • Tests List
    Categorización de tests
    Ejecución de tests
    Local y Remoto a través de un agente
    A través del IDE
    Línea de comandos
    Tarea de MS Build
  • .13
    Visual Studio TeamSystem 2008
    Testing Framework
    • Wizard paragenerar test unitarios
    • Asserts
    • Assert.AreEqualAssert.AreNotEqualAssert.AreNotSameAssert.AreSameAssert.EqualsAssert.FailAssert.InconclusiveAssert.IsFalseAssert.IsInstanceOfTypeAssert.IsNotInstanceOfTypeAssert.IsNotNullAssert.IsNullAssert.IsTrue
    • Accesors a miembros privados
    • Decoradores:
    Initialize, CleanUp, Ignore, Owner, etc.
  • .14
    Demo
  • VS TS 2008 – Unit Testing
    Conclusiones
    Contribuye a ahorrar costos de desarrollo
    Incrementa la calidad de la solución
    Provee visibilidad real del estado del proyecto
    Lleva tiempo, pero se puede implementar
    Visual Studio TeamSystem 2008 contribuye con herramientas
    Codificación
    Organización
    Automatización
    Varios escenarios
    .15
  • VS TS 2008 – Unit Testing
    Microsoft® Visual Studio® Team System 2008 Team Foundation Server SP1 and Team Suite SP1 VPC Image (Trial)
    Site para bajar una VM con TF Server y Team Suite
    http://www.microsoft.com/downloads/details.aspx?FamilyID=c7a809d8-8c9f-439f-8147-948bc6957812&displaylang=en
    “Test Driven Development: By Example” de Kent Beck
    Excelente libro sobre cómo practicar TDD, con patrones de testing muy útiles
    http://www.amazon.com/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1231387420&sr=8-1
    .16
    Recursos
  • Espacio para Consultas
    .17
    ¿
    ¿Tiene dudas, consultas o sugerencias?
    Muchas Gracias por su atención.
    Diego F. Ferreyra
    Core Technologies Manager
    diego.ferreyra@huddle.com.ar
    Mauro E. Castagnasso
    Core Technologies Consultant
    mauro.castagnasso@huddle.com.ar
  • Huddle Group S.A.
    Enterprise Technologies | Products & Services
    info@huddle.com.ar · www.huddle.com.ar
    Oficinas en Buenos Aires
    Pasaje Carabelas 344 · Piso 5 · C1009AAD · Ciudad de Buenos Aires · Argentina
    Tel.Fax.: (54.11)5032.1070
    Oficinas en Bahía Blanca Donado 74 · Entrepiso 3 · B8000iYB · Bahía Blanca · Buenos Aires · Argentina
    Tel.Fax.: (54.0291)400.2767
    HUDDLE GROUP S.A. IS A MICROSOFT GOLD CERTIFIED PARTNER