ВнСдряйтС статичСский Π°Π½Π°Π»ΠΈΠ· Π² процСсс, Π° Π½Π΅ ΠΈΡ‰ΠΈΡ‚Π΅ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π³ΠΈ

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ мСня сподвигло большоС количСство ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΎ статичСском Π°Π½Π°Π»ΠΈΠ·Π΅, всё Ρ‡Π°Ρ‰Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° Π³Π»Π°Π·Π°. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это Π±Π»ΠΎΠ³ PVS-studio, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Π΅Ρ‚ сСбя Π½Π° Π₯Π°Π±Ρ€Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±Π·ΠΎΡ€ΠΎΠ² ошибок, Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΈΡ… инструмСнтом Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. НСдавно PVS-studio Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Java, ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ IntelliJ IDEA, Ρ‡Π΅ΠΉ встроСнный Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ являСтся Π½Π° сСгодня, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, самым ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ для Java, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ Π² сторонС.

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

Но Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹Ρ… эликсиров Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚. Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΎ Ρ‡Ρ‘ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ говорят Π² постах Π²ΠΈΠ΄Π° Β«Π²ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΠ΅ ΡˆΡ‚ΡƒΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ наш Ρ€ΠΎΠ±ΠΎΡ‚Β»: Ρ‡Π΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹, Π² Ρ‡Ρ‘ΠΌ ΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Ρ€ΠΎΠ»ΡŒ ΠΈ мСсто Π² процСссС поставки софта, ΠΈ ΠΊΠ°ΠΊ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

ВнСдряйтС статичСский Π°Π½Π°Π»ΠΈΠ· Π² процСсс, Π° Π½Π΅ ΠΈΡ‰ΠΈΡ‚Π΅ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π³ΠΈ
Π₯Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊ (источник: википСдия).

Π§Π΅Π³ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смогут статичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅, с практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Π°Π½Π°Π»ΠΈΠ· исходного ΠΊΠΎΠ΄Π°? ΠœΡ‹ ΠΏΠΎΠ΄Π°Ρ‘ΠΌ Π½Π° Π²Ρ…ΠΎΠ΄ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ исходники, ΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ врСмя (Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ³ΠΎΠ½ тСстов) ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свСдСния ΠΎ нашСй систСмС. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ матСматичСски Π½Π΅ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»ΠΈΠΌΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΡ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ΅ΠΌ лишь довольно ΡƒΠ·ΠΊΠΈΠΉ класс свСдСний.

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

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ статичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»ΠΈΠΌΡ‹Π΅ ограничСния. БтатичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смоТСт Π²ΠΎ всСх случаях ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Β«null pointer exceptionΒ» Π² языках, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null, ΠΈΠ»ΠΈ Π²ΠΎ всСх случаях ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Β«attribute not foundΒ» Π² языках с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Всё, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ самый ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ β€” это Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ частныС случаи, число ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… срСди всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с вашим исходным ΠΊΠΎΠ΄ΠΎΠΌ являСтся, Π±Π΅Π· прСувСличСния, ΠΊΠ°ΠΏΠ»Π΅ΠΉ Π² ΠΌΠΎΡ€Π΅.

БтатичСский Π°Π½Π°Π»ΠΈΠ· β€” это Π½Π΅ поиск Π±Π°Π³ΠΎΠ²

Из Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ слСдуСт Π²Ρ‹Π²ΠΎΠ΄: статичСский Π°Π½Π°Π»ΠΈΠ· β€” это Π½Π΅ срСдство ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Рискну ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ: Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ, ΠΎΠ½ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ Π² ΠΊΠΎΠ΄Π΅ «занятныС» мСста, Π½ΠΎ, скорСС всСго, Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ², Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° качСство Ρ€Π°Π±ΠΎΡ‚Ρ‹ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

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

Π—Π½Π°Ρ‡ΠΈΡ‚ Π»ΠΈ это, Ρ‡Ρ‚ΠΎ статичСский Π°Π½Π°Π»ΠΈΠ· Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅Ρ‚! И Ρ€ΠΎΠ²Π½ΠΎ ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π½Π° ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ Π² стоп-лист «простых» ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ.

БтатичСский Π°Π½Π°Π»ΠΈΠ· β€” это большС, Ρ‡Π΅ΠΌ поиск Π±Π°Π³ΠΎΠ²

