static áá¯ááºááœá²ááŒááºážá
áááºááŒá¬áá°á¡á¬áž á
ááºážááŒáá·áºááẠááœááºáá°áááºá ááá¯á·áá±á¬áº áááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠá¡áá°ážáááŒáá·áº ááŒá®ážáá¬ážáá±á¬ ááá±á¬áá»ááºááŒá®ážáá
áºáá¯ááᯠáá±á¬áºáá±á¬ááºáá¬ááœáẠáá»áœááºážáá»ááºááŸá¯ ááá¯á¡ááºáááºá ááŸá¬ážááœááºážá
áœá¬áá¯ááºáá±á¬ááºáá«áá ááœá²ááŒááºážá
áááºááŒá¬áá°ááẠá¡áá¯ááºáá±á«ááºážááá·áºááá¯ááºááŒá®áž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠááŸá±ážááœá±ážá
á±áᬠá¡ááœá²á·á¡á¬áž ááŸá¯á¶á·áá±á¬áºááŸá¯ááŒá
áºá
á±ááá¯ááºáááºá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáááºážá
ááºááœáẠáááºááŒáááºáá±á¬ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯áá±á«ááºážá
ááºááŸá¯ááᯠáá±á¬ááºážá
áœá¬áá»ááºážáááºáááºážááŸáá·áº CI/CD ááá
áºá
áááºáá
áºááá¯ááºážá¡ááŒá
Ạá
áááºá¡áá¯á¶ážááŒá¯áá¯á¶á¡ááŒá±á¬ááºáž á¡ááá¯áá»á¯ááºááŒá±á¬ááŒáá«á
áá¯á·á
áááá«ááºáž
áááŒá¬áá±ážáá®á áá¯ááºáá±ááẠá¡á¬áá¯á¶á
áá¯ááºáá²á·áááºá
áá»áœááºá¯ááºááá¯á·á PVS-Studio á¡ááœá²á·ááẠá€á¡ááŒá±á¬ááºážá¡áá¬á¡áá±á«áº áááºážáá¡ááŒááºááᯠáá±ážáá±á¬ááºáá«áááºá static code analyzer ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá ááŒá¿áá¬ááẠáááºáá²á·ááá¯á· áá±á«áºáá±á«ááºáá¬ááááºážá á€ááŒá¿áá¬ááᯠáááºááá¯á·áá»á±á¬áºááœáŸá¬ážááááºáááºážá
ááá á¹á ááœá±
áá¯á¶ááŸááºá¡á¬ážááŒáá·áº static analyzer ááẠáááºááá¯á·á¡áá¯ááºáá¯ááºáááºááᯠá
áááºáááºááŸáá·áº ááŒáá·áºááŸá¯ááẠááááºáá²áá«á
static ááœá²ááŒááºážá
áááºááŒá¬áá°á¡á¬ážáá¯á¶ážááẠááŸá¬ážááœááºážáá±á¬ á¡ááŒá¯ááá±á¬áá»á¬ážááᯠáá¯ááºáá¯ááºáááºá áááºážááẠstatic code ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯áááºážá
áá
áºá á¡ááºá¹áá«áááºáá
áºáá¯ááŒá
áºááŒá®áž áááºážááŸáá·áºáááºáááºá áááºááá·áºá¡áá¬á០áá¯ááºáá±á¬ááºááá¯ááºáááºááá¯ááºáá±á áá±áá°áá»á¡á¬ážááŒáá·áºá á€á¡áá¬ááẠRice's theorem á០á¡áááºááŒá¯áá¬ážááá·áºá¡ááá¯ááºážá
static analyzer ááᯠconfigure áá¯ááºáá¬ážááŒá®ážáá¬ážááŒá áºáá»áŸáẠFalse positives áá»á¬ážááẠááŒá¿áá¬ááá¯ááºáá«á
- ááááºááá¯ááºáá±á¬á ááºážáá»ááºážá¡á á¯á¶áá»á¬ážááá¯ááááºáá¬ážáááº;
- á¡áá»áá¯á·áá±á¬ ááááºááá¯ááºáá±á¬ áá±á¬áá«ááŸá¬ááœá±ááŸá¯áá»á¬ážááᯠááááºáá¬ážáááºá
- C ááá¯á·ááá¯áẠC++ á¡ááŒá±á¬ááºážááŒá±á¬áá±áá»áŸáẠmacros ááá¯á¡áá¯á¶ážááŒá¯ááá·áºáá±áá¬ááá¯ááºážááœáẠá¡áá¯á¶ážááá»áá±á¬ááááá±ážáá»ááºáá»á¬ážáá±á«áºáá¬á á±ááá·áº áá®ážááŒá¬ážáááºáá±á¬ááºááŸá¯áá»á¬ážáá«ááŸááá±á¬ áááºáááá¯áá»á¬ážááᯠá¡ááŸááºá¡áá¬ážááŒá¯áá«áááºá
- á
áá
áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž (áááºážáááá¯ááºááá¯áẠanalogue áá»á¬ážááŸáá·áºáááºáá°áá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááá¯áá¯ááºáá±á¬ááºááá·áºááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááá¯ááŸááºáá¬ážáá¬ážáááºá ááŸááºáá ááá¯á·ááá¯áẠprintf) [
4 ]; - ááŸá¬ážááœááºážáá±á¬ á¡ááŒá¯ááá±á¬áá±á¬ááºááŸá¯áá»á¬ážááᯠááŸááºáá»ááºáá»á¬ážá¡áá¯á¶ážááŒá¯á á¡áá°ážááááºáá¬ážáá«áááºá
- áá«áá±á«áºááŸá¬á
á€ááá
á¹á
ááœááºá áá»áœááºá¯ááºááá¯á·ááẠááŸá¬ážááœááºážáá±á¬ á¡ááŒá¯ááá±á¬ááŸá¯ááºáž 10-15% ááá·áºááᯠáá»áœááºá¯ááºááá¯á· áá»áŸá±á¬áºááá·áºááá¯ááºááẠ[
áááºááœá±á·ááœááºá ááá±á¬áá»ááºááŒá®ážáá
áºáá¯ááœááºá áááŠážáá¯á¶ááẠáá¯á¶ážáááœá²ááŒá¬ážáááá·áºáááºá ááœá²ááŒááºážá
áááºááŒá¬áá°ááẠá¡ááœá±á¡ááŸá
áºáá¯ááºá¡ááœáẠáá¬ááŸáá·áºáá»á®áá±á¬ ááááá±ážáá»áẠáá±á¬ááºáá±á«ááºážáá»á¬ážá
áœá¬ááᯠáá¯ááºááŒááºáááºá á€ááááá±ážáá»ááºáá»á¬ážááẠáááºááá·áºááááá±ážáá»ááºáá»á¬ážááŸáá·áº áááºááá¯ááºááŒá®áž áááºááá·áºá¡áá¬ááẠááááºááá¯ááºááŒá±á¬ááºáž áá»ááºááŒááºá
áœá¬ áá¬ážáááºááẠáááŒá
áºááá¯ááºáá«á á€ááá
á¹á
ááœáẠá¡áááá¡áá¯ááºááẠáááºáá±á«ááºáž ááá¯á·ááá¯áẠáááºááá¹ááááºáá»á¬ážá
áœá¬ áááºáá¬ážáá¬ážáá±á¬ááŒá±á¬áá·áº ááá¯ááºááŒá®áž á€ááááá±ážáá»ááºá¡á¬ážáá¯á¶ážááᯠá
áááºááá¯ááºááœááºááŒááºážááẠáááºááŒááºáá¯á¶ááá¬ážáááŸááá±á áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá á¡áááºážáá
áºáááºážááẠááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»áá¯ážááᯠááááºááá¯ááºáá«á á¡ááŒá±á¬ááºážá¡áá²áááá¯ááºážááᯠáá»ááºá
á®ážá
á±ááá·áº ááœá²ááŒá¬ážááŸá¯áá»á¬ážáááºáž á¡áá»á¬ážá¡ááŒá¬ážááŸááááá·áºáááºá áá¯ááºááŸá á¡ááá¯ááºážá¡á
áá»á¬ážá
áœá¬ááᯠáá»ááºááŒááºá
áœá¬ áááºážááŒááºááŒááºážááẠá¡ááŸá¬ážá¡áá
áºááŸáá·áº á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠáááœá²áááœá± ááŒá
áºáá±á«áºá
á±áá«áááá·áºáááºá
á¡áá±ážááŒá®ážáá¯á¶ážááŸá¬á ááááá±ážáá»ááºáá»á¬ážááᯠááá¯ááºáá»ááºáá¬ááœáẠááá¯ááá¯á·áá±á¬áá¯ááºáá±á¬ááºáá»ááºááẠá¡áááá¹áá«ááºáááŸááá±á ááá±á¬áá»ááºááᯠááŸá áºáá±á«ááºážáá»á¬ážá áœá¬ á¡á±á¬ááºá¡á±á¬ááºááŒááºááŒáẠáá¯ááºáá±á¬ááºááŒá®ážááááºážáá áááºážááœáẠá¡áá±ážááŒá®ážáá±á¬ á¡ááŸá¬ážá¡ááœááºáž á¡áá»á¬ážá á¯ááᯠááŒá¯ááŒááºááŒá®ážááŒá áºááŒá±á¬ááºáž ááá±á¬áá°áá«áááºá áá¯ááºáá«áááºá á€ááŒááºáááºááŸá¯áá»á¬ážááẠá¡ááœááºá á»á±ážááŒá®ážáááºá á¡ááŸá¬ážááŸá¬ááẠááá¯á¡ááºáááºá bug ááŸáá·áº áááºáááºá á¡áá»ááºááá±á¬áá±á¬ááºáá±á¬ á¡áá¯á¶ážááŒá¯áá° áá¯á¶á·ááŒááºáá»áẠáááŸááá²á·ááẠá áááºááŒáá·áºá áááºááŒáááºááŸá¯ááœá²ááŒááºážá áááºááŒá¬áá°ááẠáá¯ááºáá¶áá«ááºá¡ááá·áºááœáẠá€á¡ááŸá¬ážá¡ááœááºážáá»á¬ážá áœá¬ááᯠááŒááºááŒááºáááºáááºááŸáá·áº áá±ážáá±á«áá±á«ááŒáá·áº ááŒá¯ááŒááºáá±ážáááá·áºáááºá ááá¯á·áá±á¬áº ááá¯á¡áá»áááºááœááºá á€á¡ááŸá¬ážáá»á¬ážááᯠáá áºáááºážááá¯ááºáá áºáááºáž ááŒááºáááºááŒá®ážááŒá áºááŒá®ážá ááœá²ááŒááºážá áááºááŒá¬áá°ááẠáá¯ááºá¡áá±á¬ááºážááŸá á¡áá±ážáá«ááá·áºá¡ááŸá¬ážáá»á¬ážááᯠá¡áááá¡á¬ážááŒáá·áº ááŸá¬ááœá±ááœá±á·ááŸááááºá á€áá¯ááºááᯠá¡áá¯á¶ážáááŒá¯ááá¯ááºáá«á áááºážááᯠá¡ááœááºááŸá¬ážáá«ážá áœá¬ á¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž áááºážááœáẠá¡ááŸá¬ážá¡ááœááºážáá áºáá¯ááẠáááá¬áááºááŸá¬ážáá±á¬ á¡áá»áá¯ážáááºáá»á¬ážááᯠáááŒá áºáá±á«áºá á±ááá¯ááºáá«á ááá¯ááºááŸá¡ááááºááẠááŸá¬ážááœááºážáá±á¬á¡áá±á¬ááºááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáá±á¬áºáááºáž áááºážááẠáááºáá°áá áºáŠážáá áºáá±á¬ááºááá¯ááºáá¯ááºá¡áá¯á¶ážááŒá¯ááŸá¯ááᯠá¡ááŸá±á¬áá·áºá¡ááŸááºáááŒá áºá á±áá«á
áá¯ááºáá«áááºá á¡áá±ážá¡ááœá²á¡ááŸá¬ážááœá±áá±á¬áẠá¡ááŸá¬ážááœá±ááŸááá±áá¯ááºážáá«áá²á áá áºáá«ááá¶ááŸá¬ á¡ááŸá¬ážáá áºáá¯á áááá·áºá¡á¬ážáááºážáá»ááºááᯠáá¯á¶ážááœááºáá¬ážááá¯ááºáá«áááºá ááá¯á·áá±á¬áºá á¡áá¬áá¬ááᯠá áœáá·áºááœáŸááºááŒá®áž áá»áá¯á·ááœááºážáá»ááºáá»á¬ážááŸáá·áº áááºáá¶áá¬ááœáẠáá±á·áááº/áááºáá»á¬ážááᯠááŒá¯ááºážáá®ážááŒááºážááẠáá¶ááááŒá áºááœáẠá¡ááŒá¶á¡á ááºáá áºáá¯ááŒá áºáááºá
áááá¯ááááºáá¬áá»á¬ážááẠá¡áá¯ááºáá¯ááºáá±á¬áá¯ááºáá±á¬ááºážá¡ááŒá±á¬ááºáž ááááá±ážáá»ááºáá»á¬ážááᯠááŒáá·áºá ááŒáá·áºá ááŒáá·áºá ááŒáá·áºáááº... áá°ááá¯á·áááºáááº- áá»áœááºá¯ááºááá¯á·ááẠstatic analysis ááá«áá² áá¯ááºáá±á¬ááºááá¯ááºáááºá á¡áá¯á¶ážáááºáá²á· áá¯ááºáá±á¬ááºáá»ááºá¡áá áºááœá±ááᯠáá±ážááŒáá¡á±á¬ááºá
ááá¯áá·áºáááºážááá¯áá·áºáááºáá²á· ááá¯ááºááŸááºáááºá á€ááááá±ážáá»ááºá¡á¬ážáá¯á¶ážááᯠáá áºáááºážáá áºáá¯á¶ áááºááŸá¬ážáá áºááááºáᯠáŠážá áœá¬ ááœá±ážáááŒáááºá ááá¯á·ááŸáᬠáááºážááá¯á·ááẠáá¯ááºááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡á¬áž áá¯á¶ááŸááºá¡áá¯á¶ážááŒá¯ááŒááºážá០á¡áá»áá¯ážáá»á±ážáá°ážáááŸáááá¯ááºáááºááŒá áºáááºá ááá¯ááºáá«áá ááááá±ážáá»ááºá¡áá áºáá»á¬ážááẠá¡áá±á¬ááºážáá»á¬ážááœáẠáá áºááœááºážáá±áááºááŒá áºááŒá®áž áááºážááá¯á·ááᯠáááºáá°áá»áŸ á¡á¬áá¯á¶á áá¯ááºáááºááá¯ááºáá«á
áááºážááẠcompiler ááááá±ážáá»ááºáá»á¬ážááŸáá·áº áá°áá®áá±á¬ á¥ááá¬ááŒá áºáááºá áááºážááá¯á·ááẠcompiler ááááá±ážáá»ááºá¡áá±á¡ááœááºááᯠ0 ááœááºáá¬ážááŸáááẠá¡ááŒá¶ááŒá¯áá¬ážááŒááºážáááŸááá² á¡ááŒá±á¬ááºážááŒáá»ááºáááŸááá² ááá¯ááºáá«á ááááá±ážáá»áẠ1000 ááŸááá«áá ááá¯á·áá±á¬áẠ1001 ááŸááá«á áááºážááá¯áááºáá°áá»áŸ á¡á¬áá¯á¶á áá¯ááºáááºááá¯ááºááá·áºá¡ááŒáẠá€áá±á¬ááºáá¯á¶ážáá±á«áºááááá±ážáá»ááºááᯠáááºááá·áºáá±áá¬ááœááºááŸá¬ááááºááᯠáááŸááºážáááºážáá«á
á€áá¬ááºáááºážááœáẠá¡ááá¯ážáá¯á¶ážááŸá¬ ááá¯á¡áá»áááºááœáẠá¡áááºá០áá
áºá
á¯á¶áá
áºáŠážá០ááá·áºá¡á¬áž static code analysis ááᯠá¡áá¯á¶ážááŒá¯ááẠááœááºážá¡á¬ážáá±ážáá«áá áááºážá á¡áááºážááá¯áᬠá
áááºáá¬ááºáá»áááºážá
á±áááºááŒá
áºáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·áá¡ááŒááºá¡á áá±á¬ááºááẠáá»á°ááá¯ááá±á
á® ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááŸááá¬áááºááŒá
áºáá±á¬ááŒá±á¬áá·áº áááºážááŒá±á¬ááºážáá±á«áºááœááºáᬠááŸááá±áááºááŒá
áºáááºá ááœá²ááŒááºážá
áááºááŒá¬áá°áá¡á
á®áááºáá¶á
á¬áá»á¬ážááá¯áááºáá°áá»áŸááŒáá·áºááŸá¯áááºááá¯ááºáá«á ááŸáá·áºá¡áá¯á¶ážááŒá¯ááŸá¯á¡á¬ážáá¯á¶ážááẠ"á
á¬ááœááºáá±á«áºááœááºáá¬" ááŒá
áºáááá·áºáááºá á¡á²áá«ááœá±á ááá¬ážáááºá¡á¬ážááŒáá·áºá ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯ááᯠDevOps áá¯ááºáááºážá
ááºááœáẠáááºáá±á¬ááºáá¬ážáá±á¬áºáááºáž áááºááœá±á·ááœáẠáááºážááẠáááºáá°ááá¯áá»áŸ á¡áá»áá¯ážáááŒá¯áá«á áá®áá¬áá¶áááºáá±á¬ááºáá°áá»á¬ážáá¶á០áá²áá»á¬ážá¡ááœááºáž á¡áá±ážá
áááºááááºážáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·ááŒá¬ážááááºá ááá¯ááá¯á·áá±á¬ á¡ááœá±á·á¡ááŒá¯á¶ááẠáá¬ááááá¯ááºáá«á áááá¯ááááºáá¬áá»á¬ážá¡á¬áž áááºááŒáááºááŸá¯ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯áááááá¬áá»á¬ážááᯠá¡áá»áááºááŒá¬ááŒáá·áºá
áœá¬ á¡áá¯á¶ážááŒá¯ááŒááºážá០ááœááºážá¡á¬ážáá±ážááá¯ááºáááºá
áááºážááá¬ááá¯ááºáᬠááŒáœá±ážááŒá®áá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áº áá±á¬ááºááœááºááŒááºáž
ááááºáá±á¬á·á ááŒá®ážáá¬ážáá±á¬ááá±á¬áá»ááºááŒá®ážáá áºáá¯ááœááºááẠáááºááŒáááºááŸá¯ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠááááºáááºáá¬ááœáẠáááºáá² ááá¯á·ááá¯áẠááŒá±á¬ááºá áá¬áááŸááá«á
CI/CD
ááá¯á·á¡ááŒááºá ááœá²ááŒááºážá
áááºááŒá¬áá°ááẠá
ááºáááºáááŒááºááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáááºážá
ááºá áá
áºá
áááºáá
áºááá¯ááºážá¡ááŒá
Ạáá»ááºáá»ááºážáá±á¬ááºááœááºááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá PVS-Studio ááŒáá·áºááŒá°ážááŸá¯ááœáẠáááºááá¯á¡ááºááá·áºáá¯á¶á
á¶ááŒáá·áº á¡á
á®áááºáá¶á
á¬ááᯠá¡áááºááŒá±ááŒá±ááŒáá·áºááŸá¯ááá¯ááºá
á±áááºá¡ááœáẠá¡áá¯á¶ážáááºááŸá¯áá»á¬ážááŸáá·áº áá¯ááºá ááŒá¿áá¬ááŸááá±á¬á¡ááá¯ááºážáá»á¬ážááᯠáá±ážáá¬ážááá·áº developer áá»á¬ážáᶠá¡áááá±ážáá»ááºáá»á¬áž áá«áááºáááºá CI/CD á
áá
áºáá»á¬ážá០PVS-Studio ááá¯ááœáá·áºááẠááá¯ááá¯á
áááºáááºá
á¬ážáá°áá»á¬ážá¡ááœááºá áááºááá¯ááºáá¬ááŸáá·áº áááºážááŸá®ážáá»áœááºážáááºá
á±ááẠá¡ááŒá¶ááŒá¯ááá¯áá«áááºá
PVS-Studio ááẠááááºáá»á¬ážáá®ááá¯á·ááœá¬ážáááº- Azure Devops PVS-Studio ááẠááááºáá»á¬ážáá®ááá¯á·ááœá¬ážáááº- Travis CI PVS-Studio ááẠááááºáá»á¬ážáá®ááá¯á·ááœá¬ážáááº- GitLab CI/CD PVS-Studio ááẠááááºáá»á¬ážáá®ááá¯á·ááœá¬ážáááº- CircleCI
áá«áá±ááá·áº áá¯ááºááœá²ááŒááºážá áááºááŒá¬ááŸá¯áááááá¬ááœá±ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á· áááá¡ááá·áºááŸá¬ ááŸá¬ážááœááºážáá²á· á¡ááŒá¯ááá±á¬áá±á¬ááºáá²á· á¡áá±á¡ááœáẠá¡áá»á¬ážá¡ááŒá¬ážáá²á· ááŒá¿áá¬ááᯠááŒááºááŒáá·áºáá¡á±á¬ááºá
áááºááŸááááºážááá¬ááá¯ááºáá¬ááŒáœá±ážááŒá®áá»á¬ážááᯠááŒá¯ááŒááºááŒááºážááŸáá·áº ááááá±ážáá»ááºá¡áá áºáá»á¬ážááᯠááá¯ááºááœááºááŒá±ááŸááºážááŒááºážá
áá±ááºáá® á á®ážááœá¬ážááŒá ẠáááºááŒáááºááŸá¯ ááœá²ááŒááºážá áááºááŒá¬áá°áá»á¬ážááẠááá·áºá¡á¬áž á¡áá áºáá±á¬ ááá¯á·ááá¯áẠááŒá±á¬ááºážáá²áá¬ážáá±á¬ áá¯ááºáá»á¬ážááœáẠáá±á«áºáá¬ááá·áº ááááá±ážáá»ááºá¡áá áºáá»á¬ážááá¯áᬠáá±á·áá¬ááœáá·áºááŒá¯áááºá á€ááá¹ááá¬ážá á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááẠááœá²ááŒá¬ážáá±á¬áºáááºáž á¡ááŸá áºáá¬áááŸá¬ á¡áá°áá°áááºááŒá áºáááºá PVS-Studio static analyzer ááœááºá á€áá¯ááºáá±á¬ááºáá»ááºááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž áá¯ááºáá±á¬ááºáá«áááºá
áááºááŒáááºááŸá¯ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯ááᯠáá»ááºááŒááºá
áœá¬á
áááºá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠPVS-Studio á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠááááá±ážáá»ááºáá»á¬ážááᯠá¡á
á¯ááá¯ááºá¡ááŒá¯á¶ááá¯áẠááŸáááºáááºážáááºá¡ááœáẠááá¹ááá¬ážá¡á¬áž á¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯á¡ááºáá«áááºá
á€ááááá±ážáá»ááºáá»á¬ážááẠááá¯áá±á¬áá±á¬áááºááœáẠááááºááá¯ááºááŒá±á¬ááºáž PVS-Studio á¡á¬áž áááºááŒá±á¬ááá¯ááºááẠ(áá±á¬ááºááá¯ááºážááœáẠáááºážááá¬ááá¯ááºáá¬ááŒáœá±ážááŒá®áá»á¬ážááᯠááááºážáááºážáá«)á áááºážááá¯á·ááᯠááŒááá±á¬á·áááºááá¯ááºáá«á ááœá²ááŒááºážá áááºááŒá¬áá°ááẠá áááºáááºá á¬ážá áá¬ááá¯ááºáá±ážáá±á¬ á¡ááŸá¬ážáá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážááá·áº á¡áá°ážááá¯ááºáá áºáá¯ááᯠáááºáá®ážáááºá ááᯠPVS-Studio ááẠá¡áá Ạááá¯á·ááá¯áẠááŒá±á¬ááºážáá²áá¬ážáá±á¬ áá¯ááºá¡ááœááºáᬠááááá±ážáá»ááºáá»á¬ážááᯠáá¯ááºááŒááºáá«áááºá ááá¯á·á¡ááŒááºá á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááá¹áá¬áá«ážáááºá áœá¬ á¡áá±á¬ááºá¡áááºáá±á¬áºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡áááºážá¡ááŒá áºáá¯ááºááá¯ááºáá¡á ááœáẠá¡ááœááºááá¯ááºážáá áºáá¯ááᯠáá±á«ááºážááá·áºáá«áá á¡ááŸááºááááºáá±á¬á· áá¬ááŸáááŒá±á¬ááºážáá²áá±ážááŒá±á¬ááºáž ááœá²ááŒááºážá áááºááŒá¬áá°á áá¬ážáááºááŒá®áž ááŸá¯ááºááááºáá±áááºááŒá áºáááºá á€á¡ááŸááºá¡áá¬ážááá¯ááºááᯠáá¬ážááŸááºážááááºážáá»á¯ááºááŸá¯á áá áºááœáẠááá·áºááœááºážááá¯ááºáááºá ááá¯ááºááẠááŒá®ážáá¬ážáá±á¬áºáááºáž áááºážááᯠáááŒá¬áá ááááºážáááºážááẠá¡ááŒá±á¬ááºážáááŸááá±á¬ááŒá±á¬áá·áº áááºážááẠááŒá¿áá¬ááá¯ááºáá«á
ááá¯á¡áá« áááá¯ááááºáá¬áá»á¬ážá¡á¬ážáá¯á¶ážááẠá¡áá Ạááá¯á·ááá¯áẠááŒá±á¬ááºážáá²áá¬ážáá±á¬ áá¯ááºáá»á¬ážááŸáá·áºáᬠáááºááá¯ááºááá·áº ááááá±ážáá»ááºáá»á¬ážááᯠááŒááºááœá±á·ááááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá áááºááẠáá°ááá¯á·ááŒá±á¬ááá·áºá¡ááá¯ááºáž ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠáá±á¬ááºáá±á·á០á áááºá á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá áá±á¬ááºááá¯ááºážááœáẠáááºááẠáááºážááá¬ááá¯ááºáá¬ááŒáœá±ážááŒá®ááá¯á· ááŒááºáá¬ááá¯ááºááŒá®áž á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠááŒááºážááŒááºážáá»ááºáž ááŒááºááá¯ááºááŒá®áž ááœá²ááŒááºážá áááºááŒá¬áá°ááᯠááŒááºáááºáááºááŸááºááá¯ááºáááºá
ááá¯á·ááŒá±á¬áá·áºá ááá±á¬áá»ááºáá±á¬ááºážááŒá®ážááœáẠááœá²ááŒááºážá áááºááŒá¬áááááá¬ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŸáá·áº ááááá¯á¶ážááŒá¿áá¬ááᯠááŒá±ááŸááºážááŒá®ážááŒá áºáááºá á¡áᯠáááºážááá¬á¡ááŒáœá±ážáá²á· áá¬áá¯ááºáááá²ááá¯áᬠá¡ááŒá±ááŸá¬ááŒáá·áºáá¡á±á¬ááºá
áá»áœááºááœááºážáá»ááºááŒááºáááºááŸá¯áá»á¬ážááŸáá·áº ááŒááºáááºááŒá¯ááŒááºááŒááºážáá»á¬áž
á¡ááá¯ážááŸááºážáá¯á¶ážááŸáá·áº ááá¬áá¡ááŸááá¯á¶ážá¡áá¬ááŸá¬ á¡ááœááºá¡áááºáž ááááŸáááºáá¬ážáá±á¬ ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááá¯ááºáᬠááááá±ážáá»ááºáá»á¬ážááᯠááœá²ááŒááºážá áááºááŒá¬ááŒá®áž áááºážááá¯á·ááᯠááŒááºážááŸááºážá áœá¬ ááá¯ááºááœááºááẠá¡áá»áááºáá áºáá¯ááᯠáááºáá¬ážááŒááºážááŒá áºáááºá áá áºáá±áá¬áá¬ááŸá¬ áá¯ááºá¡ááŸá¬ážááœá±ááᯠááŒááºááá·áºáááºá áá áºáá±áá¬áá¬ááŸá¬ áá¯ááºá ááŒá¿áá¬áááŸááá°ážááá¯áá¬ááᯠááœá²ááŒááºážá áááºááŒá¬áá°ááᯠááŒá±á¬ááŒááá¯á· refactor áá¯ááºááá·áºáááºá ááá¯ážááŸááºážáá±á¬ á¥ááá¬-
if (a = b)
C++ compilers ááŸáá·áº ááœá²ááŒááºážá
áááºááŒá¬áá°á¡áá»á¬ážá
á¯ááẠáááºážááá¯á·á¡ááŸááºááááºáá±ážááá¯áá±á¬ ááŒá
áºááá¯ááºááŒá±áá»á¬ážáá±á¬ááŒá±á¬áá·áºá (á==á). ááá¯á·áá±á¬áº á
áá¬ážáááŒá±á¬ááá¯ááºáá±á¬ ááá±á¬áá°áá®áá»ááºáá
áºáá¯ááŸáááŒá®ážá á¡ááá¯ááœááºážá
á¥áºáá»á¬ážáá«ááŸááá«áá áááá¯ááááºáá¬ááẠáááºážáá¯ááºááᯠááááºááᬠáá±ážáá¬ážáá²á·ááŒááºážááŒá
áºáááºáᯠáá°ááááŒá®áž áá»áááºááá¯áááºáááá¯á¡ááºááŒá±á¬ááºáž á
á¬ááœááºá
á¬áááºážáá»á¬ážááœáẠááŸááºáá¬ážáá¬ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá±á¬áá«ááŸá¬ááœá±ááŒááºážá¡ááœáẠPVS-Studio á
á¬ááœááºá
á¬áááºážááœááº
if ((a = b))
áá±á¬ááºá¥ááá¬á ဠC++ áá¯ááºááœáẠáá±á·ááœá¬ážáá«ááá¬ážá áá»áá¯áž ááá¯á·ááá¯ááºá?
case A:
foo();
case B:
bar();
break;
PVS-Studio ááœá²ááŒááºážá
áááºááŒá¬áá°ááẠá€áá±áá¬ááœáẠááááá±ážáá»ááºáá¯ááºáá«áááºá
case A:
foo();
[[fallthrough]];
case B:
bar();
break;
ááá¯ááá¯á·áá±á¬áá¯ááºá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááẠbug ááᯠáááŒááºááá¯ááºáᯠááá¯ááá¯ááºáááºá áá¯ááºáááºá áá«áááŸááºáááºá áá«áá±ááá·áº á¡áá¯á¶ážáááºáá²á·á¡áá¬ááŸá áºáá¯ááŸááááºá ááááŠážá áœá¬á ááœá²ááŒááºážá áááºááŒá¬áá°á¡á á®áááºáá¶á á¬áááºááŸá¬ážááœááºážáá±á¬á¡ááŒá¯ááá±á¬áá»á¬ážááá¯áááºááŸá¬ážáááºá áá¯áááá¡áá±ááŒáá·áºá áááºážáááŒá¯ááŒááºááááºážááááºážááŸá¯ááœááºáá«áááºáá±á¬áá°áá»á¬ážá¡ááœáẠcode ááá¯ááá¯ááá¯áá¬ážáááºáá¬á á±áááºá ááŒá®ážáá±á¬á· áá«á á¡áááºážá¡áá±ážááŒá®ážáááºá á€á¡áá¬áá áºáá¯áááºážá¡ááœááºá áá¯ááºááá¯ááá¯ááá¯ááŸááºážáááºážááŒá®áž ááááºážááááºážáááœááºáá°á á±ááẠá¡áá±ážá á¬ážááŒááºáááºááŒááºáááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá·áºáááºá ááœá²ááŒááºážá áááºááŒá¬áá°ááẠ"break" ááá¯á¡ááºáááºááŒá áºá á± áááá¯á¡ááºáááºááᯠáá¬ážááááºáá±á¬ááŒá±á¬áá·áºá áááá¯ááááºáá¬á¡áá»ááºážáá»ááºážáááºáž ááŸááºážááŸááºážáááºážáááºáž áááááá¯ááºáá«á
áá»áœááºááœááºážáá»ááºááŒááºáááºááŸá¯áá»á¬ážááŸáá·áº ááŒááºáááºááŒá¯ááŒááºááŸá¯áá»á¬ážá¡ááŒááºá áááºááẠáááááá¬áᬠááŸá¬ážááœááºážáá±á¬ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯ááááá±ážáá»ááºáá»á¬ážááᯠá¡ááá¡áá» ááááŸáááºááá¯ááºáááºá ááááºááá¯ááºáá±á¬ áá±á¬áá«ááŸá¬ááœá±ááŸá¯á¡áá»áá¯á·ááᯠááááºááá¯ááºáááºá á¥ááá¬á áá
áºá
á¯á¶áá
áºáá±á¬ááºááẠááááá±ážáá»ááºáá»á¬ážááẠá¡áááá¹áá¬ááºáááŸááᯠáááºáááºá
ááŸá¬ážááœááºážáá±á¬ááááá±ážáá»ááºáá»á¬ážááᯠááááŸáááºááẠá¡ááŒá¬ážáááºážáááºážáá»á¬ážááŸááá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá Macro markup ááᯠá¡á á±á¬ááá¯ááºážááœáẠáá±á¬áºááŒáá²á·áááºá á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠá á¬áááºážááœáẠá¡áá±ážá áááºáá±á¬áºááŒáá¬ážáá«áááºá á¡áá±ážááŒá®ážáá¯á¶ážá¡áá»ááºááŸá¬ áááºááẠá¡áá¯á¡áá±á¬ááºá¡ááŒá¯ááá±á¬áá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºáá¬ááœáẠáááŒááºážááŒááºážááŸáá·áºá áá áºááá»áá»ááºážáááºáá«á áááºážááá¯á·á¡ááœáẠá¡ááŸá¬ážá¡ááœááºážáááŸáááŒá±á¬ááºáž áá¬ážáááºááẠá¡áá±ážááŒá®ážáá¯á¶ážááŒá áºáááºá ááœá²á·á ááºážááŸá¯ááŒá®ážáá±á¬áẠá áááºáááºá á¬ážááœááºááááá±ážáá»ááºá¡áá»á¬ážá á¯ááẠáá»á±á¬ááºááœááºááœá¬ážááŒá®áž á¡ááŸááºáááẠááá¯áá áá¯ááºáá±á·áá¬ááẠááá¯á¡ááºááá·áºáá±áá¬áá»á¬ážááŸáá·áº áá¯ááºááŒá±á¬ááºážáá²ááŸá¯á¡áá»áá¯á·áᬠáá»ááºááŸááá±á¬á·áááºá
ááá¯á·á¡ááŒááºá á¡áááºá¡áá²áá
áºá
á¯á¶áá
áºáá¬ááŒá
áºáá±á«áºáá¬áá«á áá»áœááºá¯ááºááá¯á·ááá±á¬ááºáááºáá»á¬ážá¡á¬áž PVS-Studio áááºáá±á¬ááºááẠáá»áœááºá¯ááºááá¯á·á¡ááŒá²áá°áá®áá±ážáá«áááºá ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááá¯ááºááá¯áẠááŸá¬ážááœááºážáá±á¬ááááá±ážáá»ááºáá»á¬ážááᯠáááºááŸá¬ážááŒá®áž á¡ááŸá¬ážáá»á¬ážááᯠááŒá¯ááŒááºáá±á¬á¡áá«ááœáẠááŒá
áºáááºáá»á¬áž ááŸááá²á·áááºá
Ratchet áááºážáááºáž
static analyzer ááááá±ážáá»ááºááᯠáááºááŸá¬ážááŒááºážááŒáá·áº áá¯ááºá¡áááºá¡ááœá±ážááᯠááŒááºážááŒááºážáá»ááºáž ááŒáŸáá·áºáááºááẠáá±á¬ááºááẠá áááºáááºá á¬ážááœáẠáááºážáááºážáá áºáᯠááŸááá±ážáááºá á¡áááá¡áá»ááºááŸá¬ ááááá±ážáá»ááºá¡áá±á¡ááœáẠáá»á±á¬á·áááºážááœá¬ážááá¯ááºááẠá
static analyzer ááŸáá¯ááºááŒááºáá±á¬ááááá±ážáá»ááºá¡áá±á¡ááœááºááá¯ááŸááºáááºážáááºáá¬ážáááºá á¡áááºá¡ááœá±ážáá¶áá«ážááᯠááá¯áááºáá¯ááºáá±á¬ááºááŸá¯á¡áá±á¡ááœááºááᯠáááá¯ážá á±áá±á¬áá¯ááºáá áºáá¯ááá¯áᬠááá·áºááœááºážááá¯ááºá á±ááá·áº áááºážáááºážááŒáá·áº ááœá²á·á ááºážáá¬ážáá«áááºá ááááºá¡áá±ááŒáá·áºá ááŸáá¯ážá ááºá¡áá±á¡ááœááºááᯠáááŒááºážááŒááºážáá»áŸá±á¬á·áá»ááŒááºážáá¯ááºáááºážá ááºááẠááœá²ááŒááºážá áááºááŒá¬áá°á¡á¬áž áá»áááºááŸáááŒááºážááŸáá·áº á¡ááŸá¬ážáá»á¬ážááᯠááŒááºáááºááŒááºážááŒáá·áº á áááºáááºá
áá°áá áºáŠážááẠá¡áááºážáááºááááºáááºáá»ááºááŒá®áž áááºážááá¯ááºá¡áá áºááœáẠááááá±ážáá»ááºáá»á¬ážááᯠááááºááŸá¬ážáá² á¡áááºá¡ááœá±ážáá¶áá«ážááᯠáá»á±á¬áºááŒááºááẠáá¯á¶ážááŒááºáá±á¬áºáááºážá ááŒááºááá¯ááºá¡áá±á¬ááºážááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážááŒáá·áºá áááºážááẠááŒá±á¬ááºá áá¬ááá¯ááºáá«á á¡á¬ážáá¯á¶ážá¡áá°áá°áá«áá²á ratchet ááẠáŠážáááºáá¬áá áºáá¯ááá¯á· ááŸáá·áºááœá¬ážááŒá®áž áá»áá¯á·ááœááºážáá»ááºá¡áá±á¡ááœáẠáááŒááºážááŒááºáž áá»á±á¬á·áááºážáá¬áááºááŒá áºáááºá áá°áá áºáŠážááẠáááºážáááá¯ááºááá¯áẠáá»áá¯á·ááœááºážáá»ááºá¡áá áºáá»á¬ážááᯠáááŒááºáá»ááºáá±á¬áºáááºážá á¡áá®ážáá¬ážááŸá áá¯ááºááœáẠáá áºáá¯áá¯ááᯠááŒáŸáá·áºáááºááẠááá¯á¡ááºáá±áá±ážáááºá áá áºáá»áááºáá»áááºááœááºá ááááá±ážáá»ááºá¡áá±á¡ááœááºááᯠáá»áŸá±á¬á·áá»ááẠááœááºáá°áá±á¬áááºážáááºážáá»á¬áž áá¯ááºáá¯á¶ážááœá¬ážáᬠá¡ááŸááºáááẠáá»áá¯á·ááœááºážáá»ááºáá»á¬ážááᯠááŒá¯ááŒááºáá±ážááá·áº á¡áá»áááºáá áºáá¯ááŸááá¬áá«áááºá
á€áááºážá
áá
áºááᯠIvan Ponomarev á á¡ááœááºá
áááºáááºá
á¬ážááœááºáá±á¬ááºážáá±á¬ áá±á¬ááºážáá«ážááœáẠá¡áá±ážá
áááºáá±á¬áºááŒáá¬ážááẠá
áá±á¬ááºážáá«ážáá±ážáá¬ážáá°ááẠá€á¡ááŒá±á¬ááºážá¡áá¬ááŸáá·áºáááºáááºááá·áº á¡á
á®áááºáá¶á
á¬áá«ááŸááááº-"
áá±á¬ááºáá»ááº
á€áá±á¬ááºážáá«ážááŒá®ážáá±á¬ááºá á
á¬áááºáá°áá»á¬ážááẠstatic analysis tools áá»á¬ážááᯠááá¯ááá¯áááºáá¶áá¬ááŒá®áž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáááºážá
ááºááœáẠáááºážááá¯á·ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááŒáááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá ááá·áºááœááºáá±ážááœááºážáá»á¬ážááŸááá«á áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá²áááºážá¡áááºááá·áºááŸááá±áá«áááºá
Static analysis ááẠá¡ááŸááºáááẠá¡áááºááŒá±ááŒá®áž á¡áá¯á¶ážáááºááá¯ááºááá¬áž ááŸáá·áº áááºáááºá á¡ááŒá¬ážáá±á¬ áá¶áááá»á¬áž ááŸááá«áááºá âPVS-Studio static code analyzer ááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž áá¯ááºáááºážá
ááºááœáẠááááºáááºáááá·áº á¡ááŒá±á¬ááºážáááºážáá»á¬ážâ á
á¬á
á±á¬ááºááœáẠá€áá¶ááá¡áá»á¬ážá
á¯ááᯠáááºááŸá¬ážááẠááŒáá¯ážá
á¬ážáá²á·áááºá
á¡á¬áá¯á¶á
áá¯ááºááŒá®áž áá¬áááºáá²á·á¡ááœáẠáá»á±ážáá°ážáááºáá«áááºá
á¡ááá¯ááá·áºááºáá»á¬áž
- Andrey Karpov á
PVS-Studio ááœá²ááŒááºážá áááºááŒá¬áá°ááẠC ááŸáá·áº C++ áá¯ááºá¡ááœáẠáá¯ááºáá±ážááá·áº á áááºáááºá á¬ážááœááºááááá±ážáá»ááºáá»á¬ážááᯠáá»áœááºá¯ááºáááºááá¯á·áá»ááºááŒááºá áœá¬ááŒááºááá¯ááºáááºáááºážá - áá®áá®áá®ážáá®ážáá¬ážá
áááºááá®á¡áá¯áá® . - Andrey Karpov, Victoria Khanieva á
áááá¯ááááºá¡áááºážá¡ááŒá áºáá¯ááºá áááºááŒáááºáá±á¬ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááœáẠá ááºáááºáá°ááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá . - PVS-á
áá°áá®ááá¯á á
á¬áááºážááŒá¯á
á¯ááŒááºážá
áá±á¬ááºááẠáá±á¬áá«ááŸá¬ááœá±áá±áž áááºáááºáá»á¬áž . - Andrey Karpov á
EFL Core Libraries áááá°áá¬ááá¯á¡áá¯á¶ážááŒá¯á PVS-Studio ááœá²ááŒááºážá áááºááŒá¬áá°ááááá±áááá¹ááá¬áá»á¬ážá á¡áá¯á¡áá±á¬áẠ10-15% . - PVS-á
áá°áá®ááá¯á á
á¬áááºážááŒá¯á
á¯ááŒááºážá
ááœá²ááŒááºážá áááºááŒá¬áá° áááºáá±á·áá»áºáá»á¬ážááᯠá¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯áẠááŸáááºáááºážááŒááºážá . - Ivan Andryashin
áá»áœááºá¯ááºááá¯á·á X-ray endovascular ááœá²á áááºááŸá¯ááá¬áá±ážá áá áºá ááá±á¬áá»ááºááœáẠáááºááŒáááºáá±á¬ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠáá»áœááºá¯ááºááá¯á·á ááºážáááºáá¯á¶á¡ááŒá±á¬ááºáž . - Pavel Eremeevá Svyatoslav Razmyslová
PVS-Studio á¡ááœá²á·ááẠUnreal Engine áá¯ááºááᯠáááºáá²á·ááá¯á· ááá¯ážáááºáá±á¬ááºážááœááºá á±áááºáááºážá . - Andrey Karpov á
áááºááŒáááºáá±á¬áá¯ááºááœá²ááŒááºážá áááºááŒá¬áá° PVS-Studio ááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáááºážá ááºááœáẠááá·áºááœááºážáááá·áºá¡ááŒá±á¬ááºážáááºáž .
á€áá±á¬ááºážáá«ážááᯠá¡ááºá¹áááááºá
áá¬ážááŒá±á¬ ááááááºááŸáá·áº áá»áŸáá±ááá¯áá«áá áá¬áá¬ááŒááºááá·áºááº- Andrey Karpov ááᯠá¡áá¯á¶ážááŒá¯áá«á
source: www.habr.com