Как Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π² legacy ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π΅ Π΄Π΅ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

Как Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π² legacy ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π΅ Π΄Π΅ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
ΠŸΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π»Π΅Π³ΠΊΠΎ. А Π²ΠΎΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, особСнно Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ большого старого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, потрСбуСтся ΡƒΠΌΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ Π΄Π΅ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ ΠΊ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ статичСского Π°Π½Π°Π»ΠΈΠ·Π° Π² процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ CI/CD.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

НСдавно ΠΌΠΎΡ‘ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ»Π° публикация "Getting Started With Static Analysis Without Overwhelming the Team". Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, это Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоит ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, Π² Π½Π΅ΠΉ Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ·Π²ΡƒΡ‡Π°Π»ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΊΠ°ΠΊ Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ· Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с большим количСством legacy ΠΊΠΎΠ΄Π°. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ говорится, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΈΡ€ΠΈΡ‚ΡŒΡΡ с тСхничСским Π΄ΠΎΠ»Π³ΠΎΠΌ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π½ΠΎ Π½Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с этим тСхничСским Π΄ΠΎΠ»Π³ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΌ.

Наша ΠΊΠΎΠΌΠ°Π½Π΄Π° PVS-Studio ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ свой взгляд Π½Π° эту Ρ‚Π΅ΠΌΡƒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° внСдрСния статичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ ΠΊΠ°ΠΊ Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ постСпСнно ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ тСхничСский Π΄ΠΎΠ»Π³.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°

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

ВсС статичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹Π΄Π°ΡŽΡ‚ Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания. Π’Π°ΠΊΠΎΠ²Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ статичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π°, ΠΈ с Π½Π΅ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ нСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС это Π½Π΅Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ Π·Π°Π΄Π°Ρ‡Π°, Ρ‡Ρ‚ΠΎ подтвСрТдаСтся Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠΎΠΉ Райса [2]. НС ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ машинного обучСния [3]. Если Π΄Π°ΠΆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π΅ всСгда ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΎΡˆΠΈΠ±ΠΎΡ‡Π΅Π½ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ΄, Ρ‚ΠΎ Π½Π΅ стоит ΠΆΠ΄Π°Ρ‚ΡŒ этого ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ :).

Π›ΠΎΠΆΠ½Ρ‹Π΅ срабатывания Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ссли статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΡƒΠΆΠ΅ настроСн:

  • ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»;
  • ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ диагностики;
  • Если ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ C ΠΈΠ»ΠΈ C++, Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ макросы, содСрТащиС спСцифичСскиС конструкции, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ бСсполСзныС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ мСстС, Π³Π΄Π΅ Ρ‚Π°ΠΊΠΈΠ΅ макросы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ;
  • Π Π°Π·ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ собствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ дСйствия Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ систСмным функциям (свой Π°Π½Π°Π»ΠΎΠ³ memcpy ΠΈΠ»ΠΈ printf) [4];
  • Π’ΠΎΡ‡Π΅Ρ‡Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания;
  • И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ порядка 10-15% [5]. Π”Ρ€ΡƒΠ³ΠΈΠΌ словами, 9 ΠΈΠ· 10 ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² ΠΊΠΎΠ΄Π΅ ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π° Β«ΠΊΠΎΠ΄ с ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π·Π°ΠΏΠ°Ρ…ΠΎΠΌΒ». Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ρ‚Π°ΠΊΠΎΠΉ сцСнарий ΠΊΡ€Π°ΠΉΠ½Π΅ приятСн, ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ являСтся настоящим Π΄Ρ€ΡƒΠ³ΠΎΠΌ программиста.

Как Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π² legacy ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π΅ Π΄Π΅ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² большом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ совсСм иная. Анализатор Π²Ρ‹Π΄Π°Ρ‘Ρ‚ сотни ΠΈΠ»ΠΈ тысячи ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π° legacy ΠΊΠΎΠ΄. Π§Ρ‚ΠΎ ΠΈΠ· этих ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΏΠΎ Π΄Π΅Π»Ρƒ, Π° Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚, быстро ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π‘Π΅ΡΡ‚ΡŒ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ со всСми этими прСдупрСТдСниями Π½Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ основная Ρ€Π°Π±ΠΎΡ‚Π° Π² этом случаС остановится Π½Π° Π΄Π½ΠΈ ΠΈΠ»ΠΈ Π½Π΅Π΄Π΅Π»ΠΈ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС Ρ‚Π°ΠΊΠΎΠΉ сцСнарий. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство diff-ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ портят ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. А быстрая массовая ΠΏΡ€Π°Π²ΠΊΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ количСства Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΊΠΎΠ΄Π΅ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ Π²Ρ‹Π»ΡŒΠ΅Ρ‚ΡΡ Π² Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ ΠΈ ошибки.

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

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π°ΠΆΠ΅ Π½Π΅ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ошибки всё Ρ€Π°Π²Π½ΠΎ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ошибками. А ΠΈΠ½ΠΎΠ³Π΄Π° Π·Π° ошибкой ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒΡΡ настоящая ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ. Однако, Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ всё ΠΈ днями/нСдСлями Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слабо ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ сСбя, выглядит ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ.

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

