fixture-monkey icon indicating copy to clipboard operation
fixture-monkey copied to clipboard

Add Caching

Open seongahjo opened this issue 4 years ago • 0 comments

캐싱을 적용합니다.

동일한 테스트 내에서 같은 객체를 여러 번 생성하는 경우는 드문 경우이기 때문에, 캐싱을 적용해도 큰 성능 차이는 없을 것으로 예상하지만 같은 동작은 하지 않으므로 디버깅이 편해질 것 같다. 작업 우선순위는 높지 않다.

Build

  1. decompose인 경우 캐시를 적용하지 않는다.
  2. build() 에서 tree를 이미 생성한 경우 캐싱하여 사용하도록 수정한다.
  3. traverse할 때 입력한 타입이 이미 가상 클래스 트리를 생성했으면 생성하지 않고 캐싱한 결과를 사용 3.1. 연산 적용하는 경우를 Traverser에서 식별해야 한다. (참조 머클트리, 블룸필터?) 3.2. Traverser는 같은 Fixture Monkey 인스턴스에서 생성한 ArbitraryBuilder에서 공유한다.

3번의 경우, 리스트를 필드로 가지고 있고, 리스트의 타입이 많은 필드를 가질 경우 유의미한 성능 차이를 만들어낼 수 있음. (e.g. 피보나치 DP) 3번을 해결할 때, 양방향 참조 문제도 해결할 것이라 예상. 해결 방식은 추후 고민이 필요.

Sample

  1. fixed()를 적용하고 isDirty()가 아닌 경우, 항상 같은 값을 반환하므로 sample()이 실행될 때 root의 lazyValue 값을 반환한다.

주의 해야할 점

  1. Lazy Evaluation

seongahjo avatar Oct 09 '21 10:10 seongahjo