El objetivo de este proyecto es implementar una herramienta en Rust que establezca las métricas de calidad del código Swift, con el fin de proporcionar ayuda para mejorar la calidad del diseño software de las aplicaciones para iOS. El funcionamiento de la herramienta será el siguiente: 1. AST: Mediante el compilador de Swift, se generarán los árboles de sintaxis abstracta (AST) de cada archivo Swift. 2. Parser: Para representar este AST, se ha implementado un analizador sintáctico que transforma el AST devuelto por el compilador de Swift en estructuras de datos manejables. 3. Estrucutras intermedias: Sin embargo, para calcular las métricas de calidad, se requieren algunos elementos adicionales. Por este motivo, la segunda parte de la herramienta se centra en generar unas estructuras intermedias que recopilarán los datos necesarios para llevar a cabo el cálculo de dichas métricas. 4. Metricas de calidad: Por último, la tercera parte del proyecto consiste en la generación de métricas de calidad basadas en los datos recibidos por las estructuras intermedias. En esta fase, se permitirá decidir según qué criterios se desea realizar el cálculo de las métricas. Además, esta parte está separada del resto del proyecto para facilitar la ampliación a otros lenguajes sin necesidad de adaptar la herramienta al completo. Asimismo, añadir nuevos criterios para medir la calidad no implicaría mayores complicaciones, siempre y cuando se cuenten con las estructuras intermedias necesarias para llevarlo a cabo. Además, destacar que aunque las tres partes se han desarrollado en colaboración con otros dos compañeros, en este TFG se documentará únicamente la parte de la generación de las métricas cuantitativas de calidad. Esta parte resulta esencial para poder implementar las distintas estrategias con las que se van a calcular las métricas de calidad. En definitiva, este proyecto se enfoca en proporcionar métricas de calidad para el código Swift mediante una herramienta implementada en Rust, con el objetivo de mejorar las aplicaciones de iOS y, en consecuencia, la experiencia del usuario. Además, esta herramienta es fácilmente ampliable y puede incorporar nuevas funcionalidades en el futuro.
ABSTRACT
The goal of this project is to develop a tool in Rust that establishes quality metrics for Swift code, aiming to improve the software design quality of iOS applications. The operation of the tool will be as follows: 1. AST: Through the Swift compiler, abstract syntax trees (ASTs) will be generated for each Swift file. 2. Parser: To represent this AST, a parser has been implemented to transform the AST returned by the Swift compiler into manageable data structures. 3. Intermediate structures: However, calculating quality metrics requires additional components. Therefore, the second part of the tool focuses on generating intermediate structures that will collect the necessary data for these calculations. 4. Quality metrics: Finally, the third part of the project involves generating quality metrics based on the data received by the intermediate structures. In this phase, it will be possible to decide according to which criteria the metrics calculation should be performed. Additionally, this part is separated from the rest of the project to facilitate expansion to other languages without the need to completely adapt the tool. Furthermore, adding new criteria to measure quality would not involve major complications, as long as the necessary intermediate structures are available to carry it out. Additionally, while the three parts of the project were developed in collaboration with two other team members, this thesis will document only the part related to generating quantitative quality metrics. This part is essential for implementing the different strategies that will be used to calculate the quality metrics. In summary, this project aims to provide quality metrics for Swift code using a tool implemented in Rust, with the goal of improving iOS applications and, consequently, user experience. The tool is designed to be easily extendable and capable of incorporating new functionalities in the future.
El objetivo de este proyecto es implementar una herramienta en Rust que establezca las métricas de calidad del código Swift, con el fin de proporcionar ayuda para mejorar la calidad del diseño software de las aplicaciones para iOS. El funcionamiento de la herramienta será el siguiente: 1. AST: Mediante el compilador de Swift, se generarán los árboles de sintaxis abstracta (AST) de cada archivo Swift. 2. Parser: Para representar este AST, se ha implementado un analizador sintáctico que transforma el AST devuelto por el compilador de Swift en estructuras de datos manejables. 3. Estrucutras intermedias: Sin embargo, para calcular las métricas de calidad, se requieren algunos elementos adicionales. Por este motivo, la segunda parte de la herramienta se centra en generar unas estructuras intermedias que recopilarán los datos necesarios para llevar a cabo el cálculo de dichas métricas. 4. Metricas de calidad: Por último, la tercera parte del proyecto consiste en la generación de métricas de calidad basadas en los datos recibidos por las estructuras intermedias. En esta fase, se permitirá decidir según qué criterios se desea realizar el cálculo de las métricas. Además, esta parte está separada del resto del proyecto para facilitar la ampliación a otros lenguajes sin necesidad de adaptar la herramienta al completo. Asimismo, añadir nuevos criterios para medir la calidad no implicaría mayores complicaciones, siempre y cuando se cuenten con las estructuras intermedias necesarias para llevarlo a cabo. Además, destacar que aunque las tres partes se han desarrollado en colaboración con otros dos compañeros, en este TFG se documentará únicamente la parte de la generación de las métricas cuantitativas de calidad. Esta parte resulta esencial para poder implementar las distintas estrategias con las que se van a calcular las métricas de calidad. En definitiva, este proyecto se enfoca en proporcionar métricas de calidad para el código Swift mediante una herramienta implementada en Rust, con el objetivo de mejorar las aplicaciones de iOS y, en consecuencia, la experiencia del usuario. Además, esta herramienta es fácilmente ampliable y puede incorporar nuevas funcionalidades en el futuro.
ABSTRACT
The goal of this project is to develop a tool in Rust that establishes quality metrics for Swift code, aiming to improve the software design quality of iOS applications. The operation of the tool will be as follows: 1. AST: Through the Swift compiler, abstract syntax trees (ASTs) will be generated for each Swift file. 2. Parser: To represent this AST, a parser has been implemented to transform the AST returned by the Swift compiler into manageable data structures. 3. Intermediate structures: However, calculating quality metrics requires additional components. Therefore, the second part of the tool focuses on generating intermediate structures that will collect the necessary data for these calculations. 4. Quality metrics: Finally, the third part of the project involves generating quality metrics based on the data received by the intermediate structures. In this phase, it will be possible to decide according to which criteria the metrics calculation should be performed. Additionally, this part is separated from the rest of the project to facilitate expansion to other languages without the need to completely adapt the tool. Furthermore, adding new criteria to measure quality would not involve major complications, as long as the necessary intermediate structures are available to carry it out. Additionally, while the three parts of the project were developed in collaboration with two other team members, this thesis will document only the part related to generating quantitative quality metrics. This part is essential for implementing the different strategies that will be used to calculate the quality metrics. In summary, this project aims to provide quality metrics for Swift code using a tool implemented in Rust, with the goal of improving iOS applications and, consequently, user experience. The tool is designed to be easily extendable and capable of incorporating new functionalities in the future. Read More