๐Ÿ” ์—ฐ๊ตฌ์˜ ํ•„์š”์„ฑ


LLM์˜ ๋ฐœ์ „์œผ๋กœ ์ฝ”๋“œ ์ƒ์„ฑ์ด ํ™œ๋ฐœํ•ด์กŒ์ง€๋งŒ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ๋Š” ์ •๋‹ต์„ ๋‚ด๋Š” ๊ฒƒ๊ณผ ์‹œ๊ฐ„ ์ œํ•œ ์•ˆ์—์„œ ์ •๋‹ต์„ ๋‚ด๋Š” ๊ฒƒ์ด ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฒฝ์Ÿ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ฝ”๋”ฉ ์ธํ„ฐ๋ทฐ, ๋ฒค์น˜๋งˆํฌ ๋Œ€๋ถ€๋ถ„์€ time limit์„ ๋ช…์‹œํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ž‘์€ ์ž…๋ ฅ์—์„œ๋Š” ํ†ต๊ณผํ•˜๋”๋ผ๋„ ํšจ์œจ์„ฑ์ด ์ค‘์š”ํ•œ ์˜์—ญ์— ๋“ค์–ด๊ฐ€๋ฉด ์‹คํŒจํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์ตœ๊ทผ ์—ฐ๊ตฌ๋“ค์€ ์ฝ”๋“œ์˜ ์ •๋‹ต ์—ฌ๋ถ€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹คํ–‰ ํšจ์œจ์„ฑ๊นŒ์ง€ ํ•จ๊ป˜ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด์„œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ๋ณ‘๋ชฉ์„ ๋“œ๋Ÿฌ๋‚ด๋Š” ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค(efficiency test cases) ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ž…๋ ฅ์„ ํฌ๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Worst ์ผ€์ด์Šค๋Š” ์ข…์ข… ์ž…๋ ฅ์˜ ๊ตฌ์กฐ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์—ญ์ •๋ ฌ๋œ ๋ฐฐ์—ด์€ pivot์— ๋ฏผ๊ฐํ•œ quicksort๋ฅผ ๋ฌด๋„ˆ๋œจ๋ฆฌ๊ณ , path-shaped ํŠธ๋ฆฌ๋Š” ์žฌ๊ท€ ๊นŠ์ด๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜์—ฌ ์—ฐ์‚ฐ๋Ÿ‰์„ ํญ์ฆ์‹œํ‚ต๋‹ˆ๋‹ค. ์ฆ‰ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” (i) ์ž…๋ ฅ ์ œ์•ฝ์„ ๋งŒ์กฑํ•˜๋ฉด์„œ (ii) ๋น„ํšจ์œจ์  ํ’€์ด๊ฐ€ ๋А๋ ค์ง€๋Š” ๊ตฌ์กฐ๋ผ๋Š” ๋‘ ์กฐ๊ฑด์„ ๋™์‹œ์— ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ํšจ์œจ์„ฑ ์ง€ํ–ฅ ํ…Œ์ŠคํŠธ ์ƒ์„ฑ๊ธฐ๋“ค์€ ์ด ๋‘ ์กฐ๊ฑด ์ค‘ ์ผ๋ถ€๋งŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ž…๋ ฅ ํฌ๊ธฐ๋ฅผ ํ‚ค์›Œ runtime threshold๋ฅผ ๋„˜๊ธฐ๋Š” ๋ฐ ์ง‘์ค‘ํ•˜๊ฑฐ๋‚˜, ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์œผ๋กœ๋ถ€ํ„ฐ ๋ณ‘๋ชฉ ์กฐ๊ฑด์„ ์ถ”๋ก ํ•ด fuzzing์œผ๋กœ ์ž…๋ ฅ์„ ์ฐพ๋Š” ์‹์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฐฉํ–ฅ ๋ชจ๋‘ reference implementation์˜ ์‹คํ–‰ ํ–‰์œ„์—์„œ ๋น„ํšจ์œจ์„ ์ถ”์ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, "์ด ์ฝ”๋“œ๋ฅผ ๋ฌด์—‡์ด ๋А๋ฆฌ๊ฒŒ ํ•˜๋Š”๊ฐ€" ๋Š” ๋‹ตํ•ด๋„ "์ด ๋ฌธ์ œ๋ฅผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ ์œผ๋กœ ๋ฌด์—‡์ด ์–ด๋ ต๊ฒŒ ํ•˜๋Š”๊ฐ€" ๋Š” ๋‹ตํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ๊ณต๋ฐฑ์„ ๋ฉ”์šฐ๊ธฐ ์œ„ํ•ด STAB์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. STAB์€ reference implementation์ด๋‚˜ ์‹คํ–‰ ํ”ผ๋“œ๋ฐฑ ์—†์ด ์ž์—ฐ์–ด ๋ฌธ์ œ ๋ช…์„ธ๋งŒ์œผ๋กœ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, "์œ ํšจํ•œ ์ž…๋ ฅ ๊ฒฝ๊ณ„๋ฅผ ์–ผ๋งˆ๋‚˜ ํฌ๊ฒŒ ์žก์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€"์™€ "๊ทธ ๊ฒฝ๊ณ„ ์•ˆ์—์„œ ์–ด๋–ค ๊ตฌ์กฐ๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋А๋ฆฌ๊ฒŒ ํ•˜๋Š”๊ฐ€"๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

โœจ STAB์ด๋ž€?


overview.png

STAB (Specification-driven Testing for Algorithmic Bottlenecks)์€ ์ž์—ฐ์–ด ๋ฌธ์ œ ๋ช…์„ธ๋งŒ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„, ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ๋ณ‘๋ชฉ์„ ๋…ธ์ถœํ•˜๋Š” ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” specification-driven ํŒŒ์ดํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ ์›์‹œ ์ž…๋ ฅ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ผ Python generator ํ•จ์ˆ˜์ด๋ฉฐ, ์‹คํ–‰ ์‹œ ๊ตฌ์ฒด์  ์ž…๋ ฅ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. Generator ํ‘œํ˜„์€ ์ž…๋ ฅ์ด ํฌ๊ณ  ๊ตฌ์กฐ์ ์ผ ๋•Œ ๋” ์งง๊ณ , ๊ตฌ์„ฑ ๋…ผ๋ฆฌ๊ฐ€ ๋“œ๋Ÿฌ๋‚˜๋ฉฐ, ๋™์ผํ•œ ์ฑ„์  ํ™˜๊ฒฝ์—์„œ ๋ฐ˜๋ณต ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

STAB์€ ์ง์ ‘ ํ”„๋กฌํ”„ํŒ…์ด ํ•œ ๋ฒˆ์— ํ’€์–ด์•ผ ํ–ˆ๋˜ ๋‘ ๊ณผ์ œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1. Constraint Saturator (์ž…๋ ฅ ๊ฒฝ๊ณ„๋ฅผ ์ตœ๋Œ€๋กœ ํ‚ค์šฐ๊ธฐ)

<aside> ๐Ÿ“Œ

2. Adversarial Scenario Injector (์ ๋Œ€์  ๊ตฌ์กฐ ์›๋ฆฌ ์ฃผ์ž…ํ•˜๊ธฐ)

<aside> ๐Ÿ“Œ

3. Generator Synthesis (๊ตฌ์กฐํ™”๋œ ๋ช…์„ธ๋กœ generator ํ•ฉ์„ฑํ•˜๊ธฐ)

<aside> ๐Ÿ“Œ

ํ‰๊ฐ€ ์ง€ํ‘œ (Metric)

<aside> ๐Ÿ“Œ