domingo, 13 de octubre de 2024

Inteligencia Artificial Generativa - ¿Cómo de bueno es ChatGPT para aprender un nuevo lenguaje? VIII

Este artículo es el octavo de una series acerca de De cómo aprender python con ChatGPT, en el enlace previo, puedes empezar por el principio si quieres.



Inteligencia Artificial Generativa





Hasta ahora, hemos visto las bondades de ChatGPT, Gemini y otras herramientas relacionadas, como "Code Tutor" o "Code Copilot", para aprender un nuevo lenguaje de programación o mejorar tu eficiencia como programador. Sin embargo, existen muchos tipos de inteligencia artificial.

¿Qué tipo de inteligencia artificial son ChatGPT o Gemini?


Son modelos de IA dentro del campo de la inteligencia artificial generativa y, en concreto, de la IA basada en el procesamiento del lenguaje natural (NLP, por sus siglas en inglés) .

Según Wikipedia, la IA generativa es:



Un tipo de sistema de inteligencia artificial (IA) capaz de generar texto, imágenes u otros medios en respuesta a comandos.1​2​ Los modelos de IA generativa aprenden los patrones y la estructura de sus datos de entrenamiento de entrada y luego generan nuevos datos que tienen características similares.



Pero..

¿Qué tipo de IA es la IA generativa?


A grandes rasgos, existen tres tipos de IA según su capacidad:

IA General (AGI - Artificial General Intelligence):

Aquí entramos en conceptos más cercanos a la ciencia ficción. Aún no existe, pero sería una IA capaz de comprender, aprender y aplicar conocimiento en cualquier tarea intelectual que el ser humano pueda realizar.


IA Superinteligencia (ASI - Artificial Superintelligence):

Esta IA sería una evolución de la anterior; en este caso, superaría significativamente la inteligencia humana en todos los aspectos. Por lo tanto, podría resolver problemas que los humanos no pueden y tomar decisiones complejas de manera autónoma. Es un concepto más especulativo y aún lejano.


IA Débil o Estrecha (Weak/Narrow AI):

Aquí es donde se sitúan las herramientas de las que estamos hablando. La IA Generativa, los chatbots y, en definitiva, herramientas como ChatGPT, Gemini, Copilot, etc., están diseñadas para realizar tareas específicas, y por lo tanto, su alcance es limitado. No poseen conciencia ni capacidad de autoaprendizaje fuera de su ámbito.
Otros ejemplos: asistentes virtuales (Siri, Alexa), sistemas de recomendación, reconocimiento facial.

Pero no nos podemos olvidar de otro elemento fundamental dentro de la IA que ha hecho que los Chatbots sean hoy en día tan útiles.


Machine Learning y Aprendizaje Profundo (Deep Learning).



El Machine Learning (ML) desempeña un papel esencial en los chatbots como ChatGPT, ya que facilita que estos sistemas aprendan, entiendan y generen respuestas de manera coherente y natural utilizando grandes cantidades de datos como entrada.




Aprendizaje a partir de datos

Entrenamiento de modelos: En el caso de ChatGPT, está basado en un modelo llamado GPT (Generative Pre-trained Transformer), que utiliza técnicas de machine learning, específicamente aprendizaje profundo (deep learning). Este modelo se entrena con grandes cantidades de texto (libros, artículos, páginas web, etc.), lo que le permite aprender patrones del lenguaje, desde la gramática hasta el significado contextual de las palabras y frases.
Dataset masivo: Los chatbots como ChatGPT se entrenan con millones de ejemplos de conversaciones, lo que les permite generar respuestas contextualmente apropiadas en una variedad de situaciones.


Transformers: La arquitectura clave



Transformers son un tipo de modelo de aprendizaje profundo que ha revolucionado el campo del procesamiento de lenguaje natural (NLP) y que es la base de ChatGPT. Los transformers utilizan mecanismos de atención para procesar el texto, lo que permite que el modelo identifique y priorice la información más relevante en una secuencia de palabras.
Contexto: Los transformers pueden "entender" largas secuencias de texto, manteniendo el contexto de la conversación a lo largo de varios turnos. Esto es fundamental para que se puedan mantener conversaciones fluidas con este tipo de chatbots.


