Preview

Труды Института системного программирования РАН

Расширенный поиск

Поиск модификаций коллекции во время её перечисления в исходном коде на языке C# методами статического анализа

https://doi.org/10.15514/ISPRAS-2026-38(3)-7

Аннотация

Статья посвящена разработке метода выявления ошибок модификации коллекций во время их перечисления в языке C#. Подобные ошибки приводят к исключению InvalidOperationException и аварийному завершению программы во время выполнения. Предлагаемое решение реализовано в рамках промышленного статического анализатора SharpChecker и использует межпроцедурный символьный анализ, чувствительный к потоку управления и путям выполнения. Детектор отслеживает как прямые изменения коллекций в цикле foreach, так и модификации, происходящие через цепочки вызовов методов. Тестирование на проектах с открытым исходным кодом показало точность около 69%. Результаты демонстрируют эффективность подхода для обнаружения сложных случаев модификации коллекций.

Об авторах

Ксения Андреевна ХАНЕВСКАЯ
Институт системного программирования им. В.П. Иванникова РАН, Московский физико-технический институт
Россия

Студентка бакалавриата Физтех-школы Радиотехники и Компьютерных Технологий Московского физико-технического института, сотрудник ИСП РАН. Научные интересы: статический анализ программ, статическое символьное выполнение, алгоритмы поиска дефектов в исходном коде.



Ульяна Владимировна ТЯЖКОРОБ
Институт системного программирования им. В.П. Иванникова РАН, Московский физико-технический институт
Россия

Студентка аспирантуры Физтех-школы Радиотехники и Компьютерных Технологий Московского физико-технического института, сотрудник ИСП РАН. Научные интересы: статический анализ программ, статическое символьное выполнение, алгоритмы поиска дефектов в исходном коде.



Валерий Николаевич ИГНАТЬЕВ
Институт системного программирования им. В.П. Иванникова РАН, Московский государственный университет имени М.В. Ломоносова
Россия

Кандидат физико-математических наук, старший научный сотрудник ИСП РАН, доцент кафедры системного программирования факультета ВМК МГУ. Научные интересы включают методы поиска ошибок в исходном коде ПО на основе статического анализа.



Список литературы

1. Tiobe index for ranking the popularity of programming languages. Available at: https://www.tiobe.com/tiobe-index, accessed 12.03.2026.

2. Bodden E., Lam P., Hendren L. Finding programming errors earlier by evaluating runtime monitors ahead-of-time. Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of software engineering. 2008. pp. 36-47.

3. Horváth G., Páter-Részeg A., Pataki N. Detecting Misusages of the C++ Standard Template Library. Proceedings of the 10th International Conference on Applied Informatics (ICAI 2017), 2017, pp. 129-136.

4. Clang: a C language family frontend for LLVM. Available at: https://clang.llvm.org, accessed 12.03.2026.

5. GDB: The GNU Project Debugger. Available at: https://www.sourceware.org/gdb/, accessed 12.03.2026.

6. Иванников В.П., Белеванцев А.А. и др. Статический анализатор Svace для поиска дефектов в исходном коде программ. Труды ИСП РАН, том 26, вып. 1, 2014 г., стр. 231-250. DOI: 10.15514/ISPRAS-2014-26(1)-7 / Ivannikov V.P., Belevantsev A.A. et al. Static analyzer Svace for finding defects in a source program code. Programming and Computer Software, vol. 40, issue 5, 2014, pp. 265-275.

7. PVS-Studio: Static Code Analyzer. Available at: https://pvs-studio.ru/ru/, accessed 12.03.2026.

8. V3221: Modifying a collection during its enumeration will lead to an exception. PVS-Studio Documentation. Available at: https://pvs-studio.ru/ru/docs/warnings/v3221/, accessed 12.03.2026.

9. ReSharper: The Visual Studio Extension for .NET Developers. Available at: https://www.jetbrains.com/resharper/, accessed 12.03.2026.

10. Possible 'System.InvalidOperationException: Collection was modified'. Code Inspections in C#. ReSharper Documentation. Available at (accessed 12.03.2026): https://www.jetbrains.com/help/resharper/Code_Analysis__Code_Inspections.html.

11. IEnumerable.GetEnumerator Метод. Available at: https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.ienumerable.getenumerator?view=net-8.0, accessed 12.03.2026.

12. Кошелев В.К., Игнатьев В.Н., Борзилов А.И. Инфраструктура статического анализа программ на языке C#. Труды ИСП РАН, том 28, вып. 1, 2016 г., стр. 21-40. DOI: 10.15514/ISPRAS-2016-28(1)-2 / Koshelev V.K., Ignatiev V.N. et al. SharpChecker: Static analysis tool for C# programs. Programming and Computer Software, vol. 43, issue 4, 2017, pp. 268-276.

13. dotnet/roslyn: The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs. Available at: https://github.com/dotnet/roslyn, accessed 12.03.2026.

14. ControlFlowGraph Class. Available at: https://learn.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.flowanalysis.controlflowgraph?view=roslyn-dotnet-5.0.0, accessed 12.03.2026.

15. List<T> Source Code. .NET Foundation. Available at: https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/List.cs, accessed 12.03.2026.

16. ConcurrentDictionary Source Code. .NET Foundation. Available at: https://github.com/dotnet/runtime/blob/main/src/libraries/System.Collections.Concurrent/src/System/Collections/Concurrent/ConcurrentDictionary.cs, accessed 12.03.2026.

17. ConcurrentDictionary<TKey,TValue>.GetEnumerator Метод. Available at: https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.concurrent.concurrentdictionary-2.getenumerator?view=net-8.0, accessed 12.03.2026.

18. OpenSimulator is an open source multi-platform, multi-user 3D application server. Available at: http://opensimulator.org/wiki/Main_Page, accessed 12.03.2026.


Рецензия

Для цитирования:


ХАНЕВСКАЯ К.А., ТЯЖКОРОБ У.В., ИГНАТЬЕВ В.Н. Поиск модификаций коллекции во время её перечисления в исходном коде на языке C# методами статического анализа. Труды Института системного программирования РАН. 2026;38(3):129-142. https://doi.org/10.15514/ISPRAS-2026-38(3)-7

For citation:


KHANEVSKAYA K.A., TSIAZHKOROB U.V., IGNATYEV V.N. Detection of Collection Modifications during Its Enumeration in the C# Source Code Using Static Analysis. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2026;38(3):129-142. (In Russ.) https://doi.org/10.15514/ISPRAS-2026-38(3)-7



Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


ISSN 2079-8156 (Print)
ISSN 2220-6426 (Online)