На самом Π΄Π΅Π»Π΅, практичСски Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡˆΠΈΡ€Π΅. Π’Π΅Π΄ΡŒ Π² Ρ†Π΅Π»ΠΎΠΌ статичСский Π°Π½Π°Π»ΠΈΠ· β€” это любая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° исходников, осущСствляСмая Π΄ΠΎ ΠΈΡ… запуска. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ:

  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° стиля кодирования Π² ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ смыслС этого слова. Бюда Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° форматирования, Ρ‚Π°ΠΊ ΠΈ поиск использования пустых/Π»ΠΈΡˆΠ½ΠΈΡ… скобок, установка, ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π²Ρ€ΠΎΠ΄Π΅ количСства строк / цикломатичСской слоТности ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Ρ‚. Π΄. β€” всСго, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ затрудняСт Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Π’ Java Ρ‚Π°ΠΊΠΈΠΌ инструмСнтом являСтся Checkstyle, Π² Python β€” flake8. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Β«Π»ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹Β».
  • Анализу ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ исполняСмый ΠΊΠΎΠ΄. Π€Π°ΠΉΠ»Ρ‹ рСсурсов, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ JSON, YAML, XML, .properties ΠΌΠΎΠ³ΡƒΡ‚ (ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹!) Π±Ρ‹Ρ‚ΡŒ автоматичСски провСряСмы Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ. Π’Π΅Π΄ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° ΠΊΠ°ΠΊΠΈΡ…-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π΅ΠΏΠ°Ρ€Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π° структура JSON Π½Π° Ρ€Π°Π½Π½Π΅ΠΌ этапС автоматичСской ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Pull Request, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ исполнСнии тСстов ΠΈΠ»ΠΈ Π² Run time? Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ инструмСнты ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, YAMLlint, JSONLint.
  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ (ΠΈΠ»ΠΈ парсинг для динамичСских языков программирования) β€” это Ρ‚ΠΎΠΆΠ΅ Π²ΠΈΠ΄ статичСского Π°Π½Π°Π»ΠΈΠ·Π°. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, компиляторы способны Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ прСдупрСТдСния, ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… с качСством исходного ΠΊΠΎΠ΄Π°, ΠΈ ΠΈΡ… Π½Π΅ слСдуСт ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
  • Иногда компиляция β€” это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ компиляция исполняСмого ΠΊΠΎΠ΄Π°. НапримСр, Ссли Ρƒ вас докумСнтация Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ AsciiDoctor, Ρ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ прСвращСния Π΅Ρ‘ Π² HTML/PDF ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ AsciiDoctor (Maven plugin) ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ прСдупрСТдСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ссылках. И это β€” вСсомый ΠΏΠΎΠ²ΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Pull Request с измСнСниями Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° правописания β€” Ρ‚ΠΎΠΆΠ΅ Π²ΠΈΠ΄ статичСского Π°Π½Π°Π»ΠΈΠ·Π°. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° aspell способна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ правописаниС Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈ Π² исходных ΠΊΠΎΠ΄Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (коммСнтариях ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ…) Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках программирования, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ C/C++, Java ΠΈ Python. Ошибка правописания Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ β€” это Ρ‚ΠΎΠΆΠ΅ Π΄Π΅Ρ„Π΅ΠΊΡ‚!
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты (ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ β€” см. этот ΠΈ этот Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹), хотя ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² срСдС выполнСния ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… тСстов Ρ‚ΠΈΠΏΠ° pytest, Π½Π° самом Π΄Π΅Π»Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ статичСского Π°Π½Π°Π»ΠΈΠ·Π°, Ρ‚. ΠΊ. Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ исходныС ΠΊΠΎΠ΄Ρ‹ Π² процСссС своСго выполнСния.

Как Π²ΠΈΠ΄ΠΈΠΌ, поиск Π±Π°Π³ΠΎΠ² Π² этом спискС Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ, Π° всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ доступно ΠΏΡƒΡ‚Ρ‘ΠΌ использования бСсплатных open source инструмСнтов.

