golang version 1.18μμ μΆκ°λ κΈ°λ₯ μ€ νλμ κΈ°λ₯μ΄λ©°,
Fuzzing(Fuzz testing)μ μννΈμ¨μ΄ ν μ€νΈ κΈ°λ²μΌλ‘ 무μμ ν μ€νΈ λ°©μ
-
νλμ¨μ΄λ μννΈμ¨μ΄ ν μ€νΈλ₯Ό μν 무μμ ν μ€νΈ λ°©μμΌλ‘, μ ν¨νλ©΄μ μμμΉμμ 무μμ λ°μ΄ν°λ₯Ό μ λ ₯νλ λ°©λ²
- κ°λ°μκ° μκ°μΉ λͺ»ν λ²κ·Έκ° μλ μ£μ§ μΌμ΄μ€λ₯Ό μ°Ύλ λ°μ μ¬μ©νλ ν μ€νΈ κΈ°λ²
-
μ£Όλ‘ μννΈμ¨μ΄λ μ»΄ν¨ν° μμ€ν λ€μ 보μ λ¬Έμ λ₯Ό ν μ€νΈνκΈ° μν΄ μ¬μ©λ¨
-
κΈ°μ‘΄ λ¨μν μ€νΈμμ ꡬ문 μ°¨μ΄
-
κΈ°μ‘΄ go test λ¨μ ν μ€νΈ
- ν¨μλͺ μ "Test"λ₯Ό λΆμ¬μ€¬μ
- μ λ ₯ νλΌλ―Έν°λ‘ "t *testing.T" μ¬μ©
- "go test -run=ν¨μλͺ "μΌλ‘ νΉμ ν¨μμ λν΄ ν μ€νΈ μ§ν
-
Fuzzing ν μ€νΈ
- "Fuzz"λ₯Ό ν¨μλͺ μ λΆμ¬μ€μΌ ν¨
- μ λ ₯ νλΌλ―Έν°λ‘ "f *testing.F" μ¬μ©
- "go test -fuzz=Fuzz"λ‘ νΌμ§ ν
μ€νΈ μ€ν
-fuzztime νλκ·Έλ₯Ό ν΅ν΄ νΌμ§ ν μ€νΈμ 걸리λ μκ°μ μ νν μ μμ
-
-
μμ 1) Reverse() ν¨μ
// Reverse() : λ¬Έμμ΄ μμμΌλ‘ λ³ννλ ν¨μ func Reverse(s string) (string, error) { if !utf8.ValidString(s) { return s, errors.New("input is not valid UTF-8") } b := []byte(s) for i, j := 0, len(b)-1; i < len(b)/2; i, j = i+1, j-1 { b[i], b[j] = b[j], b[i] } return string(b), nil }
// TestReverse() : Reverse ν¨μμ λν λ¨μ ν μ€νΈ // tc 3κ°μ§μ κ²½μ°μ λν΄ κ²°κ³Όκ° μ²΄ν¬ func TestReverse(t *testing.T) { testcases := []struct { in, want string }{ {"Hello, world", "dlrow ,olleH"}, {" ", " "}, {"!12345", "54321!"}, } for _, tc := range testcases { rev := Reverse(tc.in) if rev != tc.want { t.Errorf("Reverse: %q, want %q", rev, tc.want) } } }
// FuzzReverse() : Reverse ν¨μμ λν νΌμ§ ν μ€νΈ // λλ€ stringκ°μ 무μμ λμ func FuzzReverse(f *testing.F) { testcases := []string{"Hello, world", " ", "!12345"} for _, tc := range testcases { f.Add(tc) // Use f.Add to provide a seed corpus } f.Fuzz(func(t *testing.T, orig string) { rev := Reverse(orig) doubleRev := Reverse(rev) if orig != doubleRev { t.Errorf("Before: %q, after: %q", orig, doubleRev) } if utf8.ValidString(orig) && !utf8.ValidString(rev) { t.Errorf("Reverse produced invalid UTF-8 string %q", rev) } }) }
-
μμ 1)μ 3λ²μ§Έ νΌμ§ ν μ€νΈ κ²°κ³Ό ν΄μ
- Failing input written to testdata/fuzz/FuzzReverse/af692587... λλ ν°λ¦¬μ νμΌ νμΈν΄λ³΄λ©΄, μ€ν¨μ κ²½μ° μ
λ ₯κ° κΈ°μ
λμ΄μμ
- string("ζ³") μ λν΄ μ€λ₯ λ°μ
- ν΄λΉνλ ζ³ μ λμ½λ λ¬Έμλ utf-8μμ νκΈμμ§λ§, 2byteμ΄μμ 곡κ°μ μ°¨μ§νλ―λ‘.. []byte κΈ°μ€μΌλ‘ μλ€λ₯Ό λ€μ§μΌλ©΄ μμμΉ λͺ»ν κ°μ΄ λμ΄λ²λ¦Ό
- λ°λΌμ νΉμ μ£μ§ μΌμ΄μ€λ₯Ό μ°Ύμλ΄λ λ°μ λμμ΄ λλ ν μ€νΈ κΈ°λ²μ
- Failing input written to testdata/fuzz/FuzzReverse/af692587... λλ ν°λ¦¬μ νμΌ νμΈν΄λ³΄λ©΄, μ€ν¨μ κ²½μ° μ
λ ₯κ° κΈ°μ
λμ΄μμ