/ToolRotation

CAD Tool

Primary LanguageJava

Escuela Colombiana de Ingenieria

Procesos de desarrollo de Software - PDSW

Taller - diseño de pruebas: clases de equivalencia, condiciones de frontera, análisis de transiciones.

Importante: Las instrucciones de este taller asumen el uso de Linux

Entregables:

  • Parte I, en clase.
  • Parte II (clases de equivalenci y diseño). El martes clase.
  • Parrte II (implementado). Antes del próximo laboratorio.

Parte I

  1. Revise las especificaciones del ejercicio básico de diseño de pruebas.

  2. Descargue e importe el proyecto de base del primer punto.

    git clone https://github.com/PDSW-ECI/EquivalenceClassesPropertyTestingExcercise
  3. Revise cómo es la estructura de Maven para separar las pruebas de los demás artefactos del proyecto: src/main, src/test.

  4. Ejecute la fase de pruebas del proyecto con el comando, y analice cómo son presentados los resultados.

    mvn test
    
  5. Implemente un caso de prueba para cada clase de equivalencia identificado, siguiendo el esquema PBT (property-based testing) a través de JUnit y QuickTheories. Recuerde usar la anotacion @Test y seguir la conveción de nombres:

    /**
    * Pruebas clase de equivalencia XX: [Aquí la especificación de la clase de equivalencia]
    **/
    @Test
    public void testClaseEquivalenciaXX(){
    	...
    }
  6. Ejecute las pruebas. A partir de los resultados obtenidos, identifique los posibles problemas que tenga la implementación.

Parte II.

Parte A.

En este ejercicio, va a agregar un par de requerimientos funcionales a una herramienta de dibujo tipo CAD, siguiendo un esquema TDD (Test-Driven development). En la evaluación se revisará que efectivamente se hayan hecho las pruebas antes de la implementación.

  1. Clone los fuentes de ESTE repositorio con git, NO lo descargue directamente de la página!).

  2. Importe el proyecto y revise su funcionalidad. Como observará, la opción 'rotar figura seleccionada' no está implementada aún. Esta función permite rotar la figura seleccionada actualmente en la lista de figuras, usando como eje de rotación la esquina inferior izquierda del rectángulo que enmarque dicha figura (por ahora sólo se pueden dibujar líneas y rectángulos).

Por ejemplo, si la siguiente fuera la figura seleccionada:

Al seleccionar la opción de rotación se haría:

Quedando al final:

Revise la especificación del método 'rotateSelectedShape' y a partir del mismo haga lo siguiente:

  • Defina las clases de equivalencia para las posibles entradas de este método. Ponga el detalle de estas clases, a manera de comentarios en la clase de pruebas ControllerTest, incluyendo:

    • La descripción del conjunto, usando lenguaje natural o lenguaje matemático.
    • El tipo de prueba
    • El resultado esperado para dicha clase de equivalencia.

    Ejemplo:

    #CE Método Clase de equivalencia Resultado
    1 Controller.rotateSelectedShape     Segmento Horizontal: La instancia del controlador tiene un segmento de recta r tal que r.punto1.y==r.punto2.y ^ r.punto1.x != r.punto1.x ?????
    2 Controller.rotateSelectedShape ???? ????
    3 Controller.rotateSelectedShape ???? ????
    .... ..... ..... ......
    N Controller.rotateSelectedShape ???? ????
  • Seleccione un caso por cada clase de equivalencia e implemente las respectivas pruebas en ControllerTest, siguiendo el esquema PBT y QuickTheories.

  • Cuando haya hecho lo anterior, ejecute:

git add .			
git commit -m "primera versión de las pruebas"
			
  • Haga la implementación del método 'rotateSelectedShape', y apoyese en las pruebas (mvn test), para verificar la funcionalidad del mismo.
  • Una vez tenga la funcionalidad deseada, realice las pruebas de cubrimiento para rectificar que las pruebas están contemplando todos los caminos/condiciones del método implementado.
  • Una vez se tenga la funcionalidad implementada, haga un nuevo commit:
git add .			
git commit -m "funcionalidad de rotación implementada"
			

Parte B.

Otra funcionalidad faltante es la opción de 'deshacer' / 'rehacer'. Para esto, aplique el patrón Comando (ver referencia dada en la programación de lecturas).

Tenga en cuenta que para lograr esta funcionalidad se requiere:

  1. Encapsular en 'Comandos' las funcionalidades de:

    • Dibujar una figura
    • Duplicar
    • Rotar la figura seleccionada
  2. Embeber en dichos comandos las respectivas operaciones inversas. Por ejemplo, el inverso de dibujar una figura es eliminarla, mientras que el inverso de duplicar, será borrar todas las figuras adicionales creadas.

  3. Mantener, con un esquema de pilas, tanto la secuencia de comandos ejecutada, como la secuencia de comandos 'deshecha', de manera que las operaciones de 'deshacer' y 'rehacer' se hagan en un orden lógico.

Nota: Para comprimir el avance en un archivo .zip, use el comando (dentro del directorio que va a comprimir, sin olvidar el punto):

	zip -r NOMBRE.PROYECTO.zip .	

Creative Commons License
Este contenido hace parte del curso Procesos de Desarrollo de Software del programa de Ingeniería de Sistemas de la Escuela Colombiana de Ingeniería, y está licenciado como Creative Commons Attribution-NonCommercial 4.0 International License.