Este proyecto es una aplicacion web basada en Flax para analizar repositorios de GitHub y extraer metricas de calidad de software.
Se divide en varios modulos para garantizar el desacoplamiento:
Implementa una jerarquia de estrategias bajo la interfaz MetricStrategy lo que permite añadir nuevas metricas sin modificar el codigo ya existente:
- LinesStrategy: Cuenta las lineas totales.
- NumImportsStrategy: Identifica la cantidad de librerias externas.
- FunctionsStrategy: Utiliza AST (Abstract Syntax Trees) para analizar la estructura interna de las funciones.
- DuplicationStrategy: Implementa una heuristica basada en shingles (bloques de lineas) para detectar codigo repetido.
- MaintainabilityStrategy: Calcula un indice de mantenibilidad basado en una funcion de mantenabilidad #https://es.scribd.com/document/529256325/Indice-de-Mantenibilidad aproximada
La clase MetricsFacade simplifica el acceso al sistema de metricas. Da una interfaz unificada (compute_all) asi haciendo que el resto del programa no tenga que conocer en detalle cadda estrategia individual.
ProxySubject actUa como un intermediario entre la interfaz y la lógica. Implementa una cache utilizando una base de datos SQLite asi evitando tener que calcular el analisis si el repositoriio ya ha sido analizado antes. Tambien ofrece la opcion para que el usuario pueda forzar el recalculo.
El UIMediator coordina la comunicacion entre los componentes de la interfaz de usuario y el sistema del analisis:
- InputComponent: Valida las URLs de GitHub comprobando si empiezan de una determinada manera.
- OptionsComponent: Gestiona las preferencias de analisis como forzar el recalculo.
- HistoryComponent: Recupera los analisis previos de la base de datos.
- OutputComponent: Presenta los resultados para su visualización.
- Python
- Flask
- SQLite
- Git
- Instalar dependencias:
pip install flask pytest - Ejecutar la aplicacion:
python app.py - Acceder en el navegador a la URL que da:
http://127.0.0.1:5000
Para testear el proyecto y sus metricas, he hecho varios tests unitarios los cuales se pueden ejecutar con: python pytest Recomiendo utilizar el comando python -m pytest tests/ ya que es la que me funciona a mi. Si se quiere ver el valor de algun parametro de los tessts se tendra que ejecutar con python -m pytest -s tests/test_metrics.py