БтатичСский Π°Π½Π°Π»ΠΈΠ· – ΠΎΡ‚ знакомства Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ

Устав ΠΎΡ‚ нСскончаСмого code review ΠΈΠ»ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Π²Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌΠΈ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π΅ΡˆΡŒΡΡ, ΠΊΠ°ΠΊ Π±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ сСбС Тизнь. И Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ поискав, Π½Ρƒ ΠΈΠ»ΠΈ случайно Π½Π°Ρ‚ΠΊΠ½ΡƒΠ²ΡˆΠΈΡΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ волшСбноС словосочСтаниС: "БтатичСский Π°Π½Π°Π»ΠΈΠ·". Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с вашим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

БтатичСский Π°Π½Π°Π»ΠΈΠ· – ΠΎΡ‚ знакомства Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
БобствСнно говоря, Ссли Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ соврСмСнном языкС, Ρ‚ΠΎΠ³Π΄Π°, Π΄Π°ΠΆΠ΅ Π½Π΅ Π΄ΠΎΠ³Π°Π΄Ρ‹Π²Π°ΡΡΡŒ ΠΎΠ± этом, Π²Ρ‹ пропускали Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ любой соврСмСнный компилятор прСдоставляСт ΠΏΡƒΡΡ‚ΡŒ ΠΈ ΠΊΡ€ΠΎΡ…ΠΎΡ‚Π½Ρ‹ΠΉ, Π½ΠΎ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… Π² ΠΊΠΎΠ΄Π΅. НапримСр, компилируя C++ ΠΊΠΎΠ΄ Π² Visual Studio Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

БтатичСский Π°Π½Π°Π»ΠΈΠ· – ΠΎΡ‚ знакомства Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
Π’ этом Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ пСрСмСнная var Ρ‚Π°ΠΊ ΠΈ Π½Π΅ Π±Ρ‹Π»Π° использована Π½ΠΈΠ³Π΄Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π²Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда пользовались ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠΈΠΌ статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄Π°. Однако, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Coverity, Klocwork ΠΈΠ»ΠΈ PVS-Studio, прСдоставляСмыС компилятором прСдупрСТдСния ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° нСбольшой спСктр ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ навСрняка, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ статичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с этой ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ статичСский Π°Π½Π°Π»ΠΈΠ·?

Π’ Π΄Π²ΡƒΡ… словах: ускорСниС ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅.

БтатичСский Π°Π½Π°Π»ΠΈΠ· позволяСт Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΉΠΌΡƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² ΠΊΠΎΠ΄Π΅: начиная ΠΎΡ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования конструкций языка, заканчивая ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ°ΠΌΠΈ. НапримСр, вмСсто

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

Π’Ρ‹ написали ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² послСднСй строкС появилась ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ°. НапримСр, PVS-Studio Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅:

V537 Consider reviewing the correctness of 'y' item's usage.

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ‹ΠΊΠ°Ρ‚ΡŒ Π² эту ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρ€ΡƒΠΊΠ°ΠΌΠΈ, Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Compiler Explorer: *ΠΊΠ»ΠΈΠΊ*.

И ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Π½Π΅ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ внимания Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ участки ΠΊΠΎΠ΄Π° сразу ΠΈ ΠΈΠ·-Π·Π° этого ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ΅ΡΡ‚ΡŒ Π·Π° ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ Π½Π° Π΄ΠΎΠ±Ρ€Ρ‹ΠΉ час, нСдоумСвая, ΠΏΠΎΡ‡Π΅ΠΌΡƒ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ странно.

Однако это явная ошибка. А Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ написал Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π°Π±Ρ‹Π» ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ языка? Или ΠΆΠ΅ вовсС допустил Π² ΠΊΠΎΠ΄Π΅ undefined behavior? К соТалСнию, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ случаи ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ‹Π΄Π΅Π½Π½Ρ‹ ΠΈ львиная Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ тратится Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ спСцифично Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ, Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈΠ»ΠΈ undefined behavior.

