|
1 | | -# Auditoría del repositorio — rama `refactor/ui-modernization` |
| 1 | +# Auditoría técnica — rama `refactor/ui-modernization` |
2 | 2 |
|
3 | | -Fecha: 17 de septiembre de 2026. Auditoría y refactorización completa de la rama de modernización. **No** incluye merge a `master`. |
| 3 | +Fecha: 17 de septiembre de 2026. Cambios exclusivos de la rama de pruebas, sin merge ni PR. |
4 | 4 |
|
5 | | -## Resultado actual |
| 5 | +## Estructura actual |
6 | 6 |
|
7 | | -La aplicación queda como un único proyecto Maven Java 21/UTF-8 con interfaz JavaFX. Se han eliminado las jerarquías antiguas `Adicionales`, `Ordenar` y `Principal`, la dependencia de Swing/AWT, la compilación secundaria en Windows-1252 y las clases puente que conservaban nombres históricos. |
| 7 | +Maven estándar, Java 21 y UTF-8. No existen las antiguas carpetas `Adicionales`, `Ordenar` ni `Principal`, ni la UI Swing. El motor reside en `visualizer.fx.SortEngine`; su estado ya no utiliza campos estáticos de la aplicación de 2020. Los algoritmos no importan clases UI. |
8 | 8 |
|
9 | | -Se mantienen los 30 algoritmos, ocho visualizaciones, métricas, memoria, controles, enlaces, modo arcoíris y comportamiento de «Saltar ordenación». |
| 9 | +- `visualizer.core.AlgorithmCatalog`: fuente única de nombres y referencias a implementaciones. |
| 10 | +- `visualizer.core.SortAlgorithm` y `SortContext`: contrato y métricas/animación. |
| 11 | +- `visualizer.core.algorithms`: **30 clases con implementación propia, una por archivo**; `SortHelpers` reúne cuatro primitivas compartidas sin algoritmos seleccionables. |
| 12 | +- `visualizer.fx`: `Launcher`, ventana `VisualizerApp`, controles `UiControls`, motor `SortEngine`, dibujado `VisualizationCanvas` y captura CI `PreviewLauncher`. |
| 13 | +- `src/main/resources/visualizer/fx/theme.css`: estilos; `src/test/java/visualizer/fx/SortEngineRegressionTest.java`: regresión. |
10 | 14 |
|
11 | | -## Estructura |
| 15 | +[Diagrama de flujo y explicación para entender las responsabilidades](architecture.md). |
12 | 16 |
|
13 | | -- `src/main/java/visualizer/core/AlgorithmCatalog.java`: catálogo único de nombres e implementaciones. |
14 | | -- `src/main/java/visualizer/core/Algorithms.java`: implementaciones de los 30 algoritmos. |
15 | | -- `src/main/java/visualizer/core/SortAlgorithm.java`: contrato funcional común. |
16 | | -- `src/main/java/visualizer/core/SortContext.java`: instrumentación compartida de accesos, cambios y checkpoints. |
17 | | -- `src/main/java/visualizer/fx/SortEngine.java`: worker, ciclo de vida, snapshots, shuffle y animación final. |
18 | | -- `src/main/java/visualizer/fx/VisualizerApp.java`: composición y eventos de la interfaz. |
19 | | -- `src/main/java/visualizer/fx/UiControls.java`: controles reutilizables. |
20 | | -- `src/main/java/visualizer/fx/VisualizationCanvas.java`: renderizado de los ocho modos. |
21 | | -- `src/main/resources/visualizer/fx/theme.css`: tema visual. |
22 | | -- `src/test/java/visualizer/fx/SortEngineRegressionTest.java`: regresión funcional del motor. |
| 17 | +## Refactorizaciones y errores revisados |
23 | 18 |
|
24 | | -Esta separación evita que los algoritmos conozcan JavaFX. Solo reciben un `SortContext` y operan sobre el array. |
| 19 | +El registro con referencias a métodos permite detectar referencias a implementaciones inexistentes al compilar. Separar cada algoritmo simplifica revisarlo y modificarlo sin tocar los demás; se conservó el cuerpo de cada implementación y su orden. Las operaciones de partición, inserción, fusión y heap están compartidas para no duplicarlas entre Quick/Intro/Tim/Merge y sus variantes. |
25 | 20 |
|
26 | | -## Cambios de arquitectura aplicados |
| 21 | +`SortEngine` rechaza trabajo si está cerrado u ocupado, publica el resultado terminal antes de liberar el estado ocupado, usa un hilo independiente y limita los snapshots a unos 60 por segundo. El canvas conserva una paleta cacheada para evitar recalcular colores por fotograma. Maven emplea un solo compilador Java 21; CI ejecuta compilación, Javadoc, regresión, controles y captura gráfica. |
27 | 22 |
|
28 | | -| Área | Antes | Ahora | |
29 | | -| --- | --- | --- | |
30 | | -| Algoritmos | 30 clases heredadas con dependencias a `MainAplicacion`, estado estático y paquetes históricos. | Registro único y métodos de algoritmo aislados en `visualizer.core`. | |
31 | | -| UI | JavaFX más adaptadores de compatibilidad Swing. | JavaFX nativo únicamente. | |
32 | | -| Estado | Contadores, delay y finalización repartidos entre clases estáticas. | Estado de ejecución propiedad de `SortEngine`. | |
33 | | -| Animación | Callbacks con nombres de la antigua UI. | `SortContext` con operaciones explícitas y checkpoints. | |
34 | | -| Build | Java 21 + compilación separada Java 8/Windows-1252. | Un solo build Java 21/UTF-8. | |
35 | | -| Registro | Implementaciones y nombres podían estar duplicados. | `AlgorithmCatalog` es la única fuente de orden y nombres. | |
36 | | -| Tests | Smoke de UI y regresión parcial evolucionada durante la migración. | Regresión que recorre los 30 algoritmos con entradas pequeñas, más smoke JavaFX. | |
| 23 | +## Limitaciones |
37 | 24 |
|
38 | | -## Errores y riesgos revisados |
| 25 | +- La regresión recorre los 30 algoritmos, pero 29 usan ocho valores y Bogo usa dos: no demuestra corrección para todos los tamaños, permutaciones o casos con duplicados. Bitonic y los controles del visualizador usan potencias de dos. Algunos algoritmos de distribución solo admiten enteros no negativos, como los valores utilizados en la aplicación. |
| 26 | +- Los contadores `SortContext` son consistentes dentro de la nueva arquitectura pero pueden diferir del código de 2020; ciertas operaciones auxiliares (por ejemplo la ordenación interna de cubetas) no se instrumentan paso a paso. |
| 27 | +- Bogo puede tardar indefinidamente. «Saltar» acelera animación, **no** es cancelación real. |
| 28 | +- Las pruebas UI corren en un escritorio virtual Linux; escalado DPI y tipografías de Windows requieren revisión manual. |
| 29 | +- `PreviewLauncher` utiliza `java.awt.image.BufferedImage` únicamente para guardar la captura PNG de CI; la interfaz de usuario y los algoritmos no utilizan Swing/AWT. |
39 | 30 |
|
40 | | -### Ciclo de vida del motor |
41 | | - |
42 | | -El motor rechaza nuevas tareas cuando está cerrado u ocupado, publica el frame terminal antes de liberar `busy`, utiliza un worker daemon único y conserva el resultado final visible. `close()` es idempotente y una interrupción se propaga como error de ejecución en vez de ignorarse silenciosamente. |
43 | | - |
44 | | -### Estado global |
45 | | - |
46 | | -Se eliminó el estado estático compartido que impedía razonar sobre una ejecución de forma aislada. Contadores, delay, progreso de finalización y array pertenecen ahora a la instancia de `SortEngine`. |
47 | | - |
48 | | -### Registro de algoritmos |
49 | | - |
50 | | -Los nombres y funciones viven juntos en `AlgorithmCatalog`, evitando dos listas paralelas. El selector consume directamente ese catálogo. |
51 | | - |
52 | | -### Renderizado |
53 | | - |
54 | | -`VisualizationCanvas` sigue reutilizando la paleta de colores por tamaño de array y limita las actualizaciones del motor a aproximadamente 60 snapshots por segundo. No se afirma una mejora porcentual de rendimiento sin perfilado específico. |
55 | | - |
56 | | -### Build |
57 | | - |
58 | | -Maven compila todas las fuentes con Java 21 y UTF-8. Ya no existe Ant embebido ni una ruta de compilación distinta para código antiguo. Javadoc forma parte del build. |
59 | | - |
60 | | -## Limitaciones que siguen siendo reales |
61 | | - |
62 | | -### Cobertura algorítmica |
63 | | - |
64 | | -La regresión ejecuta los 30 algoritmos, pero usa entradas pequeñas: 29 con ocho elementos y Bogo con dos. Esto detecta regresiones comunes y errores de ordenación, pero no prueba todas las permutaciones, tamaños ni costes extremos. |
65 | | - |
66 | | -### Bogo sort |
67 | | - |
68 | | -Bogo es deliberadamente no determinista. Con tamaños grandes puede tardar indefinidamente. «Saltar ordenación» elimina el retraso de animación, pero no transforma Bogo en un algoritmo acotado ni cancela la operación. |
69 | | - |
70 | | -### Métricas |
71 | | - |
72 | | -Los contadores de cambios y accesos se instrumentan ahora mediante `SortContext`. Son coherentes dentro de la nueva arquitectura, pero no deben interpretarse como una reproducción bit a bit de los contadores históricos porque la implementación antigua no aplicaba una política uniforme en todos los algoritmos. |
73 | | - |
74 | | -### Revisión visual de Windows |
75 | | - |
76 | | -GitHub Actions usa Linux con escritorio virtual. El smoke test comprueba arranque, controles, ocho modos y una ordenación real, pero no sustituye una revisión manual del escalado DPI, tipografía y comportamiento de ventana en Windows. |
77 | | - |
78 | | -## Comprobaciones reproducibles |
| 31 | +## Cómo reproducir comprobaciones |
79 | 32 |
|
80 | 33 | ```bash |
81 | 34 | mvn clean package |
82 | | -java -cp "target/classes;target/test-classes" visualizer.fx.SortEngineRegressionTest |
83 | 35 | mvn javafx:run |
84 | 36 | ``` |
85 | 37 |
|
86 | | -En Linux el separador de classpath es `:` en lugar de `;`. |
87 | | - |
88 | | -GitHub Actions además ejecuta el smoke test JavaFX y captura una imagen de la ventana real como artefacto. |
89 | | - |
90 | | -Todo permanece aislado en `refactor/ui-modernization`; no se ha realizado merge ni se ha abierto una pull request. |
| 38 | +Tras compilar, en Windows: `java -cp "target\classes;target\test-classes" visualizer.fx.SortEngineRegressionTest` (en Linux, separador `:`). GitHub Actions ejecuta además el smoke de los controles, dibujo y captura. |
0 commit comments