Mutation Based Fuzzing = valid한 seed
의 입력이 중요하다.
Generation Based Fuzzing = program의 grammer
, 즉 spec
이 중요하다.
명세(specification)을 이용해서 테스트 케이스를 만드는 방법이다.📌 specification
타겟 프로그램의 valid한 입력을 만들어 낼 수 있는 문법(grammer)
📌 grammer
input의 syntatical 구조
context free grammer의 경우, start symbol과 production rules로 구성된다.
start symbol : <start>
production rule : <A> ::= <B>
이 경우, 이 grammer로 만들어 낼 수 있는 testcase는 100개이다.
문법은 보통 recursive하게 정의된다.
이와 같이 무한개의 testcase를 만들어낼 수 있게 된다.
artihmetic expression의 grammer을 이용해서, 아래와 같이 testcase (1+2)*(3.4/5.6)
을 derive할 수 있다.
1) 좋은 grammer을 만드는 것(build하는 것)이 중요하다.
2) grammer의 어떠한 production rules를 적용할지, 어떻게 derive할지도 중요한 이슈이다.
문법으로부터 production rule을 잘 derive 하는 것이 매우 중요하다.
그저 랜덤하게 자바스크립트 문법으로부터 derive하면, 매우 의미 없는 javascript testcases를 만들어내게 된다.