S 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:
Front-end mostrando resultados:
Diagrama de la pasante> ls:
Software
El software está disponible en ftp://ftp.cs.brown.edu/u/spr/s6.tar.gz .