Callee 커버리지
Noir는 엔드포인트에 best-effort 1-hop handler callee를 붙일 수 있습니다. callee는 라우트 핸들러 본문 안에서 직접 관찰된 함수, 메서드, 프레임워크 호출입니다. AI SAST 도구와 코드 리뷰어가 다음에 확인할 코드를 좁히는 데 사용할 수 있습니다.
plain 출력에서 callee를 보려면 --include callee를 사용하세요:
noir scan . --include callee
JSON, JSONL, YAML, TOML 같은 모델 기반 포맷과 plain 모델 직렬화는 엔드포인트 모델을 통해 callees 필드를 포함합니다. OpenAPI 2.0/3.0은 operation 레벨의 x-noir-callees extension으로, SARIF는 result.properties.noir.callees로, Postman collection은 item description의 사람이 읽을 수 있는 목록으로 callee를 제공합니다. cURL, HTTPie, PowerShell, only-url, only-param 같은 명령/필터 목적 출력은 주 출력 형태를 안정적으로 유지하기 위해 callee를 생략합니다.
path와 line은 best-effort 위치 정보입니다. 대부분의 analyzer는 호출 위치를 보고하고, definition resolution을 지원하는 analyzer는 도달 가능한 경우 callee 정의 위치를 보고하며 그렇지 않으면 호출 위치를 유지합니다.
커버리지 매트릭스
아래 표는 callee 추출 functional test가 있는 프레임워크를 보여줍니다. 여기에 없는 프레임워크도 엔드포인트 탐지는 지원될 수 있지만, AI 소비자는 callee 커버리지를 없거나 검증되지 않은 것으로 취급하는 것이 안전합니다.
| 언어 | callee 커버리지가 있는 프레임워크 |
|---|---|
| C# | ASP.NET Core MVC, ASP.NET MVC, FastEndpoints |
| Clojure | Compojure |
| C++ | Crow, Drogon |
| Crystal | Amber, Grip, Kemal, Lucky, Marten |
| Dart | Dart Frog, Serverpod, Shelf |
| Elixir | Phoenix, Plug |
| F# | Giraffe |
| Go | Beego, Chi, Echo, fasthttp, Fiber, Gin, GoFrame, Goyave, go-zero, Hertz, httprouter, Iris, Gorilla Mux |
| Groovy | Grails |
| Haskell | Scotty, Servant, Yesod |
| Java | Armeria, Dropwizard, Javalin, JAX-RS, Micronaut, Play, Quarkus, Spark, Spring, Vert.x |
| JavaScript | Express, Fastify, Hono, Koa, NestJS, Next.js, Nitro, Nuxt, Remix, Restify, SvelteKit |
| Kotlin | http4k, Ktor, Spring |
| Lua | Lapis |
| Perl | Dancer2, Mojolicious |
| PHP | CakePHP, CodeIgniter, Hyperf, Laravel, Pure PHP, Slim, Symfony, Yii |
| Python | Aiohttp, Bottle, Django, Falcon, FastAPI, Flask, Litestar, Pyramid, Quart, Sanic, Starlette, Tornado |
| Ruby | Grape, Hanami, Rails, Roda, Sinatra |
| Rust | Actix Web, Axum, Gotham, Loco, Poem, Rocket, RWF, Salvo, Tide, Warp |
| Scala | Akka HTTP, http4s, Scalatra, ZIO HTTP |
| Swift | Hummingbird, Kitura, Vapor |
| TypeScript | NestJS |
완성도 참고사항
- Callee는 1-hop만 제공합니다. Noir는 transitive call graph를 만들지 않습니다.
- Dynamic dispatch, middleware chain, decorator, macro expansion, generated code, reflection은 정적 추출에서 누락될 수 있습니다.
- Named handler 기반 프레임워크는 동적이거나 inline callback이 많은 프레임워크보다 callee 커버리지가 좋은 편입니다.
- Definition resolution은 점진적으로 적용되며 현재 analyzer별로 지원됩니다.
- downstream 도구가 쓰기 쉽도록 callee는 엔드포인트별로 dedup되고 개수가 제한됩니다.
- renderer나 request accessor 같은 프레임워크 helper는 엔드포인트가 입력과 출력을 어떻게 다루는지 보여주므로 의도적으로 유지합니다.