Для оцінки якості роботи нашого аналізатора, а також з метою популяризації методології статичного аналізу, ми регулярно перевіряємо на наявність помилок проекти з відкритим вихідним кодом і пишемо про це статті. Не став винятком і минулий 2016 рік, який примітний ще й тим, що це був час своєрідного «дорослішання» C# аналізатора. PVS-Studio отримав значну кількість нових C# діагностик, покращений механізм роботи з віртуальними значеннями (symbolic execution) і багато іншого. За результатами проведеної нашою командою роботи, я склав своєрідний хіт-парад найбільш цікавих помилок, виявлених у проектах З# в 2016 році.

Читати далі →

останнім часом на Хабре з'являється досить багато статей про Tarantool — базу даних та сервер додатків, який використовується в Mail.Ru Group, Avito, Yota на різних високонавантажених проектах. І ось, коли в маленькому стартапі, який я іноді консультую, виникла необхідність поділу прекрасного, але, на жаль, монолітного програми на микросервисы, я подумав: а чим ми гірше за інших компаній? — і вирішив подивитися в бік Tarantool. Однак, на відміну від більшості компаній, де використовується Tarantool, в нашому випадку розробка проекту ведеться в Visual Studio на Windows. Передбачається, що навіть з переходом на микросервисную архітектуру більшість микросервисов буде написано на мові C#. А Tarantool… Варто зайти на офіційний сайт і відразу розумієш: Tarantool навіть встановити на Windows проблематично, так як на цю операційну систему він не портований. Як я боровся з такими складнощами, для якого саме микросервиса вибрав Tarantool і як ви можете використовувати Tarantool у своїх .NET-проектах, я розповім в цій статті. А поки спойлер — практично всі труднощі переборні, і мій досвід можна без сумнівів назвати позитивним. Наприклад, на те, щоб завантажити і запустити Tarantool, а потім зробити до нього запит з коду на мові C#, у мене пішло менше десяти хвилин. І я покажу вам, як це зробити!
image
Дана стаття являє собою туторіал, що описує роботу з Tarantool як таку. Тут немає опису проекту, побудованого на Tarantool, або порівняння Tarantool з іншими продуктами (статей на цю тему і так вже написано досить багато). Матеріал народився як спроба відповісти на запитання: а що б я хотів прочитати, коли тільки починав працювати з Tarantool. Але спочатку трохи розповім, для чого ми, власне, Tarantool застосовуємо в реальному житті.
Читати далі →

Повторна перевірка SharpDevelop: що нового?

Інструмент PVS-Studio постійно вдосконалюється. При цьому найбільш динамічно в даний час розвивається аналізатор C# код: у 2016 році в нього було додано дев'яносто нових діагностичних правил. Ну а найкращим показником якості роботи аналізатора є виявлені ним помилки. Завжди цікаво, а також досить корисно, проводити повторні перевірки великих відкритих проектів, порівнюючи результати. Сьогодні я зупинюся на повторній перевірці проекту SharpDevelop.

Читати далі →

Знову перевіряємо вихідний код Umbraco

Час невблаганно. Здавалося б, тільки недавно ми анонсували вихід статичного аналізатора для C# код, перевірили перші проекти і почали писати про це статті. І ось вже пройшов цілий рік з цього моменту. Рік копіткої і складної роботи по поліпшенню характеристик аналізатора, додавання нових діагностичних правил, збору статистики помилкових спрацьовувань і усунення їх причин, взаємодії з користувачами і рішенням маси інших питань. Рік безлічі маленьких і великих перемог на тому важкому, але неймовірно цікавому шляху, який ми для себе вибрали. Настав час повторної перевірки проекту, першим потрапив до нас для дослідження за допомогою нового C# аналізатора рік тому — Umbraco.

Читати далі →

Віртуальні події в C#: щось пішло не так