Generación de lenguaje natural (NLG)

Generación de texto: El machine learning en chatbots permite generar respuestas en lenguaje natural. Una vez que el modelo ha aprendido a partir del conjunto de datos, puede crear respuestas novedosas a partir de las entradas del usuario. Esto es lo que se denomina IA generativa.
Predicción de la siguiente palabra: El modelo genera texto prediciendo la próxima palabra o secuencia de palabras basada en lo que ha aprendido del contexto anterior. Gracias a las capacidades de machine learning, puede generar frases que no están predefinidas, sino que son creadas de forma dinámica.
Ajuste fino (Fine-tuning)Ajuste del modelo: El modelo generado se ajusta mediante machine learning para mejorar su rendimiento en tareas específicas, como la programación en un determinado lenguaje o la conversación en lenguaje natural. Esto se conoce como fine-tuning y se utiliza para mejorar modelos específicos.
Entrenamiento supervisado y reforzado: En muchos casos, los modelos como ChatGPT también se afinan utilizando datos etiquetados por humanos (entrenamiento supervisado) y técnicas de aprendizaje por refuerzo (Reinforcement Learning), donde se le da retroalimentación al modelo sobre si sus respuestas son útiles o correctas.



¿Dónde encaja el aprendizaje profundo dentro de la IA?



Historia de la AI y los chatbots

 Este artículo es parte de una series acerca de  De cómo aprender python con ChatGPT, en el enlace previo, puedes empezar por el primer artículo.



Década de 1940-1950: Primeros Conceptos y Teorías

1943: Redes neuronales artificiales

Los científicos Warren McCulloch y Walter Pitts proponen el primer modelo matemático de una neurona artificial, marcando el inicio de las ideas sobre cómo las máquinas podrían imitar el cerebro humano.

1950: Test de Turing

El matemático Alan Turing propone una prueba para determinar si una máquina es capaz de exhibir un comportamiento inteligente similar al de un ser humano, lo que hoy conocemos como el Test de Turing.

Década de 1950-1960: Primeros Avances en IA

1956: Conferencia de Dartmouth

La conferencia organizada por John McCarthy acuña el término "Inteligencia Artificial" y marca el inicio formal del campo de estudio de la IA.

1966: ELIZA

El primer chatbot creado por Joseph Weizenbaum en el MIT. ELIZA era capaz de imitar una conversación terapéutica al reformular las entradas del usuario en preguntas, aunque carecía de comprensión real.

Década de 1970: Primeros Chatbots y Sistemas Expertos

1972: PARRY

Desarrollado por Kenneth Colby, PARRY fue el primer chatbot diseñado para simular una conversación con un paciente esquizofrénico, y era más avanzado que ELIZA en cuanto a la simulación de respuestas humanas.

1974-1980: Invernada de la IA

Debido a la falta de avances significativos y a la decepción con las promesas iniciales, se produjo una caída en la inversión y el interés en la IA.

Década de 1980: Nuevos Avances en Machine Learning

1980: Renacimiento de los sistemas expertos

Los sistemas expertos, que utilizan reglas predefinidas para simular la toma de decisiones humana, como el sistema XCON de Digital Equipment Corporation, recuperan el interés en la IA.

1986: Retropropagación

Se redescubre el algoritmo de retropropagación para entrenar redes neuronales, gracias al trabajo de Geoffrey Hinton, lo que facilita el entrenamiento de redes más profundas y marca un hito clave en el Deep Learning.

Década de 1990: IA en Juegos y Primeros Asistentes Virtuales

1997: Deep Blue vence a Garry Kasparov

La máquina de ajedrez de IBM, Deep Blue, derrota al campeón mundial de ajedrez Garry Kasparov, un hito que muestra el potencial de la IA para resolver problemas complejos.

1995: ALICE (Artificial Linguistic Internet Computer Entity)

