DOI: 10.5281/zenodo.5241894
title: Artifacts of the TOSEM Submission Mario

description: This is the online repository of <em><strong>Mario</strong></em>, a journal-first paper under review by ACM TOSEM. <strong>Dataset: </strong>The dataset used in our study are all open-sourced. We provide the links to them below. Empirical dataset -- collected by Liu et al. (here) Evaluation dataset -- collected by Alon et al. (here) <strong>Source code: </strong>We release three files here. <em>Transformer.py:</em> This is the Transformer model used in <em><strong>Mario</strong></em> which is implemented in Pytorch. <em>evaluation.py:</em> This file shows the workflow of <em><strong>Mario</strong></em> and calculates the overall performance of it. <em>prior_knowledge.json:</em> This file stores the prior knowledge extracted from our empirical dataset for predicting field-relevant method names to unique fields. We will build a homepage for <em><strong>Mario</strong> </em>on Github and release the whole project upon acceptance. <strong>Explanation of Figure3b:</strong> In our experiment, we find that \(\overline{\mathbb{S}_{M}}\) is slightly higher than \(\overline{\mathbb{S}_{T}}\). Through our manual observation, we find that it happens because tokens composing the investigated method names are repetitive. In the following, we give a concrete example. For the ErrorsTag.java class of Apache struts1 project, it contains 12 field-relevant method names obtained by combining the Verbs = {<em>get</em>, <em>set</em>} and the Fields = {<em>bundle</em>, <em>footer</em>, <em>locale</em>, <em>name</em>, <em>property</em>, <em>header</em>} in pairs. When \(\alpha\) = 0.5, its proximate classes totally have 14 field-relevant method names composed by the above 12 ones plus with <em>prepareName</em> and <em>createLocale</em>. Under such a condition, the Jaccard similarity of the method name level is 0.857 (12/14), higher than that of the token level which is 0.8 (8/10). <strong>User Study:</strong> We release the queries from the developers and the predictions of Mario in our user study. Note that due to the confidential policy, we only show the last two words of the full qualified class name for each query. ***.impl.MarketService.java: {Init, set config file name, parse config, get config, get config file name} ***.user.UserController.java: {Login, register, logout, delete role, find roles, create admin user, is login, get user by username, find permissions expired} ***.db.Bot.java: {Respond, create kernel handler, init} ***.controller.LoginController.java: {On click, show login form, login, logout} ***.controller.UserController.java: {Delete user, save user, get user by id, get customer users, serve user, send activation email, get activation link, set passward} ***.login.LoginService.java: {Login, logout, login with scm, get authentication} ***.dto.ClientLoginDto.java: {To string, get topology} ***.impl.IdaasServiceImpl.java: {Get mapper id, execute, get job id} ***.router.DBRouterJoinPoint.java: {Materialize string, to string infix, get id} ***.aspect.LogAspect.java: {Log to db, do before, do around, do after returning, do after in service layer, web service} ***.service.DocService.java: {Get project docs, add enum doc strings, search docs, service added, add exception doc strings, doc values string, find supported services, copy of docs} ***.dataclean.convertMessageStructureService.java: {Start up, delete, add module, list types, get type, shut down, delete all, list modules} ***.dataclean.messageRouteAndSendService.java: {On bind, on create, on destroy, send message, on start command, handle message, configure, get error message} ***.addresssimilarity.addressSimilarityService.java: {Delete, get hosted connection, start limited on connection, notify, opened change, on disconnected list changed, create, on initialize, on map changed}