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

6 : Búsqueda de Código Basada en Semántica

Nuestro trabajo en la búsqueda de códigos está diseñado para permitir a los programadores aprovechar los grandes repositorios de código 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 devuelve potencialmente cientos de piezas candidatas de código. El programador luego tiene que revisar cada uno de estos archivos devueltos. Luego tienen que 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, formato, manejo de errores, etc.

Creemos que un mejor enfoque sería hacer que el programador proporcione información más precisa sobre lo que quiere y luego hacer que el sistema haga el trabajo duro de verificar los fragmentos de código devueltos, de modificar el código para hacer lo que quiere el programador y de transformando el código para encajar en el marco de destino. Nuestro frente 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 subprocesos (no implementadas completamente). Además, el usuario puede proporcionar un contexto en el que encajará el código. El extremo frontal 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 local 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 solución potencial. Estas soluciones luego se transforman utilizando un conjunto de aproximadamente 30 transformaciones en un intento de asignar el código exactamente a lo que el programador especificó. Las transformaciones van desde lo simple (por ejemplo, cambiando el nombre del método para que coincida con la firma) hasta el complejo (por ejemplo, encontrando una línea en el método que calcula un valor del tipo devuelto y luego haciendo un corte hacia atrás hasta que las únicas variables libres son 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 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 luego se formatean de acuerdo con el estilo especificado por el usuario, se clasifican 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 esquema de la interfaz de usuario y para encontrar casos de prueba dado el código que se debe probar.

Papeles

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

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

Buscando la interfaz de usuario , ASE 2014.

Creación de casos de prueba utilizando la búsqueda de código no publicada.

Hunter: Reutilización de código de próxima generación 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:

Imagen frontal S6

Front-end mostrando resultados:

front end con resultados

Diagrama de la pasante> ls:

Vista interna

Software

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