퍼즈 테스트

Fuzz testing

형식이 다양하거나 깨진 입력을 대량으로 넣어 충돌과 비정상 동작을 찾습니다.

···
html
<div class="stage"><div class="title">FUZZ TEST</div><div class="canvas"><div class="stream" id="stream"><span>abc</span><span>a%0</span><span>[ ]</span><span>0x00</span></div><div class="parser">PARSER <i>→</i> <b id="result">OK</b></div><div class="case" id="case">saved crash input: none</div></div></div>
css
.stage{width:min(94vw,820px);height:min(88vh,330px);box-sizing:border-box;padding:clamp(9px,2.4vmin,18px);border:1px solid var(--line);border-radius:13px;background:var(--surface);display:flex;flex-direction:column;gap:clamp(7px,2vmin,14px);font:600 clamp(12px,2.5vmin,16px)/1.28 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;color:var(--fg);overflow:hidden}.title{color:var(--accent);letter-spacing:.035em;flex:none}.canvas{position:relative;flex:1;min-height:0;display:flex;align-items:center;justify-content:center}.muted{color:var(--muted)}.mono{font-family:ui-monospace,SFMono-Regular,monospace}.box{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(5px,1.4vmin,12px);text-align:center}.active{border-color:var(--accent)!important;color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.canvas{flex-direction:column;gap:clamp(8px,3vmin,20px)}.stream{display:flex;gap:5px;justify-content:center;flex-wrap:wrap}.stream span{border:1px solid var(--line);border-radius:4px;padding:5px 8px;font-family:ui-monospace,monospace;color:var(--muted)}.stream span.on{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface));transform:translateY(5px)}.parser{border:2px solid var(--accent);border-radius:8px;padding:clamp(8px,2.4vmin,18px);color:var(--accent)}.parser i{font-style:normal;color:var(--muted)}.case{color:var(--muted);text-align:center}
js
let n=0;const samples=[...document.querySelectorAll('.stream span')];function feed(){const i=n++%samples.length;samples.forEach((el,j)=>el.classList.toggle('on',i===j));document.getElementById('result').textContent=i===3?'CRASH':'OK';document.getElementById('case').textContent=i===3?'saved crash input: null byte':'saved crash input: none'}feed();setInterval(feed,700)

퍼즈 테스트는 입력을 무작위로 만들거나 기존 샘플을 변형해 프로그램에 넣습니다. 파서나 프로토콜 경계에서 미처 생각하지 못한 조합을 찾는 데 유용합니다.

데모는 변형된 입력들이 파서로 들어가고 충돌을 낸 입력이 따로 남는 모습을 보여줍니다. 발견한 입력은 재현 가능한 회귀 테스트로 보관해야 합니다.

언제 쓰나

파일 파서, 입력 디코더, 네트워크 프로토콜 같은 복잡한 입력 경계에 사용합니다.

페이지로 열기 ↗