Apuntes DAM

Chuleta de Entornos de Desarrollo

Git, Maven, pruebas, refactorización, documentación y UML: lo que se pregunta en el examen y se usa a diario.

Ponte a prueba con un simulacro

Git básico

git init · git clone URLCrear repositorio · copiar uno remoto
git status · git diffQué ha cambiado (sin preparar)
git add archivo · git add -pPreparar cambios (por trozos con -p)
git commit -m "mensaje"Guardar una versión
git log --oneline --graphHistorial compacto con ramas
git switch -c ramaCrear rama y cambiar a ella
git merge rama · git rebase mainIntegrar cambios
git push -u origin rama · git pullSubir · traer y fusionar
git restore archivoDescartar cambios locales
git revert HASHDeshacer un commit con otro commit
Tema: Optimización y Documentación

Maven

<dependency>  <groupId>org.junit.jupiter</groupId>  <artifactId>junit-jupiter</artifactId>  <version>5.11.0</version>  <scope>test</scope></dependency>

Ciclo: validate → compile → test → package → verify → install → deploy. mvn clean package genera el .jar en target/.

Tema: Optimización y Documentación

Técnicas de prueba

Caja negraSe prueba la especificación sin mirar el código
Clases de equivalenciaUn valor representativo de cada grupo válido e inválido
Valores límiteProbar justo en, antes y después de cada frontera
Caja blancaSe diseñan casos a partir del código
Complejidad ciclomáticaV(G) = aristas − nodos + 2 = decisiones + 1
Cobertura de ramasCada condición toma verdadero y falso al menos una vez
Unitaria · integración · sistema · aceptaciónDe la pieza aislada al usuario final
RegresiónRepetir las pruebas tras cada cambio
Tema: Diseño y realización de pruebas

JUnit 5

class CalculadoraTest {  private Calculadora calc;  @BeforeEach void setUp() { calc = new Calculadora(); }   @Test void sumaDosPositivos() {    assertEquals(5, calc.suma(2, 3));  }  @Test void dividirEntreCeroLanza() {    assertThrows(ArithmeticException.class, () -> calc.divide(1, 0));  }  @ParameterizedTest  @CsvSource({"1,1,2", "-1,1,0", "0,0,0"})  void sumaVarios(int a, int b, int esperado) {    assertEquals(esperado, calc.suma(a, b));  }}

Otras: assertTrue, assertNull, assertAll, assertEquals(0.3, x, 1e-9) para decimales, @DisplayName, @Disabled.

Tema: Pruebas con JUnit y Mockito

Mockito

@ExtendWith(MockitoExtension.class)class PedidoServiceTest {  @Mock PedidoRepository repo;  @InjectMocks PedidoService service;   @Test void guardaElPedido() {    when(repo.existe(7)).thenReturn(false);    service.crear(7);    verify(repo).guardar(any(Pedido.class));  }}
Tema: Pruebas con JUnit y Mockito

Refactorización

Extraer métodoUn trozo con nombre propio pasa a ser un método
RenombrarNombres que expliquen la intención
Introducir variable explicativaDar nombre a una expresión compleja
Sustituir número mágicoConstante con nombre en vez de 0.21
Encapsular atributoprivate + getter/setter
Malos oloresMétodo largo, clase grande, código duplicado, lista larga de parámetros

Refactorizar no cambia el comportamiento: las pruebas deben seguir en verde.

Tema: Optimización y Documentación

Javadoc

/** * Calcula el precio final aplicando el IVA. * * @param base importe sin impuestos, mayor o igual que 0 * @param iva  porcentaje, por ejemplo 21 * @return precio con impuestos redondeado a dos decimales * @throws IllegalArgumentException si base es negativa */public double precioFinal(double base, int iva) { … }

Generar: mvn javadoc:javadoc o javadoc -d doc src/*.java.

Tema: Optimización y Documentación

Diagrama de clases

+ − # ~public, private, protected, paquete
Atributo subrayadostatic
Cursiva o «abstract»Clase o método abstracto
——▷ (triángulo hueco)Herencia (generalización)
- - -▷Realización de una interfaz
—— con flechaAsociación navegable
◇—— (rombo hueco)Agregación: la parte puede existir sola
◆—— (rombo relleno)Composición: la parte muere con el todo
- - -> Dependencia (usa temporalmente)
1, 0..1, *, 1..*Multiplicidad
Tema: Diagramas UML

Otros diagramas UML

Casos de usoActores, casos y relaciones «include» (siempre) y «extend» (opcional)
SecuenciaLíneas de vida, mensajes en orden, fragmentos alt, opt y loop
ActividadFlujo con decisiones, bifurcaciones y calles
EstadosEstados de un objeto y transiciones evento [guarda] / acción
Tema: Diagramas UML

Chuletas de otras asignaturas