티스토리 툴바



2010/04/21 15:01

Object, Object and Object (테스트 성능향상시키기)

소프트웨어 테스팅은 정말 필요한 부분이지만 개발자들은 테스트를 작성하거나 실행하는 것을 정말싫어하는것 같습니다. (저도 개발자 시절에 작성해본 테스트가 그리 많지 않은 같습니다.)


이런 개발자분들을 위해 많은 SE 연구자들이 자동으로프로그램을 테스트해주는 프로그램을 연구하기 시작했고 symbolic, conconlic, random등 많은자동 테스팅 방법이 나오고 사용되고 있습니다.


보통 자동 testing을 위해서는 testing할 프로그램의 부분 (unit)을 지정하고 이를 호출기 위한 입력값을 자동으로 생성해야 합니다.이 입력값이 int, float등의 기본타입의 경우는 쉽게 값을 만들수 있으나 입력값이Object인 경우에는 이를 생성하는 것이 쉽지 않습니다.


저의 한 친구가 2007년 개발한 Randoop (http://people.csail.mit.edu/cpacheco/randoop/1.2/doc/)이라는 도구는 이 문제를 해결하기 위해 프로그램에 있는 임의의 함수를 호출하여 object를생성하는 방식을 제안하였고 이는 매우 효과적이었습니다. 그러나 Randoop도 모든 object를 생성하지는 못하였고 그 결과로 test의 성능을 측정하는 branch coverage 40~60% 정도에머물러있습니다. (반대로 40%~60%의 코드는 테스트가 되지 않는다는이야기가 됩니다.)


저희는 objecttesting의성능에 큰 영향을 미친다는 것을 발견하고 일반적인 프로그램의 실행상에 생성되는 메모리상의 object를 캡춰하여testing에 사용하는 방법에 대해 연구하였습니다. 이 방법을 저희는귀엽게 OCAT (Object Capturing-based Automated Testing) 이라 부릅니다.




OCAT을 3개의 오픈소스, Apache Commons Collections (ACC), Apache XML Security (AXS), 그리고 JSAP 에서 실험해보았습니다. 아래 그림에서 보는것 같이 OCAT (노란색선) 을 사용하게 되면Randoop (파란색선) 보다 약 20% 이상 testingcoverage를 높일수 있게 됩니다. 간단한 아이디어지만매우 powerful한 결과입니다.


Iowa대학과 North Carolina 대학과 공동으로 한 이 연구는 2010ISSTA (http://selab.fbk.eu/issta2010/)에서발표될 예정입니다. (ISSTASE 분석및 테스팅 관련 최고의 학회입니다.)


여러분들은 여러분들의 소프트웨어를 어떻게 testing하고 있는지 궁금합니다. 어떤 tool을 사용하시는지,어떤 방법으로 하시는지, 어떤 개선점이 있을지 등을 알려 주세요. 그런 정보를 바탕으로 개발자들을 소프트웨어 테스팅의 고통에서 조금이라도 벗어날수 있도록 해줄수 있는 연구를 하고 싶습니다.

저작자 표시 비영리 변경 금지
Trackback 1 Comment 5