По-своСму, ΠΎΠ½ΠΈ ΠΏΡ€Π°Π²Ρ‹. Они ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ для Π½Π°Ρ‡Π°Π»Π° ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ всСх этих ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ смогут ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΎΡ‚ рСгулярного использования Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Π½ΠΎΠ²Ρ‹Π΅ прСдупрСТдСния Π±ΡƒΠ΄ΡƒΡ‚ просто Ρ‚ΠΎΠ½ΡƒΡ‚ΡŒ Π² старых, ΠΈ Π½Π° Π½ΠΈΡ… Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Π—Π΄Π΅ΡΡŒ Ρ‚Π° ΠΆΠ΅ аналогия, Ρ‡Ρ‚ΠΎ ΠΈ с прСдупрСТдСниями компилятора. НСспроста Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ компилятора Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ 0. Если ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ 1000, Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… станСт 1001, Π½Π° это Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π΄Π° ΠΈ Π½Π΅ понятно, Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ это самоС Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅.

Как Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π² legacy ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π΅ Π΄Π΅ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
Π‘Π°ΠΌΠΎΠ΅ Ρ…ΡƒΠ΄ΡˆΠ΅Π΅ Π² этой истории, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ свСрху Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ заставит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ с ΠΈΡ… Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния появится Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π±ΡŽΡ€ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, которая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚. ΠžΡ‚Ρ‡Ρ‘Ρ‚Ρ‹ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΈ всё использованиС Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Β«Π½Π° Π±ΡƒΠΌΠ°Π³Π΅Β». Π’.Π΅. Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ· встроСн Π² DevOps процСсс, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΡ‚ этого Π½ΠΈΠΊΠΎΠΌΡƒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·Ρ‹ Π½Π΅Ρ‚. ΠœΡ‹ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ истории ΠΏΡ€ΠΈ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ Π½Π° стСндах ΠΎΡ‚ посСтитСлСй ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π΄ΠΎΠ»Π³ΠΎ, Ссли Π½Π΅ Π½Π° всСгда, ΠΎΡ‚Π±ΠΈΡ‚ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Ρƒ программистов ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ с инструмСнтами статичСского Π°Π½Π°Π»ΠΈΠ·Π°.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΈ устранСниС тСхничСского Π΄ΠΎΠ»Π³Π°

На самом Π΄Π΅Π»Π΅, Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного ΠΈ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ Π²ΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ статичСского Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°ΠΆΠ΅ Π² большой старый ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

CI/CD

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

Но вСрнСмся ΠΊ вопросу большого количСства Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… этапах внСдрСния инструмСнтов Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π°.

Ѐиксация ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ тСхничСского Π΄ΠΎΠ»Π³Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΎΠ²Ρ‹ΠΌΠΈ прСдупрСТдСниями

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ коммСрчСскиС статичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²Ρ‹Π΅ прСдупрСТдСния, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° различаСтся, Π½ΠΎ ΡΡƒΡ‚ΡŒ ΠΎΠ΄Π½Π°. Π’ статичСском Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ PVS-Studio эта Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ быстро Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·, ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ PVS-Studio Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ массового подавлСния ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ [6]. ΠžΠ±Ρ‰Π°Ρ идСя Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ запустил Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» мноТСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. Π Π°Π· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ‚, ΠΆΠΈΠ², развиваСтся ΠΈ приносит дСньги, Ρ‚ΠΎ, скорСС всСго, Π² ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π½Π° критичСскиС Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, критичСскиС Π±Π°Π³ΠΈ Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΡƒΠΆΠ΅ ΠΏΠΎΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡ€ΠΎΠ³ΠΈΠΌΠΈ способами ΠΈΠ»ΠΈ благодаря Ρ„ΠΈΠ΄Π±Π΅ΠΊΡƒ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². БоотвСтствСнно, всё, Ρ‡Ρ‚ΠΎ сСйчас Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ тСхничСским Π΄ΠΎΠ»Π³ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ сразу.

МоТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ PVS-Studio ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эти прСдупрСТдСния ΠΏΠΎΠΊΠ° Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ (ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ тСхничСский Π΄ΠΎΠ»Π³ Π½Π° ΠΏΠΎΡ‚ΠΎΠΌ), ΠΈ ΠΎΠ½ большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡ… ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ. Анализатор создаёт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π³Π΄Π΅ сохраняСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠΊΠ° нСинтСрСсных ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ PVS-Studio Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ прСдупрСТдСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, всё это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡƒΠΌΠ½ΠΎ. Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Π°ΠΉΠ»Π° с исходным ΠΊΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° пустая строка, Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, ΠΏΠΎ сути, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнилось, ΠΈ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ»Ρ‡Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Π² систСму контроля вСрсий. Π€Π°ΠΉΠ» большой, Π½ΠΎ это Π½Π΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ часто Π΅Π³ΠΎ Π·Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ смысла Π½Π΅Ρ‚.

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

Π˜Ρ‚Π°ΠΊ, пСрвая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π² большой старый ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π΅ΡˆΠ΅Π½Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с тСхничСским Π΄ΠΎΠ»Π³ΠΎΠΌ.

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ошибок ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³

Π‘Π°ΠΌΠΎΠ΅ простоС ΠΈ СстСствСнноС β€” это Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π½Π° Ρ€Π°Π·Π±ΠΎΡ€ массово ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ постСпСнно Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ. Π“Π΄Π΅-Ρ‚ΠΎ слСдуСт ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ошибки Π² ΠΊΠΎΠ΄Π΅, Π³Π΄Π΅-Ρ‚ΠΎ провСсти Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π΅ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΌ. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

if (a = b)

На ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ругаСтся Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π‘++ компиляторов ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ высока Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ (a == b). Но сущСствуСт нСгласноС соглашСниС, ΠΈ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Ссли стоят Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ скобки, Ρ‚ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ программист ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ написал Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄, ΠΈ Ρ€ΡƒΠ³Π°Ρ‚ΡŒΡΡ Π½Π΅ Π½Π°Π΄ΠΎ. НапримСр, Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ PVS-Studio ΠΊ диагностикС V559 (CWE-481) явно написано, Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строчка Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΈ бСзопасной:

if ((a = b))

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π—Π°Π±Ρ‹Ρ‚ Π»ΠΈ Π² этом C++ ΠΊΠΎΠ΄Π΅ break ΠΈΠ»ΠΈ Π½Π΅Ρ‚?

case A:
  foo();
case B:
  bar();
  break;

Анализатор PVS-Studio выдаст здСсь ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ V796 (CWE-484). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π½Π΅ ошибка, ΠΈ Ρ‚ΠΎΠ³Π΄Π° слСдуСт Π΄Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ подсказку, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ [[fallthrough]] ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, __attribute__((fallthrough)):

case A:
  foo();
  [[fallthrough]];
case B:
  bar();
  break;

МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ измСнСния ΠΊΠΎΠ΄Π° Π½Π΅ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ошибки. Π”Π°, это Ρ‚Π°ΠΊ, Π½ΠΎ выполняСтся Π΄Π²Π° ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… дСйствия. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° избавляСтся ΠΎΡ‚ Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΊΠΎΠ΄ становится Π±ΠΎΠ»Π΅Π΅ понятным для людСй, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ…ΡΡ Π΅Π³ΠΎ сопровоТдСниСм. И это ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ! Π Π°Π΄ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ этого ΡƒΠΆΠ΅ стоит ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ΅Π»ΠΊΠΈΠΉ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ стал понятнСй ΠΈ Π»Π΅Π³Ρ‡Π΅ Π² сопровоТдСнии. Π Π°Π· Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ нСпонятно, Π½ΡƒΠΆΠ΅Π½ Β«breakΒ» ΠΈΠ»ΠΈ Π½Π΅Ρ‚, это Π±ΡƒΠ΄Π΅Ρ‚ нСпонятно ΠΈ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ-программистам.

Помимо исправлСния ошибок ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Π°Π²Π»ΡΡ‚ΡŒ явно Π»ΠΎΠΆΠ½Ρ‹Π΅ прСдупрСТдСния Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. КакиС-Ρ‚ΠΎ Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ диагностики ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. НапримСр, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ считаСт бСссмыслСнными прСдупрСТдСния V550 ΠΎ сравнСнии Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° float/double. А ΠΊΡ‚ΠΎ-Ρ‚ΠΎ относит ΠΈΡ… ΠΊ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΈ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ изучСния [7]. КакиС прСдупрСТдСния ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π° ΠΊΠ°ΠΊΠΈΠΌ Π½Π΅Ρ‚, Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

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

Π’Π°ΠΊΠΆΠ΅, ΠΌΡ‹ всСгда ΠΏΠΎΠΌΠΎΠ³Π°Π΅ΠΌ нашим ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ PVS-Studio, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ слоТности. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΈ случаС, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ сами устраняли Π»ΠΎΠΆΠ½Ρ‹Π΅ прСдупрСТдСния ΠΈ исправляли ошибки [8]. На всякий случай Ρ€Π΅ΡˆΠΈΠ» ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ сотрудничСства :).

ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ…Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊΠ°

Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ интСрСсный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ постСпСнно ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ качСство ΠΊΠΎΠ΄Π°, устраняя ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ статичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Π‘ΡƒΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ.

