Blog

ChatGPT: ¿reemplazará la IA a los testers de software?

Con solo unas semanas en línea, ChatGPT ya está revolucionando la forma de trabajo de muchas personas. ¿Qué impacto puede tener esta tecnología en el testing de software? ¿Tiene la capacidad de ayudar en el trabajo diario de los testers? ¿O de reemplazarlos? En este artículo, exploramos esta temática mediante algunas aplicaciones del sistema.

Las herramientas de desarrollo de contenidos basadas en Inteligencia Artificial (IA), como DALL-E 2 y GitHub Copilot, han estado en auge durante los últimos meses, incluso años en algunos casos. Estas herramientas permiten a los usuarios generar imágenes y textos, o código si hablamos de Copilot, a partir de entradas basadas en lenguaje natural.

ChatGPT es un ejemplo de este tipo de desarrollos, y se encuentra accesible masivamente. Se trata de un chatbot impulsado por Inteligencia Artificial (IA) que utiliza el procesamiento del lenguaje natural (PLN) para generar respuestas a tus preguntas e indicaciones.

Gracias al entrenamiento en un conjunto masivo de datos de texto conversacional, ChatGPT puede imitar con precisión la forma en que las personas hablan y escriben en una variedad de contextos e idiomas.

“Estamos viviendo un hito histórico. Es la primera vez que la IA está al alcance de todos, sin fricciones ni dificultades. Es la punta del iceberg de todo lo que está por venir. Creo que debemos cuestionarnos y educarnos, para estar preparados y poder tomar esta tecnología como una herramienta de apoyo en lugar de una amenaza”.

Federico Toledo, cofundador y Chief Quality Officer de Abstracta.

Algunos conceptos

Antes de adentrarnos en ChatGPT, vamos a explicar algunos conceptos relacionados que pueden resultar de utilidad para lograr un mejor entendimiento de la temática.

¿Qué es la Inteligencia Artificial?

La IA es un campo amplio que implica el desarrollo de máquinas y sistemas inteligentes capaces de realizar tareas que normalmente requerirían inteligencia humana, como el aprendizaje, la resolución de problemas, la toma de decisiones y la percepción.

¿Qué es el “Machine Learning”?

Se trata de un campo de la IA que se centra en el desarrollo de algoritmos y modelos que pueden aprender de los datos y mejorar su rendimiento con el tiempo, sin ser programados explícitamente. Estos algoritmos y modelos pueden ser utilizados para hacer predicciones, o tomar decisiones basadas en datos y adaptarse a medida que se exponen a nueva información.

¿Qué es el Procesamiento del Lenguaje Natural (PLN)?

PLN es un subcampo de la Inteligencia Artificial que se centra en la interacción entre computadoras y humanos a través de lenguajes naturales, como el habla y el texto.

Incluye una amplia gama de tareas: reconocimiento de texto y voz, traducción de idiomas y resumen de textos. También implica el desarrollo de algoritmos y modelos capaces de comprender, interpretar y generar lenguaje humano.

Tiene muchas aplicaciones, como chatbots, asistentes de voz y análisis de textos. De este modo, posee el potencial de transformar muchas industrias, y ya ha tenido un impacto significativo en la forma en que nos comunicamos e interactuamos con las computadoras.

¿Qué es la IA Generativa?

La IA Generativa es la Inteligencia Artificial que puede generar nuevos contenidos mediante la utilización de texto, archivos de audio o imágenes existentes. Aprovecha la IA y los algoritmos del Machine Learning para permitir que las máquinas generen contenidos, tal como lo hace ChatGPT.

¿Es posible que ChatGPT realice testing mejor que una persona?

Cuando vemos este tipo de herramientas, nuestra pregunta inicial suele ser si podrán sustituirnos o si en cambio serán herramientas útiles para nuestro trabajo.

Como parte de nuestro esfuerzo por comprender mejor el impacto de tecnologías como la de ChatGPT, intentamos utilizarla en algunas de las actividades que muchos testers realizan como parte de su trabajo.

Algunos ejemplos de ello fueron solicitudes para diseñar casos de prueba, ideas de prueba o datos de prueba, automatizar scripts, informar errores, y montar SQLs para generar datos de prueba o verificar resultados.

