TGViewer
Channel Public Channel
Бестиарий программирования

Бестиарий программирования

@programming_tales

Наблюдения за жизнью ошибок в коде.
Андрей Карпов.

ГОСТ Р 71207-2024, ГОСТ Р 56939-2024, РБПО, Статический анализ кода

Канал-дублёр в MAX: https://max.ru/join/3VWTp9apkQvTMSRQ__LGiTQ5NGVBj8p_tOpwlQO6vS8
Subscribers
1.14K
Photos
398
Videos
5
Links
493

Showing posts older than #197 · Back to latest

Older Posts 15 shown
Post #195 232
Тема разыменования нулевых указателей стара, страшна и интересна. Неопределённое поведение всегда или нет? Я уже касался этой темы в 2015 году. Но в этом вопросе точку поставить не получается :) Есть масса нюансов. Языки С и C++ пошли немного разыми путями в этом вопросе. Меняются формулировки в стандарте.

Очередное разбирательство с этим вопросом вас ждёт в 9 главе книги про неопределённому поведению. См. главу "Исполнение программы: разыменование нулевых указателей".
  • 👍 4
Post #194 268
В моём докладе на SafeCode была юмористическая вставка на тему "опровержение великой теоремы Ферма с помощью оптимизирующего компилятора". Сегодня опубликована 8 часть путеводителя C++ программиста по неопределённому поведению. В ней можно прочитать про это подробнее.
  • 👍 3
  • ❤ 1
  • 🔥 1
Post #193 279
2024_10_30_Андрей_Карпов_SafeCode_Модельные_варианты_ошибок.pdf2.9 MB
Выступил сегодня на SafeCode с докладом "Модельные варианты ошибок, или Как статические анализаторы находят ошибки, которые не могут искать". В открытом доступе запись появится позже, а пока решил поделиться презентацией.
P.S. Спасибо Андрею Кулешову
  • 🔥 3
Post #192 267
Образ разработчика, проектирующего программу рациональным безошибочным способом на основе ясно сформулированных требований, совершенно нереалистичен. Никакая система так никогда не разрабатывалась и, наверное, не будет разрабатываться. Даже примеры разработки небольших программ, встречающихся в учебниках, нереалистичны. Авторы перепроверяют и улучшают их до тех пор, пока не продемонстрируют нам то, что они хотели бы получить, а не то, что получилось на самом деле.
Дэвид Парнас и Пол Клементс (David Parnas and Paul Clements)
  • 🔥 3
Post #191 221
Post #190 203
Серьезным программистам я хочу сказать: уделяйте часть рабочего дня изучению и улучшению собственных методик. Хотя на программистов всегда давит какой-то бедующий или прошедший срок, методологическая абстракция – мудрая долговременная инвестиция.
Роберт У. Флойд (Robert W. Floyd)
Post #186 336
Ошибка из статьи, которую я сейчас пишу. Случай, когда вроде всё просто, но на самом деле сложнее. Кажется, что ошибка проявит себя только при попытке сбросить биты в старшей 32-битной части 64-битной переменной. А если idx < 32 то всё должно работать. Да, но нет :)
Post #180 179
Очередной баг из проекта LLVM. PVS-Studio выдаёт предупреждение: V522 Dereferencing of the null pointer 'target' might take place. LinalgTransformOps.cpp 2219

Перед нами случай когда анализатор выдаёт в каком-то смысле ложное предупреждение, но позволяет найти ошибку. Другими словами – это косвенное выявление ошибки.

Если условие if (!target) выполнится, то произойдёт разыменование нулевого указателя: target->getLoc(). Про это анализатор и выдал предупреждение. Но на самом деле, этот указатель никогда не будет нулевым. Однако не спешите делать вывод про недостижимый код.

Ошибка в том, что проверяется не тот указатель. Нужно проверять не target, а tilingOp. Опечатка.
Post #179 236
Слайд из доклада на Innovation Week. Если не брать Python, то анализатор PVS-Studio по-прежнему анализирует код, написанный на самых популярных языках C, C++, Java, C#. Будем продолжать углублять анализ в их направлении. Кстати, про новое: PVS-Studio 7.33: критические ошибки, пользовательские аннотации в C#, поддержка SN-DBS и многое другое.
  • ⚡ 6
Post #178 235
На первые 90% кода приходится первые 90% времени разработки. На оставшиеся 10% кода приходятся другие 90% времени разработки.
Том Каргилл (Tom Cargill)
  • ⚡ 1
  • 🔥 1
Post #175 287
Из свежих интересных багов. В проекте LLVM встретился (А) вот такой вызов функции isStoreUsed. Всё хорошо. Но в другом месте рука программиста дрогнула, и он поставил закрывающуюся скобку не там (Б). Результат – условие всегда ложно.

Почему код скомпилировался? Ответ прост – последний аргумент функции является опциональным (В).

Заметить такую ошибку глазами весьма непросто. Хорошо, что есть PVS-Studio, который предупреждает о таких ляпах :)
Post #174 231
Парсим С++. 25 октября 12:00.
Приглашаю на бесплатный вебинар на тему разбору C++ кода. Коллега порассуждает о разных видах парсеров и о том, почему в случае С++ всё сложно.
  • 👍 1
  • 🔥 1
Post #172 196
Когда кто-то сказал "статистический анализ кода", то в 99% случаев он просто спутал название со "статический" :) Однако, понятие статистический анализ кода действительно есть и оно является одной из технологий, используемых статическими анализаторами кода.

Например, очень странно если в массиве все числа десятичные, но вот одно захотелось восьмеричным сделать. Ноль, делающий литерал восьмеричным, почти наверняка лишний и вписан для выравнивания столбика чисел.
  • 🔥 1
  • 🤯 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →