[Go] fuzzing
์ด์ ํฌ์คํธ
https://blog.naver.com/sssang97/222692757243
fuzzing์ ๋์ ๊ธฐ๋ฐ์ ๋ฌด์์ ํ
์คํธ ๊ธฐ๋ฒ์ด๋ค.
๊ทธ๋ฅ ๋๋ค๊ฐ์ ์๋์ผ๋ก ์ค์
๋ฃ์ด์ ์๋ชป๋ ์ฃ์ง ์ผ์ด์ค๊ฐ ์๋ ๊ฒ์ฆํด๋ณด๋ ๊ฒ์ด๋ค.
Go 1.18๋ถํฐ ๊ธฐ๋ณธ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
๊ฐ๋ น, ์ด๋ฐ ๋จ์ํ ๋ง์ ํจ์๊ฐ ์๋ค๊ณ ํด๋ณด๊ฒ ๋ค.
์๋์ ์ผ๋ก lhs๊ฐ 10์ผ๋๋ง ์๋ชป๋ ๊ฐ์ ๊ณ์ฐํ๋ ๋ก์ง์ด ์กด์ฌํ๋ค.
์ค์ ๋ก ์ด๋ฐ ๋ง๋์๋๋ ์ฝ๋๋ฅผ ์งค ๋ฆฌ๋ ์์ง๋ง, ์ด๋ค ํํ๋ก๋ ์ง ๋ํ๋ ์ ์๋ ์ํฉ์ด๋ค.
๊ทธ๋์ ์ฌ๋๋ค์ ์ด๋ฐ๊ฑธ ์ต์ํํ๊ธฐ ์ํด์ ๋จ์ํ ์คํธ๋ฅผ ์์ฑํ๊ณค ํ๋ค.
ํจ๊ณผ๋ ์์ง๋ง, ๋จ์ ๋ํ ๊ทน๋ช
ํ๋ค.
๊ฒฐ๊ตญ ๋
ธ๊ฐ๋ค๋ก ์ผ์ด์ค ํ๋ํ๋๋ฅผ ๋ค ์น๊ฑฐ๋, ์์๋๋ ์ฃ์ง์ผ์ด์ค๋ฅผ ์ฐ์ด์ ๋ค ๋ง๋ค์ด์ค์ผ ํ๋๋ฐ, ์ฌ๋์ด ๊ทธ๊ฑธ ๋ค ์ฒดํฌํ๋๊ฑด ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๊ฑฐ๋ ํ๋ค๊ธฐ ๋๋ฌธ์ด๋ค.
Fuzzing ํ ์คํธํ๊ธฐ
์ด์ ๋ค์ ํด๋ณด์. ๊ธฐ์กด ํ
์คํธ์ฉ ์์คํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
ํจ์์ ์ด๋ฆ์ Fuzz๋ก ์์ํด์ผ ํ๊ณ , ํ๋ผ๋ฏธํฐ ํ์
๋ F์ฌ์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ Fuzz ํจ์๋ฅผ ํธ์ถํด์, ๊ฑฐ๊ธฐ ์์์ ์ง์ง ํ
์คํธ์ผ์ด์ค๋ฅผ ์์ฑํ๋ฉด ๋๋ค. 2๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ถํฐ๋ ๋์ถฉ ์ถ๊ฐํ๋ฉด ๊ทธ ํ์
์ ๋ง๋ ๊ฐ์ ์์์ ๋ฃ์ด์ค๋ค.

func FuzzTest2(f *testing.F) {
f.Fuzz(func(t *testing.T, lhs int, rhs int) {
a := Add(lhs, rhs)
b := Add(rhs, lhs)
if a != b {
t.Errorf("lhs: %d, rhs: %d", lhs, rhs)
}
})
}
๋ง์
์ ์ฌ์ฉํ ์๋ณ ๊ฐ์ ๋ค ์ ์๋ก ๋ฐ์์์ ๋๋ฆฌ๊ฒ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ตํ๋ฒ์น์ด ์ฑ๋ฆฝํ๋์ง๋ฅผ ๊ฒ์ฆํ๊ฒ ํ๋ค. ์ด๊ฑด ์
๋ ฅ๊ฐ์ ์์ธกํ ์ ์๊ธฐ ๋๋ฌธ์, ์ด๋ฐ์์ผ๋ก ์ข ์ฐํ์ ๊ฒ์ฆ์ ํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ ์คํธ์ผ์ด์ค๋ฅผ ๋๋ฆด๋ fuzz ์ต์ ์ ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
go test -fuzz=Fuzz

๊ทธ๋ผ ์์์ ๋์ ๋๋ ค๋ณด๋ค๊ฐ ์ค๋ฅ ์ผ์ด์ค๋ฅผ ์ฐพ์์ค ๊ฒ์ด๋ค.
๋ฑ ๋ง์ถฐ์ ๋์ ธ์คฌ๋ค.