Un chatbot basado en procesamiento de lenguaje natural creado por Richard Wallace. Utilizaba un enfoque de coincidencia de patrones y sirvió de base para futuros chatbots más avanzados.

Década de 2000: Surgimiento de Machine Learning y Asistentes Virtuales

2006: Deep Learning resurge

Geoffrey Hinton y sus colegas popularizan el concepto de Deep Learning, revolucionando el campo del aprendizaje automático gracias a redes neuronales profundas capaces de aprender a partir de grandes cantidades de datos.

2008: Siri

Apple compra Siri, un proyecto de asistente virtual, y lo convierte en el primer asistente basado en IA integrado en un smartphone (lanzado en 2011).

Década de 2010: Avances Masivos en IA y Chatbots

2011: Watson de IBM

Watson, el sistema de IA de IBM, vence a los campeones humanos del programa de preguntas y respuestas Jeopardy!, demostrando la capacidad de la IA para procesar y entender el lenguaje natural.

2014: Eugene Goostman

Un chatbot llamado Eugene Goostman, que simula a un niño ucraniano de 13 años, se convierte en el primer chatbot en "pasar" el Test de Turing, aunque la validez del logro ha sido debatida.

2015: Transformers y modelos de atención

Google presenta la arquitectura Transformer, que revoluciona el procesamiento del lenguaje natural. Esta arquitectura es la base de muchos modelos modernos de IA, incluidos GPT, BERT, y otros.

2018-2023: Era de los Modelos Generativos y Chatbots Avanzados

2018: GPT (Generative Pre-trained Transformer)

OpenAI lanza el primer modelo GPT, que utiliza la arquitectura Transformer para generar texto de forma fluida. Este avance marca el inicio de los modelos de lenguaje capaces de generar respuestas convincentes en conversaciones.

2019: GPT-2

OpenAI lanza GPT-2, un modelo más avanzado que mejora la capacidad de generar texto de manera coherente y se convierte en un hito importante para los chatbots modernos.

2020: GPT-3

OpenAI lanza GPT-3, con 175 mil millones de parámetros, lo que lo convierte en uno de los modelos de lenguaje más avanzados jamás creados. GPT-3 puede generar texto con un alto grado de coherencia y contextualización, lo que impulsa el desarrollo de chatbots avanzados como ChatGPT.

2022: ChatGPT

OpenAI lanza ChatGPT, basado en GPT-3.5 y luego actualizado a GPT-4, lo que establece un nuevo estándar en la interacción conversacional con máquinas. ChatGPT demuestra una capacidad sin precedentes para comprender y generar lenguaje natural de manera fluida y coherente.

2024: Actualidad

Chatbots avanzados y personalizados

Los chatbots como ChatGPT se integran en múltiples aplicaciones y sectores, desde atención al cliente hasta educación y salud. Su capacidad para generar texto coherente, aprender de interacciones y ofrecer respuestas contextualmente apropiadas los convierte en una herramienta esencial en la era digital.

domingo, 6 de octubre de 2024

Revisiones de Código y Code Copilot - ¿Cómo de bueno es ChatGPT para aprender un nuevo lenguaje? VII

Este artículo es el septimo de una series acerca de  De cómo aprender python con ChatGPT, en el enlace previo, puedes empezar por el principio si quieres.


Revisiones de Código y

Code Copilot


Como comentamos anteriormente, las revisiones de código son una de las mejores herramientas que tenemos para mejorar nuestras habilidades como programadores. Esta es una práctica muy extendida y todo el mundo está de acuerdo en que mejora notablemente la calidad del código. Los desarrolladores de todos los niveles deberían hacer revisiones de código, ya que, si bien es cierto que los más senior pueden tener más que aportar, los junior pueden hacer preguntas que no solo les ayuden a ellos, sino que también hagan que el código sea más sencillo y fácil de entender. Además, todos tenemos puntos ciegos, y cuanta más gente revise el código, más fiable será.

