์ ์ ์ฝ๋ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํด ๋ณด๋ ๊ฒ์ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฅผ ๊ตฌํํ๋ ค๋ฉด, ํนํ ๋๊ท๋ชจ์ ์ค๋๋ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ ๋ ๊ธฐ์ ์ด ํ์ํฉ๋๋ค. ์๋ชป ์ํํ ๊ฒฝ์ฐ ๋ถ์๊ธฐ๋ ์์
์ ์ถ๊ฐํ๊ณ ๊ฐ๋ฐ ์๋๋ฅผ ๋ฆ์ถ๋ฉฐ ํ์ ์ฌ๊ธฐ๋ฅผ ์ ํ์ํฌ ์ ์์ต๋๋ค. ์ ์ ๋ถ์์ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํตํฉํ๋ ๋ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ๊ณผ ์ด๋ฅผ CI/CD์ ์ผ๋ถ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
์๊ฐ
์ต๊ทผ์ "๋ผ๋ ์ถํ๋ฌผ์ ๊ด์ฌ์ ๋์์ต๋๋ค.
์ฐ๋ฆฌ PVS-Studio ํ์ ์ด ์ฃผ์ ์ ๋ํ ๊ฒฌํด๋ฅผ ์ ์ํฉ๋๋ค. ์ ์ ์ฝ๋ ๋ถ์๊ธฐ ๊ตฌํ ๋ฌธ์ ๊ฐ ์ ์ด์ ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง, ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ๊ทน๋ณตํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ์ ์ง์ ์ผ๋ก ๊ธฐ์ ์ ๋ถ์ฑ๋ฅผ ๊ณ ํต ์์ด ํด์ํ ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์
์ผ๋ฐ์ ์ผ๋ก ์ ์ ๋ถ์๊ธฐ๋ฅผ ์์ํ๊ณ ์๋ ๋ฐฉ์์ ํ์ธํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ต๋๋ค.
๋ชจ๋ ์ ์ ๋ถ์๊ธฐ๋ ๊ฑฐ์ง ๊ธ์ ์ ์์ฑํฉ๋๋ค. ์ด๋ ์ ์ ์ฝ๋ ๋ถ์ ๋ฐฉ๋ฒ๋ก ์ ๊ธฐ๋ฅ์ด๋ฉฐ ์ด์ ๋ํด ์ํํ ์ ์๋ ์์
์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ ์ด๋ ๋ผ์ด์ค์ ์ ๋ฆฌ(Rice's theorem)๋ก ํ์ธ๋ ๋ฐ์ ๊ฐ์ด ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์ ์ ๋ถ์๊ธฐ๊ฐ ์ด๋ฏธ ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด ๊ฑฐ์ง ๊ธ์ ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
- ๊ด๋ จ ์๋ ๊ท์น ์ธํธ๋ฅผ ๋นํ์ฑํํ์ต๋๋ค.
- ์ผ๋ถ ๊ด๋ จ ์๋ ์ง๋จ์ด ๋นํ์ฑํ๋์์ต๋๋ค.
- C ๋๋ C++์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒฝ์ฐ ๋งคํฌ๋ก๊ฐ ์ฌ์ฉ๋๋ ๋ชจ๋ ์์น์ ์ธ๋ชจ์๋ ๊ฒฝ๊ณ ๊ฐ ํ์๋๋๋ก ํ๋ ํน์ ๊ตฌ์ฑ์ ํฌํจํ๋ ๋งคํฌ๋ก๊ฐ ๋งํฌ์ ๋ฉ๋๋ค.
- ์์คํ
๊ธฐ๋ฅ๊ณผ ์ ์ฌํ ์์
์ ์ํํ๋ ์์ฒด ๊ธฐ๋ฅ์ด ํ์๋ฉ๋๋ค(์์ฒด ์๋ ๋ก๊ทธ ๋ฐํผ ๋๋ printf)
4 ]; - ์ฃผ์์ ์ฌ์ฉํ๋ฉด ๊ฑฐ์ง์์ฑ์ ํน๋ณํ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
- ๋ฑ๋ฑ.
์ด ๊ฒฝ์ฐ ์ฝ 10~15%์ ๋ฎ์ ์คํ๋ฅ ์ ์์ํ ์ ์์ต๋๋ค.
์ค์ ๋ก ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ์ด๊ธฐ ๊ทธ๋ฆผ์ด ์์ ํ ๋ค๋ฆ
๋๋ค. ๋ถ์๊ธฐ๋ ๋ ๊ฑฐ์ ์ฝ๋์ ๋ํด ์๋ฐฑ ๋๋ ์์ฒ ๊ฐ์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ๊ณ ์ค ์ด๋ค ๊ฒฝ๊ณ ๊ฐ ๊ด๋ จ์ด ์๊ณ ์ด๋ค ๊ฒฝ๊ณ ๊ฐ ๊ด๋ จ์ด ์๋์ง ๋น ๋ฅด๊ฒ ์ดํดํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฃผ์ ์์
์ด ๋ฉฐ์น ๋๋ ๋ช ์ฃผ ๋์ ์ค๋จ๋๊ธฐ ๋๋ฌธ์ ์์์ ์ด๋ฌํ ๋ชจ๋ ๊ฒฝ๊ณ ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์์ํ๋ ๊ฒ์ ๋นํฉ๋ฆฌ์ ์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ ๊ทธ๋ฌํ ์๋๋ฆฌ์ค๋ฅผ ๊ฐ๋นํ ์ ์์ต๋๋ค. ๋ํ ๋ณ๊ฒฝ ๊ธฐ๋ก์ ๋ง์น๋ ์์ฒญ๋ ์์ diff๊ฐ ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋์ ๋๋ฌด ๋ง์ ์กฐ๊ฐ์ ๋น ๋ฅด๊ฒ ๋๋ ํธ์งํ๋ฉด ํ์ฐ์ ์ผ๋ก ์๋ก์ด ์คํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ฒฝ๊ณ ์ ๋ง์ ์ธ์ฐ๋ ๊ทธ๋ฌํ ์์ ์ด ๊ฑฐ์ ์๋ฏธ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ํ๋ก์ ํธ๊ฐ ์๋ ๋์ ์ฑ๊ณต์ ์ผ๋ก ์งํ๋์๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ์ ์ฌ๊ฐํ ์ค๋ฅ ์ค ๋๋ถ๋ถ์ด ์ด๋ฏธ ์์ ๋์๋ค๋ ์ ์ ๋์ํ์ญ์์ค. ์, ์ด๋ฌํ ์์ ์ฌํญ์ ๋งค์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ๋๋ฒ๊น ํด์ผ ํ์ผ๋ฉฐ ๋ฒ๊ทธ์ ๋ํ ๋ถ์ ์ ์ธ ์ฌ์ฉ์ ํผ๋๋ฐฑ์ ๋ฐ์์ต๋๋ค. ์ ์ ๋ถ์๊ธฐ๋ ์ฝ๋ฉ ๋จ๊ณ์์ ์ด๋ฌํ ๋ง์ ์ค๋ฅ๋ฅผ ๋น ๋ฅด๊ณ ์ ๋ ดํ๊ฒ ์์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ ์ด๋ค ์์ผ๋ก๋ ์ด๋ฌํ ์ค๋ฅ๋ ์์ ๋์์ผ๋ฉฐ ๋ถ์๊ธฐ๋ ์ฃผ๋ก ์ด์ ์ฝ๋์์ ์ค์ํ์ง ์์ ์ค๋ฅ๋ฅผ ๊ฐ์งํฉ๋๋ค. ์ด ์ฝ๋๋ ์ฌ์ฉ๋์ง ์์ ์๋ ์๊ณ ๋งค์ฐ ๋๋ฌผ๊ฒ ์ฌ์ฉ๋ ์๋ ์์ผ๋ฉฐ ์ค๋ฅ๊ฐ ์์ด๋ ๋์ ๋๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ์ง ์์ ์ ์์ต๋๋ค. ๋ฒํผ์ ๊ทธ๋ฆผ์๊ฐ ์ด๋๊ฐ์ ์๋ชป๋ ์์์ผ ์๋ ์์ง๋ง ์ด๋ ์ ํ ์ฌ์ฉ์ ์ง์ฅ์ ์ฃผ์ง ์์ต๋๋ค.
๋ฌผ๋ก ์ฌ์ํ ์ค์๋ผ๋ ์ฌ์ ํ ์ค์์ ๋๋ค. ๋๋ก๋ ์ค์๋ก ์ธํด ์ค์ ์ทจ์ฝ์ ์ด ์จ๊ฒจ์ง ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ๊ฒ์ ํฌ๊ธฐํ๊ณ ๊ฑฐ์ ๋ํ๋์ง ์๋ ๊ฒฐํจ์ ์ฒ๋ฆฌํ๋ ๋ฐ ๋ฉฐ์น ๋๋ ๋ช ์ฃผ๋ฅผ ์๋นํ๋ ๊ฒ์ ๋ชจํธํ ์๊ฐ์ฒ๋ผ ๋ณด์ ๋๋ค.
ํ๋ก๊ทธ๋๋จธ๋ ์ด์ ์์ ์ฝ๋์ ๋ํ ์ด๋ฌํ ๋ชจ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๊ณ , ๋ณด๊ณ , ์ดํด๋ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ ์ ์ ๋ถ์ ์์ด๋ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋กญ๊ณ ์ ์ฉํ ๊ธฐ๋ฅ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
๋๋ฆ๋๋ก ๊ทธ๋ค์ ์ณ์ต๋๋ค. ๊ทธ๋ค์ ๋จผ์ ์ด ๋ชจ๋ ๊ฒฝ๊ณ ๋ฅผ ์ด๋ป๊ฒ๋ ์ ๊ฑฐํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋์ผ๋ง ์ฝ๋ ๋ถ์๊ธฐ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ก์ด ๊ฒฝ๊ณ ๊ฐ ๊ธฐ์กด ๊ฒฝ๊ณ ์ ๋ฌปํ๋ฒ๋ฆฌ๊ณ ์๋ฌด๋ ์ด์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์์ ๊ฒ์ ๋๋ค.
์ด๋ ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ์ ๋์ผํ ๋น์ ์ ๋๋ค. ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ์๋ฅผ 0์ผ๋ก ์ ์งํ๋๋ก ๊ถ์ฅํ๋ ๊ฒ์ ์ด์ ๊ฐ ์์ต๋๋ค. ๊ฒฝ๊ณ ๊ฐ 1000๊ฐ์ด๊ณ 1001๊ฐ๊ฐ ์์ผ๋ฉด ์๋ฌด๋ ์ด์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์์ ๊ฒ์ด๋ฉฐ ์ด ์ต์ ๊ฒฝ๊ณ ๋ฅผ ์ด๋์์ ์ฐพ์์ผ ํ ์ง ๋ช ํํ์ง ์์ต๋๋ค.
์ด ์ด์ผ๊ธฐ์์ ์ต์
์ ์ํฉ์ ์ง๊ธ ์์์ ๋๊ตฐ๊ฐ๊ฐ ์ ์ ์ฝ๋ ๋ถ์์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ๋ ๊ฒฝ์ฐ์
๋๋ค. ์ด๋ ํ์ ์์์ ๋จ์ด๋จ๋ฆด ๋ฟ์
๋๋ค. ์๋ํ๋ฉด ํ์ ๊ด์ ์์๋ ๋ฐฉํด๊ฐ ๋๋ ์ถ๊ฐ์ ์ธ ๊ด๋ฃ์ ๋ณต์ก์ฑ์ด ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ๋๊ตฌ๋ ๋ถ์๊ธฐ์ ๋ณด๊ณ ์๋ฅผ ๋ณด์ง ์์ผ๋ฉฐ ๋ชจ๋ ์ฌ์ฉ์ "์ข
์ด"๋ก๋ง ์ด๋ฃจ์ด์ง๋๋ค. ์ ๊ฒ๋ค. ๊ณต์์ ์ผ๋ก ๋ถ์์ DevOps ํ๋ก์ธ์ค์ ๋ด์ฅ๋์ด ์์ง๋ง ์ค์ ๋ก๋ ๋๊ตฌ์๊ฒ๋ ๋์์ด ๋์ง ์์ต๋๋ค. ๋ถ์ค์์ ์ปจํผ๋ฐ์ค ์ฐธ์์๋ค์ ์์ธํ ์ด์ผ๊ธฐ๋ฅผ ๋ค์์ต๋๋ค. ๊ทธ๋ฌํ ๊ฒฝํ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ํ๋ ์๋๋๋ผ๋ ์ค๋ซ๋์ ์ ์ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐฉํดํ ์ ์์ต๋๋ค.
๊ธฐ์ ๋ถ์ฑ ๊ตฌํ ๋ฐ ์ ๊ฑฐ
์ฌ์ค, ์ค๋๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์๋ ์ ์ ๋ถ์์ ๋์ ํ๋ ๋ฐ์๋ ์ด๋ ต๊ฑฐ๋ ๋๋ ค์ด ๊ฒ์ด ์์ต๋๋ค.
CI / CD
๋ํ ๋ถ์๊ธฐ๋ ์ง์์ ์ธ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก ์ฆ์ ํฌํจ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, PVS-Studio ๋ฐฐํฌํ์๋ ํ์ํ ํ์์ผ๋ก ๋ณด๊ณ ์๋ฅผ ํธ๋ฆฌํ๊ฒ ๋ณผ ์ ์๋ ์ ํธ๋ฆฌํฐ์ ๋ฌธ์ ๊ฐ ์๋ ์ฝ๋ ์น์
์ ์์ฑํ ๊ฐ๋ฐ์์๊ฒ ๋ณด๋ด๋ ์๋ฆผ์ด ํฌํจ๋์ด ์์ต๋๋ค. CI/CD ์์คํ
์์ PVS-Studio๋ฅผ ์์ํ๋ ๋ฐ ๋ ๊ด์ฌ์ด ์๋ ๋ถ๋ค์ ํด๋น ๋ด์ฉ์ ์์งํ์๊ธฐ ๋ฐ๋๋๋ค.
PVS-Studio๊ฐ ํด๋ผ์ฐ๋๋ก ์ด๋: Azure Devops PVS-Studio๊ฐ ํด๋ผ์ฐ๋๋ก ์ด๋ํฉ๋๋ค: Travis CI PVS-Studio๊ฐ ํด๋ผ์ฐ๋๋ก ์ด๋: GitLab CI/CD PVS-Studio๊ฐ ํด๋ผ์ฐ๋๋ก ์ด๋ํฉ๋๋ค: CircleCI
ํ์ง๋ง ์ฝ๋ ๋ถ์ ๋๊ตฌ ๊ตฌํ์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ๋ฐ์ํ๋ ๋ค์์ ์คํ ๋ฌธ์ ๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ์กด ๊ธฐ์ ๋ถ์ฑ ํด๊ฒฐ ๋ฐ ์๋ก์ด ๊ฒฝ๊ณ ์ฒ๋ฆฌ
์ต์ ์์ฉ ์ ์ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฝ๋ ๋๋ ๋ณ๊ฒฝ๋ ์ฝ๋์ ๋ํ๋๋ ์๋ก์ด ๊ฒฝ๊ณ ๋ง ์ฐ๊ตฌํ ์ ์์ต๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ ๊ตฌํ์ ๋ค์ํ์ง๋ง ๋ณธ์ง์ ๋์ผํฉ๋๋ค. PVS-Studio ์ ์ ๋ถ์๊ธฐ์์๋ ์ด ๊ธฐ๋ฅ์ด ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋ฉ๋๋ค.
์ ์ ๋ถ์์ ๋น ๋ฅด๊ฒ ์์ํ๋ ค๋ฉด PVS-Studio ์ฌ์ฉ์๊ฐ ๊ฒฝ๊ณ ๋๋ ์ต์ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
PVS-Studio์ ํ์ฌ ์ด๋ฌํ ๊ฒฝ๊ณ ๋ฅผ ๊ด๋ จ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋๋ก ์ง์ํ ์ ์์ผ๋ฉฐ(๋์ค์ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์๊ปด๋๊ธฐ) ๋ ์ด์ ํด๋น ๊ฒฝ๊ณ ๊ฐ ํ์๋์ง ์์ต๋๋ค. ๋ถ์๊ธฐ๋ ์์ง ๊ด์ฌ์ด ์๋ ์ค๋ฅ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํน์ ํ์ผ์ ์์ฑํฉ๋๋ค. ์ด์ PVS-Studio๋ ์ ์ฝ๋ ๋๋ ๋ณ๊ฒฝ๋ ์ฝ๋์ ๋ํด์๋ง ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํฉ๋๋ค. ๊ฒ๋ค๊ฐ ์ด ๋ชจ๋ ๊ฒ์ด ์๋ฆฌํ๊ฒ ๊ตฌํ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์ค ์ฝ๋ ํ์ผ์ ์์ ๋ถ๋ถ์ ๋น ์ค์ด ์ถ๊ฐ๋๋ฉด ๋ถ์๊ธฐ๋ ์ค์ ๋ก ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝ๋์ง ์์์์ ์ดํดํ๊ณ ๊ณ์ ์นจ๋ฌตํ ๊ฒ์ ๋๋ค. ์ด ๋งํฌ์ ํ์ผ์ ๋ฒ์ ์ ์ด ์์คํ ์ ํฌํจ๋ ์ ์์ต๋๋ค. ํ์ผ ์ฉ๋์ด ํฌ๊ธด ํ์ง๋ง ์์ฃผ ์ ์ฅํด๋ ์์ฉ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
์ด์ ๋ชจ๋ ํ๋ก๊ทธ๋๋จธ๋ ์ ์ฝ๋ ๋๋ ๋ณ๊ฒฝ๋ ์ฝ๋์ ๊ด๋ จ๋ ๊ฒฝ๊ณ ๋ง ๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์ ๋ ๋ถํฐ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ค์ ๊ธฐ์ ๋ถ์ฑ๋ก ๋์๊ฐ ์ ์ง์ ์ผ๋ก ์ค๋ฅ๋ฅผ ์์ ํ๊ณ ๋ถ์๊ธฐ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋๊ท๋ชจ ์ค๋๋ ํ๋ก์ ํธ์์ ๋ถ์๊ธฐ ๊ตฌํ๊ณผ ๊ด๋ จ๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ์ด์ ๊ธฐ์ ๋ถ์ฑ๋ก ๋ฌด์์ ํด์ผํ ์ง ์์ ๋ณด๊ฒ ์ต๋๋ค.
๋ฒ๊ทธ ์์ ๋ฐ ๋ฆฌํฉํ ๋ง
๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์์ฐ์ค๋ฌ์ด ๊ฒ์ ๋๋์ผ๋ก ์ต์ ๋ ๋ถ์๊ธฐ ๊ฒฝ๊ณ ๋ฅผ ๋ถ์ํ๊ณ ์ ์ง์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ๋ ๊ฒ์ ๋๋ค. ์ฝ๋์ ์ค๋ฅ๋ฅผ ์์ ํด์ผ ํ๋ ๊ณณ, ๋ฆฌํฉํฐ๋งํ์ฌ ์ฝ๋์ ๋ฌธ์ ๊ฐ ์์์ ๋ถ์๊ธฐ์๊ฒ ์๋ ค์ผ ํ๋ ๊ณณ์ ๋๋ค. ๊ฐ๋จํ ์:
if (a = b)
๋๋ถ๋ถ์ C++ ์ปดํ์ผ๋ฌ์ ๋ถ์๊ธฐ๋ ์ค์ ๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ถ์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฌํ ์ฝ๋์ ๋ํด ๋ถํํฉ๋๋ค. (a == b). ๊ทธ๋ฌ๋ ๋ฌด์ธ์ ํฉ์๊ฐ ์์ผ๋ฉฐ ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์์ ์ธ๊ธ๋์ด ์์ต๋๋ค. ์ถ๊ฐ ๊ดํธ๊ฐ ์์ผ๋ฉด ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋์ ์ผ๋ก ๊ทธ๋ฌํ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ฏ๋ก ๋งน์ธํ ํ์๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ง๋จ์ ์ํ PVS-Studio ๋ฌธ์์์
if ((a = b))
๋ค๋ฅธ ์์. ์ด C++ ์ฝ๋์์ ์์ด๋ฒ๋ ธ๋์? ํ๋ค ์ ๊ทธ๋?
case A:
foo();
case B:
bar();
break;
PVS-Studio ๋ถ์๊ธฐ๋ ์ฌ๊ธฐ์ ๊ฒฝ๊ณ ๋ฅผ ํ์ํฉ๋๋ค.
case A:
foo();
[[fallthrough]];
case B:
bar();
break;
์ด๋ฌํ ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก๋ ๋ฒ๊ทธ๊ฐ ์์ ๋์ง ์๋๋ค๊ณ ํ ์ ์์ต๋๋ค. ๋ค, ๋ง์ต๋๋ค. ํ์ง๋ง ๋ ๊ฐ์ง ์ ์ฉํ ์ผ์ ํฉ๋๋ค. ์ฒซ์งธ, ๋ถ์๊ธฐ ๋ณด๊ณ ์๋ ์คํ์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋์งธ, ์ฝ๋ ์ ์ง ๊ด๋ฆฌ์ ์ฐธ์ฌํ๋ ์ฌ๋๋ค์ด ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค! ์ด๊ฒ๋ง์ผ๋ก๋ ์ฝ๋๋ฅผ ๋ ๋ช ํํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ํ ๋ฆฌํฉํ ๋ง์ ์ํํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ถ์๊ธฐ๋ "break"๊ฐ ํ์ํ์ง ์ฌ๋ถ๋ฅผ ์ดํดํ์ง ๋ชปํ๋ฏ๋ก ๋๋ฃ ํ๋ก๊ทธ๋๋จธ์๊ฒ๋ ๋ถ๋ถ๋ช ํฉ๋๋ค.
๋ฒ๊ทธ ์์ ๋ฐ ๋ฆฌํฉํ ๋ง ์ธ์๋ ๋ช
๋ฐฑํ ์๋ชป๋ ๋ถ์๊ธฐ ๊ฒฝ๊ณ ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ต์ ํ ์ ์์ต๋๋ค. ์ผ๋ถ ๊ด๋ จ ์๋ ์ง๋จ์ ๋นํ์ฑํ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ฒฝ๊ณ ๊ฐ ๋ฌด์๋ฏธํ๋ค๊ณ ์๊ฐํ๋ ์ฌ๋์ด ์์ต๋๋ค.
์๋ชป๋ ๊ฒฝ๊ณ ๋ฅผ ์ต์ ํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋งคํฌ๋ก ๋งํฌ์ ์ ์์์ ์ธ๊ธํ์ต๋๋ค. ์ด ๋ชจ๋ ๋ด์ฉ์ ๋ฌธ์์ ๋ ์์ธํ ์ค๋ช ๋์ด ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์คํ์ง ์์ ์ ์ ์ง์ ์ด๊ณ ์ฒด๊ณ์ ์ผ๋ก ์ ๊ทผํ๋ฉด ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ์ดํดํ๋ ๊ฒ์ ๋๋ค. ํฅ๋ฏธ๋กญ์ง ์์ ๊ฒฝ๊ณ ์ ๋๋ถ๋ถ์ ๊ตฌ์ฑ ํ์ ์ฌ๋ผ์ง๊ณ , ์ค์ ๋ก ์ ์คํ ์กฐ์ฌ๊ฐ ํ์ํ ๋ถ๋ถ๊ณผ ์ฝ๋์ ์ผ๋ถ ๋ณ๊ฒฝ ์ฌํญ๋ง ๋จ์ต๋๋ค.
๋ํ, ์ด๋ ค์์ด ๋ฐ์ํ ๊ฒฝ์ฐ ํญ์ ๊ณ ๊ฐ์ด PVS-Studio๋ฅผ ์ค์ ํ ์ ์๋๋ก ๋์๋๋ฆฝ๋๋ค. ๋ํ, ํ์ ๊ฒฝ๊ณ ๋ฅผ ์์ฒด์ ์ผ๋ก ์ญ์ ํ๊ณ ์ค๋ฅ๋ฅผ ์์ ํ ์ฌ๋ก๋ ์์์ต๋๋ค.
๋์นซ ๋ฐฉ์
์ ์ ๋ถ์๊ธฐ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ์ฌ ์ฝ๋ ํ์ง์ ์ ์ง์ ์ผ๋ก ํฅ์์ํค๋ ๋ ๋ค๋ฅธ ํฅ๋ฏธ๋ก์ด ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. ๊ฒฐ๋ก ์ ๊ฒฝ๊ณ ํ์๊ฐ ์ค์ด๋ค ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ ์ ๋ถ์๊ธฐ์์ ๋ฐ์ํ ๊ฒฝ๊ณ ์๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค. ํ์ง ๊ฒ์ดํธ๋ ์ด์ ์์ ์๋ฅผ ๋๋ฆฌ์ง ์๋ ์ฝ๋๋ง ์ ๋ ฅํ ์ ์๋๋ก ๊ตฌ์ฑ๋์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ๋ถ์๊ธฐ๋ฅผ ์กฐ์ ํ๊ณ ์ค๋ฅ๋ฅผ ์์ ํ๋ ๊ฒ๋ถํฐ ์ ์ฐจ์ ์ผ๋ก ์๋ ์๋ฅผ ์ค์ด๋ ํ๋ก์ธ์ค๊ฐ ์์๋ฉ๋๋ค.
์ด๋ค ์ฌ๋์ด ์ฝ๊ฐ์ ๋ถ์ ํ์๋ฅผ ์ํ๊ณ ์ ์ฝ๋์์ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์๋๋ผ ์ด์ ํ์ฌ ์ฝ๋๋ฅผ ๊ฐ์ ํ์ฌ ํ์ง ๊ฒ์ดํธ๋ฅผ ํต๊ณผํ๊ธฐ๋ก ๊ฒฐ์ ํ๋๋ผ๋ ์ด๊ฒ์ ๋๋ ต์ง ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋์นซ์ ํ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ฉฐ ์ ์ฐจ์ ์ผ๋ก ๊ฒฐํจ ์๊ฐ ๊ฐ์ํฉ๋๋ค. ์ด๋ค ์ฌ๋์ด ์์ ์ ์๋ก์ด ๊ฒฐํจ์ ๊ณ ์น๊ณ ์ถ์ง ์๋๋ผ๋ ์ฌ์ ํ ์ด์ ์ฝ๋์์ ๋ญ๊ฐ๋ฅผ ๊ฐ์ ํด์ผ ํฉ๋๋ค. ์ด๋ค ์์ ์์๋ ๊ฒฝ๊ณ ํ์๋ฅผ ์ค์ด๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์ข ๋ฃ๋๊ณ ์ค์ ๋ฒ๊ทธ๊ฐ ์์ ๋๋ ์์ ์ด ์ต๋๋ค.
์ด ๋ฐฉ๋ฒ๋ก ์ Ivan Ponomarev์ ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ๊ธฐ์ฌ์ ์์ธํ ์ค๋ช
๋์ด ์์ต๋๋ค.
๊ธฐ์ฌ์ ์ ์๋ ์ด ์ฃผ์ ์ ๋ํ ๋ณด๊ณ ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค: "
๊ฒฐ๋ก
์ด ๊ธฐ์ฌ๋ฅผ ์ฝ๊ณ ๋๋ฉด ๋
์๋ค์ด ์ ์ ๋ถ์ ๋๊ตฌ๋ฅผ ๋ ๋ง์ด ๋ฐ์๋ค์ด๊ณ ์ด๋ฅผ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๊ตฌํํ๊ธฐ๋ฅผ ์ํ๊ฒ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ถ๊ธํ ์ ์ด ์์ผ์๋ฉด ์ธ์ ๋ ์ง ์ค๋น๋์ด ์์ต๋๋ค.
์ ์ ๋ถ์์ด ์ค์ ๋ก ํธ๋ฆฌํ๊ณ ์ ์ฉํ ์ ์๋์ง์ ๋ํ ๋ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ์๊ตฌ์ฌ์ด ์์ต๋๋ค. ๋๋ "PVS-Studio ์ ์ ์ฝ๋ ๋ถ์๊ธฐ๋ฅผ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๋์
ํ๋ ์ด์ "๋ผ๋ ์ถํ๋ฌผ์์ ์ด๋ฌํ ์์ฌ์ ๋๋ถ๋ถ์ ์์ ๋ ค๊ณ ๋
ธ๋ ฅํ์ต๋๋ค.
๋ง์ ๊ด์ฌ๊ณผ ๋ฐฉ๋ฌธ ๋ถํ๋๋ฆฝ๋๋ค
์ถ๊ฐ ๋งํฌ
- ์๋๋ ์ด ์นด๋ฅดํฌํ.
PVS-Studio ๋ถ์๊ธฐ๊ฐ C ๋ฐ C++ ์ฝ๋์ ๋ํด ์์ฑํ๋ ํฅ๋ฏธ๋ก์ด ๊ฒฝ๊ณ ๋ฅผ ์ด๋ป๊ฒ ๋นจ๋ฆฌ ๋ณผ ์ ์์ต๋๊น? - ์ํค ๋ฐฑ๊ณผ (Wikipedia).
๋ผ์ด์ค์ ์ ๋ฆฌ . - ์๋๋ ์ด ์นด๋ฅดํฌํ, ๋น
ํ ๋ฆฌ์ ์นด๋์๋ฐ.
ํ๋ก๊ทธ๋จ ์์ค ์ฝ๋์ ์ ์ ๋ถ์์ ๊ธฐ๊ณ ํ์ต ์ฌ์ฉ . - PVS-์คํ๋์ค. ์ ์ ์๋ฅ ๋น์น.
์ถ๊ฐ ์ง๋จ ์ค์ . - ์๋๋ ์ด ์นด๋ฅดํฌํ.
EFL ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ฅผ ์ฌ์ฉํ PVS-Studio ๋ถ์๊ธฐ์ ํน์ฑ, 10-15% ์คํ๋ฅ . - PVS-์คํ๋์ค. ์ ์ ์๋ฅ ๋น์น.
๋ถ์๊ธฐ ๋ฉ์์ง์ ๋๋ ์ต์ . - ์ด๋ฐ ์๋๋ฆฌ์์ .
X์ ํ๊ด๋ด ์์ ๊ต์ก์ฉ ์๋ฎฌ๋ ์ดํฐ ํ๋ก์ ํธ์์ ์ ์ ๋ถ์์ ํ ์คํธํ ๋ฐฉ๋ฒ์ ๋ํด . - Pavel Eremeev, Svyatoslav Razmyslov.
PVS-Studio ํ์ด Unreal Engine ์ฝ๋๋ฅผ ๊ฐ์ ํ ๋ฐฉ๋ฒ . - ์๋๋ ์ด ์นด๋ฅดํฌํ.
๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์ ์ ์ฝ๋ ๋ถ์๊ธฐ PVS-Studio๋ฅผ ๋์ ํ๋ ์ด์ .
์ด ๊ธฐ์ฌ๋ฅผ ์์ด๊ถ ์ฒญ์ค๊ณผ ๊ณต์ ํ๋ ค๋ฉด ๋ฒ์ญ ๋งํฌ์ธ Andrey Karpov๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์ถ์ฒ : habr.com