Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
GBP
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
Пять дней на исправление ошибки в два с…

Пять дней на исправление ошибки в два символа, или миф о всемогущих технологиях при разработке программ

30 Авг 2010

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

Однажды после выпуска новой версии статического анализатора кода PVS-Studio, к нам обратился пользователь, жалующийся на то, что наш инструмент не работает на его сложном проекте. Кстати хороший способ для разработчиков оценить полезность программы – если после очередного релиза вам приходит несколько писем с сообщением что что-то не работает и сломалось, то значит ваша программа нужна. Вернемся к программе. Итак, не работает – это значит не находит файлы для анализа. Сначала были вопросы про тип проекта, про установленные дополнительные плагины к Visual Studio. Выяснилось, что у пользователя установлен компилятор Intel C++ Compiler, но дело не в нем. Также у пользователя была установлена CUDA, но и это оказалось не причем. Кстати, проверка простенького демонстрационного проекта работала, хотя проверка вновь созданной пустой болванки проекта – уже не работала.

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

Под конец пятого дня после неоднократного запуска специальной отладочной версии с расставленными printf (ага, это к вопросу о printf vs новомодные крутые инструменты) выяснилось следующее. Наш анализатор для анализа файлов генерирует специальные cmd-скрипы, в которых есть строка вида:

cd e:\projects\mylib

то есть переход в папку проекта. А как раз в этой версии (предыдущая работала у пользователя нормально) мы сильно переписывали механизм генерации этих скриптов. У команды cd есть особенность – она не переходит в папку на другом диске, если не указать опцию "/d". То есть правильно должно быть так:

cd /d e:\projects\mylib

Этот ключ "/d" был в прошлой версии программы, но по ошибке и недосмотру был потерян в новой версии при переписывании. К сожалению, все тесты у нас запускались с того же системного диска, поэтому команда cd без опции "/d" отрабатывала нормально.

Причем для того, чтобы ошибка проявилась надо обязательно открыть проверяемый проект через Visual Studio (File->Open...). Если же открыть проект, выбрав sln-файл, то ошибка не проявлялась, так как при таком открытии рабочая папка совпадала с папкой, указываемой в команде cd скрипта. Поэтому повторить ошибку не удавалось довольно долго.

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

Какие можно выводы сделать из этой истории? Банальные, но начинающим программистам от этого они менее полезными не станут:

  • Если ваша программа не работает у пользователя, то не стоит винить установленные у него на компьютере программы типа CUDA или Intel C++ Compiler. Хотя и они бывают виноваты.
  • Даже если у вас приложение проходит пять разных типов тестов, то это не значит, что оно работает всегда и везде.
  • Никакой программный инструмент не сможет полностью заменить человеческий мозг. Увы.
  • Если пользователи вашей программы сами программисты, то вам повезло! Ну какие еще пользователи знают слова отладочная версия, дамп и прочее?

Популярные статьи по теме
Как и почему статические анализаторы борются с ложными срабатываниями

Дата: 20 Мар 2017

Автор: Андрей Карпов

В своей предыдущей статье я писал, что мне не нравится подход, при котором статические анализаторы кода оцениваются с помощью синтетических тестов. В статье приводился пример, воспринимаемый анализат…
PVS-Studio ROI

Дата: 30 Янв 2019

Автор: Андрей Карпов

Время от времени нам задают вопрос, какую пользу в денежном эквиваленте получит компания от использования анализатора PVS-Studio. Мы решили оформить ответ в виде статьи и привести таблицы, которые по…
Зло живёт в функциях сравнения

Дата: 19 Май 2017

Автор: Андрей Карпов

Возможно, читатели помнят мою статью под названием "Эффект последней строки". В ней идёт речь о замеченной мной закономерности: ошибка чаще всего допускается в последней строке однотипных блоков текс…
PVS-Studio для Java

Дата: 17 Янв 2019

Автор: Андрей Карпов

В седьмой версии статического анализатора PVS-Studio мы добавили поддержку языка Java. Пришло время немного рассказать, как мы начинали делать поддержку языка Java, что у нас получилось и какие дальн…
Как PVS-Studio оказался внимательнее, чем три с половиной программиста

Дата: 22 Окт 2018

Автор: Андрей Карпов

PVS-Studio, как и другие статические анализаторы кода, часто выдаёт ложные срабатывания. Но не стоит спешить считать странные срабатывания ложными. Это короткая история о том, как PVS-Studio вновь ок…
Главный вопрос программирования, рефакторинга и всего такого

Дата: 14 Апр 2016

Автор: Андрей Карпов

Вы угадали, ответ - "42". Здесь приводится 42 рекомендации по программированию, которые помогут избежать множества ошибок, сэкономить время и нервы. Автором рекомендаций выступает Андрей Карпов - тех…
Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний

Дата: 31 Июл 2017

Автор: Андрей Карпов

После большой статьи про проверку операционной системы Tizen мне было задано много вопросов о проценте ложных срабатываний и о плотности ошибок (сколько ошибок PVS-Studio выявляет на 1000 строк кода)…
Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей

Дата: 21 Ноя 2018

Автор: Андрей Карпов

Краткое описание технологий, используемых в инструменте PVS-Studio, которые позволяют эффективно обнаруживать большое количество паттернов ошибок и потенциальных уязвимостей. Статья описывает реализа…
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27 Июн 2017

Автор: Андрей Карпов

Проект Unreal Engine развивается - добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта - появление в коде новых ошибок, которые желательно выявлять как можно раньш…
Бесплатный PVS-Studio для тех, кто развивает открытые проекты

Дата: 22 Дек 2018

Автор: Андрей Карпов

В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub, GitLab или Bitbucket. Им предоставляется возмо…

Комментарии (0)

Следующие комментарии

На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять