КОМБІНОВАНІ ПІДХОДИ ДО СТАТИЧНОГО АНАЛІЗУ КОДУ З ВИКОРИСТАННЯМ НЕЙРОННИХ МЕРЕЖ
DOI:
https://doi.org/10.36994/2788-5518-2023-01-05-20Ключові слова:
статичний аналіз коду; нейронні мережі; машинне навчання; аналіз коду; виявлення дефектів; виправлення дефектів; коригування специфікацій; постобробка попереджень; визначення специфікацій; попередня обробка коду; навчання на вихідному кодіАнотація
Ця стаття презентує огляд можливих підходів до застосування нейронних мереж в процесі статичного аналізу коду. У ній досліджується поточний стан речей у наявних підходах до покращення аналізу програм за допомогою методів машинного навчання із використанням пост-обробки сповіщень статичних аналізаторів, попередньої обробки коду, чи безпосереднього використання машинного навчання для аналізу вихідного коду. Окрім того, у статті досліджуються основні напрямки застосування підходів кожної категорії. Як класичні підходи, так і методи машинного навчання в аналізі програм мають чітко виражені сильні та слабкі сторони, які необхідно враховувати при їх практичному впровадженні. Однією з основних тез цього дослідження є те, що для побудови високоякісної системи вкрай важливо розуміти можливості комбінування даних підходів, використовуючи гнучкість, яку пропонують нейронні мережі, та зберігаючи при цьому достатній рівень надійності, що забезпечується класичними алгоритмами. Стаття покриває наступні три базові напрямки використання нейронних мереж для статичного аналізу коду. Перший напрямок – це коригування специфікацій: уточнення специфікацій, отриманих від класичного статичного аналізатора коду (усунення, кластеризація, ранжування попереджень або просто спрощення аналізу попереджень вручну, тощо). Другий напрямок – визначення специфікацій, прихованих у коді (вилучення та відбір властивостей, перетворення коду зі збереженням його поведінки, наприклад, з метою зробити його більш підходящим для класичних інструментів статичного аналізу). Третій напрямок – аналіз вихідного коду як “чорного ящика” з метою виявлення та виправлення дефектів (синтаксичних чи семантичних, або ж вразливостей) у коді, асистування при перевірці коду вручну, автоматичного форматування чи виявлення коду, що “погано пахне” (в цьому напрямку для аналізу використовується лише модель машинного навчання, тренування якої відбувається прямо на вихідному коді). Стаття окреслює коло можливих напрямків подальших досліджень, що фокусуються на розвитку та комбінуванні розглянутих підходів.
Посилання
Тессі, Г. (2002). Економічні наслідки неадекватної інфраструктури для тестування програмного забезпечення. Технічний звіт. NIST, 309 стор.
Муске Т., Серебреник А. (2022). Огляд підходів до постобробки сповіщень статичного аналізу. ACM Computing Surveys (CSUR), № 55, стор. 1 - 39, 10.1145/3494521
Алламаніс, М. (2022). Графічні нейронні мережі в програмному аналізі. Wu, L., Cui, P., Pei, J., Zhao, L. (eds) Graph Neural Networks: Foundations, Frontiers, and Applications. Springer, Сінгапур, стор. 483 - 497. 10.1007/978-981-16-6054-2_22
Муске Т. Б. (2020). Постобробка тривог статичного аналізу. [Phd Thesis 1 (Research TU/e / Graduate TU/e), Mathematics and Computer Science]. Технологічний університет Ейндховена, 174 с.
Еррамредді, С., Мордал, А., Кок, У., Вей, С., Фостер, Дж., Карпуат, М., Портер, А. (2023). Емпірична оцінка підходів машинного навчання для сортування звітів інструментів статичного аналізу. Емпірична інженерія програмного забезпечення, вип. 28. 10.1007/s10664-022-10253-z
Мар'янов Т., Пащенко І., Массаччі Ф. (2022). Машинне навчання для виявлення вразливостей у вихідному коді: що працює, а чого ще немає. IEEE Security & Privacy, том. 20, № 5, С. 60-76. 10.1109/MSEC.2022.3176058
Чжан, З., Лу, С., Хуан, З., Чжао, З. (2022). ASGNN: графічні нейронні мережі з адаптивною структурою. ArXiv, 10.48550/arXiv.2210.01002
ChatGPT. OpenAI. Отримано з: https://openai.com/blog/chatgpt
Лал Х., Пахва Г. (2017). Аналіз аналізу коду програмної системи з використанням методів машинного навчання. 11-та Міжнародна конференція з інтелектуальних систем і управління (ISCO), Коїмбатор, Індія, стор. 8 - 13. 10.1109/ISCO.2017.7855962
Мадера, М., і Томон, Р. (2017). Випадкове дослідження моделі машинного навчання для експертної системи перевірки коду в програмній інженерії. Федеративна конференція з комп’ютерних наук та інформаційних систем (FedCSIS), стор. 1357-1363.
Міара Р., Масселман Дж., Наварро Дж., Шнейдерман Б. (1983). Програмний відступ і зрозумілість. Комун. ACM, № 11, вип. 26, стор. 861-867. 10.1145/182.358437
Рейс, С. (2007). Автоматична стилізація коду. Матеріали 22-ї міжнародної конференції IEEE/ACM з автоматизованої розробки програмного забезпечення, 10.1145/1321631.1321645
Парр Т., Вінджу Дж. (2016). На шляху до універсального форматувальника коду через машинне навчання. Матеріали міжнародної конференції ACM SIGPLAN 2016 року з розробки мови програмного забезпечення, 10.1145/2997364.2997383
Фаулер М., Бек К., Брант Дж., Опдайк В., Робертс Д. (1999). Refactoring: Improving the Design of Existing Code, 1st ed. Addison-Wesley Professional, 464 стор. ISBN 978-0201485677
Фонтана, Ф., Ментюля, М., Заноні, М., Маріно, А. (2016). Порівняння та експериментування методів машинного навчання для виявлення запаху коду. Емпірична інженерія програмного забезпечення, № 21, стор. 1143-1191. 10.1007/s10664-015-9378-4
Азім, М., Паломба, Ф., Ши, Л., Ван, К. (2019). Методи машинного навчання для виявлення запаху коду: систематичний огляд літератури та мета-аналіз. Інф. програмне забезпечення техн., С. 115-138. 10.1016/J.INFSOF.2018.12.009
Деванган С., Рао Р., Мішра А., Гупта М. (2022). Виявлення запаху коду за допомогою алгоритмів ансамблевого машинного навчання. Прикладні науки, 12(20), 10.3390/app122010321

