diff --git a/.classpath b/.classpath new file mode 100644 index 00000000..bff161fd --- /dev/null +++ b/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.github/workflows/ant.yml b/.github/workflows/ant.yml new file mode 100644 index 00000000..56c581ac --- /dev/null +++ b/.github/workflows/ant.yml @@ -0,0 +1,28 @@ +# This workflow will build a Java project with Ant +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-ant + +name: Java CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v2 + with: + java-version: '11' + distribution: 'temurin' + - name: Build with Ant + run: ant -noinput -buildfile build.xml + - name: Test with Ant + run: ant -buildfile build.xml test + - uses: codecov/codecov-action@v1 diff --git a/.project b/.project new file mode 100644 index 00000000..f9b4c626 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + git_poolobject + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.travis.yml b/.travis.yml index 60b2ed00..aa9ea62f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,10 @@ language: java before_script: - sudo apt-get install ant-optional +before_install: + - sudo apt-get install jq + - wget -O ~/codacy-coverage-reporter-assembly-latest.jar $(curl https://api.github.com/repos/codacy/codacy-coverage-reporter/releases/latest | jq -r .assets[0].browser_download_url) after_success: - - bash <(curl -s https://codecov.io/bash) + - java -jar ~/codacy-coverage-reporter-assembly-latest.jar report -l Java -r target/jacoco/jacoco.xml jdk: - openjdk8 diff --git a/README.md b/README.md index 4078dc6e..feb0d6a9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,63 @@ +[![codecov](https://codecov.io/gh/andonivianez/poolobject/branch/master/graph/badge.svg?token=ODPDXDS1B2)](https://codecov.io/gh/andonivianez/poolobject)
+![workflow](https://github.com/andonivianez/poolobject/actions/workflows/ant.yml/badge.svg)
+ +======= + poolobject ========== -Java code example of design creational pattern pool object +## **Autores** +- [Andoni Vianez Ulloa](https://github.com/andonivianez) +- [Yobana Nido Álvarez](https://github.com/Yobana) + + + +## **Objetivos de la práctica** +- Comprender los objetivos de medición relacionados con la caracterización y la evaluación de productos, procesos y recursos software +- Comprender, aplicar y analizar técnicas de medición sobre entidades de productos software relacionados con conjuntos de pruebas de software +- Comprender, aplicar y analizar medidas relacionadas sobre entidades de proceso y recursos de prueba del software + +## **Enunciado** +- En la práctica se va simular un pequeño desarrollo de un producto software para realizar mediciones sobre él. El objetivo es establecer un caso de estudio que sirva para caracterizar y evaluar tanto el producto desarrollado como el proceso seguido. + +## **Preguntas** + +**¿Se ha realizado trabajo en equipo?** +Sí, hemos participado los dos integrantes del equipo: + +**¿Tiene calidad el conjunto de pruebas disponibles?** +Sí ya que superan el 94% del coverage en la carpeta principal (main). + +**¿Cuál es el esfuerzo invertido en realizar la actividad?** +El esfuerzo ha sido compartido entre ambos, repartiéndonos por un lado la creación del fork e indagación de las herramientas, +y por el otro el desarrollo de los propios tests. El mayor problema (por llamarlo de alguna manera) es la cuestión de los permisos +en Github, ya que el que no es propietario del fork no puede vincularlo a Codecov. El descubrir cómo funcionan las Actions ha sido interesante, +mucho más fácil que utilizar una herramienta externa como Travis. + +======= + + +## **Objetivos de la práctica** +- Comprender los objetivos de medición relacionados con la caracterización y la evaluación de productos, procesos y recursos software +- Comprender, aplicar y analizar técnicas de medición sobre entidades de productos software relacionados con conjuntos de pruebas de software +- Comprender, aplicar y analizar medidas relacionadas sobre entidades de proceso y recursos de prueba del software + +## **Enunciado** +- En la práctica se va simular un pequeño desarrollo de un producto software para realizar mediciones sobre él. El objetivo es establecer un caso de estudio que sirva para caracterizar y evaluar tanto el producto desarrollado como el proceso seguido. + +## **Preguntas** + +**¿Se ha realizado trabajo en equipo?** +Sí, hemos participado los dos integrantes del equipo: + +**¿Tiene calidad el conjunto de pruebas disponibles?** +Sí ya que superan el 94% del coverage en la carpeta principal (main). + +**¿Cuál es el esfuerzo invertido en realizar la actividad?** +El esfuerzo ha sido compartido entre ambos, repartiéndonos por un lado la creación del fork e indagación de las herramientas, +y por el otro el desarrollo de los propios tests. El mayor problema (por llamarlo de alguna manera) es la cuestión de los permisos +en Github, ya que el que no es propietario del fork no puede vincularlo a Codecov. El descubrir cómo funcionan las Actions ha sido interesante, +mucho más fácil que utilizar una herramienta externa como Travis. -Example to apply good practise in software developmemnt: test and mesurement. +**¿Cuál es el número de fallos encontrados en el código?** +No encontramos ningún fallo en el código (compila correctamente tal y como puede verse en Github Actions). diff --git a/cobertura.xml b/cobertura.xml new file mode 100644 index 00000000..afd10955 --- /dev/null +++ b/cobertura.xml @@ -0,0 +1,37 @@ + + +< cobertura líneas-válidas = " 8 " líneas-cubiertas = " 8 " línea-tarifa = " 1 " ramas-válidas = " 4 " ramas-cubiertas = " 4 " rama-tasa = " 1 " timestamp = " 1394890504210 " complejidad = " 0 " versión = " 0.1 " > + < fuentes > + < fuente >fuentes + + < paquetes > + < nombre del paquete = " 3 " line-rate = " 1 " branch-rate = " 1 " > + < clases > + < nombre de clase = " cc.js " nombre de archivo = " cc.js " line-rate = " 1 " branch-rate = " 1 " > + < métodos > + < nombre del método = " normalizar " aciertos = " 11 " firma = " ()V " > + < líneas > + < número de línea = " 1 " hits = " 11 " /> + + + < nombre del método = " getBrand " visitas = " 7 " firma = " ()V " > + < líneas > + < número de línea = " 5 " hits = " 7 " /> + + + + < líneas > + < número de línea = " 1 " hits = " 1 " branch = " false " /> + < número de línea = " 2 " hits = " 11 " branch = " false " /> + < número de línea = " 5 " hits = " 1 " branch = " false " /> + < número de línea = " 6 " hits = " 7 " branch = " false " /> + < número de línea = " 15 " hits = " 7 " branch = " false " /> + < número de línea = " 17 " hits = " 7 " branch = " false " /> + < número de línea = " 18 " hits = " 25 " branch = " true " condition-coverage = " 100% (4/4) " /> + < número de línea = " 20 " hits = " 6 " branch = " false " /> + + + + + + \ No newline at end of file diff --git a/src/main/ubu/gii/dass/c01/Client.java b/src/main/ubu/gii/dass/c01/Client.java index 2ec1d57f..99d12cb4 100644 --- a/src/main/ubu/gii/dass/c01/Client.java +++ b/src/main/ubu/gii/dass/c01/Client.java @@ -8,7 +8,9 @@ public class Client{ public static void main(String arg[]) throws NotFreeInstanceException, DuplicatedInstanceException{ ReusablePool pool; - Reusable r1,r2,r3; + Reusable r1; + Reusable r2; + Reusable r3; Logger logger = Logger.getLogger("c01"); @@ -31,4 +33,4 @@ public static void main(String arg[]) throws NotFreeInstanceException, Duplicate } -} \ No newline at end of file +} diff --git a/src/test/ubu/gii/dass/test/c01/ReusablePoolTest.java b/src/test/ubu/gii/dass/test/c01/ReusablePoolTest.java index ae9b0d18..d07b9a8d 100644 --- a/src/test/ubu/gii/dass/test/c01/ReusablePoolTest.java +++ b/src/test/ubu/gii/dass/test/c01/ReusablePoolTest.java @@ -9,17 +9,26 @@ import org.junit.Before; import org.junit.Test; +import ubu.gii.dass.c01.DuplicatedInstanceException; +import ubu.gii.dass.c01.NotFreeInstanceException; +import ubu.gii.dass.c01.Reusable; +import ubu.gii.dass.c01.ReusablePool; +import ubu.gii.dass.c01.Client; + /** - * @author alumno + * @author Andoni Vianez Ulloa + * @author Yobana Nido Alvarez * */ public class ReusablePoolTest { - + + private ReusablePool pool; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { + pool = ReusablePool.getInstance(); } /** @@ -27,6 +36,7 @@ public void setUp() throws Exception { */ @After public void tearDown() throws Exception { + pool = null; } /** @@ -34,23 +44,78 @@ public void tearDown() throws Exception { */ @Test public void testGetInstance() { - fail("Not yet implemented"); + ReusablePool pool = ReusablePool.getInstance(); + // Comprobamos que no es null + assertNotNull("Devuelve un objeto nulo", pool); + // Comprobamos que el objeto devuelto es una instancia + assertTrue(pool instanceof ReusablePool); + + ReusablePool pool2 = ReusablePool.getInstance(); + // Comprobamos que no es null + assertNotNull("Devuelve un objeto nulo", pool2); + // Comprobamos que el objeto devuelto es una instancia + assertTrue(pool2 instanceof ReusablePool); + assertSame("Misma instancia que el Singleton", pool, pool2); } /** * Test method for {@link ubu.gii.dass.c01.ReusablePool#acquireReusable()}. + * @throws NotFreeInstanceException */ @Test - public void testAcquireReusable() { - fail("Not yet implemented"); + public void testAcquireReusable() throws NotFreeInstanceException { + Reusable r1, r2, r3 = null; + try { + r1 = pool.acquireReusable(); + assertNotNull(r1); + assertTrue(r1 instanceof Reusable); + r2 = pool.acquireReusable(); + assertNotNull(r2); + assertTrue(r2 instanceof Reusable); + // Se comprueba que no son el mismo objeto + assertFalse(r1.util().equals(r2.util())); + r3 = pool.acquireReusable(); + } catch (NotFreeInstanceException e) { + assertNull(r3); + } } /** * Test method for {@link ubu.gii.dass.c01.ReusablePool#releaseReusable(ubu.gii.dass.c01.Reusable)}. + * @throws NotFreeInstanceException + * @throws DuplicatedInstanceException + */ + @Test + public void testReleaseReusable() throws NotFreeInstanceException, DuplicatedInstanceException { + Reusable r1, r2 = null; + try { + r1 = pool.acquireReusable(); + String hash1 = r1.util(); // Guardamos + pool.releaseReusable(r1); // Liberamos + r2 = pool.acquireReusable(); // Cogemos un nuevo reusable + assertTrue(hash1.equals(r2.util())); + pool.releaseReusable(r2); // Liberamos + pool.releaseReusable(r2); // Liberamos y salta la excepción + } catch (NotFreeInstanceException e) { + e.printStackTrace(); + } catch (DuplicatedInstanceException e) { + assertTrue(true); + } + } + + /** + * Test method for {@link ubu.gii.dass.c01.Client#main(ubu.gii.dass.c01.Client)}. + * @throws DuplicatedInstanceException + * @throws NotFreeInstanceException */ + @SuppressWarnings("static-access") @Test - public void testReleaseReusable() { - fail("Not yet implemented"); + public void testClient() throws NotFreeInstanceException, DuplicatedInstanceException { + Client client = new Client(); + assertNotNull(client); + assertTrue(client instanceof Client); + + client.main(null); } }