12
Practica_04.Desarrollo Dirigido por los Test (TDD) INTRODUCCION EJERCICIO 1 Tarea 1 – Creación de un nuevo projecto Tarea 2 – Definición del contexto de los Tests. Tarea 3 – Inlcuyendo más funcionalidad Ejercicio propuesto – Implementación correcta de las operaciones de una PILA mediante TDD Introducción Desarrollo/Diseño dirigido por los Test - Test Driven Development/Design (TDD), es una metodología de diseño/desarrollo donde los desarrolladores crean software a partir de la escritura de las pruebas de unidad. Las pruebas de unidad se pueden ver como un pequeño conjunto de especificaciones que el sistema debería cumplir. La escritura de los test como parte inicial del proceso de desarrollo ayuda al desarrollador en centrarse exclusivamente en escribir el código necesario para pasar dichos tests y por tanto a ir asegurando que el sistema va cumpliendo con los requerimientos documentados. El ciclo de TDD sigue la secuencia “Rojo, Verde, Refactorización”. El Rojo se refiere a la etapa inicial de la escritura de los test, una apariencia visual de color rojo del icono del test en el entorno de ejecución de Tests indica que el test no cumple con los requerimientos. El verde se refiere a la etapa de comprobación de los requerimientos, el entorno de ejecución de Test se encarga de mostrar con un icono de color verde aquellos que los cumplen. La refactorización consiste en ir depurando el código, reorganizarlo y adaptarlo para que sea más claro, entendible y flexible. El ciclo de TDD se repite constantemente a lo largo del proceso de desarrollo. Un aspecto importante para llevar a cabo con éxito TDD es contar con las herramientas software adecuadas, en este sentido Visual Studio ofrece un entorno integrado que permite llevar a cabo TDD de forma eficiente. Como ejemplo, vamos a construir la implementación de una PILA mediante TDD, mostrando como los test dirigen el diseño y la implementación de la clase.

Pila en Visual Studio

Embed Size (px)

DESCRIPTION

pila en visual studio