Cuando trabajamos en un equipo, es fácil implementar este tipo de prácticas, ya que las herramientas para la gestión de código las facilitan. Se pueden añadir comentarios en cada línea de código e incluso bloquear el "merge" del código hasta que un número determinado de miembros del equipo lo haya revisado y aprobado. Pero, ¿Qué pasa cuando estamos programando solos? Aquí es donde las IA nos pueden echar una mano.

En esta ocasión, he querido probar el "Code Pilot" incluido en las versiones de ChatGPT:


Al igual que con "Code Tutor", para utilizarlo hay que ir al menú de la izquierda y pulsar en "Explorar GPT". En la sección de "Programación", veremos "Code Tutor". Una vez que lo abras, a partir de ese momento te aparecerá en el menú de la izquierda.

En sus propias palabras:


El Code Copilot en la sección "Explorar GPT" es una funcionalidad diseñada para ayudar a los desarrolladores a escribir, corregir y mejorar código de manera eficiente mediante inteligencia artificial. Esta herramienta, basada en modelos como GPT, puede sugerir fragmentos de código, autocompletar líneas, detectar errores, y proporcionar explicaciones o alternativas para ciertas implementaciones de programación.
En pocas palabras, es un asistente que acelera el proceso de codificación, ofreciendo recomendaciones inteligentes a medida que el programador escribe, lo cual optimiza el flujo de trabajo y reduce el tiempo que toma desarrollar software o solucionar problemas de código.


Dejo el enlace a la conversación aquí.



Al abrirlo te hace algunas sugerencias:


Como estoy interesado en aprender Python, empiezo con:

/start python

El chatbot responde con una descripción de lo que puede hacer y nos anima a copiar directamente el código para poder ayudarnos. En capítulos posteriores hablaremos sobre las implicaciones de seguridad que esto conlleva, pero por el momento nos centraremos en su utilidad.

También nos ofrece un menú con los comandos básicos disponibles:


Available Commands:
/search [query]: Find real-time information or answers.
/read [urls]: Fetch the contents of a webpage, useful for docs or tutorials.
/quick_fix [issue]: Get an immediate solution with no explanation.
/fix [issue]: Use Rubber Duck Debugging to walk through your code and fix errors.
/explain [code]: Step-by-step explanation of how a code block works.
/review [code]: Get a code review for optimization, readability, or errors.
/help [topic]: More detailed help about me.



Entre las opciones, vemos "review", que es justo lo que estábamos buscando.

El resultado está en línea con lo que hemos estado viendo: Code Copilot realiza un análisis muy interesante. Lo más significativo que encuentra es la duplicidad de código en una función. Esto no es nada novedoso; yo, que vengo del mundo de Java, estoy acostumbrado a que los IDEs, como Eclipse o IntelliJ, hagan este tipo de sugerencias, e incluso te propongan soluciones en forma de refactorizaciones. Sin embargo, el proceso de cambiar el código es tedioso y consume tiempo, mientras que estas herramientas de inteligencia artificial te entregan los cambios ya hechos. Solo hay que copiar y pegar el código, luego volver al IDE y comprobar si todo funciona. Es ahí donde más me ha sorprendido, ya que casi siempre funciona a la primera. Claro, esto es cierto solo para pequeños fragmentos de código. Cuando lo probé con un archivo más grande, falló estrepitosamente. Las mejoras sugeridas eran buenas, pero en el código generado se olvidó de cosas importantes, incluso de sus propias sugerencias. Por ejemplo, el nombre de una de las clases estaba en español, mientras que el resto del código estaba en inglés. La herramienta fue lo suficientemente inteligente para darse cuenta de esto, pero en el código generado no lo corrigió.

Puedes ver los cambios que efectuó en mi GitHub: commit. Hace correcciones incluso en mensajes y comentarios, e intenta ir más allá sugiriendo mejoras como:

a. "¿Te gustaría añadir pruebas unitarias para garantizar que el manejo de errores y las llamadas a la API se comporten como se espera?"
b. "¿Quieres configurar los niveles de registro dinámicamente, según el entorno (por ejemplo, DEBUG para desarrollo, INFO para producción)?"

