한동안 소프트웨어의 품질을 높이기 위해 QA(Quality Assurance) 활동이 주류를 이루었다. QA의 하나로 가장 주목받는 분야가 테스트라는 것은 누구도 부인하기 어려울 것이다. 그만큼 소프트웨어의 완성도를 확인하기 위해 중요한 활동이 테스트이고, 아직까지도 충분한 만족도를 내지 못하는 분야이기도 하다. 최근에 테스트 자동화를 통해 이러한 한계를 해결하고자 노력하고 있지만, 끊임없는 테스트자동화 도구가 나오는 이유는 아직도 요구를 충분히 만족시키지 못하기 때문일 것이다. 이번 회에서는 테스트 자동화에 대해 국제대학교 김성철 교수를 만나 자세한 얘기를 들어본다.
Q: 안녕하세요. 소프트웨어 테스트에 대한 말들이 요새 더 많이 나오기 시작하는 것 같습니다. 테스트 자동화에 대해 말씀해 주시죠.
테스트는 소프트웨어 개발에 있어 없어서는 안되는 중요한 활동 중의 하나입니다. 소프트웨어라는 것이 처음 나왔을 때부터 지금까지쉼없이 발전하는 분야 중의 하나이기도 합니다. 하지만, 소프트웨어 테스트의 발전은 더디기만 했습니다. 가장 큰 이유는 소프트웨어테스트가 항상 수작업으로 이루어질 수 밖에 없었기 때문입니다. 사람이 할 수 있는 것에는 한계가 있는데 아무리 노력해도 모든 테스트 케이스를 커버하기도 어렵고, 일정한 테스트 수준을 유지하기도 어려웠습니다. 이러한 것을 보완하고자 TDD(Test Driven Development)나 테스트 자동화 같은 분야들이 나오기 시작한 것이죠.
Q: TDD에 대해서는 지난번 185호 인사이드 이슈에서 말씀하셨는데요. 테스트 케이스를 개발하기 전에 만들어 개발한 코드가 정상적으로 동작하는지 미리 확인하자는 것으로 기억하고 있습니다. 그렇다면, 테스트 자동화가 소프트웨어 개발에서 필요한 이유는 무엇인가요?
소프트웨어 테스트는 소프트웨어가 정상적으로 동작하는지를 살펴보기 위해 테스트 데이터를 샘플로 만들어서 개발자가 직접 테스트를 했습니다. 이러한 수작업은 모든 테스트 케이스를 만들 수 없었고 일관된 테스트도 하기 어렵습니다. 그리고, 테스트 계획을 수립할때도 효과적인 테스트 케이스를 만들기 어렵습니다(그림1).
<그림1> 테스트의 효율성과 유효성
출처: http://www.tssg.org/
가장 좋은 테스트는 모든 테스트 케이스를 포함하고 빠르게 테스트가 가능해야 합니다. 그림1에서 보는 것처럼 유효한 테스트가 효율적으로 이루어져야 좋은 테스트가 되고, 좋은 테스트를 통해 안전한 소프트웨어를 완성할 수 있습니다. 표1은 테스트 자동화를 통해 얻을 수 있는 효과를 나타냅니다.
<표1> 테스트 자동화의 효과