Меню
Публикации
2026
2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007
2006
2005
2004
2003
2002
2001
Главный редактор
НИКИФОРОВ
Владимир Олегович
д.т.н., профессор
Партнеры
doi: 10.17586/2226-1494-2026-26-3-565-573
УДК 004.4ʹ2
Метод предметно-ориентированного анализа программного кода
Читать статью полностью
Язык статьи - русский
Ссылка для цитирования:
Аннотация
Ссылка для цитирования:
Кознов Д.В. Метод предметно-ориентированного анализа программного кода // Научно-технический вестник информационных технологий, механики и оптики. 2026. Т. 26, № 3. С. 565–573. doi: 10.17586/2226-1494-2026-26-3-565-573
Аннотация
Введение. Современные компании, имеющие в составе своих продуктов и технологий сложное программное обеспечение, заинтересованы в технологической независимости по его разработке. Более того, поскольку такое программное обеспечение часто оказывается очень объёмным (речь идёт о миллионах строк кода), то для его тестирования, сопровождения и трансформации требуются многофункциональные инструменты, которые невозможно получить готовыми из-за труднорешаемости многих базовых задач анализа кода (при этом часто эти задачи оказываются неразрешимыми, например, анализ указателей и сборка мусора в С/С++). Вместе с тем такие кодовые базы используют возможности языков программирования не полностью, поэтому классические задачи по анализу кода для этих частных случаев могут оказаться разрешимыми. Метод. Предложен подход для разработки предметно-ориентированных решений по анализу программного кода, предназначенных для конкретных больших кодовых баз. Такие решения оказываются востребованными для задач фаззинга, символьного исполнения и генерации тестов, а также для автоматических трансформаций/оптимизаций кода, поиска уязвимостей и т. д. Создание собственных предметно-ориентированных решений, работающих с конкретной кодовой базой, возможно, если компании имеют ресурсы для использования открытых проектов (Eclipse, Low Level Virtual Machine, Microsoft Visual Studio Code и др.), а высокая стоимость целевого проекта оправдывает такие затраты (эффективные решения помогают экономить большие средства, значительно повышая качество). Основные результаты. Разработанный метод состоит из следующих шагов: анализ проблемы и идей, проектирование решения, разработка требований, разработка самого решения, апробация, внедрение и передача решения. Требования включают создание шаблонов кода, на которых решение должно работать и которые ограничивают использование целевого языка программирования в рамках текущей кодовой базы. При этом разработка требований, решения и апробация выполняются параллельно, тестирование совмещено с разработкой. С помощью предложенного метода созданы инструменты для статического анализа С-приложений для нужд фаззинга, средство поиска клонов и рефакторинга большой кодовой базы программного обеспечения сетевых устройств и другие решения. В реализованных проектах было задействовано от одного до трех разработчиков, длительность проектов составляла от одного до двух лет. Обсуждение. Представленный метод оказался ресурсозатратным. Анализ реализованных проектов показал, что при исходном наличии готового технического задания можно в несколько раз снизить ресурсы по реализации решений по анализу кода. Метод направлен на итеративное выявление требований к решению в ситуации, когда готовое техническое задание невозможно создать, а также существенно понижает риски по разработке невостребованных решений.
Ключевые слова: анализ кода, статический анализ, большие кодовые базы, предметно-ориентированный подход, модель процесса разработки
Список литературы
Список литературы
1. Арутюнян М.С. Статический анализ исходного и исполняемого кода на основе поиска клонов кода. Диссертация на соискание ученой степени кандидата технических наук. М.: ФГБУН Институт системного программирования им. В. П. Иванникова Российской академии наук, 2025. 133 с.
2. Ali M., Hussain S., Ashraf M., Paracha K. Addressing software related issues on legacy systems – a review // International Journal of Scientific & Technology Research. 2020. V. 9. N 3. P. 3738–3742.
3. Boulychev D., Koznov D., Terekhov A.A. On project-specific languages and their application in reengineering // Proc of the 6th European Conference on Software Maintenance and Reengineering. 2002. P. 177–185. doi: 10.1109/csmr.2002.995802
4. Кознов Д.В., Ольхович Л.Б. Визуальные языки проектов // Системное программирование. 2005. Т. 1. C. 148–167.
5. Белеванцев А.А. Многоуровневый статический анализ исходного кода для обеспечения качества программ. Диссертация на соискание ученой степени доктора физ.-мат. наук. М.: М.: ФГБУН Институт системного программирования им. В. П. Иванникова Российской академии наук, 2018. 229 с.
6. Gosain A., Sharma G. Static analysis: A survey of techniques and tools // Advances in Intelligent Systems and Computing. 2015. V. 343. P. 581–591. doi: 10.1007/978-81-322-2268-2_59
7. Muchnick S. Advanced Compiler Design Implementation. Morgan Kaufmann, 1997. 888 p.
8. Negm E., Makady S., Salah A. Survey on domain specific languages implementation aspects // International Journal of Advanced Computer Science and Applications. 2019. V. 10. N 11. doi: 10.14569/ijacsa.2019.0101183
9. Berezun D., Boulytchev D. Precise garbage collection for C++ with a non-cooperative compiler // Proc. of the 10th Central and Eastern European Software Engineering Conference in Russia. 2014. P. 15. doi: 10.1145/2687233.2687244
10. Бронштейн И.Е. Вывод типов для языка Python// Труды Института системного программирования РАН. 2013. Т. 24. С. 161–190.
11. Фаулер М. Предметно-ориентированные языки программирования. М.: Издательский дом Вильямс, 2011. 572 с.
12. Wang J., Huang Y., Wang S., Wang Q. An approach to detecting bugs in pattern-based bug detectors // arXiv. 2021. arXiv:2109.02245. doi: 10.48550/arXiv.2109.02245
13. Mey J., Kühn T., Schöne R., Aßmann U. Reusing static analysis across different domain-specific languages using reference attribute grammars // arXiv. 2020. arXiv:2002.06187. doi: 10.48550/arXiv.2002.06187
14. Zhang X., Zhou Y., Tan S.H. Efficient pattern-based static analysis approach via regular-expression rules // Proc. of the IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER). 2023. P. 132–143. doi: 10.1109/saner56733.2023.00022
15. Mendonça D.S., Kalinowski M. Towards practical reuse of custom static analysis rules for defect localization // Proc. of the 19th Brazilian Symposium on Software Quality. 2020. P. 1–10. doi: 10.1145/3439961.3439985
16. Li Z, Liu Z., Wong W.K., Ma P., Wang S. Evaluating C/C++ vulnerability detectability of query-based static application security testing tools // IEEE Transactions on Dependable and Secure Computing. 2024. V. 21. N 5. P. 4600–4618. doi: 10.1109/tdsc.2024.3354789
17. Кознов Д.В. Методология и инструментарий предметно-ориентированного моделирования. Диссертацияна соискание ученой степени доктора технических наук. СПб.: СПбГУ, 2016. 430 c.
18. Терехов А.Н., Брыксин Т.А., Литвинов Ю.В. QReal: платформа визуального предметно-ориентированного моделирования // Программная инженерия. 2013. № 6. С. 11–19.
19. Kelly S., Tolvanen J.-P. Domain-Specific Modeling: Enabling Full Code Generation. John Wiley & Sons, 2008. 444 p.
20. Вигерс К.И. Разработка требований к программному обеспечению. М.: ИТД "Русская Редакция", 2004. 576 с.
21. Липаев В.В. Тестирование крупных комплексов программ на соответствие требованиям // Бизнес-информатика. 2008. № 2 (4). С. 16–24.
22. Rong X., Yadavally A., Nguyen T.N. Large Language Model-aided partial program dependence analysis // Proc. of the IEEE/ACM 48th International Conference on Software Engineering (ICSE ’26). 2026.
23. Yang C., Chen J., Lin B., Wang Z., Zhou J. Advancing code coverage: incorporating program analysis with Large Language Models // ACM Transactions on Software Engineering and Methodology (TOSEM). 2026. V. 35. N 5. P. 1–31. doi: 10.1145/3748505
24. Blinn A., Li X., Kim J.H., Omar C. Statically contextualizing Large Language Models with typed holes // Proc. of the ACM on Programming Languages. 2024. V. 8. N OOPSLA2. P. 468–498. doi: 10.1145/3689728
25. Venkatesh A.P.S., Sabu S., Mir A.M., Reis S., Bodden E. The emergence of Large Language Models in static analysis: a first look through micro-benchmarks // Proc. of the IEEE/ACM First International Conference on AI Foundation Models and Software Engineering. 2024. P. 35–39. doi: 10.1145/3650105.3652288
26. Sun W., Miao Y., Li Y., Zhang H., Fang C., Liu Y., et al. Source code summarization in the era of Large Language Models // Proc. of the IEEE/ACM 47th International Conference on Software Engineering (ICSE). 2025. P. 1882–1894. doi: 10.1109/ICSE55347.2025.00034