КакиС ΠΈΠ· этих Ρ‚ΠΈΠΏΠΎΠ² статичСского Π°Π½Π°Π»ΠΈΠ·Π° слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, всС, Ρ‡Π΅ΠΌ большС β€” Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅! Π“Π»Π°Π²Π½ΠΎΠ΅, Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΎ Ρ‡Ρ‘ΠΌ ΠΈ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Ρ€Π΅Ρ‡ΡŒ дальшС.

ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ поставки ΠΊΠ°ΠΊ многоступСнчатый Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΈ статичСский Π°Π½Π°Π»ΠΈΠ· ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ каскад

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠΉ ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€ΠΎΠΉ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ являСтся Ρ‚Ρ€ΡƒΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ (pipeline), ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ‚Π΅ΠΊΠ°ΡŽΡ‚ измСнСния β€” ΠΎΡ‚ измСнСния исходного ΠΊΠΎΠ΄Π° Π΄ΠΎ поставки Π² production. Бтандартная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ этапов этого ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° выглядит Ρ‚Π°ΠΊ:

  1. статичСский Π°Π½Π°Π»ΠΈΠ·
  2. компиляция
  3. ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты
  4. ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты
  5. UI тСсты
  6. ручная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

ИзмСнСния, Π·Π°Π±Ρ€Π°ΠΊΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° N-ΠΎΠΌ этапС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°, Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½Π° этап N+1.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ, Π° Π½Π΅ ΠΈΠ½Π°Ρ‡Π΅? Π’ Ρ‚ΠΎΠΉ части ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°, которая касаСтся тСстирования, тСстировщики ΡƒΠ·Π½Π°ΡŽΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρƒ тСстирования.

ВнСдряйтС статичСский Π°Π½Π°Π»ΠΈΠ· Π² процСсс, Π° Π½Π΅ ΠΈΡ‰ΠΈΡ‚Π΅ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π³ΠΈ
ВСстовая ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Π°. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: ΡΡ‚Π°Ρ‚ΡŒΡ ΠœΠ°Ρ€Ρ‚ΠΈΠ½Π° Π€Π°ΡƒΠ»Π΅Ρ€Π°.

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

Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ аналогию Π² Π²ΠΈΠ΄Π΅ многокаскадной систСмы Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π²ΠΎΠ΄Ρ‹. На Π²Ρ…ΠΎΠ΄ подаётся грязная Π²ΠΎΠ΄Π° (измСнСния с Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°ΠΌΠΈ), Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡ΠΈΡΡ‚ΡƒΡŽ Π²ΠΎΠ΄Ρƒ, всС Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ загрязнСния Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ отсСяны.

ВнСдряйтС статичСский Π°Π½Π°Π»ΠΈΠ· Π² процСсс, Π° Π½Π΅ ΠΈΡ‰ΠΈΡ‚Π΅ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π³ΠΈ
ΠœΠ½ΠΎΠ³ΠΎΡΡ‚ΡƒΠΏΠ΅Π½Ρ‡Π°Ρ‚Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: Wikimedia Commons

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

БтатичСский Π°Π½Π°Π»ΠΈΠ· сам ΠΏΠΎ сСбС Π½Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ качСство ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, ΠΊΠ°ΠΊ «грязСвик» Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ΄Ρƒ ΠΏΠΈΡ‚ΡŒΠ΅Π²ΠΎΠΉ. И Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΠΎΠ±Ρ‰Π΅ΠΉ связкС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ элСмСнтами ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π΅Π³ΠΎ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°. Π₯отя Π² многокаскадном Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ каскады ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ способны ΡƒΠ»ΠΎΠ²ΠΈΡ‚ΡŒ всё Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ β€” ясно, ΠΊ ΠΊΠ°ΠΊΠΈΠΌ послСдствиям ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΎΠ΄Π½ΠΈΠΌΠΈ лишь каскадами Ρ‚ΠΎΠ½ΠΊΠΎΠΉ очистки, Π±Π΅Π· Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… каскадов.