ИмСнно для этих ситуаций ΠΈ появился статичСский Π°Π½Π°Π»ΠΈΠ·. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ Π΅ΠΌΡƒ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, ΠΊ Ρ‡Π΅ΠΌΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΈ ΠΊΠ°ΠΊ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ: *ΠΊΠ»ΠΈΠΊ*.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ интСрСсных ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² ΡΡ‚Π°Ρ‚ΡŒΡΡ…:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈ ΡƒΠ±Π΅Π΄ΠΈΠ²ΡˆΠΈΡΡŒ Π² пользС статичСского Π°Π½Π°Π»ΠΈΠ·Π°, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π΄Π΅Π»Π΅. Но с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ? Как ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ инструмСнт Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚? И ΠΊΠ°ΠΊ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с Π½ΠΈΠΌ? На эти вопросы Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½ΠΈΠΆΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. БтатичСский Π°Π½Π°Π»ΠΈΠ· Π½Π΅ замСняСт ΠΈ Π½Π΅ отмСняСт Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Π²Π΅Ρ‰ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±Π·ΠΎΡ€Ρ‹ ΠΊΠΎΠ΄Π°. Он дополняСт этот процСсс, помогая Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ, нСточности, опасныС конструкции. Намного ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Π΅Π΅ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Π·ΠΎΡ€Π°Ρ… ΠΊΠΎΠ΄Π° Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… ΠΈ понятности ΠΊΠΎΠ΄Π°, Π° Π½Π΅ Π½Π°Π΄ высматриваниСм Π½Π΅ Ρ‚Π°ΠΌ поставлСнной скобки ΠΈΠ»ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ скучныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сравнСния.

0. Знакомство с инструмСнтом

Всё начинаСтся с ΠΏΡ€ΠΎΠ±Π½ΠΎΠΉ вСрсии. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, слоТно Ρ€Π΅ΡˆΠΈΡ‚ΡŒΡΡ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π² процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ссли Π½ΠΈΠΊΠΎΠ³Π΄Π° Π΄ΠΎ этого Π½Π΅ Π²ΠΈΠ΄Π΅Π» инструмСнта Π²ΠΆΠΈΠ²ΡƒΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ стоит ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ.

Π§Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ Π½Π° этом этапС:

  • КакиС Π΅ΡΡ‚ΡŒ способы взаимодСйствия с Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ;
  • БовмСстим Π»ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ с вашСй срСдой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ;
  • КакиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΅ΡΡ‚ΡŒ сСйчас Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ установили сСбС всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ стоит Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Windows, Linux, macOS). Π’ случаС с PVS-Studio Π² Visual Studio Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ (кликабСльно):

БтатичСский Π°Π½Π°Π»ΠΈΠ· – ΠΎΡ‚ знакомства Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с большой ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ статичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹Π΄Π°ΡŽΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. НСт нСобходимости ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… всС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° самыС интСрСсныС прСдупрСТдСния ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ нСобходимости. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ достовСрныС сообщСния. Π’ ΠΏΠ»Π°Π³ΠΈΠ½Π΅ PVS-Studio для Visual Studio это дСлаСтся Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ уровням ΠΈ катСгориям ошибок. Для Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ High ΠΈ General (Ρ‚ΠΎΠΆΠ΅ кликабСльно):

БтатичСский Π°Π½Π°Π»ΠΈΠ· – ΠΎΡ‚ знакомства Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, 178 ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ нСсколько тысяч…

