Resumen
1 Introducción
2 Recopilación de datos
3 RQ1: ¿Qué tipos de consultas de ingeniería de software presentan los desarrolladores a ChatGPT en el prompt inicial?
4 RQ2: ¿Cómo presentan los desarrolladores sus consultas a ChatGPT en conversaciones de múltiples turnos?
5 RQ3: ¿Cuáles son las características del comportamiento de compartir?
6 Discusiones
7 Amenazas a la validez
8 Trabajos relacionados
9 Conclusión y trabajo futuro
Referencias
\
==Motivación:== Los resultados presentados en la Figura 3 y la Figura 4 revelan que una parte sustancial en DevGPT-PRs (33.2%) y DevGPT-Issues (26.9%) abarca conversaciones de múltiples turnos. En conversaciones de un solo turno, los desarrolladores plantean una consulta relacionada con SE en el prompt inicial y reciben una respuesta de ChatGPT, proporcionando un intercambio claro y directo. La dinámica de las conversaciones de múltiples turnos, sin embargo, introduce complejidad. Estas interacciones se extienden más allá de una simple consulta y respuesta, involucrando una serie de intercambios que potencialmente refinan, amplían o clarifican la consulta inicial.
\ Esta comunicación en capas plantea una pregunta sobre las estrategias de los desarrolladores para articular sus consultas a lo largo de múltiples turnos. Por lo tanto, introducimos RQ2, que estudia la naturaleza de los prompts de los desarrolladores en conversaciones de múltiples turnos. Para facilitar un análisis exhaustivo, introducimos además dos sub-RQs:
– RQ2.1: ¿Cuáles son los roles de los prompts de desarrolladores en conversaciones de múltiples turnos? Esta pregunta tiene como objetivo categorizar el rol estructural de cada prompt en la correspondiente conversación de múltiples turnos.
– RQ2.2: ¿Cuáles son los patrones de flujo en conversaciones de múltiples turnos? Basado en la taxonomía propuesta como respuesta a RQ2.1, esta pregunta explora el patrón de transición frecuente de esos roles identificados de prompts en conversaciones de múltiples turnos. Las respuestas a las sub-RQs anteriores proporcionarán información a los investigadores sobre la dinámica y las prácticas de los desarrolladores al utilizar ChatGPT a través de múltiples rondas de interacciones.
\ 4.1 Enfoque
En RQ2.1, consideramos prompts en todas las 189 conversaciones de múltiples turnos, es decir, 64 conversaciones de DevGPT-PRs y 125 de DevGPT-Issues. Siguiendo un método similar a RQ1, utilizamos codificación abierta para etiquetar manualmente 645 prompts (236 prompts de DevGPT-PRs y 409 prompts de DevGPT-Issues) en conversaciones de múltiples turnos durante tres rondas:
– En la primera ronda, cinco coautores etiquetaron independientemente 20 conversaciones seleccionadas aleatoriamente tanto de los conjuntos de datos de DevGPT-PRs como de DevGPT-Issues de múltiples turnos, abarcando 40 conversaciones y 123 prompts. Después de la discusión, desarrollamos un libro de codificación que consta de siete etiquetas distintas.
– En la segunda ronda, basado en el libro de codificación existente, dos anotadores etiquetaron independientemente otro conjunto de 20 conversaciones de cada uno de los conjuntos de datos de DevGPT-PRs y DevGPT-Issues de múltiples turnos, un total de 144 prompts. Los dos anotadores lograron una puntuación de acuerdo entre evaluadores de 0.89, medida por el coeficiente kappa de Cohen, representando un acuerdo casi perfecto (Landis y Koch, 1977). Los anotadores luego discutieron y refinaron el libro de codificación.
\ – Finalmente, cada uno de los dos anotadores de la segunda ronda etiquetó independientemente los datos restantes. En RQ2.2, utilizamos un modelo de Markov (Gagniuc, 2017) para analizar los patrones de flujo de conversación mediante la representación de un Gráfico de Transición de Markov. Un Gráfico de Transición de Markov es un gráfico dirigido que demuestra las transiciones probabilísticas
entre varios estados o nodos. En nuestro caso, cada nodo en el gráfico representa una categoría específica desarrollada en RQ2.1, y las aristas dirigidas entre nodos denotan la probabilidad de transición de una taxonomía a otra basada en las conversaciones de múltiples turnos que recopilamos. Para extraer información significativa del Gráfico de Transición de Markov, proponemos los siguientes pasos de post-procesamiento:
Podamos el gráfico eliminando transiciones con probabilidades inferiores a 0.05, asegurando un enfoque en relaciones estadísticamente significativas.
Refinamos la estructura del gráfico eliminando nodos sin aristas entrantes y salientes, excepto los nodos de inicio y fin. Este paso asegura la simplificación ya que solo mantenemos componentes esenciales.
Reorganizamos sistemáticamente el Gráfico de Transición de Markov en un diagrama de flujo para mejorar su interpretabilidad, ofreciendo una representación más fácil de entender de los patrones de flujo.
\ 4.2 Resultados
4.2.1 RQ 2.1 ¿Cuáles son los roles de los prompts de desarrolladores en conversaciones de múltiples turnos? La Tabla 4 presenta nuestra taxonomía propuesta para clasificar prompts dentro de conversaciones de múltiples turnos. Nuestro análisis revela que, tanto en pull requests como en issues, las conversaciones de múltiples turnos contienen tres tipos principales de prompts: aquellos que plantean preguntas de seguimiento (M1), aquellos que introducen la tarea inicial (M2), y aquellos que son refinados a partir de un prompt anterior (M3). Un prompt de DevGPT-PRs y seis prompts de DevGPT-Issues fueron categorizados bajo "Otros" debido a su naturaleza de ser conversación casual o carecer de detalles suficientes para determinar sus roles.
\ A continuación, describimos cada categoría con más detalle.
==(M1) Seguimiento iterativo:== En el 33% y 40% de los prompts en DevGPT-PRs y DevGPT-Issues de múltiples turnos, los desarrolladores publican consultas que se basan directamente en las respuestas previas de ChatGPT o en el contexto en curso, como depurar y reparar una solución después de la generación de código por ChatGPT. Tales seguimientos iterativos típicamente surgen cuando la tarea inicial presenta un desafío complejo que ChatGPT podría no resolver completamente en una sola interacción. En consecuencia, los desarrolladores participan en un prompt especificando una solicitud de seguimiento, permitiendo a ChatGPT incorporar retroalimentación humana y mejorar iterativamente la solución propuesta.
\ ==(M2) Revelar la tarea inicial:== Encontramos que una fracción similar, es decir, 26% en DevGPT-PRs de múltiples turnos y 29% en DevGPT-Issues de múltiples turnos, de prompts sirven para introducir la tarea inicial a ChatGPT. Esta distribución destaca que en conversaciones de múltiples turnos, a diferencia de las conversaciones de un solo turno, donde el único prompt está dedicado a delinear la tarea principal, hay una cantidad significativa de prompts que sirven para otros propósitos.
\ ==(M3) Refinar prompt:== Además del seguimiento iterativo (M1), los desarrolladores también tienden a mejorar la solución propuesta por ChatGPT proporcionando un prompt de solicitud refinado con contexto o restricciones adicionales. El objetivo es mejorar la calidad de respuesta para la misma consulta publicada en el prompt anterior. Los Prompts Refinados representan el 17% de los prompts en DevGPT-PRs de múltiples turnos y el 14% en DevGPT-Issues.
\ ==(M4) Proporcionar información:== En el 8% y 6% de los prompts en DevGPT-PRs y DevGPT-Issues de múltiples turnos, los desarrolladores no publican ninguna solicitud para ChatGPT, sino que comparten conocimiento o contexto con ChatGPT.
\ ==(M5) Revelar una nueva tarea== Observamos que el 7% y 4% de los prompts en DevGPT-PRs y DevGPT-Issues de múltiples turnos están publicando una nueva tarea a ChatGPT, que es distinta de la(s) tarea(s) concerniente(s) en los prompts anteriores. Esta categoría representa una clara diferencia de los seguimientos iterativos (M1), ya que la nueva tarea no se relaciona o se basa en las respuestas previas de ChatGPT y apunta a un objetivo diferente. Por ejemplo, un desarrollador inicialmente solicitó a ChatGPT generar el SQL correspondiente a un conjunto de consultas de Django y, en un prompt posterior, pidió el SQL para un conjunto de consultas diferente, cambiando así el enfoque de la conversación a una tarea completamente nueva sin relevancia previa.
\ ==(M6) Retroalimentación negativa:== Dentro de las conversaciones de múltiples turnos, unos pocos (6% en DevGPT-PRs y 2% en DevGPT-Issues) prompts contienen solo retroalimentación negativa dirigida a las respuestas previas de ChatGPT, sin proporcionar ninguna información para que ChatGPT mejore o resuelva más. Por ejemplo, "Tu código es incorrecto", "El mismo error persiste", y "...no funciona". Esta categoría subraya instancias donde los desarrolladores buscan informar a ChatGPT de sus deficiencias, sin buscar más asistencia o clarificación.
\ (M7) Pedir clarificación: 4% y 5% de prompts en DevGPT-PRs y DevGPT-Issues de múltiples turnos piden a ChatGPT que elabore sobre su respuesta. Estas solicitudes de elaboración tienen como objetivo asegurar la exhaustividad de una solución, por ejemplo, "¿Necesito hacer algo más?". También incluyen verificación de la capacidad de ChatGPT para manejar tareas específicas, o consultas para verificar si ciertas condiciones han sido consideradas en la respuesta. Adicionalmente, los desarrolladores podrían preguntar por qué algunas alternativas fueron pasadas por alto por ChatGPT, indicando un compromiso más profundo con las soluciones propuestas y un deseo de entender la lógica detrás de la solución propuesta por ChatGPT.
4.2.2 RQ 2.2 ¿Cuáles son los patrones de flujo en conversaciones de múltiples turnos?
La Figura 5 presenta el diagrama de flujo resultante después de aplicar los pasos de post-procesamiento en un Gráfico de Transición de Markov basado en conversaciones anotadas como resultado de RQ2.1. El diagrama de flujo se aplica a conversaciones de múltiples turnos tanto en DevGPT-PRs como en DevGPT-Issues. Como se ilustra en la Figura 5, las conversaciones de múltiples turnos típicamente comienzan con la presentación de la tarea inicial (M2) o información contextual (M4).
\ Nuestro análisis detallado de seguimiento revela que el 81% de las conversaciones de múltiples turnos en DevGPT-PRs y el 90% en DevGPT-Issues comienzan delineando la tarea inicial. Por el contrario, alrededor del 13% de las conversaciones de múltiples turnos en DevGPT-PRs y el 3% en DevGPT-Issues introducen la tarea inicial en el segundo prompt. En casos extremos, la tarea inicial se revela tan tarde como en el séptimo turno, o, en algunos casos, la tarea inicial nunca se presenta explícitamente—en su lugar, estas conversaciones solo presentan información a ChatGPT sin indicar directamente la tarea.
\ En cuanto al flujo completo, identificamos los siguientes patrones basados en la Figura 5:
Inicio → revelar la tarea inicial → seguimiento iterativo → fin
Inicio → revelar la tarea inicial → refinar prompt → (seguimiento iterativo) → fin
Inicio → revelar la tarea inicial → revelar una nueva tarea → fin
Inicio → proporcionar información → revelar la tarea inicial → … → fin
Inicio → revelar la tarea inicial → pedir clarificación → fin
Inicio → revelar la tarea inicial → retroalimentación negativa → fin
\ Los patrones de flujo (1) a (3) muestran los flujos de interacción desarrollador-ChatGPT más comunes en conversaciones de múltiples turnos. La tarea inicial se revela en el prompt inicial, seguido de prompts que buscan mejorar las respuestas de ChatGPT mediante seguimiento iterativo, refinamientos de prompt, o para revelar una nueva tarea.
El patrón (4) demuestra flujos de interacción iniciados por desarrolladores proporcionando información a ChatGPT como primer paso. Luego, se reveló la tarea inicial, seguida de patrones similares a (1) a (3). El patrón (5) se refiere a desarrolladores pidiendo clarificación a ChatGPT después de revelar la tarea inicial y recibir una respuesta de ChatGPT.
\ El patrón (6) representa un flu

¿Cuántas veces has comprado algo y, al poco tiempo, has visto otro producto similar, más económico y con mejores características? Seguramente t