ЦСль «грязСвика» β€” Ρ€Π°Π·Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ каскады ΠΎΡ‚ улавливания совсСм ΡƒΠΆ Π³Ρ€ΡƒΠ±Ρ‹Ρ… Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ². НапримСр, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, производящий code review, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ установлСнных Π½ΠΎΡ€ΠΌ кодирования (Π²Ρ€ΠΎΠ΄Π΅ Π»ΠΈΡˆΠ½ΠΈΡ… скобок ΠΈΠ»ΠΈ слишком Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ). Π‘Π°Π³ΠΈ Π²Ρ€ΠΎΠ΄Π΅ NPE Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌΠΈ тСстами, Π½ΠΎ Ссли Π΅Ρ‰Ρ‘ Π΄ΠΎ тСста Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π°ΠΌ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Π°Π³ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π΅ΠΌΠΈΠ½ΡƒΠ΅ΠΌΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ β€” это Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ускорит Π΅Π³ΠΎ исправлСниС.

Полагаю, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ясно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ статичСский Π°Π½Π°Π»ΠΈΠ· Π½Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ качСство ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, Ссли примСняСтся эпизодичСски, ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ постоянно для отсСивания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с Π³Ρ€ΡƒΠ±Ρ‹ΠΌΠΈ Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°ΠΌΠΈ. Вопрос, ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ статичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° качСство вашСго ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ эквивалСнтСн вопросу Β«ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡΡ Π»ΠΈ ΠΏΠΈΡ‚ΡŒΠ΅Π²Ρ‹Π΅ качСства Π²ΠΎΠ΄Ρ‹, взятой ΠΈΠ· грязного Π²ΠΎΠ΄ΠΎΡ‘ΠΌΠ°, Ссли Π΅Ρ‘ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π΄ΡƒΡ€ΡˆΠ»Π°Π³?Β»

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π² legacy-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

Π’Π°ΠΆΠ½Ρ‹ΠΉ практичСский вопрос: ΠΊΠ°ΠΊ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ· Π² процСсс Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² качСствС Β«quality gateΒ»? Π’ случаС с автоматичСскими тСстами всё ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ: Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ тСстов, ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ любого ΠΈΠ· Π½ΠΈΡ… β€” достаточноС основаниС ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ сборка Π½Π΅ ΠΏΡ€ΠΎΡˆΠ»Π° quality gate. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ gate ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ статичСского Π°Π½Π°Π»ΠΈΠ·Π° проваливаСтся: Π½Π° legacy-ΠΊΠΎΠ΄Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π° слишком ΠΌΠ½ΠΎΠ³ΠΎ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π΅ хочСтся, Π½ΠΎ ΠΈ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ поставку ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ Π΅ΡΡ‚ΡŒ прСдупрСТдСния Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅, Π½Π° любом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Π˜ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сразу всС эти замСчания Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ β€” ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², ΠΌΡ‹ ΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ наш ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π² Ρ†Π΅Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ Π΄ΠΎ внСдрСния статичСского Π°Π½Π°Π»ΠΈΠ·Π°!

Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ эпизодичСским использованиСм статичСского Π°Π½Π°Π»ΠΈΠ·Π°, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΅Π³ΠΎ лишь Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ информирования, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ сборкС просто выдаётся ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Π­Ρ‚ΠΎ эквивалСнтно ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΡŽ всякого Π°Π½Π°Π»ΠΈΠ·Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ссли Ρƒ нас ΡƒΠΆΠ΅ имССтся мноТСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠ³ΠΎ (сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΠ³ΠΎ) ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° остаётся Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌ.

Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ способы ввСдСния quality gates:

  • Установка Π»ΠΈΠΌΠΈΡ‚Π° ΠΎΠ±Ρ‰Π΅Π³ΠΎ количСства ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ количСства ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Π½Π° количСство строк ΠΊΠΎΠ΄Π°. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ это ΠΏΠ»ΠΎΡ…ΠΎ, Ρ‚. ΠΊ. Ρ‚Π°ΠΊΠΎΠΉ gate свободно пропускаСт измСнСния с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΏΠΎΠΊΠ° ΠΈΡ… Π»ΠΈΠΌΠΈΡ‚ Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½.
  • Ѐиксация, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, всСх старых ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ…, ΠΈ ΠΎΡ‚ΠΊΠ°Π· Π² сборкС ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. Π’Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прСдоставляСт PVS-studio ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π»Π°ΠΉΠ½-рСсурсы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Codacy. МнС Π½Π΅ довСлось Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² PVS-studio, Ρ‡Ρ‚ΠΎ касаСтся ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° с Codacy, Ρ‚ΠΎ основная ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ «старая», Π° Ρ‡Ρ‚ΠΎ «новая» ошибка β€” довольно слоТный ΠΈ Π½Π΅ всСгда ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, особСнно Ссли Ρ„Π°ΠΉΠ»Ρ‹ сильно ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ. На ΠΌΠΎΠ΅ΠΉ памяти Codacy ΠΌΠΎΠ³ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² ΠΏΡƒΠ»Π»-рСквСстС Π½ΠΎΠ²Ρ‹Π΅ прСдупрСТдСния, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ pull request ΠΈΠ·-Π·Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π½Π΅ относящихся ΠΊ измСнСниям Π² ΠΊΠΎΠ΄Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ PR.
  • На ΠΌΠΎΠΉ взгляд, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся описанный Π² ΠΊΠ½ΠΈΠ³Π΅ Continuous Delivery Β«ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ…Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊΠ°Β» (Β«ratchetingΒ»). Основная идСя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ свойством ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π° являСтся количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ статичСского Π°Π½Π°Π»ΠΈΠ·Π°, ΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ лишь Ρ‚Π°ΠΊΠΈΠ΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚.