Как Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π² legacy ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π΅ Π΄Π΅ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

ЀиксируСтся количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. Quality gate настраиваСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ количСство срабатываний. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ запускаСтся процСсс постСпСнного ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства срабатываний Π·Π° счёт настройки Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΏΡ€Π°Π²ΠΊΠΈ ошибок.

Π”Π°ΠΆΠ΅ Ссли Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡ…ΠΈΡ‚Ρ€ΠΈΡ‚ΡŒ ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ quality gate Π½Π΅ благодаря ΡƒΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π° Π·Π° счёт ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ старого стороннСго ΠΊΠΎΠ΄Π°, это Π½Π΅ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ. Всё Ρ€Π°Π²Π½ΠΎ Ρ…Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊ проворачиваСтся Π² ΠΎΠ΄Π½Ρƒ сторону, ΠΈ постСпСнно количСство Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ. Π”Π°ΠΆΠ΅ Ссли Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π΅ хочСтся ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свои собствСнныС Π½ΠΎΠ²Ρ‹Π΅ Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹, Π΅ΠΌΡƒ всё Ρ€Π°Π²Π½ΠΎ придётся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π² сосСднСм ΠΊΠΎΠ΄Π΅. Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π»Π΅Π³ΠΊΠΈΠ΅ способы ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ, ΠΈ наступаСт ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ настоящиС ошибки.

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

Π£ Π°Π²Ρ‚ΠΎΡ€Π° ΡΡ‚Π°Ρ‚ΡŒΠΈ Π΅ΡΡ‚ΡŒ ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ Π½Π° эту Ρ‚Π΅ΠΌΡƒ: "НСпрСрывный статичСский Π°Π½Π°Π»ΠΈΠ·".

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

НадСюсь, послС этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½Π΅Π΅ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ инструмСнты статичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ захотят Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΠΈΡ… Π² процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Если Ρƒ вас ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ вопросы, ΠΌΡ‹ всСгда Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ нашСго статичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio ΠΈ ΠΏΠΎΠΌΠΎΡ‡ΡŒ с Π΅Π³ΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ сомнСния, смоТСт Π»ΠΈ статичСский Π°Π½Π°Π»ΠΈΠ· Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½ ΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½. Π― постарался Ρ€Π°Π·Π²Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚Π°ΠΊΠΈΡ… сомнСний Π² ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Β«ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π² процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° PVS-StudioΒ» [9].

Бпасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ PVS-Studio.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылки

  1. АндрСй ΠšΠ°Ρ€ΠΏΠΎΠ². Как быстро ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ интСрСсныС прСдупрСТдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ PVS-Studio для C ΠΈ C++ ΠΊΠΎΠ΄Π°?
  2. Wikipedia. Π’Π΅ΠΎΡ€Π΅ΠΌΠ° Райса.
  3. АндрСй ΠšΠ°Ρ€ΠΏΠΎΠ², Виктория Π₯Π°Π½ΠΈΠ΅Π²Π°. ИспользованиС машинного обучСния Π² статичСском Π°Π½Π°Π»ΠΈΠ·Π΅ исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.
  4. PVS-Studio. ДокумСнтация. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ настройка диагностик.
  5. АндрСй ΠšΠ°Ρ€ΠΏΠΎΠ². Π₯арактСристики Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ EFL Core Libraries, 10-15% Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний.
  6. PVS-Studio. ДокумСнтация. МассовоС ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ сообщСний Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.
  7. Иван ΠΠ½Π΄Ρ€ΡΡˆΠΈΠ½. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ статичСский Π°Π½Π°Π»ΠΈΠ· Π½Π° своСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ симулятора рСнтгСнэндоваскулярной Ρ…ΠΈΡ€ΡƒΡ€Π³ΠΈΠΈ.
  8. ПавСл Π•Ρ€Π΅ΠΌΠ΅Π΅Π², Бвятослав Размыслов. Как ΠΊΠΎΠΌΠ°Π½Π΄Π° PVS-Studio ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»Π° ΠΊΠΎΠ΄ Unreal Engine.
  9. АндрСй ΠšΠ°Ρ€ΠΏΠΎΠ². ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π² процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° PVS-Studio.

Как Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π² legacy ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π΅ Π΄Π΅ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ с англоязычной Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ, Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ссылку Π½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄: Andrey Karpov. How to introduce a static code analyzer in a legacy project and not to discourage the team.

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

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