Проверка программ на соответствие стандарту MISRA C с использованием инфраструктуры Clang
https://doi.org/10.15514/ISPRAS-2022-35(5)-12
Аннотация
MISRA C – это сборник правил и рекомендаций по программированию на языке C, который является фактическим стандартом в отраслях, где безопасность играет ключевую роль. Стандарт разработан консорциумом MISRA (Motor Industry Software Reliability Association) и включает в себя набор рекомендаций, которые позволяют использовать язык C для разработки безопасного, надежного и переносимого программного обеспечения. MISRA широко применяется во многих отраслях с высокими требованиями к надежности, включая аэрокосмическую, оборонную, автомобильную и медицинскую.
Мы разработали статические детекторы для проверки кода на соответствие рекомендациям стандарта безопасного кодирования MISRA C 2012. Средство проверки кода основано на компиляторной инфраструктуре LLVM/clang. В данной статье описываются стратегии, лежащие в основе проектирования и реализации детекторов. На тестовых примерах MISRA С предложенные детекторы с высокой точностью определяют соответствие или нарушение рекомендациям. Также детекторы показывают большее покрытие и лучшую скорость работы, чем Cppcheck, популярный статический анализатор с открытым исходным кодом.
Ключевые слова
Об авторах
Рубен Артурович БУЧАЦКИЙРоссия
кандидат технических наук, научный сотрудник отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ программ, компиляторные технологии, оптимизации.
Ян Андрееви ЧУРКИН
Россия
Cтажер-исследователь отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ программ, компиляторные технологии, оптимизации.
Кирилл Алексеевич ЧИБИСОВ
Россия
Инженер отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ программ, компиляторные технологии, оптимизации.
Михаил Вячеславович ПАНТИЛИМОНОВ
Россия
Научный сотрудник отдела компиляторных технологий. Научные интересы: статический анализ, компиляторные технологии, СУБД.
Егор Викторович ДОЛГОДВОРОВ
Россия
Студент МФТИ, лаборант отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ программ, компиляторные технологии, оптимизации.
Андрей Викторович ВЯЗОВЦЕВ
Россия
Студент МФТИ, лаборант отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ программ, компиляторные технологии, оптимизации.
Алексей Георгиевич ВОЛОХОВ
Россия
Ведущий инженер отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ программ, компиляторные технологии, оптимизации.
Владимир Владимирович ТРУНОВ
Россия
Студент МФТИ, лаборант отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ программ, компиляторные технологии, оптимизации.
Гаяне Оганнесовна МИРАКЯН
Армения
Студентка Российско-Армянский Университета. Научные интересы: cтатический анализ программ, компиляторные технологии, оптимизации.
Константин Николаевич КИТАЕВ
Россия
Студент МФТИ, лаборант отдела компиляторных технологий ИСП РАН. Научные интересы: статический анализ программ, компиляторные технологии, оптимизации.
Андрей Андреевич БЕЛЕВАНЦЕВ
Россия
Доктор физико-математических наук, ведущий научный сотрудник ИСП РАН, профессор МГУ. Сфера научных интересов: статический анализ программ, оптимизация программ, параллельное программирование.
Список литературы
1. MIRSA official website. https://www.misra.org.uk/, accessed 01.11.2023.
2. SEI CERT C Coding Standard. https://wiki.sei.cmu.edu/confluence/display/c, accessed 01.11.2023.
3. AUTOSAR official website. https://www.autosar.org/, accessed 01.11.2023.
4. The LLVM Compiler Infrastructure. https://llvm.org/, accessed 01.11.2023.
5. Clang Tidy. https://clang.llvm.org/extra/clang-tidy/, accessed 01.11.2023.
6. Clang Static Analyzer. https://clang.llvm.org/docs/ClangStaticAnalyzer.html, accessed 01.11.2023.
7. Introduction to the Clang AST. https://clang.llvm.org/docs/IntroductionToTheClangAST.html, accessed 01.11.2023.
8. Cppcheck A tool for static C/C++ code analysis. http://cppcheck.net/, accessed 01.11.2023.
9. SonarQube. https://www.sonarsource.com/products/sonarqube/, accessed 01.11.2023.
10. Coverity Static Analysis. https://www.synopsys.com/software-integrity/static-analysis-tools-sast/coverity.html, accessed 01.11.2023.
11. Klocwork static analyzer. https://www.perforce.com/products/klocwork, accessed 01.11.2023.
12. PVS-Studio static analysis system. https://pvs-studio.com/en/, accessed 01.11.2023.
13. Motor Industry Software Reliability Association, MISRA-C:1998, Guidelines for the use of the C language in vehicle based software. Nuneaton, Warwickshire CV10 0TU, UK: MIRA Ltd, Jul. 1998.
14. The Motor Industry Research Association, Development Guidelines For Vehicle Based Software. Nuneaton, Warwickshire CV10 0TU, UK: The Motor Industry Research Association, Nov. 1994.
15. MISRA, MISRA C:2012 Amendment 1 – Additional security guidelines for MISRA C:2012. Nuneaton, Warwickshire CV10 0TU, UK: HORIBA MIRA Ltd, Apr. 2016.
16. MISRA, MISRA C:2012 Addendum 2 – Coverage of MISRA C:2012 (including Amendment 1) against ISO/IEC TS 17961:2013 “C Secure”
17. AST Matcher Reference, https://clang.llvm.org/docs/LibASTMatchersReference.html, accessed 01.11.2023.
18. CRTP pattern. https://en.cppreference.com/w/cpp/language/crtp, accessed 01.11.2023.
19. LLVM Alias Analysis Infrastructure, https://llvm.org/docs/AliasAnalysis.html, accessed 01.11.2023.
20. MISRA-C-2012 Example Suite, https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite, accessed 01.11.2023.
21. Библиотека zlib. http://zlib.net/, accessed 01.11.2023.
22. Библиотека openjpeg. http://www.openjpeg.org/, accessed 01.11.2023.
23. Библиотека openssl. https://www.openssl.org/, accessed 01.11.2023.
24. Библиотека coreJSON. https://github.com/freertos/corejson, accessed 01.11.2023.
25. Инфраструктура статического анализа CodeChecker. https://codechecker.readthedocs.io/en/latest/, accessed 01.11.2023.
26. coreJSON: MISRA Compliance, https://github.com/FreeRTOS/coreJSON/blob/main/MISRA.md, accessed 01.11.2023.
27. coreJSON: Fix short-circuiting operations with side-effects,
28. htps://github.com/FreeRTOS/coreJSON/pull/148, accessed 01.11.2023.
Рецензия
Для цитирования:
БУЧАЦКИЙ Р.А., ЧУРКИН Я.А., ЧИБИСОВ К.А., ПАНТИЛИМОНОВ М.В., ДОЛГОДВОРОВ Е.В., ВЯЗОВЦЕВ А.В., ВОЛОХОВ А.Г., ТРУНОВ В.В., МИРАКЯН Г.О., КИТАЕВ К.Н., БЕЛЕВАНЦЕВ А.А. Проверка программ на соответствие стандарту MISRA C с использованием инфраструктуры Clang. Труды Института системного программирования РАН. 2023;35(5):169-192. https://doi.org/10.15514/ISPRAS-2022-35(5)-12
For citation:
BUCHATSKIY R.A., CHURKIN Ya.A., CHIBISOV K.A., PANTILIMONOV M.V., DOLGODVOROV E.V., VYAZOVTSEV A.V., VOLOKHOV A.G., TRUNOV V.V., MIRAKYAN G.H., KITAEV K.N., BELEVANTSEV A.A. Checking Programs for Compliance with MISRA C Standard Using the Clang Framework. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2023;35(5):169-192. (In Russ.) https://doi.org/10.15514/ISPRAS-2022-35(5)-12