Библиотека
|
ваш профиль |
Программные системы и вычислительные методы
Правильная ссылка на статью:
Зорченков А.М.
Автоматизация миграций сторонних библиотек
// Программные системы и вычислительные методы.
2022. № 1.
С. 71-87.
DOI: 10.7256/2454-0714.2022.1.34337 URL: https://nbpublish.com/library_read_article.php?id=34337
Автоматизация миграций сторонних библиотек
DOI: 10.7256/2454-0714.2022.1.34337Дата направления статьи в редакцию: 16-11-2020Дата публикации: 03-04-2022Аннотация: Миграция вручную между различными сторонними библиотеками представляет собой проблему для разработчиков программного обеспечения. Разработчикам обычно необходимо изучить интерфейсы прикладного программирования обеих библиотек, а также прочитать их документацию, чтобы найти подходящие сопоставления между заменяющим и заменяемым методами. В этой статье я представлю новый подход (MIG) к машинному обучению, который рекомендует сопоставления между методами двух API библиотек. Моя модель учится на вручную найденных данных реализованных миграций, извлекает набор функций, связанных с подобием сигнатуры метода и текстовой документации. Я оценил модель с использованием 8 популярных миграций, собранных из 57 447 проектов Java с открытым исходным кодом. Результаты показывают, что модель может рекомендовать соответствующие сопоставления API библиотеки со средним показатель точности 87%. В данном исследовании рассматривается проблема рекомендации сопоставления методов при миграции между сторонними библиотеками. Описан новый подход, рекомендующий сопоставление методов между двумя неизвестными библиотеками с использованием признаков, извлеченных из лексического сходства между именами методов и текстовым подобием документаций методов. Я оценил результат, проверяя, как данный подход и три других наиболее часто используемых подходов рекомендуют сопоставление методов миграции для 8 популярных библиотек. Я показал, что предлагаемый подход показывает гораздо лучшую точность и производительность, чем другие 3 метода. Качественный и количественный анализ результатов показывает увеличение точности на 39.51% в сравнении с другими широко известными подходами. Ключевые слова: миграции библиотек, машинное обучение, Обработка естественного языка, Частота термина, метод опорных векторов, Обратная частота документа, инженерия признаков, Документация библиотек, извлечение информации, модель векторного простанстваAbstract: Manual migration between various third-party libraries is a problem for software developers. Developers usually need to study the application programming interfaces of both libraries, as well as read their documentation to find suitable comparisons between the replacement and the replaced methods. In this article, I will present a new approach (MIG) to machine learning that recommends mappings between the methods of two API libraries. My model learns from manually found data of implemented migrations, extracts a set of functions related to the similarity of the method signature and text documentation. I evaluated the model using 8 popular migrations compiled from 57,447 open source Java projects. The results show that the model can recommend appropriate library API mappings with an average accuracy rate of 87%. This study examines the problem of recommending method comparisons when migrating between third-party libraries. A new approach is described that recommends the comparison of methods between two unknown libraries using features extracted from the lexical similarity between method names and textual similarity of method documentation. I evaluated the result by checking how this approach and three other most commonly used approaches recommend a comparison of migration methods for 8 popular libraries. I have shown that the proposed approach shows much better accuracy and performance than the other 3 methods. Qualitative and quantitative analysis of the results shows an increase in accuracy by 39.51% in comparison with other well-known approaches. Keywords: library migrations, machine learning, Natural Language Processing, Frequency of the term, the method of support vectors, Reverse document frequency, feature engineering, Library documentation, extracting information, vector space modelПринятые сокращения:
1 Введение Современные программные системы сильно зависят от сторонних библиотек для экономии времени, сокращения затрат на внедрение и повышения качества программного обеспечения, предлагая обширную, надежную и современную функциональность [1],[2],[3]. Однако поскольку программные системы быстро развиваются, существует потребность в соответствующих инструментах, предоставляющих надежные и эффективные методы разработчикам в принятии решений при замене старых и устаревших библиотек на современные. Этот процесс замены библиотеки на другой, при сохранении того же поведения кода, известен как миграция библиотек [4],[5]. Широко известно, что процесс миграции между библиотеками является довольно трудным, подверженным ошибкам и трудоемким процессом [6],[2],[3],[1]. Разработчикам необходимо изучить API новой библиотеки и связанную с ней документацию, чтобы найти правильный метод (-ы) API для замены соответствующей функциональности в текущей реализации, принадлежащую API устаревшей библиотеки. Разработчикам нужно часто тратить значительное время, чтобы убедиться, что новые функции не имеют никакого побочного эффекта. Например, предыдущие работы показали, что разработчики обычно тратят до 42 дней на миграцию между библиотеками [7]. Обычно компании-разработчики программного обеспечения назначают задачи миграции разработчикам, у которых есть больше опыта в целях снижения рисков возникновения побочных неблагоприятных эффектов в продукте. Например, на [Рисунок 1] показано, что разработчики, у которых больше десяти лет опыта работы, Рисунок 1 выполняют миграции чаще, чем разработчики с более меньшим стажем. Данные основаны на миграциях, собранных Alrubaye et al. [6], содержащих информацию о разработчиках, которые ранее выполняли задачи миграции, такую как, имена, адреса электронной почты, годы опыта и даты миграции. Кроме того, я обнаружил, что 95,3% из 57 447 проектов Java использовали хотя бы одну стороннюю библиотеку (API). В среднем насчитывается 65 процессов обновления или миграции API для каждого проекта. Ранее было предложено ряд подходов и методов миграции с целью определения замены устаревшего API на более новую версию того же API [8],[9],[10],[11]. Другие исследования рекомендуют, какую библиотеку выбрать при замене: [12],[13],[14],[15],[16]. Однако такие подходы не дают четкого руководства разработчикам как конкретно выполнить гибко настраиваемую миграцию на уровне методов. В действительности, рекомендации на уровне методов были в центре внимания многих исследований, но только чтобы рекомендовать одну и ту же библиотеку на разных языках программирования и операционных системах. [17],[18],[19]. Очевидно, что существует потребность в более комплексной методике рекомендаций, которая не зависит ни от библиотеки ни от языка программирования, т.е. принимает в качестве входных данных две разные библиотеки и показывает, как заменить одну на другую на уровне методов. В этой статье я представляю новый метод машинного обучения - модель, обучаемая на ранее выполненных разработчиками миграциях и рекомендует миграции на уровне API для аналогичных контекстов миграции. Модель принимает на входе две разные библиотеки и выдает в качестве результата потенциальные сопоставления между их методами API. Основная идея заключается в повторном использовании ценных знаний по миграциям, доступных в предыдущих миграциях, выполненных разработчиками вручную в других проектах с открытым исходным кодом, т. е. учиться у «Мудрости толпы». Модель использует предопределенные особенности, связанные с подобием сигнатур методов и их соответствующую документацию API для построения алгоритма. 2 Методология Правило миграции обозначается парой: исходной (удаленной) библиотеки Рисунок 2: Подход к рекомендации отображения методов
Рисунок 3 Методы, требующие значительное количество данных на этапах обучения и проверки (логистическая регрессия и нейронные сети) показали наихудшую точность. Напротив, усиленные деревья решений известны отличной производительностью на относительно небольших наборах данных в силу использования набора Деревьев Решений и механизма взвешенного выбора. Рисунок 4 2.9 Настройка параметров. Рисунок 5
Таблица 1
Для объяснения разницы в точности результатов рассматриваемых подходов на [Рисунок 6] представлен результат миграции из json в gson. На [Рисунок 6] (A) все 4 метода смогли корректно рекомендовать замену метода Рисунок 6 Анализ результатов показал, что для всех подходов довольно сложны следующие контексты: · Перезагрузка метода. Относится к двум методам, имеющим одинаковые названия, но различающиеся по количеству параметров, типу параметров или последовательности параметров. · Полиморфные методы. Они переопределены в иерархии классов, где метод дочернего класса имеет одинаковое наименование и количество параметров с методом базового класса, но с различными типами. · Обобщённые методы (Generics). Методы с входными и выходными параметрами, позволяющими методу работать с объектами различных типов. Также очень сложными являются случаи когда исходный и целевой методы различаются по названию, типу возвращаемого значения и даже входным параметрам. И наконец, существуют методы без должной документации, представляющие трудности для TMAP, LTR и MIG. На [Рисунок 7] показана зависимость точности рекомендаций MIG от количества данных, используемых для обучения. При увеличении количества данных для обучения точность увеличивается с 83.3% при 10% данных для обучения до 92% при 90% данных используемых для обучения. Это подтверждает независимость признаков и достаточность даже небольшого объема данных для достижения хорошей точности MIG. Рисунок 7 4 Заключение В данном исследовании рассматривается проблема рекомендации сопоставления методов при миграции между сторонними библиотеками. Описан новый подход, рекомендующий сопоставление методов между двумя неизвестными библиотеками с использованием признаков, извлеченных из лексического сходства между именами методов и текстовым подобием документаций методов. Я оценил результат, проверяя, как данный подход и три других наиболее часто используемых подходов [19],[28] и [33] рекомендуют сопоставление методов миграции для 8 популярных библиотек. Я показал, что предлагаемый подход показывает гораздо лучшую точность и производительность, чем другие 3 метода. Качественный и количественный анализ результатов показывает увеличение точности на 39.51% в сравнении с другими широко известными подходами. В рамках будущих исследований я планирую значительно расширить количество используемых миграций наряду с более широким набором бинарных классификаторов. Я также планирую расширить количество признаков, включив также контекст использования методов в программном коде. Библиография
1. Hussein Alrubaye and Mohamed Wiem. Variability in library evolution. Software Engineering for Variability Intensive Systems: Foundations and Applications, page 295, 2019.
2. Raula Gaikovina Kula, Daniel M German, Ali Ouni, Takashi Ishio, and Katsuro Inoue. Do developers update their library? Empirical Software Engineering, 23(1):384–417, 2018. 3. Bradley E Cossette and Robert J Walker. Seeking the ground truth: a retroactive study on the evolution and migration of software libraries. In Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering, page 55. ACM, 2012. 4. Cedric Teyton, Jean-Remy Falleri, and Xavier Blanc. Mining library migration graphs. In Reverse Engineering (WCRE), 2012. 19th Working Conference on, pages 289–298. IEEE, 2012. 5. Cedric Teyton, Jean-R´emy Falleri, and Xavier Blanc. Automatic discovery of function mappings between similar libraries. In Reverse Engineering (WCRE), 2013 20th Working Conference on, pages 192–201. IEEE, 2013. 6. Hussein Alrubaye and Mohamed Wiem Mkaouer. Automating the detection of third-party java library migration at the function level. In Proceedings of the 28th Annual International Conference on Computer Science and Software Engineering, pages 60–71. IBM Corp., 2018. 7. Hussein Alrubaye, Mohamed Wiem Mkaouer, and Ali Ouni. On the use of information retrieval to automate the detection of third-party java library migration at the function level. In 27th IEEE/ACM International Conference on Program Comprehension. IEEE, 2019. 8. Miryung Kim, David Notkin, and Dan Grossman. Automatic inference of structural changes for matching across program versions. In ICSE, volume 7, pages 333–343. Citeseer, 2007. 9. Thorsten Schafer, Jan Jonas, and Mira Mezini. Mining framework usage changes from instantiation code. In Proceedings of the 30th international conference on Software engineering, pages 471–480. ACM, 2008. 10. Barthel´emy Dagenais and Martin P Robillard. Recommending adaptive changes for framework evolution. ACM Transactions on Software Engineering and Methodology (TOSEM), 20(4):19, 2011. 11. Wei Wu, Yann-Gael Gu ¨ eh´ eneuc, Giuliano Antoniol, and Miryung Kim. Aura: a hybrid approach to identify framework evolution. In 2010 ACM/IEEE 32nd International Conference on Software Engineering, volume 1, pages 325–334. IEEE, 2010. 12. Hao Zhong, Tao Xie, Lu Zhang, Jian Pei, and Hong Mei. Mapo: Mining and recommending api usage patterns. In European Conference on Object-Oriented Programming, pages 318–343. Springer, 2009. 13. Collin McMillan, Mark Grechanik, Denys Poshyvanyk, Qing Xie and Chen Fu. Portfolio: finding relevant functions and their usage. In Proceedings of the 33rd International Conference on Software Engineering, pages 111–120. ACM, 2011. 14. Ali Ouni, Raula Gaikovina Kula, Marouane Kessentini, Takashi Ishio, Daniel M German, and Katsuro Inoue. Search-based software library recommendation using multi-objective optimization. Information and Software Technology, 83:55–75, 2017. 15. Johannes Hartel, Hakan Aksu, and Ralf L ¨ ammel. Classification of apis by hierarchical clustering. In Proceedings of the 26th Conference on Program Comprehension, pages 233–243. ACM, 2018. 16. Daiki Katsuragawa, Akinori Ihara, Raula Gaikovina Kula, and Kenichi Matsumoto. Maintaining third-party libraries through domain-specific category recommendations. In 2018 IEEE/ACM 1st International Workshop on Software Health (SoHeal), pages 2–9. IEEE, 2018. 17. Amruta Gokhale, Vinod Ganapathy, and Yogesh Padmanaban. Inferring likely mappings between apis. In Proceedings of the 2013 International Conference on Software Engineering, pages 82–91. IEEE Press, 2013. 18. Rahul Pandita, Raoul Praful Jetley, Sithu D Sudarsan, and Laurie Williams. Discovering likely mappings between apis using text mining. In Source Code Analysis and Manipulation (SCAM), 2015 IEEE 15th International Working Conference on, pages 231–240. IEEE, 2015. 19. Rahul Pandita, Raoul Jetley, Sithu Sudarsan, Timothy Menzies and Laurie Williams. Tmap: Discovering relevant api methods through text mining of api documentation. Journal of Software: Evolution and Process, 29(12), 2017. 20. Ferdian Thung, David Lo, and Julia Lawall. Automated library recommendation. In 2013 20th Working Conference on Reverse Engineering (WCRE), pages 182–191. IEEE, 2013. 21. Ferdian Thung, Richard J Oentaryo, David Lo, and Yuan Tian. Webapirec: Recommending web apis to software projects via personalized ranking. IEEE Transactions on Emerging Topics in Computational Intelligence, 1(3):145–156, 2017. 22. Collin Mcmillan, Denys Poshyvanyk, Mark Grechanik, Qing Xie, and Chen Fu. Portfolio: Searching for relevant functions and their usages in millions of lines of code. ACM Transactions on Software Engineering and Methodology (TOSEM), 22(4):37, 2013. 23. Collin McMillan, Mark Grechanik, and Denys Poshyvanyk. Detecting similar software applications. In Proceedings of the 34th International Conference on Software Engineering, pages 364–374. IEEE Press, 2012. 24. Kalyanmoy Deb, Amrit Pratap, Sameer Agarwal, and TAMT Meyarivan. A fast and elitist multiobjective genetic algorithm: Nsga-ii. IEEE transactions on evolutionary computation, 6(2):182–197, 2002. 25. Amit Singhal et al. Modern information retrieval: A brief overview. IEEE Data Eng. Bull., 24(4):35–43, 2001. 26. Lei Yu and Huan Liu. Feature selection for high-dimensional data: A fast correlation-based filter solution. In Proceedings of the 20th international conference on machine learning (ICML-03), pages 856–863, 2003 27. Tom Mitchell, Bruce Buchanan, Gerald DeJong, Thomas Dietterich, Paul Rosenbloom, and Alex Waibel. Machine learning. Annual review of computer science, 4(1):417–433, 1990. 28. Hoan Anh Nguyen, Tung Thanh Nguyen, Gary Wilson Jr, Anh Tuan Nguyen, Miryung Kim, and Tien N Nguyen. A graphbased approach to api usage adaptation. In ACM Sigplan Notices, volume 45, pages 302–321. ACM, 2010. 29. James W Hunt and Thomas G Szymanski. A fast algorithm for computing longest common subsequences. Communications of the ACM, 20(5):350–353, 1977. 30. Andrea Arcuri and Gordon Fraser. Parameter tuning or default values? an empirical investigation in search-based software engineering. Empirical Software Engineering, 18(3):594–623, 2013. 31. Alessandro Del Sole. Introducing microsoft cognitive services. In Microsoft Computer Vision APIs Distilled, pages 1–4. Springer, 2018. 32. Edward Loper and Steven Bird. Nltk: the natural language toolkit. arXiv preprint cs/0205028, 2002. 33. Xin Ye, Razvan Bunescu, and Chang Liu. Learning to rank relevant files for bug reports using domain knowledge. In Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering, pages 689–699. ACM, 2014. References
1. Hussein Alrubaye and Mohamed Wiem. Variability in library evolution. Software Engineering for Variability Intensive Systems: Foundations and Applications, page 295, 2019.
2. Raula Gaikovina Kula, Daniel M German, Ali Ouni, Takashi Ishio, and Katsuro Inoue. Do developers update their library? Empirical Software Engineering, 23(1):384–417, 2018. 3. Bradley E Cossette and Robert J Walker. Seeking the ground truth: a retroactive study on the evolution and migration of software libraries. In Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering, page 55. ACM, 2012. 4. Cedric Teyton, Jean-Remy Falleri, and Xavier Blanc. Mining library migration graphs. In Reverse Engineering (WCRE), 2012. 19th Working Conference on, pages 289–298. IEEE, 2012. 5. Cedric Teyton, Jean-R´emy Falleri, and Xavier Blanc. Automatic discovery of function mappings between similar libraries. In Reverse Engineering (WCRE), 2013 20th Working Conference on, pages 192–201. IEEE, 2013. 6. Hussein Alrubaye and Mohamed Wiem Mkaouer. Automating the detection of third-party java library migration at the function level. In Proceedings of the 28th Annual International Conference on Computer Science and Software Engineering, pages 60–71. IBM Corp., 2018. 7. Hussein Alrubaye, Mohamed Wiem Mkaouer, and Ali Ouni. On the use of information retrieval to automate the detection of third-party java library migration at the function level. In 27th IEEE/ACM International Conference on Program Comprehension. IEEE, 2019. 8. Miryung Kim, David Notkin, and Dan Grossman. Automatic inference of structural changes for matching across program versions. In ICSE, volume 7, pages 333–343. Citeseer, 2007. 9. Thorsten Schafer, Jan Jonas, and Mira Mezini. Mining framework usage changes from instantiation code. In Proceedings of the 30th international conference on Software engineering, pages 471–480. ACM, 2008. 10. Barthel´emy Dagenais and Martin P Robillard. Recommending adaptive changes for framework evolution. ACM Transactions on Software Engineering and Methodology (TOSEM), 20(4):19, 2011. 11. Wei Wu, Yann-Gael Gu ¨ eh´ eneuc, Giuliano Antoniol, and Miryung Kim. Aura: a hybrid approach to identify framework evolution. In 2010 ACM/IEEE 32nd International Conference on Software Engineering, volume 1, pages 325–334. IEEE, 2010. 12. Hao Zhong, Tao Xie, Lu Zhang, Jian Pei, and Hong Mei. Mapo: Mining and recommending api usage patterns. In European Conference on Object-Oriented Programming, pages 318–343. Springer, 2009. 13. Collin McMillan, Mark Grechanik, Denys Poshyvanyk, Qing Xie and Chen Fu. Portfolio: finding relevant functions and their usage. In Proceedings of the 33rd International Conference on Software Engineering, pages 111–120. ACM, 2011. 14. Ali Ouni, Raula Gaikovina Kula, Marouane Kessentini, Takashi Ishio, Daniel M German, and Katsuro Inoue. Search-based software library recommendation using multi-objective optimization. Information and Software Technology, 83:55–75, 2017. 15. Johannes Hartel, Hakan Aksu, and Ralf L ¨ ammel. Classification of apis by hierarchical clustering. In Proceedings of the 26th Conference on Program Comprehension, pages 233–243. ACM, 2018. 16. Daiki Katsuragawa, Akinori Ihara, Raula Gaikovina Kula, and Kenichi Matsumoto. Maintaining third-party libraries through domain-specific category recommendations. In 2018 IEEE/ACM 1st International Workshop on Software Health (SoHeal), pages 2–9. IEEE, 2018. 17. Amruta Gokhale, Vinod Ganapathy, and Yogesh Padmanaban. Inferring likely mappings between apis. In Proceedings of the 2013 International Conference on Software Engineering, pages 82–91. IEEE Press, 2013. 18. Rahul Pandita, Raoul Praful Jetley, Sithu D Sudarsan, and Laurie Williams. Discovering likely mappings between apis using text mining. In Source Code Analysis and Manipulation (SCAM), 2015 IEEE 15th International Working Conference on, pages 231–240. IEEE, 2015. 19. Rahul Pandita, Raoul Jetley, Sithu Sudarsan, Timothy Menzies and Laurie Williams. Tmap: Discovering relevant api methods through text mining of api documentation. Journal of Software: Evolution and Process, 29(12), 2017. 20. Ferdian Thung, David Lo, and Julia Lawall. Automated library recommendation. In 2013 20th Working Conference on Reverse Engineering (WCRE), pages 182–191. IEEE, 2013. 21. Ferdian Thung, Richard J Oentaryo, David Lo, and Yuan Tian. Webapirec: Recommending web apis to software projects via personalized ranking. IEEE Transactions on Emerging Topics in Computational Intelligence, 1(3):145–156, 2017. 22. Collin Mcmillan, Denys Poshyvanyk, Mark Grechanik, Qing Xie, and Chen Fu. Portfolio: Searching for relevant functions and their usages in millions of lines of code. ACM Transactions on Software Engineering and Methodology (TOSEM), 22(4):37, 2013. 23. Collin McMillan, Mark Grechanik, and Denys Poshyvanyk. Detecting similar software applications. In Proceedings of the 34th International Conference on Software Engineering, pages 364–374. IEEE Press, 2012. 24. Kalyanmoy Deb, Amrit Pratap, Sameer Agarwal, and TAMT Meyarivan. A fast and elitist multiobjective genetic algorithm: Nsga-ii. IEEE transactions on evolutionary computation, 6(2):182–197, 2002. 25. Amit Singhal et al. Modern information retrieval: A brief overview. IEEE Data Eng. Bull., 24(4):35–43, 2001. 26. Lei Yu and Huan Liu. Feature selection for high-dimensional data: A fast correlation-based filter solution. In Proceedings of the 20th international conference on machine learning (ICML-03), pages 856–863, 2003 27. Tom Mitchell, Bruce Buchanan, Gerald DeJong, Thomas Dietterich, Paul Rosenbloom, and Alex Waibel. Machine learning. Annual review of computer science, 4(1):417–433, 1990. 28. Hoan Anh Nguyen, Tung Thanh Nguyen, Gary Wilson Jr, Anh Tuan Nguyen, Miryung Kim, and Tien N Nguyen. A graphbased approach to api usage adaptation. In ACM Sigplan Notices, volume 45, pages 302–321. ACM, 2010. 29. James W Hunt and Thomas G Szymanski. A fast algorithm for computing longest common subsequences. Communications of the ACM, 20(5):350–353, 1977. 30. Andrea Arcuri and Gordon Fraser. Parameter tuning or default values? an empirical investigation in search-based software engineering. Empirical Software Engineering, 18(3):594–623, 2013. 31. Alessandro Del Sole. Introducing microsoft cognitive services. In Microsoft Computer Vision APIs Distilled, pages 1–4. Springer, 2018. 32. Edward Loper and Steven Bird. Nltk: the natural language toolkit. arXiv preprint cs/0205028, 2002. 33. Xin Ye, Razvan Bunescu, and Chang Liu. Learning to rank relevant files for bug reports using domain knowledge. In Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering, pages 689–699. ACM, 2014. |