Citation preview

  • Practica_04.Desarrollo Dirigido por los Test (TDD) INTRODUCCION EJERCICIO 1

    Tarea 1 Creacin de un nuevo projecto Tarea 2 Definicin del contexto de los Tests. Tarea 3 Inlcuyendo ms funcionalidad Ejercicio propuesto Implementacin correcta de las operaciones de una PILA mediante TDD

    Introduccin

    Desarrollo/Diseo dirigido por los Test - Test Driven Development/Design (TDD), es una metodologa de

    diseo/desarrollo donde los desarrolladores crean software a partir de la escritura de las pruebas de

    unidad. Las pruebas de unidad se pueden ver como un pequeo conjunto de especificaciones que el

    sistema debera cumplir. La escritura de los test como parte inicial del proceso de desarrollo ayuda al

    desarrollador en centrarse exclusivamente en escribir el cdigo necesario para pasar dichos tests y por

    tanto a ir asegurando que el sistema va cumpliendo con los requerimientos documentados.

    El ciclo de TDD sigue la secuencia Rojo, Verde, Refactorizacin. El Rojo se refiere a la etapa inicial de la

    escritura de los test, una apariencia visual de color rojo del icono del test en el entorno de ejecucin de

    Tests indica que el test no cumple con los requerimientos. El verde se refiere a la etapa de

    comprobacin de los requerimientos, el entorno de ejecucin de Test se encarga de mostrar con un

    icono de color verde aquellos que los cumplen. La refactorizacin consiste en ir depurando el cdigo,

    reorganizarlo y adaptarlo para que sea ms claro, entendible y flexible. El ciclo de TDD se repite

    constantemente a lo largo del proceso de desarrollo.

    Un aspecto importante para llevar a cabo con xito TDD es contar con las herramientas software

    adecuadas, en este sentido Visual Studio ofrece un entorno integrado que permite llevar a cabo TDD de

    forma eficiente.

    Como ejemplo, vamos a construir la implementacin de una PILA mediante TDD, mostrando como los

    test dirigen el diseo y la implementacin de la clase.

  • Tarea 1 Creacin de un nuevo Proyecto

    En esta tarea crearemos un proyecto C# de Librera de Clase que utilizaremos para explorar las

    caractersticas de TDD de Visual Studio.

    1. Abrir Microsoft Visual Studio desde el Explorador de Windows: Start | All Programs |

    Microsoft Visual Studio | Microsoft Visual Studio.

    2. Desde Menu principal de Visual Studio: ARCHIVO |Nuevo | Proyecto, aparecer el cuadro

    de dialogo Nuevo Proyecto.

    Figura 1. Creacin de un proyecto

    3. En el cuadro de dilogo Nuevo Proyecto seleccionar en el panel de la izquierda Visual C# .

    En el panel central, compruebe que la opcin .NET Framework 4.5 del est seleccionada y

    seleccione a continuacin la plantilla Biblioteca de Clases como tipo de proyecto.

    4. Cambiamos el nombre de la solucin a Practica_Pila, y el nombre del proyecto a

    EstructurasDatos, comprobar que la casilla Crear directorio para la solucin est

    seleccionada y pulse Aceptar.

    5. En el Explorador de soluciones renombrar el archivo Class1.cs que se ha creado por defecto

    a Pila.cs

  • 6. En el panel Explorador de soluciones, hacer click con el botn derecho sobre la solucin

    Practica_Pila y seleccionar Aadir | Nuevo Proyecto Visual C# | Prueba | Proyecto de

    prueba unitaria como tipo de proyecto (comprobar que .NET Framework 4.5 est

    seleccionado).

    7. Cambiar el nombre del proyecto a EstructurasDatos.Tests y pulsar OK.

    8. Elimine el archivo UnitTest1.cs creado por defecto.

    Tarea 2 Definicin de un contexto para los test.

    Vamos a comenzar creando un nuevo archivo de cdigo fuente que contendrn los tests que

    escribiremos para nuestra clase Pila.

    9. En el panel Explorer de soluciones, hacer click con el botn derecho sobre el proyecto

    EstucturasDatos.Tests y seleccione la opcin Agregar Prueba Unitaria.

    10. Cambie desde el explorador de soluciones el nombre del archivo creado por defecto

    UnitTest1.cs a PilaUnitTest.cs. Para que Visual Studio reconozca a PilaUnitTest como una

    clase de Test tiene que tener el atributo [TestClass], tal y como se muestra a continuacin:

  • 11. Si Visual Studio no reconoce el atributo TestClass (porque necesita usar el espacio de

    nombres donde est declarado dicho atributo), se puede usar una nueva caracterstica de

    Visual Studio que aade automticamente la correspondiente instruccin using. Presione

    simultneamente las tres teclas CTRL + . para lanzar el men contextual o pulse botn

    derecho sobre el atributo [TestClass] seleccione Resolver y la opcin deseada:

    12. Una vez establecido adecuadamente el atributo TestClass para la clase de tests

    PilaUnitTest, es el momento de describir el estado y las condiciones que dicha clase tiene

    que cumplir como.

    13. Comencemos asumiendo que la pila cuando es creada, el constructor por defecto devuelve

    una instancia a un objeto pila que no es nula. Comencemos cambiando el nombre del

    mtodo Test creado por defecto a uno que especifique este hecho, el cual llamaremos

    NuevaPilaEsNoNula. (Los mtodos de las pruebas unitarias tienen el atributo

    [TestMethod]).

    14. Ahora tenemos que declarar y crear una nueva instancia de Pila, y verificar que su valor es

    no nulo.

  • Se observa que la clase Pila no la reconoce el compilador, ya que la clase Pila no est

    declarada en el mismo proyecto que el de las pruebas de unidad. Para que sea accesible el

    ensamblado generado por proyecto EstructurasDatos (y por tanto la clase Pila), al proyecto

    EstructurasDatos.Test, hay que incluirlo en las referencias: pulsar botn derecho en la

    carpeta References de EstructurasDatos.Test , y seleccionar Agregar referencia.

    En la ventana de administracin de referencias del proyecto EstructurasDatos.Test,

    seleccionar la opcin Proyectos dentro del elemento jerrquico Solucin y marcar la casilla

    que corresponde al proyecto EstructurasDatos (en el que est la clase Pila), tal y como se

    muestra en la siguiente pantalla:

  • Cuando acepte la ventana comprobar que la indicacin de error an no ha desaparecido. Es

    necesario incluir la clausula using.

    Al igual que se hizo anteriormente, en este caso, sobre el nombre de la clase Pila, pulsar el

    botn derecho, seleccionar Resolver y la opcin de incluir el using TDD.EstructurasDatos.

  • Una vez hecho esto comprobar que las indicaciones de error han desaparecido. Es el

    momento de aadir la correspondiente instruccin de comprobacin, y el Test quedara:

    [TestMethod] public void NuevaPilaEsNoNula() { Pila pila = new Pila(); Assert.IsNotNull(pila); }

    15. Para comprobar el comportamiento de la clase Pila con respecto a la prueba, hay que

    ejecutar el Explorador de Pruebas (por defecto se encuentra en una pestaa plegada en el

    panel de la izquierda de la ventana principal).

    Pulsar el enlace, Ejecutar todas, si todo ha ido bien ver que la prueba NuevaPilaEsNoVacia

    est marcada en verde, lo que significa prueba superada!!!

  • Ahora tenemos que declarar e inicializar una nueva instancia de Pila, y verificar que su propidad EsVacia (que indica que la pila est vacia) es verdadera, y por tanto devuelve el valor booleano true. Dicha prueba la vamos a denominar NuevaPilaEsVacia:

    Visual Studio no reconoce la propiedad EsVacia de la pila an. Para crearla, pulsamos el botn derecho sobre ella, y seleccionamos la opcin Generar | Propiedad.

    Visual Studio crear dicha propiedad en el archivo Pila.cs del proyecto EstructurasDatos, tal y como se muestra a continuacin:

    Si ejecutramos de nuevo todas las pruebas veramos que la prueba NuevaPilaEsVacia no es superada.

  • En el mbito del Desarrollo Dirigido por los Test ( TDD), la filosofa es hacer que los test sean lo ms simple posibles, con el mnimo de funcionalidad, y as decrementar nuestra exposicin a los errores. Por tanto, lo mnimo necesario para pasar el test es hacer que la propiedad EsVacia sea de solo lectura y devuelva true. public class Pila { public bool EsVacia { get { return true; } } }

    Despues de las anteriores modificaciones, si volvemos a ejecutar los Test, veremos cmo esta vez los pasa.

  • Tarea 3 Incluyendo mas funcionalidad dirigida por los Tests

    En este momento, lo que tenemos es una implementacin casi vacia de la clase Pila, hay una nica propiedad de solo-lectura EsVacia. Vamos a aadirle la funcionalidad de poder meter y sacar elementos de la pila. Aadamos otra Prueba MeterElementoNuevaPilaEsNoVacia que especifique el comportamiento del nuevo mtodo Meter para la clase Pila, el cual se le pasa un entero como parmetro de entrada. La primera condicin que debe cumplir es que cuando se introduzca un elemento en la pila, sta tiene que dejar de estar vaca, adicionalmente el ltimo elemento que se meta es el que tiene que salir. [TestMethod] public void MeterElementoNuevaPilaEsNoVacia() { Pila pila = new Pila(); int elemento; pila.Meter(elemento); bool esVacia = pila.EsVacia; Assert.IsFalse(esVacia); }

    Hacer click con el botn derecho sobre el mtodo Meter:

  • El cdigo generado por Visual Studio es el siguiente: namespace TDD.EstructurasDatos { public class Pila { public bool EsVacia { get { return true; } } public void Meter(int elemento) { throw new NotImplementedException(); } } } Ejecute el test para comprobar que realmente falla. Es importante comprobar esto, para evitar que surjan errores posteriores debidos a fatdicas casualidades o situaciones impredecibles. Ahora nuestro objetivo es hacer que se pase este test . Atendiendo a la filosofa de TDD, lo ms simple que se puede hacer es comprobar que realmente hay algo metido en la pila cuando se llama al mtodo Meter (dejando para posteriores test la comprobacin de la correspondencia entre lo que entra y lo que sale de la pila). Cuando ejecutemos el test, veremos que falla de nuevo. que ocurre?. Recuerde, que para cumplir con la norma de hacer las cosas lo ms simple posibles, la propiedad EsVacia se implement como de solo-lectura y siempre devolviendo un valor true. Ahora tenemos que hacer nuevas decisiones de diseo acerca de como la propiedad EsVacia debera comportarse y su relacin con el mtodo Meter. Parece claro que la clase Pila necesita algn mecanismo para almacenar su estado. Una posibilidad es ir almacenando los tems en una lista, esto nos permitira, por un lado determinar el valor de la propiedad EsVacia en funcin del tamao de la lista; y adems la posibilidad de almacenar los elementos introducidos. using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace TDD.EstructurasDatos { public class Pila { private ArrayList _elementos; public bool EsVacia { get { return (_elementos.Count == 0);

  • } } public void Meter(int elemento) { _elementos.Add(elemento); } } }

    Si la clase ArrayList no es reconocida por el compilador. Presione las teclas CTRL+. y seleccione la opcin de importar el espacio de nombres System.Collections. Ejecute de nuevo el test. Volver a fallar porque nuestro ArrayList no ha sido inicializado. Mire con atencin el cdigo fuente de la declaracin de ArrayList y observar cmo Visual Studio le advierte, con una rayita verde ondulada subrayando el problema de la inicializacin de dicha variable. Inicialice dicha variable en la propia declaracin (aunque tambin se podra hacer en la llamada del constructor). Si ejecutamos los tests comprobaremos que ahora si se pasan. Siguiendo con la filosofa TDD aqu mostrada, se le propone al alumno que contine desarrollando el proyecto para conseguir una correcta implementacin de todas las operaciones asociadas a una pila. GRUPO DE TRABAJO.

    - Implementacin de la pila mediante colecciones genricas Pila utilizando TDD. Documente el ms completo conjunto de pruebas para garantizar que la implementacin de los mtodos de la clase Pila es correcta.

    TRABAJO AUTNOMO.

    - Basada en la anterior implementacin construya un proyecto librera que permita resolver expresiones aritmticas (totalmente patentizadas) de operandos reales.