Компания Coverity, специализирующаяся на выявлении изъянов кодирования в программных системах, добавила к одному из своих инструментов, Prevent SQS, новую функцию, которая помогает обнаружить проблемы, способные привести к сбою в работе многопоточных приложений.
Как пояснил Бен Челф, директор Coverity по технологиям, используя статический анализ кода, она выявляет ситуацию, в которой при обращении двух потоков команд к одному фрагменту данных может возникнуть конфликт. Когда две цепочки команд работают параллельно, не всегда можно сказать, будет ли конкретная команда из одной цепочки выполнена до конкретной команды в другой цепочке или после нее. Эти две команды могут выполняться в разном порядке при каждом запуске данного приложения.
Проблемы возникают, когда программист пишет код, не принимая в расчет такую вероятность, а команды обращаются к совместно используемому ресурсу в порядке, которого не предусмотрел программист. Это может привести к сбою в работе приложения или к порче данных.
Процесс определения условий возникновения подобных конфликтов и их устранения весьма длительный и трудоемкий. Обновленный инструментарий Coverity анализирует код в поисках некорректного использования разделяемого фрагмента данных. Инструментарий в четыре-шесть раз дольше анализирует код, чем выполняет сборку исполняемого файла.
Челф отметил, что инструментарий выявляет около 15% ошибок, но добиться полностью безошибочной работы нельзя, поскольку никто точно не знает, как будет вести себя фрагмент кода до тех пор, пока он не начал реально выполняться.
Prevent SQS применяется для анализа программ, написанных на Си, C++ и Java. По словам Челфа, Coverity продает свой продукт разработчикам, создающим, в частности, телекоммуникационные и мобильные приложения.