ACM SIGPLAN Notices · 2010 · 59 citations · 36 references
ComputingComputer ScienceProgramming LanguagesSoftware EngineeringSystems ProgrammingApplication Programming InterfacesSoftware EvolutionSoftware MaintenanceSoftware RefactoringSoftware ReuseApi DesignApi EvolutionGraph-based ModelingSoftware Development MethodologySoftware LibrariesSource Code Change Analysis
Reusing existing library components is essential for reducing the cost of software development and maintenance. When library components evolve to accommodate new feature requests, to fix bugs, or to meet new standards, the clients of software libraries often need to make corresponding changes to correctly use the updated libraries. Existing API usage adaptation techniques support simple adaptation such as replacing the target of calls to a deprecated API, however, cannot handle complex adaptations such as creating a new object to be passed to a different API method, or adding an exception handling logic that surrounds the updated API method calls. This paper presents LIBSYNC that guides developers in adapting API usage code by learning complex API usage adaptation patterns from other clients that already migrated to a new library version (and also from the API usages within the library's test code). LIBSYNC uses several graph-based techniques (1) to identify changes to API declarations by comparing two library versions, (2) to extract associated API usage skeletons before and after library migration, and (3) to compare the extracted API usage skeletons to recover API usage adaptation patterns. Using the learned adaptation patterns, LIBSYNC recommends the locations and edit operations for adapting API usages. The evaluation of LIBSYNC on real-world software systems shows that it is highly correct and useful with a precision of 100% and a recall of 91%.
36
Dawson Engler, David Yu Chen, Seth Hallem et al. · 2001 · 747 citations
Jinlin Yang, David Evans, Deepali Bhardwaj et al. · 2006 · 406 citations
Zhenchang Xing, Eleni Stroulia · 2005 · 369 citations