Unit testing – 왜 하기 어려운 것일까?


처음 unit testing이란 것을 접했을때, 뭔가 debugging 하는 것과 비슷한 것 같기도 하고, 저거 왜하나? 란 생각을 했었다. 지금에서 생각해보면 잘못된 생각이라는 것을 알지만, 그 당시에는 unit testing이라는 것이 생소했다.

대학원때 그런 것을 접했으니까, 지금으로부터 대충 10년 전 얘기다..

그런데 10년이 지난 지금은 잘 하고 있는가? Automotive SPICE나 DO-178C나 그런 분야에서 unit testing을 어떻게 하라고 얘기를 하진 않는다. integration testing도 마찬가지이고.. 그냥 기본중의 기본이니까 특별히 어떻게 하라는지에 대한 언급은 나오지 않는다. 그냥 그걸 하라! 고 되어있다.

실제로 기업지원을 할 때에 의외로(!) 그런 것들에 대한 지식이 부족해서 수행을 못하는 경우를 많이 봐왔다. 보통 A-SPICE 과제를 1년 정도 잡고 한다. 시스템 요구사항 분석에서부터 시스템 시험까지이다. 사실 reverse engineering이 아니면 1년으로는 시간이 많이 부족하다. reverse이고, 이미 다 알고 있는 거라고 생각해서 우습게 접근한다. 그런데 그렇게 만만하게 접근했다가 데인 회사가 한두 곳이 아니다.

실상은 그렇다. 템플릿 주고 어떻게 하라고 가이드 주면 쉽게 할 수 있다고 생각한 것이다. 그런데, 내가 아무리 박진영이 추는 춤을 본다고 한들, 박진영의 춤을 따라할 수는 없다. 왜냐면 난 기본이 안되어있기 때문이다. 그쪽에 소질이 없기도 하고.. 가이드 한번 딱 설명해주면 쉽게 따라할 수 있을 것 같은가?

실제 기업지원할때 30번은 넘게 설명한 것도 있었던 것 같다. 하지만 그들은 그렇게 쉽게 따라하지 못한다. 결국 상당한 분량을 직접하면서 보여주지 않으면 도대체 어떻게 하라는 것인지 감 조차 잡지 못한다. 그들에게 나의 설명은 뜬구름 잡는 이야기로만 들리게 되는 것이다.

Unit testing도 어찌보면 비슷했다. void function_name(void)의 형태로 함수를 정의해놓고 함수 내의 변수를 관측해야 하는데, 그 변수는 local로 숨어있다. 그러면 … 그 local변수를 global로 뽑아내거나 return값으로 반환하거나 등등 해야 하는데,, 도저히 코드에 손을 대지 않고는 시험이 불가능한 경우가 많았다.

애초에 코드 구현 당시부터 시험할 생각이 아예 없었기 때문에 코드 구현이 그렇게 밖에 나올 수가 없었다. 그런데 그런 코드를 갖고 1년내에 A-SPICE를 마무리하겠다고? 처음부터 달성 불가능한 과제를 달성가능하다고 믿고(게다가 1년도 너무 길고, 9개월로 줄여야 한다고 말하는 대범함을 보이는 사람도 있다. 안타까운 점은 그들이 의사결정에 영향을 미치는 사람이라는 점이다.) 일을 시키는 것이다. 그리고 한 담당자를 정한다. 너가 성공하면 KPI가 올라갈 것이고, 너가 실패하면 너의 KPI는 망할것이니라…

그 담당자는 정말 지옥같은 상황에 직면하게 된다. 그가 딱히 잘못한 것은 없으나 홀로 벌을 받고 있다. 안타까운 점은 관리자는 자기가 무슨 일을 저질렀는지 전혀 모르고, (모르는 척 할 수도 있다.) 앞으로도 모를 것이란 점이다.

그래서 요즘에는 가장 기초적이거나 기본적인 활동에 관심을 가지고 있다. 그 중의 하나가 open source 프로세스 관리도구를 구축하거나 open source util을 활용하는 것이다.

최근에 우연으로 xUnit에 관심을 가져서 좀 찾아봤는데, unit test 도구를 꼭 사용해야 할 필요는 없다는 점을 알게 되었다. CuTest나 gTest등을 사용하면 그럭저럭 단위 시험을 수행할 수 있다. target에 올려서 하는 것도 당연 가능하다. (관련 도구를 판매하는 회사 입장에서는 고객이 잘 몰라서 돈 좀 많이 벌어서 좋았겠지만..) 게다가 그런 testing platform을 사용하면 continuous integration을 실현할 수도 있다.

아마도 업체들 입장에서는 여전히 xUnit을 사용하지 못할 것이다. 왜냐면 application code와 platform specific한 code가 mix되어 있기 때문일 것이다. 그런 회사에서는 platform code를 지원하는 비싼 tool을 사서 해야 할 것이다. 그렇지 않다면 적당히 잘 구조화시켜서 설계해야 한다. 요즘 그쪽에 대한 solution을 고민중이다. real-time OS에 대한 부분과 함께..

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s