Pull to refresh

Comments 28

Всё будет, как и сейчас. Просто помимо C++ проектов, можно будет проверять и C# проекты. Никого деления не будет. Просто анализатор научится понимать +1 язык.
Соответственно demo-версию так же можно будет скачать и попробовать на C# проекте.
… а планируется ли поддержка mono? Понятно что сейчас не поддерживает. А в будущем?
Пока не планируется. Пока не до этого.
А какие проблемы находит PVS-Studio из тех, которые не находит ReSharper? Из перечисленных кажется решарпер не предупредит только о N4. А учитывая, что он условно бесплатный и очень популярен, предупреждает об ошибках еще на этапе написания кода, вам будет трудно конкурировать с ним. Например, нам несколько раз предлагали купить Coverity, но каждый тестовый прогон проекта не выявлял существенных проблем, и мы отказывались. В любом случае это хорошо иметь несколько инструментов, подстегнет всех улучать свои продукты.
У решарпера есть предупреждение «Some values of the enum are not processed inside switch». А вот N1 не поймает.
Это инструменты разного класса. ReSharper это productivity tool. PVS-Studio это статический анализатор кода, специализирующийся на поиске дефектов. PVS-Studio будет находить больше ошибок и более качественно (если не сейчас, то в недалёком будущем). Ибо он специализирован для этого.

То как Вы описали «пробу Coverity» это типовой неправильный способ применения статического анализатора. Суть статического анализа — регулярно применение. Разовые запуски находят как правило некритичные ошибки или ошибки в редко исполняемом коде. Настоящие ошибки к тому моменту исправлены потом и кровью. Эти усилия можно было бы существенно сократить, находя многие ошибки/опечатки сразу после написания кода. Очень прошу познакомиться со статьёй: www.viva64.com/ru/b/0105
Новое диагностическое правило, которое находит ошибки в функциях форматирования.

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);

«Далее приведён большой фрагмент кода из реального приложения»… Ох. Перевожу с программистского языка на рекламный:
Пока писалась и переводилась эта статья, анализатор научился находить новые ошибки. Например, в рассматриваемом проекте Umbraco, нашлось вот такое. Вот как быстро и славно растёт PVS-Studio!
Подождите немного. Пока рано.
Мог бы еще подозрительный лишний вызов ToArray внутри string.Join поймать. Решарпер его тоже не ловит, кстати.

Честно говоря, не понятно как вы от Resharper-а отстраиваться будете. Он уже очень много чего ловит. Глобально запустить проверку можно. Запустить проверку на билд-сервере без VS тоже уже можно. Общие слова про разные классы инструментов больше похожи на маркетологический булшит.
А мы не будем отстраиваться, сравниваться и так далее относительно Resharper. Мы будем просто брать и находить в проектах ошибки. И будем это показывать. Ничего более. И я уверен, нас ждёт успех.

Для С++ тоже много подобных инструментов, в том числе бесплатных. Но это не мешает нам продавать PVS-Studio.
Как я понял, вы пока сами не понимаете как будете убеждать владельцев решарпера покупать PVS-Studio. ОК, подождем :)
Мы будем убеждать владельцев решарпера, точно также как убеждаем владельцев статических анализаторов для C++ (Clang, Cppcheck, PC-Lint и так далее). Статьями мы будем соблазнять попробовать наш анализатор на их проекте. И если PVS-Studio находит интересные ошибки, несмотря на использование Clang/Cppcheck/PC-Lint/Resharper, мы можем заинтересовать этого человека.

Возможно будут какие-то нюансы. Но пока я не вижу никакой разницы, по сравнению с завоеванием рынка C++.
Ну конечно, будет находить. Потому что обнаружение ошибки вообще не гарантирует её исправление.
Мы будем убеждать владельцев решарпера, точно также как убеждаем владельцев статических анализаторов для C++ (Clang, Cppcheck, PC-Lint и так далее).

Понимаете ли, в чем дело. Когда вы «убеждаете» владельца другого статического анализатора, в результате он заменяет тот анализатор, которым он раньше пользовался, на ваш. Но вы не можете сделать то же самое с решарпером, потому что вы никогда не замените основную функциональность решарпера. И, значит, вам придется убеждать человека купить ваш продукт в дополнение к решарперу.
UFO just landed and posted this here
Ну вот и у нашей конторки скоро появится повод скачать демо-версию. Ждем с нетерпением.
Было бы здорово посмотреть и на результаты проверки ShareX в будущем.
Sign up to leave a comment.