초보 개발자
Concolic Testing 본문
** 본 글은 차성덕 교수님의 소프트웨어공학이야기 책을 정리한 글입니다. **
Concrete + Symbolic testing
특정 branch를 수행할 수 있는 입력값 자동 생성 도구 활용 (SMT solver)
복잡한 소프트웨어를 테스팅할 수 있는 Concolic Testing
Concolic 테스팅 기법과 이를 자동화하는 도구를 사용하는 것이 좋다. (CREST)
동작 원리: (1,1)부터 값을 주며 실행하고, 해당 상황에서 알게 된 지식을 바탕으로 값을 수정하며 반복 수행 (SMT solver 활용)
- 실제로 학생들이 테스팅해보면, statement coverage (57.3~78.3) / Branch Coverage (36.9~62.1)로 상당히 낮다.
- Concolic testing은? branch coverage 60%인 테스트 케이스를 자동으로 생성해준다. (학생 평균 36.9%)
- 60%가 시사하는 바: Concolic testing은 효과가 좋지만 그럼에도 불구하고 테스팅은 어렵다는 점을 보여준다.
- 실제로 concolic testing을 사용했음에도 호출되지 않은 함수가 매우 많다. - 기계학습을 도입하는 등 Concolic testing 수치를 개선하고는 있지만, 아직도 부족하다.
- 품질관점에서는, 예외상황 및 오류 검출이 가능한 테스트케이스를 생성하는 기능에 효과적이다.
- 보안 취약점을 찾는 것은 매우 어려운데 Concolic testing은 Fuzzing이라는 기법에 사용되며 취약점을 찾는데 효과적이다.
다양한 환경에서 프로그램 수행 + 각종 분기 수행에 Concolic Testing 기법 사용
입력값만 바꾸어 가며 Concolic Testing을 수행해도 목적을 달성할 수 있다
* Fuzzing: 임의의 입력을 사용하여 반복적으로 수행하며 crash를 찾는 것
'컴퓨터공학 전공 > 소프트웨어공학' 카테고리의 다른 글
정형검증: Model Checking vs Theorem Proving (1) | 2022.12.09 |
---|---|
정형검증 기법은 소프트웨어 품질에 어떻게 기여할 수 있을까? (3) | 2022.12.08 |
테스트 커버리지의 개념이란 (0) | 2022.12.08 |
소프트웨어 테스팅은 정말 어려운가? 왜 어려운가? (0) | 2022.12.08 |
소프트웨어의 개발비용을 어떻게 산정할까? (0) | 2022.12.08 |