2014-10-14 3 views
0

Я очень новичок в ядре linux. Я хочу знать, насколько различны и разрешены инструменты для покрытия? Поскольку оба используются для анализа статического кода. Тогда как решить, какой инструмент лучше? Единственное различие, которое я знаю, это то, что: разреженный - с открытым исходным кодом, но для покрытия мы должны иметь лицензию на его использование.Насколько разреженный и скрытый инструмент для анализа статического кода отличается?

Есть ли какой-либо конкретный набор ошибок, которые можно проследить только по покрытию/разреженности?

Вот фрагмент кода, в котором Coverity сообщает вопрос, однако разреженные не:

foo(){ 

    int x; 
    scanf("%d", &x); 

    switch(x){ 

       case 1: printf("CASE 1"); 
       case 2: printf("CASE 2"); 
         break; 
       default: 
    } 
} 

В выше заданном примере; Покрытие будет сообщать о предупреждении отсутствия break заявление в case 1. Но, разреженный нет?

Однако оба инструмента используются для статического анализа кода программного обеспечения. Пожалуйста, поделитесь любой документацией, в которой можно выделить плюсы и минусы обоих инструментов.

+0

Я не уверен, что это хороший вопрос. Различия, о которых вы спрашиваете, основаны на мнениях (а не черно-белых или, по крайней мере, очень ясных). Это просто предупреждение о статическом инструменте. Может быть, у Coverity есть другая, более ограничительная, политика по этому вопросу? Может быть, Sparse еще не реализовал эту функцию? Также плюсы и минусы, а также поведение, вероятно, подвержены изменениям в не столь отдаленной функции. Я боюсь, что любые ответы будут устаревшими в течение 6 месяцев. – luk32

ответ

1

Инструменты отличаются тем, что они обнаруживают, и насколько хорошо они их обнаруживают. Как правило, всегда рекомендуется запускать как можно больше инструментов в исходном коде. Конечно, есть несколько соображений об этом. Прежде всего, это стоимость владения и обслуживания любого инструмента.

Большие имена (Fortify, Sonar, Coverity, Klockwerk и т. Д.) Являются дорогостоящими покупками и имеют значительную ежегодную стоимость обслуживания. С другой стороны, все они стремятся преформировать лучше, чем инструменты с открытым исходным кодом.

Любой инструмент, будь то с открытым исходным кодом или патентованный, потребует «ухода и кормления», создания пользовательских правил, изменения того, что сообщается и т. Д. Это должно быть сделано, на мой взгляд, специальным старшим программистом, который хорошо разбирается в теории и практике безопасного программирования.

Оценка отчетов об инструментах также должна выполняться программистом/аналитиком, хорошо разбирающимся в безопасности. Сообщение о том, что опытный программист не обязательно является защищенным программистом. Есть дополнительные наборы знаний и навыков, чтобы быть защищенным программистом.

Для краткого обзора различных инструментов я бы предложил посмотреть различные отчеты по оценке SAMATE (показатели статического анализа и оценки инструмента), расположенные here. Хотя я не считаю, что команда SAMATE когда-либо оценивала «разреженный».

Я знаю, что это более общие сведения об использовании инструментов статического анализа, но, учитывая текущее состояние дел, я подозреваю, что это, вероятно, лучшее, что вы собираетесь получить. Кроме того, вы можете проверить это сообщение State of the Art.