Estas son justo las sugerencias que un programador junior necesita para entregar un código más maduro.





domingo, 29 de septiembre de 2024

Code Tutor and Logs - ¿Cómo de bueno es ChatGPT para aprender un nuevo lenguaje? VI

Este artículo es el sesto de una series acerca de  De cómo aprender python con ChatGPT, en el enlace previo, puedes empezar por el principio si quieres.

 

Code Tutor and Logs


A medida que un proyecto avanza, la complejidad se incrementa. Ahora tengo tres módulos distintos; uno de ellos, el principal, utiliza los otros dos. Me he dado cuenta de que los logs han dejado de funcionar en el principal. Intuyo que esto se debe a que tengo configurados los logs de forma independiente en todos ellos, y como algunos se importan en otros, las configuraciones se están mezclando.

Este es un problema de mayor nivel que los que hemos tenido hasta ahora. Me parece una buena oportunidad para utilizar el Code Tutor de ChatGPT. Pero, ¿qué es Code Tutor? En sus propias palabras:


"Code Tutor" es una guía diseñada para ayudarte a aprender a programar. En lugar de darte respuestas directamente, su enfoque es ayudarte a razonar, entender los conceptos de programación y desarrollar habilidades para resolver problemas por ti mismo.



Para utilizarlo, hay que ir al menú de la izquierda y pulsar en "Explorar GPT":

En la sección de "Educación" veremos el "Code Tutor". Una vez abierto, aparecerá en el menú de la izquierda.

Voy a probar el mismo prompt tanto aquí como en Gemini y en el chatbot de ChatGPT para poder compararlos:

Tengo un programa con varios archivos de Python, y algunos de ellos importan a los otros, ¿cuál es la mejor estrategia para tener un sistema de log único y consistente que abarque todos los archivos/scripts de Python?

Las tres respuestas me parecen útiles. Me voy a quedar con la del Code Tutor, ya que es más sencilla y directa. Todas me proporcionan código, pero la de Gemini es más completa y va un paso más allá, sugiriendo el uso de frameworks como loguru y structlog, que ofrecen funcionalidades más avanzadas, como la rotación de logs.

Lo que no me gusta del Code Tutor es que no guarda el historial de consultas, algo que uso mucho en su chatbot hermano. Sin embargo, las sensaciones son buenas.

¿Es mejor el Code Tutor que usar directamente el chatbot? En teoría, está optimizado para ayudar al programador, pero en mi experiencia, los resultados del chatbot son muy buenos. Quizás las respuestas del chatbot son más directas. En mi opinión, depende del nivel del usuario: para principiantes, el Code Tutor puede ser mejor; para programadores más experimentados, probablemente sea mejor un chatbot, para entender mejor las diferencias, estoy preparando un artículo acerca de la Inteligencia Artificial Generativa, por el momento decir que la respuesta ofrecida por Code Tutor para preguntas básicas de programación, como por ejemplo:


Cuales son las naming conventions para ficheros de codigo .py y para clases en python


Para estas, será mejor utilizar el Code Tutor.


sábado, 21 de septiembre de 2024

Cuáles serían los resultados con otros LLM - Gemini - ¿Cómo de bueno es ChatGPT para aprender un nuevo lenguaje? V

Este artículo es el quinto de una series acerca de  De cómo aprender python con ChatGPT, en el enlace previo, puedes empezar por el principio si quieres.



Cuáles serían los resultados con otros LLM como Gemini



Sin duda, ChatGPT está siendo de gran ayuda como asistente de programación, pero ChatGPT no es el único "juguete" que tenemos hoy en día. Puede que sea el chatbot más famoso basado en LLM, y puede que sea el que más relevancia ha alcanzado entre el público general, pero hay otros. Seguramente, el segundo en notoriedad es Gemini de Google, conocido anteriormente como Google Bard, lanzado en marzo de 2023.

