그래서 흔히 하는 예제 기반 테스팅으로는 버그 다 잡기 어려울 거임
property based testing 하세여 이번 기회에 배워 보세여
https://medium.com/happyprogrammer-in-jeju/%ED%8E%B8%EB%A6%AC%ED%95%98%EA%B3%A0-%EA%B0%95%EB%A0%A5%ED%95%9C-%EC%86%8D%EC%84%B1-%EA%B8%B0%EB%B0%98-%ED%85%8C%EC%8A%A4%ED%8C%85-b405ab54fd3c
한글로 소개한 글이 있네여
PBT가 뭔지 간단히 소개해보자면
테스트케이스를 자동으로 생성해서 테스트 하는거임.
여기까지는 이미 하고 있는 사람들이 있을 거임.
문제는 막 key 10000개 넣었는데 터지면 디버깅이 존나 빡세잖음?
PBT 라이브러리는 자동으로 생성한 입력이 테스트를 통과하지 못하면, 지가 알아서 입력 데이터 크기를 줄여가면서 테스트가 계속 실패하는지 봄.
그러다가 일정 크기 이하가 되면 테스트가 실패하는 꽤나 작은 입력데이터를 얻을 수 있음. 내가 비트리로 해보니까 아무리 복잡한 케이스도 보통 노드가 5개 정도 되는 입력으로 축소됨.
속성 기반 테스트를 짜는게 좀 힘들긴 한데 짜두면 효과는 확실함. 그리고 비트리 속성이야 뻔하니까 사실 그리 어렵지도 않음. 전에 내가 올린 코드에서 속성들 확인할 수도 있음 뭐 노드는 어떻고 트리는 어떻고..
C++이면 rapidcheck
파이썬이면 hypothesis
하스켈이면 원조 맛집 quickcheck
이거 진짜 존나 좋으니까 찍먹들 해봐여
Rapidcheck 관리가 제대로 안 되는듯
파이슨 하이포띠시스가 그나마 잘 되는 편인데, C로 인터페이스 만들고 DLL로 구운 다음에 파이슨에서 가져와서 테스트하는 방법도 있긴 함
이럴 땐 Scala가 하고 싶음 스칼라 pbt 잘 돼 있는 걸로 유명한디
하스켈, 얼랭, 스칼라, 파이썬, 근로저 정도가 제대로 돌아가는 pbt 라이브로리 있다고 알고 있음.