Specification할 때 abstraction의 정도는 어느 정도가 적당할까?


black box testing의 가장 큰 문제는 아무리 많은 시험을 해도 충분하지 않다는 것이다. 마음의 평안을 주지 못한다. 약간의 죄책감을 벗어나게 할 뿐, 여전히 두 다리 뻗고 잠을 자기에는 마음이 편치 않다는 점이다.

갑자기 13245363232556버튼을 연속으로 눌렀을 때 시험대상이 이상한 짓을 할지 모르는 일이므로, 별의별 키 조합을 만들어서 입력을 해야 한다.

대학원 박사과정때 블랙박스 시험에 대해서 연구하고 있었는데, 이런 사실을 간파하고 이 문제를 어떻게 하면 좋을지에 대해서 고민하고 동시에 진로에 대해서 고민하면서 몇달간 방황을 했었다.

블랙박스 시험 접근법이란게 이런 한계를 지니고 있고, 사실 비용이나 노력대비 효용이 낮을 가능성이 높다.

automata혹은 state machine이론에서 나오듯이 동일한 behavior를 가지는 모델은 수만개가 될 수 있으며, 개발자가 최적화해서 만들지 않은 이상 test oracle model을 최적화 된 모델로 모델링을 해서 test case를 생성한다면, 이는 필연적으로 missing case가 생길 수 밖에 없을 것이기 때문이다. (이해 하셨죠?)

그렇다면 logic을 설계할 때의 specification으로 넘어가보자. 지금 나는 stateflow로 모델링하려고 한다. black box testing이 아닌 white box testing을 할 수 있으며, requirement based testing을 사용하려고도 한다.

whitebox니까 상황이 좀 나아졌다고 생각할 지도 모르겠다. Power shift 2nd 과제에서 겪은 바로는 상황은 아주 조금 나아졌을 뿐 크게 좋아진 것은 아니라는 점이다.

직관적으로 명세하긴 했으나 추상화를 거의 하지 않은 모델의 경우는 code의 양도 늘어나고 실제로 시험해야 하는 테스트의 갯수도 늘어난다.

직관적으로 명세한 것을 조금만 더 생각해서 추상화를 시키면 code의 양도 줄일 수 있고, 실제로 시험해야 하는 테스트의 갯수도 구조적 커버리지 관점에서 줄일 수 있다.

그런데 추상화시킨 모델 기반의 구조적 커버리지만 고려해서는 문제가 발생할 수 있다는 점인데, 실제로 추상화시킨 모델이 직관적 모델과 일치하지 않는 경우에 발생할 수 있다는 점이다.

그러므로, 추상화모델과 직관적 모델간의 차이가 없음을 보이는 작업이 tough했고, 직관적 모델로부터 생성한 test case를 추상화된 모델에 적용하려면 어느 test case가 적절한 것인지를 판단하는 작업이 쉽지 않았다. 만약 직관적 모델로부터 생성한 test case의 갯수가 별로 없다면 크게 상관은 없겠다.

Anyway, 궁극적으로는 다음의 사항들을 고려해야만 할 것이다.

  1. 추상화시킨 모델로 구현을 해야 할 것이다. 하지만 이 경우 추상화된 모델이 직관적 모델과 일치함을 입증해야 한다.
    1. 추상화 모델의 behavior space의 total behavior set에 대해 직관 모델도 동일한 행동을 보여야 한다.
    2. 직관적 모델의 behavior space의 total behavior set에 대해 추상 모델도 동일한 행동을 보여야 한다.
  2. 추상화된 모델의 test로는 test의 양이 부족할 수 있다.
    1. 요구사항이 너무나도 추상화되어 유용성이 떨어질 수 있다.
    2. user scenario관점에서 보다 직관적인 test scenario를 고려해야 할 수 있다.
    3. 직관적 모델의 test set으로부터 추려내기 위한 방법을 고민해야 할 수 있다.
    4. requirement based testing방법을 적용해야 한다.

너무 추상화를 시키는 것도 시스템의 이해도를 떨어트릴 수 있으므로 over하지 않아야 하고, 시스템의 성능적 특성을 고려하기 위해서는 적당해야 하는데, 그 정도를 표준화시킬 수 있을까? 정량화 시키는 것이 가능할까?

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중