Unit-level concolic testing has become popular as it explores every execution path of each function in a short time with high branch coverage. However, the current concolic unit testing tool suffers a set of limitations. For example, the unit-testing tool cannot determine the actual type of what a void pointer is cast to, and external library functions are not fully supported. Therefore, the branch coverage obtained on real-world programs is not satisfying.
This dissertation conducts comprehensive experiments on six real-world subjects using CROWN2.0 ver 2020, a popular commercial unit-level concolic testing tool. In the experiments, all the 324 groups of unexplored branches of the target subjects are thoroughly analyzed, and this dissertation summarizes the analysis into 13 limitations of the current testing tool. For each limitation, this dissertation provides detailed explanations why the corresponding uncovered branches are not covered with code examples. I expect these explanations can help the developers to understand and improve the concolic unit testing tool in the future. Also, this dissertation proposes and applies solutions the obtained limitations, which gives an average improvement on the branch coverage of 77\% for six subjects.
유닛 레벨 Concolic 테스팅은 짧은 시간 안에 각 함수의 다양한 실행을 하면서 높은 분기 커버리지를 보이는 테스트를 생성할 수 있는 기술이다. 하지만, 현재의 Concolic 테스팅 기법은 여러 문제점을 가지고 있는데, 예를 들어 유닛 레벨 Concolic 테스팅 기법으로는 void 타입의 포인터가 어떤 타입으로 변환 (casting) 되어 사용되는지 알 수 없으며, 외부 라이브러리 함수도 제대로 다룰 수가 없다. 따라서, 실제 프로그램에 유닛 레벨 Concolic 테스팅 기법을 적용하였을 때 충분한 분기 커버리지를 달성하지 못하게 된다.
본 논문에서는 상용 유닛 레벨 Concolic 테스팅 도구인 CROWN2.0 ver 2020을 6개의 실제 프로그램에 적용한 실험을 구성하였다. 해당 실험에서 324개 그룹의 달성하지 못한 분기를 모두 분석하여, 현재 도구가 가지고 있는 13개의 제한점으로 정리하였다. 각 제한점에 대해 왜 해당 분기가 달성되지 못하였는지, 코드 예시를 포함한 설명을 추가하여 차후 Concolic 유닛 테스팅 도구 개발자가 각 제한점을 이해하고, 개선할 수 있도록 하였다. 또한, 각 제한점에 적용할 수 있는 해결법을 제시하고 구현하여, 종합적으로 6개의 테스트 대상 프로그램에서 77\%의 분기 커버리지 향상을 보였다.