Π’ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ°Ρ… Medium ΠΈ Low часто ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ прСдупрСТдСния, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² эти ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ занСсСны Ρ‚Π΅ диагностики, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ (Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ ΡƒΡ€ΠΎΠ²Π½ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ΄ Windows ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΡƒΡ‚: *ΠΊΠ»ΠΈΠΊ*.

УспСшно просмотрСв самыС интСрСсныС ошибки (ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ исправив ΠΈΡ…) стоит ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ прСдупрСТдСния. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ прСдупрСТдСния Π½Π΅ Ρ‚Π΅Ρ€ΡΠ»ΠΈΡΡŒ срСди старых. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ – это ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ для программиста, Π° Π½Π΅ список для Π±Π°Π³ΠΎΠ². πŸ™‚

1. Автоматизация

ПослС знакомства наступаСт врСмя настройки ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² CI. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ программисты Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ программист ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· ΠΈΠ»ΠΈ вовсС Π½Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ. Для этого Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ всСго, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΠΌΠΎΠ³ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΎΠ±Ρ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π§Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапС:

  • КакиС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ прСдоставляСт инструмСнт;
  • БовмСстим Π»ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ с вашСй сборочной систСмой.

Π’Π°ΠΊ ΠΊΠ°ΠΊ идСальной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅ сущСствуСт, ΠΈΠ½ΠΎΠ³Π΄Π° приходится ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ. Π­Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΈ ΠΌΡ‹ Ρ€Π°Π΄Ρ‹ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ. πŸ™‚

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ приступим ΠΊ сСрвисам Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ (CI). Π›ΡŽΠ±ΠΎΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π² Π½ΠΈΡ… Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Для этого Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап Π² pipeline, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ находится послС сборки ΠΈ ΡŽΠ½ΠΈΡ‚-тСстов. ДСлаСтся это ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚. НапримСр, PVS-Studio прСдоставляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹:

  • PVS-Studio_Cmd.exe (Π°Π½Π°Π»ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, C#, C++ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Windows)
  • CLMonitor.exe (ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ компиляции)
  • pvs-studio-analyzer (Π°Π½Π°Π»ΠΈΠ· C++ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Linux / macOS)
  • pvs-studio-dotnet (Π°Π½Π°Π»ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, C# ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Linux / macOS)
  • pvs-studio.jar (Π°Π½Π°Π»ΠΈΠ· Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²)
  • PlogConverter (ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π°)

Для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π² CI Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ Π²Π΅Ρ‰ΠΈ:

  • Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€;
  • Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·;
  • Π”ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

НапримСр, для установки PVS-Studio Π½Π° Linux (Debian-base) Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

wget -q -O - https://files.viva64.com/etc/pubkey.txt 
    | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list
  
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio

Π’ систСмах ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows отсутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:

PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΈ PVS-Studio Π² систСмах ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ *Ρ‚ΡƒΡ‚*.

ПослС установки Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСпосрСдствСнно Π°Π½Π°Π»ΠΈΠ·. Однако Π΄Π΅Π»Π°Ρ‚ΡŒ это рСкомСндуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡˆΠ»Π° компиляция ΠΈ тСсты. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ для статичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ трСбуСтся Π² Π΄Π²Π° Ρ€Π°Π·Π° большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ для компиляции.

Π’Π°ΠΊ ΠΊΠ°ΠΊ способ запуска зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ особСнностСй ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, я ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для C++ (Linux) Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π°Π½Π°Π»ΠΈΠ·, Π° вторая ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Π² тСкстовый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π΅Π³ΠΎ Π½Π° экран ΠΈ Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ 0 ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π² случаС наличия ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ сборки ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. Однако, Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ -w ΠΈ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сборку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ прСдупрСТдСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ВСкстовый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ β€” это Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Он приводится просто для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π±ΠΎΠ»Π΅Π΅ интСрСсный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° β€” FullHtml. Он позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ настройку Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° CI ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ "PVS-Studio ΠΈ Continuous Integration" (Windows) ΠΈΠ»ΠΈ "Как Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ PVS-Studio Π² Travis CI" (Linux).

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π²Ρ‹ настроили Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π½Π° сборочном сСрвСрС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π·Π°Π»ΠΈΠ» Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ°Π΄Π°Ρ‚ΡŒ этап ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΈ Π²Ρ‹ смоТСтС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΎΠ΄Π½Π°ΠΊΠΎ это Π½Π΅ совсСм ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эффСктивнСС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ слияниС Π²Π΅Ρ‚ΠΎΠΊ, Π° Π΄ΠΎ Π½Π΅Π³ΠΎ, Π½Π° этапС pull request'Π°.

Π’ Ρ†Π΅Π»ΠΎΠΌ настройка Π°Π½Π°Π»ΠΈΠ·Π° pull request'Π° Π½Π΅ сильно отличаСтся ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ запуска Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° CI. Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ нСобходимости ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, запросив Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ git:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ Π½Π° Π²Ρ…ΠΎΠ΄ этот список Ρ„Π°ΠΉΠ»ΠΎΠ². НапримСр, Π² PVS-Studio это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„Π»Π°Π³Π° -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ Π°Π½Π°Π»ΠΈΠ· pull request'ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ *Ρ‚ΡƒΡ‚*. Π”Π°ΠΆΠ΅ Ссли вашСго CI Π½Π΅Ρ‚ Π² спискС ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ сСрвисов, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π», посвящСнный Ρ‚Π΅ΠΎΡ€ΠΈΠΈ этого Ρ‚ΠΈΠΏΠ° Π°Π½Π°Π»ΠΈΠ·Π°.

Настроив Π°Π½Π°Π»ΠΈΠ· pull request'ΠΎΠ² Π²Ρ‹ смоТСтС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТащиС прСдупрСТдСния ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Ρ‚Π΅ΠΌ самым создав Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ смоТСт ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡ΡŒ.

Π­Ρ‚ΠΎ всё бСзусловно Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС прСдупрСТдСния Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС. НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ статичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, Π½ΠΎ ΠΈ ΠΎΡ‚ ΡŽΠ½ΠΈΡ‚-тСстов ΠΈΠ»ΠΈ ΠΎΡ‚ динамичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Для это ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сСрвисы ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹. PVS-Studio, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ»Π°Π³ΠΈΠ½ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² SonarQube.

2. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя установки ΠΈ настройки Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° для повсСднСвного использования ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ‹ ΡƒΠΆΠ΅ познакомились с большСй Ρ‡Π°ΡΡ‚ΡŒΡŽ способов Ρ€Π°Π±ΠΎΡ‚Ρ‹, поэтому это ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ самой Π»Ρ‘Π³ΠΊΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ.

Как самый простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ сами ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. Однако это Π·Π°ΠΉΠΌΡ‘Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΎΡ‚Π²Π»Π΅Ρ‡Ρ‘Ρ‚ ΠΈΡ… ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот процСсс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ установщик ΠΈ Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ. Для PVS-Studio Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ установки. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, всСгда Π΅ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Chocolatey (Windows), Homebrew (macOS) ΠΈΠ»ΠΈ дСсятки Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² для Linux.

Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Visual Studio, IDEA, Rider etc.

3. Π•ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ΅ использованиС

На этом этапС ΠΏΠΎΡ€Π° ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ слов ΠΎ способах ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΈ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΌ использовании. ΠŸΠΎΠ»Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ часто Π»ΠΈ ΠΌΡ‹ мСняСм ΠΊΠΎΠ΄ Ρ€Π°Π·ΠΎΠΌ Π²ΠΎ всём ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅? Π•Π΄Π²Π° Π»ΠΈ сущСствуСт Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹ΠΉ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³, Ρ‡Ρ‚ΠΎ сразу Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅Ρ‚ всю ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ измСняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Π·Π° Ρ€Π°Π· Ρ€Π΅Π΄ΠΊΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ дСсяток, поэтому ΠΈΡ… ΠΈ Π΅ΡΡ‚ΡŒ смысл Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Для ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ситуации сущСствуСт Ρ€Π΅ΠΆΠΈΠΌ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. Волько Π½Π΅ ΠΏΡƒΠ³Π°ΠΉΡ‚Π΅ΡΡŒ, это Π½Π΅ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ инструмСнт. Π­Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΈΡ… зависимости, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ это происходит автоматичСски послС сборки, Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² IDE c установлСнным ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ.

Π’ случаС, Ссли Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Π² Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‚ΠΎ сообщит ΠΎΠ± этом ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. НапримСр, PVS-Studio скаТСт Π²Π°ΠΌ ΠΎΠ± этом ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ оповСщСния:

БтатичСский Π°Π½Π°Π»ΠΈΠ· – ΠΎΡ‚ знакомства Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
Π‘Π°ΠΌΠΎ собой нСдостаточно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт. НуТно ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΈΠΌ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈ ΠΊΠ°ΠΊ это Π΅ΡΡ‚ΡŒ. Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΡ€ΠΎ быстрый старт для PVS-Studio, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Ρ‹ Π²Ρ‹ смоТСтС Π½Π°ΠΉΡ‚ΠΈ для любого ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ инструмСнта:

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π΄Π°ΡŽΡ‚ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для повсСднСвного использования ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ Π½Π΅ ΠΎΡ‚Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. πŸ™‚

Π•Ρ‰Ρ‘ Π½Π° этапС знакомства с инструмСнтом ΠΌΡ‹ ΠΏΠΎΠ΄Π°Π²ΠΈΠ»ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π²ΠΎ врСмя ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… запусков. Π£Π²Ρ‹, Π½ΠΎ статичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹, поэтому врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹Π΄Π°ΡŽΡ‚ Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания. ΠŸΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»Π΅Π³ΠΊΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΏΠ»Π°Π³ΠΈΠ½Π΅ PVS-Studio для Visual Studio достаточно Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ:

БтатичСский Π°Π½Π°Π»ΠΈΠ· – ΠΎΡ‚ знакомства Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ…. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Если Π»ΠΎΠΆΠ½ΠΎΠ΅ срабатываниС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… обновлСниях Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ€Π°Π·ΠΎΠΌ становится всё мСньшС ΠΈ мСньшС спСцифичных для вашСй ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний.

ПослС ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ

Π’ΠΎΡ‚ ΠΌΡ‹ ΠΈ ΠΏΡ€ΠΎΡˆΠ»ΠΈ всС этапы ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ статичСского Π°Π½Π°Π»ΠΈΠ·Π° Π² процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. НСсмотря Π½Π° Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ настройки ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… инструмСнтов Π½Π° CI, самым Π³Π»Π°Π²Π½Ρ‹ΠΌ мСстом запуска являСтся ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π’Π΅Π΄ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ – это Π½Π΅ ΡΡƒΠ΄ΡŒΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π³Π΄Π΅-Ρ‚ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΡ‚ вас, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ годится. Напротив, это ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подсказываСт, Ссли Π²Ρ‹ устали ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚, Ссли Π²Ρ‹ ΠΎ Ρ‡Ρ‘ΠΌ-Π»ΠΈΠ±ΠΎ Π·Π°Π±Ρ‹Π»ΠΈ.

ΠŸΡ€Π°Π²Π΄Π° Π±Π΅Π· рСгулярного использования статичСский Π°Π½Π°Π»ΠΈΠ· вряд Π»ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ упростит Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. Π’Π΅Π΄ΡŒ самая Π΅Π³ΠΎ главная польза для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π² поискС слоТных ΠΈ спорных участков ΠΊΠΎΠ΄Π°, сколько Π² Ρ€Π°Π½Π½Π΅ΠΌ ΠΈΡ… ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π°Π²ΠΊΠΈ ΡƒΡˆΠ»ΠΈ Π½Π° тСстированиС, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСприятно, Π½ΠΎ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ. БтатичСский Π°Π½Π°Π»ΠΈΠ· ΠΆΠ΅ ΠΏΡ€ΠΈ рСгулярном использовании просматриваСт ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ прямо Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΈ сообщаСт ΠΎ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… мСстах Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΠΊΠΎΠ΄ΠΎΠΌ.

А Ссли Π²Ρ‹ ΠΈΠ»ΠΈ ваши ΠΊΠΎΠ»Π»Π΅Π³ΠΈ всё Π΅Ρ‰Ρ‘ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, стоит Π»ΠΈ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ сСйчас ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΡΡ‚Π°Ρ‚ΡŒΠΈ "ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π² процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° PVS-Studio". Π’ Π½Π΅ΠΉ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Ρ‹ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ опасСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ статичСский Π°Π½Π°Π»ΠΈΠ· Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΡ… врСмя ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

БтатичСский Π°Π½Π°Π»ΠΈΠ· – ΠΎΡ‚ знакомства Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ с англоязычной Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ, Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ссылку Π½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄: Maxim Zvyagintsev. Static Analysis: From Getting Started to Integration.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