La adopción de herramientas de inteligencia artificial generativa ha supuesto una transformación significativa en los procesos actuales de desarrollo de software. Asistentes como GitHub Copilot y los modelos de lenguaje de gran tamaño (LLMs) han introducido nuevas formas de escribir código, documentar sistemas, depurar errores y acelerar tareas de desarrollo. No obstante, su uso generalizado también ha generado preocupaciones relacionadas con la calidad del software, la dependencia excesiva del desarrollador, la pérdida de comprensión del sistema y la aparición de malas prácticas. En este contexto, resulta necesario realizar un análisis crítico y basado en la experiencia práctica de su impacto real.
Este Trabajo Fin de Grado analiza el uso de herramientas de inteligencia artificial generativa como apoyo al desarrollo de software, con el objetivo principal de identificar buenas y malas prácticas en el desarrollo asistido por IA. El estudio se fundamenta en el desarrollo práctico de un sistema software real: una API web para la gestión de una biblioteca, implementada utilizando FastAPI, SQLAlchemy y Pytest, junto con una interfaz web y un sistema de control de acceso basado en roles. El proceso de desarrollo siguió una metodología estructurada con ciclos iterativos e incrementales, lo que permitió evaluar de forma continua la interacción entre el desarrollador y estas herramientas a lo largo de todas las fases del proyecto, incluyendo la toma de requisitos, el diseño de la arquitectura, la implementación, la depuración y las pruebas. Los sistemas de IA generativa se utilizaron como apoyo en la extracción de requisitos, la generación de código, la identificación y resolución de errores, la refactorización y el diseño de pruebas. A través de múltiples iteraciones, el trabajo pone de manifiesto tanto los escenarios en los que estas herramientas mejoran de forma efectiva la productividad y facilitan la toma de decisiones, como aquellos en los que un uso inadecuado conduce a un aumento de la complejidad, a errores difíciles de detectar o a una menor comprensión del sistema desarrollado. Se presta especial atención a las diferencias en el aprovechamiento de estas herramientas según el nivel de experiencia del desarrollador, destacando la importancia del control humano y la revisión crítica.
Los resultados obtenidos permiten establecer un conjunto de recomendaciones prácticas para integrar la inteligencia artificial generativa en los flujos de trabajo de desarrollo de software de manera responsable y eficiente. Las conclusiones subrayan que, aunque estas herramientas pueden aumentar significativamente la productividad, deben utilizarse como apoyo al desarrollador y no como sustitutos del razonamiento técnico, garantizando así la calidad, mantenibilidad y sostenibilidad del software desarrollado.
ABSTRACT
The rapid adoption of generative artificial intelligence tools has significantly transformed modern software development processes. Assistants such as GitHub Copilot and large language models (LLMs) have introduced new ways of writing code, documenting systems, debugging errors, and accelerating development tasks. However, their widespread use has also raised concerns regarding code quality, developer dependency, loss of system understanding, and the emergence of poor development practices. In this context, a critical and experience-based analysis of their impact is necessary.
This Final Degree Project analyzes the use of generative AI tools as support in the development of a real software system, with the main objective of identifying good and bad practices in AI-assisted software engineering. The study is grounded in the practical development of a web-based library management system implemented as a RESTful API using FastAPI, SQLAlchemy, and Pytest, with a frontend interface and role-based access control. The development process followed a structured methodology with iterative and incremental cycles, allowing continuous evaluation of the interaction between the developer and AI tools throughout all phases of the project, including requirements elicitation, architecture definition, implementation, debugging, and testing.
Generative AI was employed as an assistant for requirements documentation, code generation, error diagnosis, refactoring, and test design. Through multiple development iterations, the project highlights scenarios where AI tools effectively improve productivity and support decision-making, as well as situations where their misuse leads to increased complexity, hidden errors, or reduced developer understanding. Particular attention is paid to differences in how AI tools should be used depending on the developer’s experience level, emphasizing the importance of critical review and human control.
The results of this work provide a set of practical recommendations for integrating generative AI into software development workflows in a responsible and effective manner. The conclusions emphasize that, while AI tools can significantly enhance productivity, they must be used as supportive instruments rather than autonomous solution generators, ensuring that software quality, maintainability, and developer expertise are preserved.
La adopción de herramientas de inteligencia artificial generativa ha supuesto una transformación significativa en los procesos actuales de desarrollo de software. Asistentes como GitHub Copilot y los modelos de lenguaje de gran tamaño (LLMs) han introducido nuevas formas de escribir código, documentar sistemas, depurar errores y acelerar tareas de desarrollo. No obstante, su uso generalizado también ha generado preocupaciones relacionadas con la calidad del software, la dependencia excesiva del desarrollador, la pérdida de comprensión del sistema y la aparición de malas prácticas. En este contexto, resulta necesario realizar un análisis crítico y basado en la experiencia práctica de su impacto real.
Este Trabajo Fin de Grado analiza el uso de herramientas de inteligencia artificial generativa como apoyo al desarrollo de software, con el objetivo principal de identificar buenas y malas prácticas en el desarrollo asistido por IA. El estudio se fundamenta en el desarrollo práctico de un sistema software real: una API web para la gestión de una biblioteca, implementada utilizando FastAPI, SQLAlchemy y Pytest, junto con una interfaz web y un sistema de control de acceso basado en roles. El proceso de desarrollo siguió una metodología estructurada con ciclos iterativos e incrementales, lo que permitió evaluar de forma continua la interacción entre el desarrollador y estas herramientas a lo largo de todas las fases del proyecto, incluyendo la toma de requisitos, el diseño de la arquitectura, la implementación, la depuración y las pruebas. Los sistemas de IA generativa se utilizaron como apoyo en la extracción de requisitos, la generación de código, la identificación y resolución de errores, la refactorización y el diseño de pruebas. A través de múltiples iteraciones, el trabajo pone de manifiesto tanto los escenarios en los que estas herramientas mejoran de forma efectiva la productividad y facilitan la toma de decisiones, como aquellos en los que un uso inadecuado conduce a un aumento de la complejidad, a errores difíciles de detectar o a una menor comprensión del sistema desarrollado. Se presta especial atención a las diferencias en el aprovechamiento de estas herramientas según el nivel de experiencia del desarrollador, destacando la importancia del control humano y la revisión crítica.
Los resultados obtenidos permiten establecer un conjunto de recomendaciones prácticas para integrar la inteligencia artificial generativa en los flujos de trabajo de desarrollo de software de manera responsable y eficiente. Las conclusiones subrayan que, aunque estas herramientas pueden aumentar significativamente la productividad, deben utilizarse como apoyo al desarrollador y no como sustitutos del razonamiento técnico, garantizando así la calidad, mantenibilidad y sostenibilidad del software desarrollado.
ABSTRACT
The rapid adoption of generative artificial intelligence tools has significantly transformed modern software development processes. Assistants such as GitHub Copilot and large language models (LLMs) have introduced new ways of writing code, documenting systems, debugging errors, and accelerating development tasks. However, their widespread use has also raised concerns regarding code quality, developer dependency, loss of system understanding, and the emergence of poor development practices. In this context, a critical and experience-based analysis of their impact is necessary.
This Final Degree Project analyzes the use of generative AI tools as support in the development of a real software system, with the main objective of identifying good and bad practices in AI-assisted software engineering. The study is grounded in the practical development of a web-based library management system implemented as a RESTful API using FastAPI, SQLAlchemy, and Pytest, with a frontend interface and role-based access control. The development process followed a structured methodology with iterative and incremental cycles, allowing continuous evaluation of the interaction between the developer and AI tools throughout all phases of the project, including requirements elicitation, architecture definition, implementation, debugging, and testing.
Generative AI was employed as an assistant for requirements documentation, code generation, error diagnosis, refactoring, and test design. Through multiple development iterations, the project highlights scenarios where AI tools effectively improve productivity and support decision-making, as well as situations where their misuse leads to increased complexity, hidden errors, or reduced developer understanding. Particular attention is paid to differences in how AI tools should be used depending on the developer’s experience level, emphasizing the importance of critical review and human control.
The results of this work provide a set of practical recommendations for integrating generative AI into software development workflows in a responsible and effective manner. The conclusions emphasize that, while AI tools can significantly enhance productivity, they must be used as supportive instruments rather than autonomous solution generators, ensuring that software quality, maintainability, and developer expertise are preserved. Read More


