1. modeling의 목표를 가져갈 것인가?
최근에 고객사에서 기술한 변속기 모델에 대한 stateflow모델을 보면서 여러 생각을 하게 되었다. State를 무엇으로 정의할 것인가? 그렇게 정의한 목적이 무엇인가? 그렇게 정의하면 어떤 좋은 점이 있는가? 그렇다면 modeling의 목적은 ….인가?
처음 그 모델링을 접했을 때 상당한 state들과 transition들로 인해 머릿속은 혼란스러웠고, 복잡한 것을 좋아하기는 하지만, 간단하게 표현하고자 싶은 욕망이 강하게 들었었다.
그런데, 그것을 읽다보니, 그림에 대한 이해가 매우 쉬웠고, 오히려 test하기에는 더 괜찮았다..
너무 직관적이었다고나 할까? 다만 광년이 hair와 같은 transition으로 인해 복잡도는 정말 굉장히 높았고, 실제로 code로 추출된 것도 그러할 것으로 추측한다.
그러다보니, 그런 style이 오히려 test case를 만드는데는 매우 효과적일 수 있다는 전혀 예상하지 못한 효과를 깨닫고 정신이 멍해졌다.
분명 시스템의 상태를 있는 그대로 직관적으로 표현하면, 시스템을 있는 그대로 이해하는데는 도움이 되기도 하고, 테스트를 하는데도 나름 직관적이다. (모든 모델링 방식이 다 그런것은 아니라고 생각한다. )
시스템의 상태를 조금만 추상화시키면 시스템에 대한 이해도는 더 높아질 수 있고, 유지보수에도 도움이 된다. 그런데 system의 state space에 대한 size가 직관적이지 않다는 단점이 있다.
(사실 내가 쓴 표현이 어렵다는 것을 나도 안다. 그래서 조금 쉽게 풀어쓰자면,,,)
시스템 A의 state는 11개로 이루어져 있고, 각각의 state에서 다른 state로의 transition이 기술되어있다.
시스템 B의 state는 3개로 이루어져 있고, 각각의 state에서 다른 state로의 transition이 기술되어 있다.
만약 A와 B를 equivalent라고 한다면(쉽게 풀어쓴다고 해놓고 더 어렵게 쓰는 것 같다. ㅋㅋㅋ) test 관점에서는 A가 더 직관적일 수 있다..
시스템 A의 단수가 -5,-4,-3,-2,-1,0,1,2,3,4,5으로 이루어졌다고 가정하자. 마이너스는 후진을 의미한다고 하자
시스템 B의 단수는 전진, 중립, 후진으로 상태를 정의할 수도 있다.
시스템 A같은 경우는 각 단수에서 변속이 되는지를 확인하는 것으로 시험을 할 수 있겠는데, 시스템 B의 경우에는 단순히 전진이 되는지, 후진이 되는지가 확인의 유일한 요소가 아니라는 것이다.
B에서도 A에서 했던 것 만큼의 테스트를 해야 한다면 보다 면밀한 테스트 설계가 필요할 수 있음을 의미한다. 이 경우 coverage에 대한 맹신도 별게 아닌게 되어버린다. (i.e, meaningless)