Нещодавно я працював над новою C#-діагностикою V3119 для статичного аналізатора PVS-Studio. Призначення діагностики — виявлення потенційно небезпечних конструкцій у вихідному коді C#, пов'язаних з використанням віртуальних і перевизначених подій. Давайте спробуємо розібратися: що ж не так з віртуальними подіями в C#, як саме працює діагностика і чому Microsoft не рекомендує використовувати віртуальні і перевизначені події?

Читати далі →

Проблеми, з якими ми зіткнулися під час оновлення інтерфейсу PVS-Studio

<img src=«habrastorage.org/getpro/habr/post_images/610/0d5/bc4/6100d5bc41e18b1a4c275465d17aa25e.png» alt=«Picture » 2" align=«left»/>
У нещодавно вийшла нової версії PVS-Studio 6.10 був суттєво оновлений графічний користувальницький інтерфейс Visual Studio плагінів і Standalone версії. Попередня версія інтерфейсу, незважаючи на постійну еволюцію (додавалися і зникали нові кнопки і пункти меню), проіснувала практично 6 років без суттєвих змін, вперше з'явившись в PVS-Studio версії 4.0 у 2010 році.

У даній замітці ми хочемо розповісти, які причини спонукали нас замислитися про необхідність зміни інтерфейсу, і з якими проблемами ми зіткнулися в процесі роботи над ним.

Читати далі →

Історія мов програмування: C# — попереду планети всієї



З# живе за принципом «будь-яка сутність є об'єкт». Його зараховують до об'єктно-орієнтованим, а точніше об'єктним, мов програмування. «Мова заснований на строгій компонентній архітектурі і реалізує передові механізми забезпечення безпеки коду» – так прийнято характеризувати його. Однак скептики сумніваються як мінімум в його безпеки.

Прихильники C# називають його найбільш мультипарадигменным, універсальним, сучасним і зручним у використанні мовою програмування. Враховуючи той факт, що за ним стоїть платформа Microsoft .NET, число таких прихильників досить велика.
Читати далі →

Корисні доповнення до ReSharper



Всім привіт!

Як я помітив, чимало людей використовує ReSharper, однак повністю ігнорують його розширення (плагіни). У цій статті я опишу ті з них, які здалися мені корисними.
Назви розширень клікабельні і ведуть на їх детальний опис.

Читати далі →

Перевіряємо Microsoft Code Contracts



Ми успішно створили і продовжуємо розвивати аналізатор PVS-Studio для мови C/C++. З часом стало зрозуміло, що багато з реалізованих діагностик ніяк не пов'язані з конкретною мовою програмування, і тоді ми вирішили спробувати застосувати свій досвід до іншої мови програмування C#. У даній статті буде розказано про перевірку проекту Code Contracts від Microsoft з допомогою нового C# аналізатора.

Про проект MS Code Contracts
Code Contracts надають метод, з допомогою якого висловлюються припущення про коді програми .NET додатках. Контракти приймають форму передумов, марнослівями і інваріанти об'єкта, і виступають у ролі перевіреної документації ваших зовнішніх і внутрішніх API. Контракти використовуються для того, щоб поліпшити процес тестування за допомогою перевірки під час виконання програми, дозволяючи проводити верифікацію статичну контрактів і генерацію документації.

Читати далі →

C# WPF – Власний ListView з блекджеком і ...»

Введення
Визнаємо все, що «DotNetFramework» — геніальний винахід Microsoft, яка надає значний набір готових компонентів і дозволяє будувати ЗА принципом «LEGO». Але не завжди їх достатньо, особливо для специфічних завдань, що вимагають або «особливого швидкодії», або «особливого способу взаємодії»… І Microsoft дає можливість створювати свої компоненти. Отже, хочу поділитися досвідом створення власного ListView-компонента (будемо називати так вигляд компонентів, які виводять для перегляду список яких-небудь об'єктів) — «по-швидкому» (в умовах, коли треба було ще вчора).

Читати далі →