# nose

> 형식이 동일한 코드 뿐 아니라 동작이 동일한 코드(type-4 clones)도 일부 찾아주는 코드 중복 검사기.

형식이 동일한 코드 뿐 아니라 동작이 동일한 코드(type-4 clones)도 일부 찾아주는 [코드 중복](https://wiki.g15e.com/pages/Duplicated%20code.txt) 검사기.

https://github.com/corca-ai/nose

## 왜 만들었나

코드 중복은 보통 다음 [다음 네 가지로 분류](https://wiki.g15e.com/pages/Comparison%20and%20evaluation%20of%20code%20clone%20detection%20techniques%20and%20tools.txt)한다:

- **Type-1**: 공백이나 코멘트를 빼면 똑같이 생긴 코드 중복
- **Type-2**: 식별자나 리터럴 등만 다른 코드 중복 ($\alpha$-renaming 같은 걸 잡아준다.)
- **Type-3**: 거의 비슷한데 중간에 문장이 추가되거나 삭제되거나 변형된 형태
- **Type-4**: 동일한 계산을 수행하지만 문법적으로는 다르게 생긴 형태

널리 쓰이는 중복 검사기인 [jscpd](https://wiki.g15e.com/pages/jscpd.txt)는 Type-1과 Type-2를 일부 잡아준다. nose는 추가로 Type-3와 Type-4를 일부 잡아줄 수 있다.

## 코딩 에이전트 실험들

코딩 에이전트 덕에 다양한 시도를 해볼 수 있었다.

- LLMs as labelers: 서로 다른 언어, 서로 다른 분야의 저장소 약 100개를 클론하고, 이걸 여러 LLM이 독립적으로 레이블링하도록 하여 평가를 위한 데이터셋을 만들었다.
- Dyanmic workflow: 레이블링 과정에서 [Claude Code](https://wiki.g15e.com/pages/Claude%20Code.txt)의 "dynamic workflow" 기능을 쓰니 대규모 병렬 평가, 평가자 간 신뢰도 검사 등을 쉽게 할 수 있었다. 물론 토큰은 어마어마하게 녹았다.
- <적대적 공진화>: 한쪽에서는 점점 더 어려운 문제를 내고(동일한 행동을 하는 코드이지만 겉보기엔 다르게 생긴 코드 생성), 한쪽에선 이걸 점점 더 잘 찾아내게 하는 루프를 돌려봤다. 잘 작동함.