Комментарии 28
А демо-версия будет, как для C++?
+1
… а планируется ли поддержка mono? Понятно что сейчас не поддерживает. А в будущем?
+2
А какие проблемы находит PVS-Studio из тех, которые не находит ReSharper? Из перечисленных кажется решарпер не предупредит только о N4. А учитывая, что он условно бесплатный и очень популярен, предупреждает об ошибках еще на этапе написания кода, вам будет трудно конкурировать с ним. Например, нам несколько раз предлагали купить Coverity, но каждый тестовый прогон проекта не выявлял существенных проблем, и мы отказывались. В любом случае это хорошо иметь несколько инструментов, подстегнет всех улучать свои продукты.
+2
У решарпера есть предупреждение «Some values of the enum are not processed inside switch». А вот N1 не поймает.
0
Это инструменты разного класса. ReSharper это productivity tool. PVS-Studio это статический анализатор кода, специализирующийся на поиске дефектов. PVS-Studio будет находить больше ошибок и более качественно (если не сейчас, то в недалёком будущем). Ибо он специализирован для этого.
То как Вы описали «пробу Coverity» это типовой неправильный способ применения статического анализатора. Суть статического анализа — регулярно применение. Разовые запуски находят как правило некритичные ошибки или ошибки в редко исполняемом коде. Настоящие ошибки к тому моменту исправлены потом и кровью. Эти усилия можно было бы существенно сократить, находя многие ошибки/опечатки сразу после написания кода. Очень прошу познакомиться со статьёй: www.viva64.com/ru/b/0105
То как Вы описали «пробу Coverity» это типовой неправильный способ применения статического анализатора. Суть статического анализа — регулярно применение. Разовые запуски находят как правило некритичные ошибки или ошибки в редко исполняемом коде. Настоящие ошибки к тому моменту исправлены потом и кровью. Эти усилия можно было бы существенно сократить, находя многие ошибки/опечатки сразу после написания кода. Очень прошу познакомиться со статьёй: www.viva64.com/ru/b/0105
+3
Спасибо огромное! Давно ждали!
0
Новое диагностическое правило, которое находит ошибки в функциях форматирования.
V3025 Incorrect format. A different number of actual arguments is expected while calling 'Format' function. Expected: 6. Present: 7. SliderPrevalueEditor.cs 221
Далее приведён большой фрагмент кода из реального приложения, в котором пропустили вывод для аргумента под номером 2.
V3025 Incorrect format. A different number of actual arguments is expected while calling 'Format' function. Expected: 6. Present: 7. SliderPrevalueEditor.cs 221
Далее приведён большой фрагмент кода из реального приложения, в котором пропустили вывод для аргумента под номером 2.
Пример кода
// add jquery window load event for toggling fields.
var javascriptMethod = string.Format(
@"
$('#{0}').click(function(){{
var disable = !$(this).attr('checked');
$('#{1},#{3}').attr('disabled', disable);
$('#{6}').val(disable && !checkDecimals() ? 'Integer' : 'Nvarchar');
if(!disable) disable = $('#{1}').val() != '';
}});
$('#{1}').change(function(){{
var disable = $(this).val() != '';
$('#{3}').attr('disabled', disable);
}});
$('#{4}').click(function(){{
var disable = !$(this).attr('checked');
$('#{5}').attr('disabled', disable);
}});
$('#{6}').change(function(){{
var disable = $(this).val() == 'Integer';
if (checkDecimals() && disable) {{
$('#{6}').val('Nvarchar');
alert('Please remove decimal points below if you wish to use the Integer datatype');
}}
else {{
$('#{0}').removeAttr('checked');
$('#{1},#{3}').attr('disabled', disable);
}}
}});
$('.slider-numeric').keydown(function(event) {{
// Allow only backspace and delete
if ( event.keyCode == 46 || event.keyCode == 8 || ($(this).hasClass('slider-decimal') && (event.keyCode == 110 || event.keyCode == 190))) {{
// let it happen, don't do anything
}} else {{
// Ensure that it is a number and stop the keypress
if ( (event.keyCode < 48 || event.keyCode > 57 ) && (event.keyCode < 96 || event.keyCode > 105 ) ) {{
event.preventDefault();
}}
}}
}});
$('.slider-numeric').keyup(function(event) {{
if ($('#{6}').val() != 'Nvarchar' && checkDecimals()) {{
$('#{6}').val('Nvarchar');
}}
}});
function checkDecimals() {{
foundDecimals = false;
$('.slider-numeric').each(function() {{
if ($(this).val().indexOf('.') >= 0) {{
foundDecimals = true;
return false;
}}
}});
return foundDecimals;
}}
",
this.EnableRange.ClientID,
this.RangeValue.ClientID,
this.Value.ClientID,
this.Value2.ClientID,
this.EnableStep.ClientID,
this.StepValue.ClientID,
this.DatabaseDataType.ClientID);
0
Убивать за такой код надо, а не ошибки в нем искать :)
+4
Тоже из проекта Umbraco
0
«Далее приведён большой фрагмент кода из реального приложения»… Ох. Перевожу с программистского языка на рекламный:
Пока писалась и переводилась эта статья, анализатор научился находить новые ошибки. Например, в рассматриваемом проекте Umbraco, нашлось вот такое. Вот как быстро и славно растёт PVS-Studio!
Пока писалась и переводилась эта статья, анализатор научился находить новые ошибки. Например, в рассматриваемом проекте Umbraco, нашлось вот такое. Вот как быстро и славно растёт PVS-Studio!
0
Отбой, про решарпер уже спросили
0
Дадите попробовать?
+3
Мог бы еще подозрительный лишний вызов ToArray внутри string.Join поймать. Решарпер его тоже не ловит, кстати.
Честно говоря, не понятно как вы от Resharper-а отстраиваться будете. Он уже очень много чего ловит. Глобально запустить проверку можно. Запустить проверку на билд-сервере без VS тоже уже можно. Общие слова про разные классы инструментов больше похожи на маркетологический булшит.
Честно говоря, не понятно как вы от Resharper-а отстраиваться будете. Он уже очень много чего ловит. Глобально запустить проверку можно. Запустить проверку на билд-сервере без VS тоже уже можно. Общие слова про разные классы инструментов больше похожи на маркетологический булшит.
+1
А мы не будем отстраиваться, сравниваться и так далее относительно Resharper. Мы будем просто брать и находить в проектах ошибки. И будем это показывать. Ничего более. И я уверен, нас ждёт успех.
Для С++ тоже много подобных инструментов, в том числе бесплатных. Но это не мешает нам продавать PVS-Studio.
Для С++ тоже много подобных инструментов, в том числе бесплатных. Но это не мешает нам продавать PVS-Studio.
0
Как я понял, вы пока сами не понимаете как будете убеждать владельцев решарпера покупать PVS-Studio. ОК, подождем :)
+2
Мы будем убеждать владельцев решарпера, точно также как убеждаем владельцев статических анализаторов для C++ (Clang, Cppcheck, PC-Lint и так далее). Статьями мы будем соблазнять попробовать наш анализатор на их проекте. И если PVS-Studio находит интересные ошибки, несмотря на использование Clang/Cppcheck/PC-Lint/Resharper, мы можем заинтересовать этого человека.
Возможно будут какие-то нюансы. Но пока я не вижу никакой разницы, по сравнению с завоеванием рынка C++.
Возможно будут какие-то нюансы. Но пока я не вижу никакой разницы, по сравнению с завоеванием рынка C++.
+5
Ну конечно, будет находить. Потому что обнаружение ошибки вообще не гарантирует её исправление.
0
Мы будем убеждать владельцев решарпера, точно также как убеждаем владельцев статических анализаторов для C++ (Clang, Cppcheck, PC-Lint и так далее).
Понимаете ли, в чем дело. Когда вы «убеждаете» владельца другого статического анализатора, в результате он заменяет тот анализатор, которым он раньше пользовался, на ваш. Но вы не можете сделать то же самое с решарпером, потому что вы никогда не замените основную функциональность решарпера. И, значит, вам придется убеждать человека купить ваш продукт в дополнение к решарперу.
+7
НЛО прилетело и опубликовало эту надпись здесь
Ну вот и у нашей конторки скоро появится повод скачать демо-версию. Ждем с нетерпением.
0
Всем, кому интересна эта тема. Мы выпустили релизную версию PVS-Studio 6.00 с поддержкой C#. Приглашаю скачать и попробовать: www.viva64.com/ru/pvs-studio-download
0
Продолжение: Снова проверяем исходный код Umbraco.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Первая статья про проверку C# проекта