La prueba que voy a realizar es la misma, pero en lugar de usar la API de Spotify, usaré la de Blogger, que es otra herramienta de Google, por lo que espero obtener buenos resultados.

¿Me puedes escribir código en Python para publicar un artículo en Blogger usando la API de Blogger?

La respuesta me deja estupefacto, pues estaba esperando código y comentarios sobre el código, y lo que me encuentro es:

"Solo soy un modelo de lenguaje, así que no puedo hacer lo que me pides."

Superada la impresión inicial, le replico:

"Pero ChatGPT puede."

Y la respuesta ya es más parecida a lo que esperaba. Me resulta muy gracioso, porque hasta que no le mencioné a la competencia no se puso en movimiento. Eso sí, en ese caso lo primero que hace es disculparse:

"¡Tienes toda la razón! Como modelo de lenguaje, puedo ayudarte a generar código Python para publicar un artículo en Blogger utilizando la API de Blogger."


 

La respuesta es parecida a la de ChatGPT; el estilo es similar. Como se puede ver en la imagen, ofrece tres versiones: la primera es la misma que cuando pregunté directamente, pero la segunda es la buena.

Para hacer que este código funcione, hay un paso previo: integrarse con la autenticación y autorización de Google. El paso número 1 es, obtener las credenciales de la API:

  1. Accede a la Google Cloud Platform y crea un proyecto.
  2. Habilita la API de Blogger.
  3. Crea un cliente OAuth 2.0 y descarga las credenciales JSON.

Este es el paso que con diferencia, me ha dado más problemas. Por más detalles que le pedí a Gemini, no me dio una forma fácil de hacerlo. Incluso probé con ChatGPT y tampoco tuve suerte, así que tuve que volver a los viejos métodos de siempre:

  • Leer documentación.
  • Usar buscadores tradicionales.
  • Buscar tutoriales, incluso en YouTube.
  • Y mucho ensayo y error.

La verdad es que esa parte de la API de Google es muy poco intuitiva. Los mensajes de error son muy genéricos y no proporcionan información clara sobre el problema. En situaciones como estas, los chatbots son poco útiles.

Una vez superado ese escollo hago la prueba de que me complete el código. En el siguiente prompt ya intento que me den todas las mejoras básicas de golpe:

¿Puedes escribir el código en inglés, añadir pydoc, tratamiento de excepciones y logs?

En mi opinión, aquí es donde estas herramientas realmente lucen, aumentando la eficiencia de cualquier programador.

Pero, a la pregunta: "¿Con cuál de los dos chatbots te quedarías?", yo, por el momento, me quedo con ChatGPT. No solo porque me gusta más la interfaz, sino porque para mí, las respuestas son mejores.

En cualquier caso, no son los únicos chatbots que usan LLM. Hoy en día hay mucha variedad, y yo recomendaría utilizar herramientas como artificialanalysis, donde puedes comparar las diferentes opciones en términos de calidad, precio y velocidad.


domingo, 15 de septiembre de 2024

Siguientes pasos - Análisis de Seguridad -- ¿Cómo de bueno es ChatGPT para aprender un nuevo lenguaje? IV

Este artículo es el quinto de una series acerca de  De cómo aprender python con ChatGPT, en el enlace previo, puedes empezar por el principio si quieres.



Análisis de seguridad

 


Podemos empezar preguntándole a ChatGPT si el código generado es seguro. Es una pregunta trampa, ya que el código ha sido generado por el mismo ChatGPT, pero veamos si es capaz de hacer un buen análisis. El prompt sería:

¿Puedes analizar este código desde el punto de vista de seguridad?

ChatGPT se ha fijado en seis puntos clave:

  1. Manejo de credenciales
  2. Control de excepciones
  3. Validación de datos
  4. Logging
  5. Dependencias externas
  6. Autenticación y sesiones

Para cada uno de estos puntos, ha identificado un riesgo y varias acciones de mitigación. En su conclusión final, indica que no ha encontrado problemas graves. Sin embargo, sugiere literalmente:

