๋์๋ ์ฝ๋ ๊ฒํ ๋ ๋๋ฒ๊น ์ ์ง์ณ์ ๋๋ก๋ ์ถ์ ๋จ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์กฐ๊ธ ๊ฒ์ํ๊ฑฐ๋ ์ฐ์ฐํ ์ฐ์ฐํ ๋ฐ๊ฒฌํ๋ฉด "์ ์ ๋ถ์"์ด๋ผ๋ ๋ง๋ฒ์ ๋ฌธ๊ตฌ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ์ ์ด๋ป๊ฒ ์ํธ ์์ฉํ ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฌ์ค ํ๋ ์ธ์ด๋ก ์์ฑํ๋ฉด ์์ ๋ ๋ชจ๋ฅด๊ฒ ์ ์ ๋ถ์๊ธฐ๋ฅผ ํตํด ์คํํ๊ฒ ๋ฉ๋๋ค. ์ฌ์ค ๋ชจ๋ ์ต์ ์ปดํ์ผ๋ฌ๋ ์ฝ๋์ ์ ์ฌ์ ์ธ ๋ฌธ์ ์ ๋ํด ์์ฃผ ์์ ๊ฒฝ๊ณ ์งํฉ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด Visual Studio์์ C++ ์ฝ๋๋ฅผ ์ปดํ์ผํ ๋ ๋ค์์ด ํ์๋ ์ ์์ต๋๋ค.
์ด ์ถ๋ ฅ์์ โโ์ฐ๋ฆฌ๋ ๋ณ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค ์๋ค ํจ์์ ์ด๋ ๊ณณ์์๋ ์ฌ์ฉ๋์ง ์์์ต๋๋ค. ๋ฐ๋ผ์ ์ค์ ๋ก๋ ๊ฑฐ์ ํญ์ ๊ฐ๋จํ ์ ์ ์ฝ๋ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฌ๋ 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๋ ๋ค์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํฉ๋๋ค.
์ด ์ค๋ฅ๋ฅผ ์ง์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด ์ปดํ์ผ๋ฌ ํ์๊ธฐ์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ์์ ๋ฅผ ์๋ํด ๋ณด์ธ์. *
์์๋ค์ํผ ์ด๋ฌํ ์ฝ๋ ์น์ ์ ์ฆ์์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๋ ๊ฒ์ด ํญ์ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋ฉฐ ์ด๋ก ์ธํด ๋ชจ๋ ๊ฒ์ด ์ ๊ทธ๋ ๊ฒ ์ด์ํ๊ฒ ์๋ํ๋์ง ๊ถ๊ธํดํ๋ฉด์ ํ ์๊ฐ ๋์ ๋๋ฒ๊น ์ ์์์์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๋ถ๋ช
ํ ์ค์์ด๋ค. ๊ฐ๋ฐ์๊ฐ ์ธ์ด์ ๋ฏธ๋ฌํจ์ ์์ด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ ์ต์ ์ด ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์๋๋ฉด ์ฝ๋์์ ํ์ฉํ์ ์๋ ์์ต๋๋ค.
์ด๋ฌํ ์ํฉ์ ์ํด ์ ์ ๋ถ์์ด ๋ํ๋ฌ์ต๋๋ค. ์ด๋ ์ฝ๋์ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์ง์ ํ๊ณ ๋ฌธ์์์ ์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์์ฑํ ํ์๊ฐ ์๋์ง, ์ด๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋ณด์กฐ์์
๋๋ค. ๋ค์์ ๊ทธ ์์
๋๋ค. *
๊ธฐ์ฌ์์ ๋ถ์๊ธฐ๊ฐ ๊ฐ์งํ ์ ์๋ ๋ ํฅ๋ฏธ๋ก์ด ์ค๋ฅ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
10๋ C++ ํ๋ก์ ํธ์ ์์ 2019๊ฐ ์ค๋ฅ 10๋ C# ํ๋ก์ ํธ์ ์์ 2019๊ฐ ์ค๋ฅ 10๋ Java ํ๋ก์ ํธ์ ์์ 2019๊ฐ ๋ฒ๊ทธ
์ด์ ์ด ์๋ฃ๋ฅผ ์ฝ๊ณ ์ ์ ๋ถ์์ ์ด์ ์ ํ์ ํ์ผ๋ฏ๋ก ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋์๋ถํฐ ์์ํด์ผ ํ ๊น์? ํ์ฌ ํ๋ก์ ํธ์ ์๋ก์ด ๋๊ตฌ๋ฅผ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ๊ทธ๋ฆฌ๊ณ ๊ทธ์๊ฒ ํ์ ์๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์๋์์ ์ด๋ฌํ ์ง๋ฌธ์ ๋ํ ๋ต์ ์ฐพ์ ์ ์์ต๋๋ค.
์์ต๋๋ค. ์ ์ ๋ถ์์ ์ฝ๋ ๊ฒํ ์ ๊ฐ์ ์ ์ฉํ ๊ธฐ๋ฅ์ ๋์ฒดํ๊ฑฐ๋ ์ทจ์ํ์ง ์์ต๋๋ค. ์ด๋ ์ด ํ๋ก์ธ์ค๋ฅผ ๋ณด์ํ์ฌ ์คํ, ๋ถ์ ํ์ฑ ๋ฐ ์ํํ ๋์์ธ์ ๋ฏธ๋ฆฌ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์๋ชป ๋ฐฐ์น๋ ๊ดํธ๋ ์ฝ๋๋ฅผ ์ฐพ๋ ๊ฒ๋ณด๋ค ์๊ณ ๋ฆฌ์ฆ ๋ฐ ์ฝ๋ ๋ช
ํ์ฑ์ ๋ํ ์ฝ๋ ๊ฒํ ์ ์ง์คํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์์ฐ์ ์
๋๋ค.
0. ๋๊ตฌ ์์๋ณด๊ธฐ
๋ชจ๋ ๊ฒ์ ํ๊ฐํ์ผ๋ก ์์๋ฉ๋๋ค. ์ค์ ๋ก, ์ด์ ์ ์ค์ ๋๊ตฌ๋ฅผ ๋ณธ ์ ์ด ์๋ค๋ฉด ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ตฌํํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ๋ค์ด๋ก๋์
๋๋ค.
์ด ๋จ๊ณ์์ ๋ฐฐ์ธ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ถ์๊ธฐ์ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
- ๋ถ์๊ธฐ๊ฐ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ํธํ๋ฉ๋๊น?
- ํ์ฌ ๊ทํ์ ํ๋ก์ ํธ์๋ ์ด๋ค ๋ฌธ์ ๊ฐ ์์ต๋๊น?
ํ์ํ ๋ชจ๋ ๊ฒ์ ์ค์นํ ํ ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ์ ์ฒด ํ๋ก์ ํธ์ ๋ํ ๋ถ์์ ์คํํ๋ ๊ฒ์
๋๋ค(
์ฌ์ค ์ ์ ๋ถ์๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋ ๊ธฐ๋ฐ์ด ํฐ ํ๋ก์ ํธ์ ๋ํด ์์ฒญ๋ ์์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํฉ๋๋ค. ํ๋ก์ ํธ๊ฐ ์ด๋ฏธ ์๋ ์ค์ด๋ฏ๋ก ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํ์๋ ์์ต๋๋ค. ์ฆ, ์ด๋ฌํ ๋ฌธ์ ๋ ์ฌ๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋น์ ์
์ค์ ๋ก ์์ฒ ๊ฐ์ ๊ฒฝ๊ณ ๋ณด๋ค 178๊ฐ์ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค.
ํญ์์ ์ค๊ธ ะธ ๋ฎ์ ์ข์ ๊ฒฝ๊ณ ๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง ์ด๋ฌํ ๋ฒ์ฃผ์๋ ์ ํ๋(์ ๋ขฐ๋)๊ฐ ๋ฎ์ ์ง๋จ์ด ํฌํจ๋ฉ๋๋ค. Windows ์์
์ ๊ฒฝ๊ณ ์์ค ๋ฐ ์ต์
์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค. *
๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ์ค๋ฅ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ฒํ ํ๊ณ ์ฑ๊ณต์ ์ผ๋ก ์์ ํ ๊ฒ์ ๊ฐ์น ์๋ ์ผ์
๋๋ค.
1. ์๋ํ
์ต์ํด์ง ํ์๋ ํ๋ฌ๊ทธ์ธ์ ๊ตฌ์ฑํ๊ณ CI์ ํตํฉํ ์ฐจ๋ก์ ๋๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ์ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ด ์์ ์ ์ํํด์ผ ํฉ๋๋ค. ์ฌ์ค ํ๋ก๊ทธ๋๋จธ๋ ๋ถ์์ ํ์ฑํํ๋ ๊ฒ์ ์๊ฑฐ๋ ๋ถ์์ ์ ํ ์ํ์ง ์์ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ํ ์คํธ๋์ง ์์ ์ฝ๋๊ฐ ์ผ๋ฐ ๊ฐ๋ฐ ๋ถ๊ธฐ์ ๋ค์ด๊ฐ ์ ์๋๋ก ๋ชจ๋ ๊ฒ์ ์ต์ข ์ ์ผ๋ก ํ์ธํด์ผ ํฉ๋๋ค.
์ด ๋จ๊ณ์์ ๋ฐฐ์ธ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋๊ตฌ๋ ์ด๋ค ์๋ํ ์ต์ ์ ์ ๊ณตํฉ๋๊น?
- ๋ถ์๊ธฐ๊ฐ ๊ทํ์ ์กฐ๋ฆฝ ์์คํ ๊ณผ ํธํ๋ฉ๋๊น?
์๋ฒฝํ ๋ฌธ์๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ก๋ ์์ฑํด์ผ ํ ๋๋ ์์ต๋๋ค.
์ด์ CI(์ง์์ ํตํฉ) ์๋น์ค๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ์ด๋ค ๋ถ์๊ธฐ๋ ์ฌ๊ฐํ ๋ฌธ์ ์์ด ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋น๋ ๋ฐ ๋จ์ ํ ์คํธ ๋ค์ ์์นํ๋ ํ์ดํ๋ผ์ธ์ ๋ณ๋์ ๋จ๊ณ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด๋ ๋ค์ํ ์ฝ์ ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด PVS-Studio๋ ๋ค์ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
PVS-Studio_Cmd.exe (Windows์์์ ์๋ฃจ์ , C#, C++ ํ๋ก์ ํธ ๋ถ์)CLMonitor.exe (์ปดํ์ผ ๋ชจ๋ํฐ๋ง)pvs-์คํ๋์ค-๋ถ์๊ธฐ (Linux/macOS์์์ C++ ํ๋ก์ ํธ ๋ถ์)pvs-์คํ๋์ค-dotnet (์๋ฃจ์ ๋ถ์, Linux/macOS์ C# ํ๋ก์ ํธ)pvs-studio.jar (Java ํ๋ก์ ํธ ๋ถ์)PlogConverter (๋ณด๊ณ ์ ํ์ผ ๋ณํ๊ธฐ)
๋ถ์์ CI์ ํตํฉํ๋ ค๋ฉด ๋ค์ ์ธ ๊ฐ์ง ์์ ์ ์ํํด์ผ ํฉ๋๋ค.
- ๋ถ์๊ธฐ๋ฅผ ์ค์นํ์ญ์์ค.
- ๋ถ์์ ์คํํฉ๋๋ค.
- ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ฅผ ๋ค์ด Linux(Debian ๊ธฐ๋ฐ)์ PVS-Studio๋ฅผ ์ค์นํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํด์ผ ํฉ๋๋ค.
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
Windows*๋ฅผ ์คํํ๋ ์์คํ
์ PVS-Studio๋ฅผ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
์ค์น ํ์๋ ๋ถ์์ ์ง์ ์คํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ปดํ์ผ๊ณผ ํ ์คํธ๋ฅผ ํต๊ณผํ ํ์๋ง ์ด ์์ ์ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ์ ์ ๋ถ์์ด ์ผ๋ฐ์ ์ผ๋ก ์ปดํ์ผ๋ณด๋ค ๋ ๋ฐฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์์ ๋ฐฉ๋ฒ์ ํ๋ซํผ๊ณผ ํ๋ก์ ํธ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฏ๋ก C++(Linux)์ ๋ํ ์ต์ ์ ์๋ก ํ์ํ๊ฒ ์ต๋๋ค.
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w
์ฒซ ๋ฒ์งธ ๋ช
๋ น์ ๋ถ์์ ์ํํ๊ณ ๋ ๋ฒ์งธ ๋ช
๋ น์
์์ต๋๋ค. ํ ์คํธ ํ์์ด ๋ถํธํฉ๋๋ค. ๊ฐ๋จํ ์์๋ก ์ ๊ณต๋ฉ๋๋ค. ์ข ๋ ํฅ๋ฏธ๋ก์ด ๋ณด๊ณ ์ ํ์์ธ FullHtml์ ์ฃผ๋ชฉํ์ธ์. ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
"์์ CI ๋ถ์ ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค.
์ข์ต๋๋ค. ๋น๋ ์๋ฒ์์ ๋ถ์๊ธฐ๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค. ์ด์ ๋๊ตฐ๊ฐ๊ฐ ํ ์คํธ๋์ง ์์ ์ฝ๋๋ฅผ ์ ๋ก๋ํ๋ฉด ๊ฒ์ฆ ๋จ๊ณ๊ฐ ์คํจํ๊ณ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ์ ์์ง๋ง ์ด๋ ์์ ํ ํธ๋ฆฌํ์ง๋ ์์ต๋๋ค. ๋ธ๋์น๋ฅผ ๋ณํฉํ ํ๊ฐ ์๋๋ผ ํ๋ก์ ํธ๋ฅผ ํ์ธํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ ์ ์ ํ ๋ฆฌํ์คํธ ๋จ๊ณ์์ A.
์ผ๋ฐ์ ์ผ๋ก ํ ์์ฒญ ๋ถ์์ ์ค์ ํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ธ 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
ํ ์์ฒญ ๋ถ์์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค *
ํ ์์ฒญ ๋ถ์์ ์ค์ ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ํฌํจ๋ ์ปค๋ฐ์ ์ฐจ๋จํ์ฌ ํ ์คํธ๋์ง ์์ ์ฝ๋๊ฐ ๋์ ์ ์๋ ๊ฒฝ๊ณ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
ํ์คํ ๋ค ์ข์๋ฐ, ๋ชจ๋ ๊ฒฝ๊ณ ๋ฅผ ํ ๊ณณ์์ ๋ณผ ์ ์์์ผ๋ฉด ์ข๊ฒ ์ด์. ์ ์ ๋ถ์๊ธฐ๋ฟ๋ง ์๋๋ผ ๋จ์ ํ
์คํธ๋ ๋์ ๋ถ์๊ธฐ์์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ์ด๋ฅผ ์ํ ๋ค์ํ ์๋น์ค์ ํ๋ฌ๊ทธ์ธ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด PVS-Studio์๋
2. ๊ฐ๋ฐ์ ์ปดํจํฐ์ ํตํฉ
์ด์ ์ผ์์ ์ธ ๊ฐ๋ฐ ์ฌ์ฉ์ ์ํด ๋ถ์๊ธฐ๋ฅผ ์ค์นํ๊ณ ๊ตฌ์ฑํ ์ฐจ๋ก์ ๋๋ค. ์ด ์์ ์์๋ ์ด๋ฏธ ๋๋ถ๋ถ์ ์์ ๋ฐฉ์์ ์ต์ํด์ก์ผ๋ฏ๋ก ์ด๊ฒ์ด ๊ฐ์ฅ ์ฌ์ด ๋ถ๋ถ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ์ต์
์ผ๋ก ๊ฐ๋ฐ์๋ ํ์ํ ๋ถ์๊ธฐ๋ฅผ ์ง์ ์ค์นํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์์
์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ๊ฐ๋ฐ์ ๋ฐฉํด๊ฐ ๋๋ฏ๋ก ์ค์น ํ๋ก๊ทธ๋จ๊ณผ ํ์ํ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ ์ ์์ต๋๋ค. PVS-Studio์๋ ๋ค์ํ
๊ทธ๋ฐ ๋ค์ ํ์ํ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด
3. ๋งค์ผ ์ฌ์ฉ
์ด ๋จ๊ณ์์๋ ์ผ์์ ์ธ ์ฌ์ฉ ์ค์ ๋ถ์๊ธฐ์ ์๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ช ๋ง๋ ๋งํ ์๊ฐ์
๋๋ค. ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ์๋ฒฝํ๊ฒ ๋ถ์ํ๋ ๋ฐ๋ ๋ง์ ์๊ฐ์ด ์์๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ์ฒด ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ฝ๋๋ฅผ ํ ๋ฒ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ๊ฐ ์ผ๋ง๋ ์์ฃผ ์์ต๋๊น? ์ ์ฒด ์ฝ๋ ๋ฒ ์ด์ค์ ์ฆ์ ์ํฅ์ ๋ฏธ์น ์ ๋๋ก ํฐ ๋ฆฌํฉํ ๋ง์ ๊ฑฐ์ ์์ต๋๋ค. ํ ๋ฒ์ ๋ณ๊ฒฝ๋๋ ํ์ผ ์๋ 12๊ฐ๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์์ผ๋ฏ๋ก ํด๋น ํ์ผ์ ๋ถ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฐ ์ํฉ์๋
๋ถ์๊ธฐ๊ฐ ์ต๊ทผ ๋ณ๊ฒฝ๋ ์ฝ๋์์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์ด๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณด๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด PVS-Studio๋ ๊ฒฝ๊ณ ๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ๋ํด ์๋ ค์ค๋๋ค.
๋ฌผ๋ก ๊ฐ๋ฐ์์๊ฒ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ๋งํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง, ๊ทธ๊ฒ์ด ์ด๋ค ๊ฒ์ธ์ง ์ด๋ป๊ฒ๋ ๊ทธ๋ค์๊ฒ ๋งํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์์ PVS-Studio์ ๋น ๋ฅธ ์์์ ๋ํ ๊ธฐ์ฌ์ด์ง๋ง ์ํ๋ ๋๊ตฌ์ ๋ํ ์ ์ฌํ ํํ ๋ฆฌ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค.
Windows(C, C++, C#)์์ PVS-Studio๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ Linux ๋ฐ macOS(C, C++)์์ PVS-Studio๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ PVS-Studio Java๋ฅผ ์์ํ๋ ๋ฐฉ๋ฒ
์ด๋ฌํ ๊ธฐ์ฌ๋ ์ผ์์ ์ธ ์ฌ์ฉ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฉฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค. ๐
๋๊ตฌ๋ฅผ ์์๊ฐ๋ ๋จ๊ณ์์๋ ์ฒซ ๋ฒ์งธ ์ถ์ ์ค ๋ง์ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ์ง ์์์ต๋๋ค. ๋ถํํ๊ฒ๋ ์ ์ ๋ถ์๊ธฐ๋ ์๋ฒฝํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋๋ก ๊ฑฐ์ง ๊ธ์ ์ ์ ๊ณตํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฅผ ์ต์ ํ๋ ๊ฒ์ ์ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด Visual Studio์ฉ PVS-Studio ํ๋ฌ๊ทธ์ธ์์๋ ๋ฒํผ ํ๋๋ง ํด๋ฆญํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๋จ์ํ ์ต์ ํ๋ ๊ฒ ์ด์์ ์์
์ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ง์ํ์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ ์ ์์ต๋๋ค. ๊ฑฐ์ง ๊ธ์ ์ ์์ ํ ์ ์๋ค๋ฉด ํฅํ ์
๋ฐ์ดํธ์์ ์ฝ๋๋ฒ ์ด์ค์ ๊ด๋ จ๋ ๊ฑฐ์ง ๊ธ์ ์ด ์ ์ ๋ ์ ์ด์ง๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
ํตํฉ ํ
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ ์ ๋ถ์์ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํตํฉํ๋ ๋ชจ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณค์ต๋๋ค. CI์์ ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํจ์๋ ๋ถ๊ตฌํ๊ณ ์ด๋ฅผ ์คํํ๋ ๊ฐ์ฅ ์ค์ํ ์ฅ์๋ ๊ฐ๋ฐ์์ ์ปดํจํฐ์ ๋๋ค. ๊ฒฐ๊ตญ, ์ ์ ๋ถ์๊ธฐ๋ ์ฝ๋๊ฐ ์ข์ง ์๋ค๊ณ ๋ฉ๋ฆฌ ๋จ์ด์ง ๊ณณ์์ ๋งํ๋ ํ์ฌ๊ฐ ์๋๋๋ค. ๋ฐ๋๋ก, ํผ๊ณคํ๋ฉด ์๋ ค์ฃผ๊ณ , ์์ด๋ฒ๋ฆฐ ๊ฒ์ด ์์ผ๋ฉด ์๊ธฐ์์ผ์ฃผ๋ ๋์ฐ๋ฏธ์ ๋๋ค.
์ฌ์ค, ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ ์ ๋ถ์์ด ๊ฐ๋ฐ์ ํฌ๊ฒ ๋จ์ํํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๊ฒฐ๊ตญ, ๊ฐ๋ฐ์๊ฐ ์ป์ ์ ์๋ ์ฃผ์ ์ด์ ์ ๋ณต์กํ๊ณ ๋ ผ์์ ์ฌ์ง๊ฐ ์๋ ์ฝ๋ ์น์ ์ ๊ฒ์ํ๋ ๊ฒ๋ณด๋ค ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ํ ์คํธ๋ฅผ ์ํด ํธ์ง ๋ด์ฉ์ ๋ณด๋ธ ํ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ ๊ฒ์ ๋ถ์พํ ๋ฟ๋ง ์๋๋ผ ์๊ฐ๋ ๋ง์ด ์๋ชจ๋๋ค๋ ์ ์ ๋์ํฉ๋๋ค. ์ ์ ๋ถ์์ ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ์ปดํจํฐ์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ง์ ์ดํด๋ณด๊ณ ์ฝ๋ ์์ ์ค์ ์์ฌ์ค๋ฌ์ด ๋ถ๋ถ์ ๋ณด๊ณ ํฉ๋๋ค.
๊ทํ ๋๋ ๊ทํ์ ๋๋ฃ๊ฐ ๋ถ์๊ธฐ๋ฅผ ๊ตฌํํ ๊ฐ์น๊ฐ ์๋์ง ์ฌ์ ํ ํ์ ํ์ง ๋ชปํ๋ค๋ฉด ์ด์ "๊ธฐ์ฌ๋ฅผ ์ฝ๊ธฐ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด ๊ธฐ์ฌ๋ฅผ ์์ด๊ถ ์ฒญ์ค๊ณผ ๊ณต์ ํ๋ ค๋ฉด ๋ฒ์ญ ๋งํฌ์ธ Maxim Zvyagintsev๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์ถ์ฒ : habr.com