Seguridad

Si eres developer y buscas soluciones en ChatGPT a los problemas de programación te la juegas a cara o cruz.

Este año Stack Overflow está viendo cómo su negocio se ve atacado, principalmente por el uso de asistentes digitales utilizados para la generación de código, como son GitHub Copilot o el mismo ChatGPT, lo que ha llevado a las noticias hablar varias veces de la caída sistemática de tráfico de la popular web que tantos problemas ha resuelto a los developers, como el estudio que hizo SimilarWeb.
Y es que es más rápido y más sencillo darle el código directamente a ChatGPT o hacerle una pregunta – o simplemente dejar que GitHub Copilot sugiera trozos completos de código – que andar buscando preguntas, respuestas, y analizando si encaja o no encaja con el problema que se tiene entre manos.
Sin embargo, velocidad no siempre es significado de corrección, utilidad, o resolución de problemas, y como yo he contado varias veces, ChatGPT y GitHub pueden generar código inseguro, vulnerable o incorrecto, dando respuestas que no resuelvan los problemas correctamente. Al final, dentro de su potencia, «sólo» es un LLM, y mal utilizado hace que los desarrolladores puedan generar código más «buggy».

Figura 3: Código PHP con bug de SQL Injection generado por ChatGPT
Pero queda mucho que estudiar y analizar, y una de ellas es ver sí ChatGPT responde mejor a los problemas de los desarrolladores que se plantean en forma de preguntas en Stack Overflow, donde la comunidad evalúa qué respuesta es la mejor de todas las disponibles. 
Y de esto va el artículo académico que se ha publicado este mes de Agosto titulado: «Who Answers It Beter? An In-Depth Analysis of ChatGPT and Stack Overflow Answers to Sofware Engineering Questions» donde se plantean una batería de 517 preguntas de Stack Overflow a ChatGPT para ver el grado de corrección, de entendimiento del problema, de utilidad de la respuesta, etcétera, de las respuestas que da ChatGPT.
Todas las preguntas – como la que podéis ver en la Figura 5 – que se han testedo en el artículo, que están publicadas en Stack Overflow, y que se han enviado a ChatGPT para que sean respondidas, están subidas a un repositorio de GitHub, donde se pueden ver y analizar: Analysis of ChatGPT answers to SO questions

Figura 6: Resultados de corrección alrededor del 50%

Y el resultado es lo que tenemos en la tabla anterior. Clasificadas las preguntas por tipo de cuestión, por popularidad – con más revisión humana o menos -, por nuevas o viejas, el resultado arroja siempre lo mismo, que la corrección de la respuesta de ChatGPT es de alrededor del 50%. Es decir, pura lo mismo que jugártelo a cara o cruz.
Aprendizajes
El artículo acompaña estos resultados con una análisis cualitativo de las respuestas entregadas por ChatGPT a las preguntas de Stack Overflow, con una serie de «Findings» o «Descubrimientos«, que son bastante curiosos.
El primero de los aprendizajes es que las respuestas de ChatGPT son más incorrectas que las que hay disponibles en Stack Overflow, son más largas, y no son consistentes con las respuestas dadas por los programados humanos la mitad de las veces, pero son muy fáciles de entender y cubren todos los aspectos de la pregunta. Es decir, se equivocan de manera muy entendible e intentando hacerlo bien.

Estos segundos descubrimientos me recuerdan a cuando le hice una entrevista para pentester a ChatGPT, que lo que no sabía se lo inventaba o lo creaba. Y en cuanto a la comprensión de los conceptos «underlying», tuve una experiencia personal cuando le pregunté si un código inseguro en Python tenían un vulnerabilidad y le costó encontrarlo dando respuestas erróneas varias veces con código inseguro.

Este anterior descubrimiento es fácil de entender. Las preguntas más antiguas y más populares las responde mucho mejor. En las que no hay tanta información disponible porque son más nueva y son casos menos comunes, sufre más.
También, como ChatGPT es un modelo de lenguaje, la explicación de la respuesta es mucho más completa, comprensiva y fácil de entender, aunque sea errónea. Esto es lo que nos decía el profesor en los exámenes: «!!Desarrollad la explicación del razonamiento de la respuesta aunque el resultado sea erróneo al final!!«. ChatGPT lo hace bien eso.
Además, la emoción y el sentimiento del texto en las respuestas de ChatGPT es más positivo, debido a la manera de expresar sus contestaciones el modelo LLM tal y como está configurado.
Esta segunda parte de los descubrimientos se basa en seleccionar 56 pares de preguntas de respondidas por usuarios de Stack OverFlow y por ChatGPT, para que un total de 12 humanos las valoren en función de los parámetros que se ven en la gráfica de corrección, comprensión, entendimiento del problema y utilidad. Y el resultado es que las respuestas de Stack Overflow reciben mejores valoraciones.
Curiosamente, las respuestas de ChatGPT son fácilmente reconocibles por los usuarios, así que en más de un 80% de los casos reconocen cuándo la respuesta viene de éste, y cuando la respuesta viene de una persona de Stack Overflow.
Como las argumentaciones de ChatGPT están bien desarrolladas, los usuarios suelen pasar por alto los errores que comete, y esto lo hace más peligroso. Es uno de los problemas de los modelos LLM, que yo expliqué en el artículo de «¡Ojo con ChatGPT que es un charlatán mentirosillo!«.
En el estudio, desde un punto de vista técnico, de confianza, y de usabilidad para los desarrolladores, «aún» ( y recalco eso de aún), los programadores prefieren las respuestas de Stack Overflow a las de ChatGPT en un 65% de los casos. Pero no en todos los casos, así que a ver cómo va variando ese porcentaje a lo largo del tiempo.
¡Saludos Malignos!
Autor: Chema Alonso (Contactar con Chema Alonso)  

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.