1. Diseño de casos y datos de prueba con ChatGPT

Diseño de casos y datos de prueba con ChatGPT

A primera vista, podemos pensar que logramos obtener lo que buscábamos. Sin embargo, si miramos más de cerca, queda claro que la prueba está escrita a un nivel muy alto. Falta información importante que podría inducir a los testers a cometer errores.

Aún así, a pesar de que le faltan algunos pasos como hacer clic en el botón de “Shopping Cart”, consideramos que se trata de un resultado bastante impresionante para haber sido generado completamente por una IA.

Algo interesante que observamos es que si repetíamos la misma pregunta, ChatGPT mejoraba sus respuestas. En una segunda ronda (unos minutos más tarde), notamos que se añadían los pasos que faltaban. Unos días después, repetimos la petición, y la plataforma nos avisó que había proporcionado pasos generales ya que no tenía acceso a navegar por internet.

No creemos que este caso de uso pueda ser útil, pero exploremos otras ideas. Imaginemos que tenemos que probar un sistema con entradas específicas y nos estamos quedando sin ideas. ¿Por qué no hacer una lluvia de ideas con el chat?

Decidimos entonces realizar diferentes peticiones y preguntas. A continuación, citamos algunos ejemplos:

  • Dame datos de prueba para un formulario de inicio de sesión.
  • ¿Puedes darme ideas de prueba para una transacción bancaria?
  • ¿Me ayudarías con datos de prueba para un selector de fechas, incluyendo casos borde?

Las respuestas que recibimos fueron muy interesantes y precisas, en algunos casos incluso explicaban por qué debíamos probar ese caso.

Otra idea que tuvimos para utilizar el chat a nuestro favor fue pedir datos de prueba específicos que nos podrían llevar algún tiempo conseguir o escribir:

2. Automatización de casos de prueba con ChatGPT

Una vez que tuvimos el caso de prueba, intentamos automatizarlo. Para ello, le dimos a ChatGPT la siguiente instrucción:

“Dame el código para automatizar ese caso de prueba. usando Java, Selenium y JUnit”.

  • Dame 10 nombres de ciudades con caracteres especiales.
  • Dame apellidos con más de 15 caracteres.
  • Dame un párrafo de 500 palabras usando todos los caracteres.
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class AddToCartTest {
    private WebDriver driver;

    @Before
    public void setUp() {
        // Set up the Chrome driver
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
        driver = new ChromeDriver();
    }

    @Test
    public void testAddToCart() {
        // Open the OpenCart website
        String url = "http://opencart.abstracta.us/";
        driver.get(url);

        // Select a product to add to the cart
        WebElement addToCartButton = driver.findElement(By.cssSelector("a.btn.btn-primary"));
        String productLink = addToCartButton.getAttribute("href");

        // Add the product to the cart
        addToCartButton.click();

        // Check the contents of the cart
        driver.get(url + "index.php?route=checkout/cart");
        WebElement cartTable = driver.findElement(By.cssSelector("table.table.table-bordered"));
        boolean productAdded = false;
        for (WebElement row : cartTable.findElements(By.cssSelector("tr"))) {
            WebElement productColumn = row.findElement(By.cssSelector("td.text-left a"));
            if (productColumn.getAttribute("href").equals(productLink)) {
                productAdded = true;
                break;
            }
        }

        // Assert that the product was successfully added to the cart
        Assert.assertTrue(productAdded);
    }

    @After
    public void tearDown() {
        // Close the browser
        driver.quit();
    }
}

Esta fue la respuesta que obtuvimos:

This code uses the Selenium library to automate a web brouser and interact
with the OpenCart website, and the JUnit library to add assertions to the
test case. The '@Before' and '@After' annotations are used to set up and
tear down the Chrome driver before and after the test case is run. The
'@Test' annotation indicates that the 'testAddToCart' method is a test case.
The 'Assert.assertTrue' method is used to assert that the product was
successfully added to the cart. If the assertion is true, the test case
is considered to have passed. Otherwise, the test case has failed.

Antes de referirnos al código generado, nos gustaría destacar un aspecto que nos llamó la atención: la capacidad que tiene ChatGPT de preservar el contexto de la conversación. Cabe destacar que no utilizamos la prueba como entrada directa, solo hicimos referencia a un fragmento de la conversación. Y esa es una de las características que agilizan el proceso creativo.