Π₯Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊ

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ это Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. На ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС рСализуСтся запись Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Ρ€Π΅Π»ΠΈΠ·Π΅ количСства ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅, Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ сборкС основной Π²Π΅Ρ‚ΠΊΠΈ Π² ваш ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² записываСтся Π½Π΅ просто Β«Ρ€Π΅Π»ΠΈΠ· 7.0.2Β», Π½ΠΎ Β«Ρ€Π΅Π»ΠΈΠ· 7.0.2, содСрТащий 100500 Checkstyle-ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉΒ». Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² (Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Artifactory), ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ вашСм Ρ€Π΅Π»ΠΈΠ·Π΅ Π»Π΅Π³ΠΊΠΎ.
  2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ pull request ΠΏΡ€ΠΈ сборкС сравниваСт количСство ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠ΅ количСство имССтся Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π΅Π»ΠΈΠ·Π΅. Если PR ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ этого числа, Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ quality gate ΠΏΠΎ статичСскому Π°Π½Π°Π»ΠΈΠ·Ρƒ. Если количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΠ»ΠΈ Π½Π΅ измСняСтся β€” Ρ‚ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚.
  3. ΠŸΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π΅Π»ΠΈΠ·Π΅ пСрСсчитанноС количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ вновь записано Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π»ΠΈΠ·Π°.

Π’Π°ΠΊ ΠΏΠΎΠ½Π΅ΠΌΠ½ΠΎΠ³Ρƒ, Π½ΠΎ Π½Π΅ΡƒΠΊΠ»ΠΎΠ½Π½ΠΎ (ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ…Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊΠ°), число ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚ΡŒΡΡ ΠΊ Π½ΡƒΠ»ΡŽ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, систСму ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ°Π½ΡƒΡ‚ΡŒ, внСся Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½ΠΎ исправив Ρ‡ΡƒΠΆΠΎΠ΅. Π­Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚. ΠΊ. Π½Π° Π΄Π»ΠΈΠ½Π½ΠΎΠΉ дистанции Π΄Π°Ρ‘Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: прСдупрСТдСния ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΏΠΎ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ΅, Π° сразу Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ всС Π»Π΅Π³ΠΊΠΎ-устраняСмыС прСдупрСТдСния довольно быстро ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ устранСны.

На этом Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ количСство Checkstyle-ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π·Π° ΠΏΠΎΠ»Π³ΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Β«Ρ…Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊΠ°Β» Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½Π°ΡˆΠΈΡ… OpenSource ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎΡΡŒ Π½Π° порядок, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ это СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°!

ВнСдряйтС статичСский Π°Π½Π°Π»ΠΈΠ· Π² процСсс, Π° Π½Π΅ ΠΈΡ‰ΠΈΡ‚Π΅ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π³ΠΈ

Π― ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ подсчитывая прСдупрСТдСния Π² Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠ΅ ΠΏΠΎ модулям ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ инструмСнтам Π°Π½Π°Π»ΠΈΠ·Π°, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ этом YAML-Ρ„Π°ΠΉΠ» с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ сборкС выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

celesta-sql:
  checkstyle: 434
  spotbugs: 45
