Божья коровка (программное обеспечение)
Стабильная версия | 1.1.0 [1]
/ 25 февраля 2021 г |
---|---|
Репозиторий | |
Написано в | OCaml и Python |
Тип | Статический анализ программы |
Лицензия | лицензия GPLv2 |
Веб-сайт | божья коровка |
Coccinelle ( по-итальянски « божьи коровки» ) — утилита с открытым исходным кодом для сопоставления и преобразования исходного кода программ, написанных на C. программирования языке
Утилита
[ редактировать ]Первоначально Coccinelle использовался для помощи в развитии ядра Linux , обеспечивая поддержку изменений в интерфейсах прикладного программирования библиотеки (API), таких как переименование функции , добавление аргумента функции, значение которого каким-то образом зависит от контекста, и реорганизация структуры данных .
Его также можно использовать для поиска дефектных шаблонов программирования в коде (т. е. фрагментов кода, которые с высокой вероятностью являются ошибочными, например, возможное разыменование нулевого указателя) без их преобразования. Поэтому роль coccinelle близка к роли инструментов статического анализа . Примерами такого использования являются приложения инструментаherodotos , который отслеживает предупреждения, генерируемые coccinelle . [2] [3]
Поддержку Coccinelle обеспечивает компания IRILL . Финансирование разработки было предоставлено Национальным агентством исследований (Франция), Датским исследовательским советом по технологиям и производственным наукам и INRIA .
Исходный код Coccinelle лицензируется на условиях версии 2 Стандартной общественной лицензии GNU (GPL).
Язык семантических патчей
[ редактировать ]Исходный код, который необходимо сопоставить или заменить, указывается с использованием синтаксиса «семантического исправления», основанного на синтаксисе исправления . [4] Шаблон языка семантических исправлений ( SmPL ) напоминает унифицированный diff с C-подобными объявлениями. [5] [6]
Пример
[ редактировать ]@@
expression lock, flags;
expression urb;
@@
spin_lock_irqsave(lock, flags);
<...
- usb_submit_urb(urb)
+ usb_submit_urb(urb, GFP_ATOMIC)
...>
spin_unlock_irqrestore(lock, flags);
@@
expression urb;
@@
- usb_submit_urb(urb)
+ usb_submit_urb(urb, GFP_KERNEL)
Ссылки
[ редактировать ]- ^ «Coccinelle: инструмент сопоставления и преобразования программ для системного кода» . coccinelle.gitlabpages.inria.fr . Проверено 9 марта 2021 г.
- ^ Паликс, Николас; Ловалл, Джулия ; Мюллер, Жиль (2010). «Отслеживание шаблонов кода в нескольких версиях программного обеспечения с помощью Herodotos» (PDF) . Материалы 9-й Международной конференции по аспектно-ориентированной разработке программного обеспечения (PDF) . АКМ. стр. 169–180. дои : 10.1145/1739230.1739250 . ISBN 9781605589589 . S2CID 1082611 .
- ^ Николя Паликс. «Николас Паликс: Геродот» .
- ^ Падиоле, Йоанн; Ловалл, Джулия ; Мюллер, Жиль (2007). «Семантические исправления, документирование и автоматизация сопутствующих изменений в драйверах устройств Linux» (PDF) . coccinelle.gitlabpages.inria.fr . Проверено 29 августа 2020 г.
- ^ Валери Хенсон (20 января 2009 г.). «Семантическое исправление с помощью Coccinelle» . Еженедельные новости Linux . Проверено 25 апреля 2011 г.
- ^ Вольфрам Санг (30 марта 2010 г.). «Эволюционное развитие семантического патча с использованием Coccinelle» . Еженедельные новости Linux . Проверено 25 апреля 2011 г.