Volviendo a la automatización, a primera vista puede dar la impresión de que tuvimos éxito con la respuesta. Sin embargo, si observamos en detalle, es notorio que hay algunos errores considerables, tales como falta de validaciones, selectores erróneos y lógica añadida innecesaria.

Hasta ahora, solo tenemos una prueba aislada, pero es sabido que no solemos trabajar de esta manera. ¿Y si quisiéramos utilizar esta prueba para crear nuestro marco de automatización?

Intentemos utilizar Page Object Model para ver si puede mejorar nuestra prueba:

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class AddToCartTest {
    private WebDriver driver;

    @Before
    public void setUp() {
        // Set up the Chrome driver
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
        driver = new ChromeDriver();
    }

    @Test
    public void testAddToCart() {
        // Open the OpenCart website
        String url = "http://opencart.abstracta.us/";
        driver.get(url);

        // Select a product to add to the cart
        ProductPage productPage = new ProductPage(driver);
        String productLink = productPage.getProductLink();

        // Add the product to the cart
        productPage.addToCart();

        // Check the contents of the cart
        CartPage cartPage = new CartPage(driver);
        boolean productAdded = cartPage.isProductInCart(productLink);

        // Assert that the product was successfully added to the cart
        Assert.assertTrue(productAdded);
    }

    @After
    public void tearDown() {
        // Close the browser
        driver.quit();
    }

    // Page object for the product page
    class ProductPage {
        private WebDriver driver;

        public ProductPage(WebDriver driver) {
            this.driver = driver;
        }

        public String getProductLink() {
            WebElement addToCartButton = driver.findElement(By.cssSelector("a.btn.btn-primary"));
        }
    }
}

Como se puede notar, no pudo completar los objetos de página. Sin embargo, aún obteniendo un código poco confiable, es posible usar un trozo de ese código, refactorizarlo, y acabar con un framework “decente” con el que empezar a trabajar.

Añadamos otra capa: ¿qué pasa si queremos hacerlo como un proyecto Maven? Le pedimos generar nuestro pom.xml.

“Generar proyecto pom.xml maven para la última prueba”

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>my-project</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>My Project</name>

  <dependencies>
    <!-- Add Selenium and JUnit dependencies -->
    <dependency>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>selenium-java</artifactId>
      <version>3.141.59</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- Add the Maven Surefire Plugin to run tests -->

Aunque nos proporcionó un código incompleto y no logró completar la tarea (nos dimos cuenta de que este es un error típico de ChatGPT), nos aportó un punto de partida. Y tenemos la posibilidad de refactorizar el trozo de código ofrecido y lograr tener un framework con el cual empezar.

3. Combinación de datos de prueba

La combinación de pares (all-pairs) es una técnica muy útil en las pruebas, pero es un desafío calcularla a mano. Se necesita una herramienta. Por ello, decidimos pedirle a ChatGPT que la calculara por nosotros, con sus variables y valores.

Combinación de datos de prueba con ChatGPT

Aunque interpretó correctamente la petición, lo cual no es tarea fácil, se equivocó. ¿De qué manera? Aplicó el producto cartesiano, otra técnica de combinación de datos, en lugar de all-pairs.

Esto nos demostró que hay que tener cuidado con la herramienta. Nos puede ayudar en muchas cosas, pero hay que prestar atención, no confiar completamente, y mirar con ojos críticos el resultado, en todos los casos.

4. Informe de errores

Informar errores no es sencillo, es importante poder encontrar buenas formas de comunicar ciertos aspectos para evitar herir los sentimientos de las personas involucradas.

ChatGPT puede ayudarnos a mejorar nuestra redacción, incluso de manera más amigable, lo cual resulta sumamente útil especialmente si no estamos realizando un reporte en nuestra lengua materna.

Can you improve this error report to be more polite and not hurt the developers feelings?

System not working as expected.

I needed the login button to be red and very visible, on the top of everything else, instead, it is not legible, orange, and I need to scroll to find it.

Esta fue la respuesta:

Sure, here is a revised version:

“Hello, I noticed that the login button is not quite meeting my expectations. Specifically, I was hoping for it to be more visible and easy to locate by being red and at the top of the page. However, it is currently orange and I have to scroll to find it. Is there any way this could be adjusted to better suit my needs? I understand that the developers have put a lot of effort into creating this system, and I apologize if my feedback comes across as critical. Thank you for your hard work and for considering my request.”

5. Armado de SQL

Aquí hicimos una petición muy concreta de un SQL, con el fin de consultar ciertos datos de unas tablas que no estaban completamente descritas.

Armado de SQL con ChatGPT

Nos gustó que el sistema hiciera una buena explicación y facilitara el código. De todos modos, es necesario revisar su respuesta en detalle para definir si es óptima. Aun así, a veces es más fácil partir de algo ya construido que empezar de cero.

Conclusión

ChatGPT es una herramienta prometedora, pero nuestro trabajo como testers requiere una mentalidad analítica y lógica, y una visión empática de la realidad del usuario. Se trata, sin dudas, de una actividad intelectualmente desafiante.

En definitiva, ChatGPT no debería ser tomada como una herramienta “sustitutiva”, pero puede ayudarnos en distintas situaciones si la utilizamos con cuidado. Podemos aprovecharla de forma creativa para mejorar nuestro trabajo y desarrollar ideas valiosas.

Posibles usos de ChatGPT en Testing de Software

  • Generar casos de prueba o datos de prueba, y ayudar con ideas de prueba.
  • Ayudar en la redacción, y en lluvias de ideas.
  • Evitar el síndrome de la página en blanco, al crear consultas SQL e intentar aportar ideas de prueba para un flujo concreto.
  • Mejorar la forma de comunicar errores o resultados.
  • Refactorizar códigos o generar una base para lo que se intenta implementar.

Si confiamos en estas herramientas sin dedicarles un pensamiento crítico, corremos el riesgo de producir resultados de baja calidad y perpetuar cualquier deficiencia inherente a las herramientas.

Entonces, ¿puede ChatGPT realizar testing mejor que las personas? Al menos hasta el día de hoy, la respuesta es negativa. Así lo mencionó el CEO de OpenAI en este tuit:

CEO de OpenAI

“Debemos prestar mucha atención a los sesgos que se pueden generar. ChatGPT es una herramienta muy poderosa, y es crucial que podamos usarla con pensamiento crítico”, destacó Federico Toledo.

“El mayor riesgo es que la gente le crea todo, sin comprobarlo. En mi opinión, siempre será necesario que el ser humano supervise y valide lo que se hace, lo cual se constituye como una gran oportunidad para los testers de software”, expresó Fabián Baptista, cofundador y CTO de Apptim.

“Cada día es más importante que aprendamos a programar y a entender cómo funcionan las cosas, así como a comprender a estos asistentes inteligentes, para que nos ayuden a hacer mejor nuestro trabajo”, remarcó.

“La herramienta tiene muchos puntos ciegos. El testing humano y maduro seguirá siendo necesario, para poder tener en cuenta la accesibilidad, la ciberseguridad, las diferentes situaciones de riesgo y muchas cuestiones más”.

Vera Babat, Chief Culture Officer de Abstracta

En resumen, la curiosidad humana y el pensamiento crítico seguirán marcando la diferencia. Aún así, nos encontramos ante un avance tecnológico más que emocionante, con gran potencial y capacidad de impacto. Sin dudas, este campo seguirá siendo tema de debate y exploración durante mucho tiempo.

“¿Lo que tenemos hoy es solo el estado del arte o es un adelanto de todo lo que ya existe?”, cuestionó Federico.


¿Qué opinas al respecto? ¿Esta tecnología ayudará a los testers? ¡Cuéntanos en los comentarios!

¡Síguenos en LinkedInTwitterFacebookInstagram y Youtube para ser parte de nuestra comunidad y enterarte de más novedades respecto a las pruebas!


Otros contenidos relacionados

Tendencias en Calidad de Software: ¿qué esperar en 2023?

Inteligencia artificial y testing: Oculow, spin off de Abstracta en ascenso

Innovaciones en Testing de Software

Formas en que ChatGPT mejora las capacidades de prueba de los testers

176 / 259