S6: Búsqueda de código basada en semántica

Original: http://cs.brown.edu/~spr/research/s6.html

Nuestro trabajo en la búsqueda de códigos está diseñado para que los programadores puedan aprovechar los grandes repositorios de código abierto disponible. Los motores de búsqueda de códigos tradicionales, como la búsqueda de códigos de Google, Koders o Krugle, proporcionan acceso a dichos repositorios, pero en realidad no simplifican el trabajo de los programadores al usar el código. Toman palabras clave y devuelven potencialmente cientos de piezas candidatas de código. El programador luego tiene que revisar cada uno de estos archivos devueltos. Luego deben ver si el código puede ser relevante. Si es así, tienen que leerlo en detalle para determinar si es exactamente lo que quieren o al menos cerca de él. Finalmente, tienen que adaptar el código para cumplir con sus requisitos particulares en cuanto a nombres, formateo, manejo de errores, etc.

Creemos que un mejor enfoque sería que el programador brinde información más precisa sobre lo que quiere y luego haga que el sistema haga el arduo trabajo de verificar los fragmentos del código devuelto, de modificar el código para hacer lo que el programador quiere y de transformando el código para encajar en el marco objetivo. Nuestra interfaz de búsqueda hace que el programador defina la semántica de lo que quiere. Esto incluye palabras clave como una descripción informal, una firma, casos de prueba y contratos (a través de JML) para especificaciones funcionales, restricciones de seguridad (utilizando el modelo de seguridad de Java) y restricciones de subprocesamiento (no implementadas por completo). Además, el usuario puede proporcionar un contexto en el que encajará el código. La interfaz intenta hacer que estas especificaciones sean fáciles de proporcionar.

El sistema funciona utilizando las palabras clave para acceder a uno de los motores de búsqueda de códigos disponibles (o un motor de búsqueda de códigos locales para el código disponible en Brown), para obtener los archivos candidatos. Cada clase o método en estos archivos (dependiendo de lo que el usuario esté buscando) se considera una posible solución. Estas soluciones se transforman utilizando un conjunto de aproximadamente 30 transformaciones en un intento de asignar el código exactamente a lo especificado por el programador. Las transformaciones van desde lo simple (por ejemplo, cambiar el nombre del método para hacer coincidir la firma) con el complejo (por ejemplo, encontrar una línea en el método que calcula un valor del tipo devuelto y luego hacer un corte hacia atrás hasta que las únicas variables libres valores de los tipos de parámetros). Todas las soluciones que se pueden transformar para que coincidan con la firma se prueban utilizando los casos de prueba, las restricciones de seguridad y las reglas de JML. Se pueden aplicar transformaciones adicionales en función de los resultados de los casos de prueba. Las soluciones que pasan los casos de prueba se formatean de acuerdo con el estilo especificado por los usuarios, ordenados por tamaño, complejidad o rendimiento en los casos de prueba, y se presentan al usuario.

El sistema se puede probar (la mayoría de las veces, a veces el servidor está inactivo) en http://conifer.cs.brown.edu/s6.

En el trabajo de seguimiento del S6 original, hemos ampliado el sistema para encontrar interfaces de usuario dado un boceto de la interfaz de usuario y para encontrar casos de prueba dado el código que necesita ser probado.

Papeles

Búsqueda de códigos basada en semántica, ICSE 2009, mayo de 2009.

Especificando qué buscar, SUITE 2009, mayo de 2009.

Buscando la interfaz de usuario, ASE 2014.

Crear casos de prueba utilizando la búsqueda de código inédito.

Hunter: Reutilización del código del siguiente generador para Java por Yuepeng Want, Yu Feng, Ruben Martins, Arati Kaushik, Isil DIllig y Steven Reiss, FSE 2016.

Buscando la interfaz de usuario por Steven Reiss, Yun Miao y Qi Xin, Automated Software Engineering Journal, 2017.

Imágenes

Interfaz:

S6 front end image

Front end que muestra los resultados:

front end with results

Diagrama de las partes internas:

internal view

Software

El software está disponible en ftp://ftp.cs.brown.edu/u/spr/s6.tar.gz.