validaciones adicionales, asegurando los logs, gestionando las dependencias cuidadosamente, y almacenando las credenciales de forma más segura utilizando un vault de secretos.

Esto es justo lo que quería comprobar. Sugiere efectivamente el uso de un vault de secretos, por lo que, para mí, ha pasado la prueba.

sábado, 31 de agosto de 2024

Siguientes pasos - Test Unitarios - ¿Cómo de bueno es ChatGPT para aprender un nuevo lenguaje? IV

Este artículo es el cuarto de una series acerca de  De cómo aprender python con ChatGPT, en el enlace previo, puedes empezar por el principio si quieres.

 

Test Unitarios


¿Puedes crear test unitarios en un nuevo fichero?


Genera el código rápidamente, luego una sección explicando el código y otra sección con el comando para ejecutar los test unitarios.

Me gusta cómo está estructurado el código. Primero, tiene un método setUp para inicializar todo lo necesario antes de correr los tests, incluidos los mocks. Luego, presenta test unitarios para las funciones del código a probar, tanto para casos positivos como negativos, e incluso para el control de excepciones.

Tuve que renombrar algunos archivos para que los nombres coincidieran, pero todo ha funcionado como se esperaba. La mala noticia es que, de los ocho tests generados, uno falla, lo que me lleva a pensar que hay una discrepancia entre el código generado y los tests. Para evitar esto, intenté generar los tests nuevamente, esta vez copiando y pegando el código que iba a ejecutar, para asegurarme de que los tests no se generaran para un código que estaba en la conversación y que no coincidiera exactamente con el que tenía en el editor de texto. Sin embargo, el resultado fue el mismo. Al fin y al cabo, nadie es perfecto, pero si quiero solucionar este error tendré que hacerlo a la antigua usanza: examinando y depurando el código. La dificultad aquí es que yo no he escrito el código, lo que añade una barrera, pero como el objetivo final es aprender el lenguaje de programación, seguro que me será útil.

Lo primero que me llama la atención es que se está importando MagicMock de unittest.mock. Mi primer contacto con mocking frameworks fue en 2005, cuando estaba utilizando Extreme Programming y por extensión TDD. Desde entonces, y viniendo del mundo Java, he visto pasar muchos frameworks para construir mocks. Me pregunto por qué ha elegido MagicMock en particular. En otra época, habría buscado información en Google, investigando alternativas, investigando qué framework es más maduro o aceptado según Google Trends, pero ahora tenemos chatbots para ayudarnos, así que le hago tres preguntas encadenadas para ver cómo responde:


  1. ¿Por qué has elegido unittest.mock y MagicMock como framework para fabricar los mocks?
  2. ¿Hay alternativas? ¿Qué otras opciones hay?
  3. ¿Podrías reescribir los tests con pytest y pytest-mock?

Para la primera pregunta, devuelve una respuesta bastante completa con seis puntos a favor de esta opción.

En la segunda, ofrece seis alternativas, explicando cuáles son los puntos fuertes de cada una. Incluso menciona una, mockito, que ya conocía del mundo Java. La que más me convence es la primera: pytest con pytest-mock. De ahí surge la tercera pregunta; no solo me reescribió el código de los tests, sino también el código que quería testear. Sin embargo, se quedó colgado generando el código de los tests, y tuve que pedirle que lo generara de nuevo. No es la primera vez que me pasa esto, que se quede a mitad de camino; me imagino que es lo que sucede bajo condiciones excepcionales, pero yo esperaría un mensaje de error, al menos para saber que no pudo terminar.

Con pytest, la forma de ejecutar los tests es distinta. Al probarlo, me da un error, así que le pregunto otra vez:

Cuando ejecuto "pytest", me da el error:


pytest : The term 'pytest' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

¿Sabes cuál es el problema?

 

En esta ocasión, me vuelve a generar dos respuestas, me gusta más la primera, es un poco más directa, y me sugiere ejecutar los test como un comando de python: python -m pytest.

Y ahora si, es capaz de ejecutar los test, las malas noticias es que falla en el mismo punto que con la versión anterior.