celesta-core:
  checkstyle: 206
  spotbugs: 13
celesta-maven-plugin:
  checkstyle: 19
  spotbugs: 0
celesta-unit:
  checkstyle: 0
  spotbugs: 0

Π’ любой ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠΉ CI-систСмС Β«Ρ…Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊΒ» ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π»ΡŽΠ±Ρ‹Ρ… инструмСнтов статичСского Π°Π½Π°Π»ΠΈΠ·Π°, Π½Π΅ полагаясь Π½Π° ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΈ сторонниС инструмСнты. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²Ρ‹Π΄Π°Ρ‘Ρ‚ свой ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Π² простом тСкстовом ΠΈΠ»ΠΈ XML Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‰Π΅ΠΌΡΡ Π°Π½Π°Π»ΠΈΠ·Ρƒ. ΠžΡΡ‚Π°Ρ‘Ρ‚ΡΡ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² CI-скриптС. ΠŸΠΎΠ΄ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² Π½Π°ΡˆΠΈΡ… open source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π° Π±Π°Π·Π΅ Jenkins ΠΈ Artifactory, ΠΌΠΎΠΆΠ½ΠΎ здСсь ΠΈΠ»ΠΈ здСсь. Оба ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° зависят ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ratchetlib: ΠΌΠ΅Ρ‚ΠΎΠ΄ countWarnings() ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ подсчитываСт xml-тэги Π² Ρ„Π°ΠΉΠ»Π°Ρ…, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Checkstyle ΠΈ Spotbugs, Π° compareWarningMaps() Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ самый Ρ…Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊ, выбрасывая ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² случаС, ΠΊΠΎΠ³Π΄Π° количСство ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Β«Ρ…Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊΠ°Β» Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ для Π°Π½Π°Π»ΠΈΠ·Π° правописания ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², тСкстовых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ aspell. Как извСстно, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ правописания Π½Π΅ всС нСизвСстныС стандартному ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ слова ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ. Если ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ quality gate ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΏΠΈΡΠ°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сформулирован Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ aspell со стандартным ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ словарём Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ошибок правописания.

О ваТности фиксации вСрсии Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ Π±Ρ‹ Π½ΠΈ внСдряли Π°Π½Π°Π»ΠΈΠ· Π² ваш ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ поставки, вСрсия Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ фиксирована. Если Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠ°ΠΌΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, Ρ‚ΠΎ ΠΏΡ€ΠΈ сборкС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ pull request ΠΌΠΎΠ³ΡƒΡ‚ Β«Π²ΡΠΏΠ»Ρ‹Ρ‚ΡŒΒ» Π½ΠΎΠ²Ρ‹Π΅ Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ связаны с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°, Π° связаны с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ просто способСн Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ большС Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ² β€” ΠΈ это ΠΏΠΎΠ»ΠΎΠΌΠ°Π΅Ρ‚ Π²Π°ΠΌ процСсс ΠΏΡ€ΠΈΡ‘ΠΌΠΊΠΈ pull request-ΠΎΠ². АпгрСйд Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ осознанным дСйствиСм. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Тёсткая фиксация вСрсии ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ сборки β€” это Π² Ρ†Π΅Π»ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‚Π΅ΠΌΠ° для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

  • БтатичСский Π°Π½Π°Π»ΠΈΠ· Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ Π²Π°ΠΌ Π±Π°Π³ΠΈ ΠΈ Π½Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ качСство вашСго ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ примСнСния. ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ эффСкт для качСства Π΄Π°Ρ‘Ρ‚ лишь Π΅Π³ΠΎ постоянноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² процСссС поставки.
  • Поиск Π±Π°Π³ΠΎΠ² Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ являСтся Π³Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ доступно Π² opensource инструмСнтах.
  • ВнСдряйтС quality gates ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ статичСского Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° самом ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° поставки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Β«Ρ…Ρ€Π°ΠΏΠΎΠ²ΠΈΠΊΒ» для legacy-ΠΊΠΎΠ΄Π°.

Бсылки

  1. Continuous Delivery
  2. А. ΠšΡƒΠ΄Ρ€ΡΠ²Ρ†Π΅Π²: Анализ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ: ΠΊΠ°ΠΊ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ программист Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° (Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ статичСском!)

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

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