S 6 : Recherche de code basée sur la sémantique

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

Notre travail sur la recherche de code est conçu pour permettre aux programmeurs de tirer parti des vastes référentiels de code open source disponible. Les moteurs de recherche de code traditionnels tels que Google Search, Google, Koders ou Krugle fournissent un accès à ces référentiels mais ne simplifient pas vraiment le travail des programmeurs en utilisant le code. Ils prennent des mots-clés et renvoient potentiellement des centaines de morceaux de code candidats. Le programmeur doit alors parcourir chacun de ces fichiers retournés. Ils doivent ensuite voir si le code pourrait être pertinent. Si c’est le cas, ils doivent le lire en détail pour déterminer si c’est exactement ce qu’ils veulent ou du moins ce qu’il veut. Enfin, ils doivent adapter le code pour répondre à leurs exigences particulières en matière de nommage, de formatage, de gestion des erreurs, etc.

Nous pensons qu’une meilleure approche consisterait à demander au programmeur de fournir des informations plus précises sur ce qu’il souhaite, puis à laisser le système effectuer le travail difficile consistant à vérifier les fragments de code renvoyés, à modifier le code pour faire ce que le programmeur souhaite, et à: transformer le code pour s’adapter au cadre cible. Notre interface de recherche demande au programmeur de définir la sémantique de ce qu’il souhaite. Cela inclut des mots-clés sous forme de description informelle, de signature, de scénarios de test et de contrats (via JML) pour les spécifications fonctionnelles, les contraintes de sécurité (utilisant le modèle de sécurité Java) et les contraintes de thread (non pleinement implémentées). De plus, l’utilisateur peut fournir un contexte dans lequel le code s’insérera. Le système frontal tente de rendre ces spécifications faciles à fournir.

Le système fonctionne en utilisant les mots-clés pour accéder à l’un des moteurs de recherche de code disponibles (ou à un moteur de recherche de code local pour le code disponible chez Brown), afin d’obtenir des fichiers candidats. Chaque classe ou méthode de ces fichiers (selon ce que recherche l’utilisateur) est considérée comme une solution potentielle. Ces solutions sont ensuite transformées en utilisant un ensemble d’environ 30 transformations afin de mapper le code dans exactement ce que le programmeur a spécifié. Les transformations vont du simple (par exemple, changer le nom de la méthode pour faire correspondre la signature) au complexe (par exemple, trouver une ligne dans la méthode qui calcule une valeur du type retourné, puis faire une tranche en arrière jusqu’à ce que les seules variables libres soient valeurs des types de paramètres). Toutes les solutions pouvant être transformées pour correspondre à la signature sont ensuite testées à l’aide des cas de test donnés, contraintes de sécurité et règles JML. Des transformations supplémentaires peuvent être appliquées en fonction des résultats des cas de test. Les solutions qui réussissent les scénarios de test sont ensuite formatées en fonction du style spécifié par l’utilisateur, triées par taille, par complexité ou par performance sur les scénarios de test, puis présentées à l’utilisateur.

Le système peut être testé (la plupart du temps – le serveur est parfois en panne) à l’ adresse http://conifer.cs.brown.edu/s6 .

Au cours des travaux ultérieurs à la S6 d’origine, nous avons étendu le système pour rechercher des interfaces utilisateur à partir d’un schéma de l’interface utilisateur et pour rechercher des scénarios de test en fonction du code à tester.

Papiers

Recherche de code basée sur la sémantique , ICSE 2009, mai 2009.

Spécifier ce qu’il faut rechercher , SUITE 2009, mai 2009.

À la recherche de l’interface utilisateur , ASE 2014.

Création de cas de test à l’aide de la recherche de code non publiée.

Hunter: Réutilisation du code de prochaine génération pour Java par Yuepeng Want, Yu Feng, Ruben Martins, Arati Kaushik, Isil Dllig et Steven Reiss, FSE 2016.

Recherche de l’interface utilisateur par Steven Reiss, Yun Miao et Qi Xin, Journal de génie logiciel automatisé, 2017.

Images

L’extrémité avant:

Image frontale S6

Front-end montrant les résultats:

front end avec des résultats

Schéma du stagiaire> ls:

vue interne

Logiciel

Le logiciel est disponible sur ftp://ftp.cs.brown.edu/u/spr/s6.tar.gz .