brunch

You can make anything
by writing

C.S.Lewis

by Kim Sjoon George Mar 18. 2019

MC/DC의 Fake버전

...

여기에서 고백을 하건데 예전에 나는 내 고객들을 속인적이 있었다.

물론 惡意를 가지고 속인것은 아니다. 테스트 설계 기법 중 MC/DC가 어렵고 이는 도구를 사용하여 대부분 수행한다는 것을 보여주려 했는데 마음이 급하다 보니 MC/DC를 '구현하는 척' 하는 로직을 만들었던 것이다.


원리는 어렵지 않았다.

1. 각 조건절 부분을 추출한다.

2. 조건절의 구성 패턴을 분석한다.

3. 구성 패턴에 맞는 MC/DC결과를 미리 저장하고 있다가 맞는 결과를 찾아서 변수만 바꾸어 대입해 준다.

4. 조건절별 찾은 MC/DC 결과들을 One-Way 조합으로 최종 완성


4번은 앞에서 어느정도 노력을 통해 구현되었으므로 2,3번만 구현을 하면 '구현하는 척' 하는 것을 만들 수 있지 않을 까?

그래서 실제로 만든 것이 pyinstaller를 이용한 App(PC, Mac)버전이었고 이를 github에 올렸었었다. 소스코드는.. 챙피하여 올리지 못했다. [^1]


이러한 방법의 한계는… 여러분들도 쉽게 예상했겠지만,  다양한 조건절 패턴의 모든 MC/DC조합의 결과를 저장하여 가져오는 것은 불가능하다. 제한을 걸 수 밖에 없다.

그래서 나는 조건절에서 컨디션 3개까지 가능 한 것으로 제한을 두었다. 다시말하면

A and B
A or B

에 대한 각 MC/DC 의 결과와


A and B and C
A and B or C
A or B and C
A or B or C

의 각 MC/DC의 결과들을 미리 저장하고 있다가 이 패턴들 중 매칭이 되면 MC/DC결과를 돌려주고 그렇지 않으면 그냥 Skip을 하는… 그런 허접한 로직이었다. [^2]



당시에 나는 MC/DC를 컴퓨터로 구현하는 로직은 없을 것으로 생각하고 대부분 테스트 설계 도구들은 이렇게 구현을 할 것이라는 오판에 빠져 있었다. 하지만 이는 아래 인도계 사람이 만든 도구를 보면서 틀렸다는 것을 곧 깨달았다.


http://aerotools.blogspot.com

실행을 시켜 보면 log파일이 남는데 파이썬 + wxPython으로 만들었다는 냄새가 많이 난다. 이 프로그램은 비록 단일 조건문만 분석이 가능 하지만, 조건절 내 컨디션 수에 제약 없이 MC/DC결과를 계산해 준다. 뭔가 컴퓨터로 이를 구현하는 로직이 있다는 것을 보여준다. 이 때 부터 프로그래밍으로  MC/DC를 구현하기 위한 로직 구현에 몰두했던 것 같다. [^3]


과제 수행 결과를 만들어 내기 위해 위 Fake MC/DC앱을 가지고 슈도 코드를 만들어 나올 수 있는 MC/DC케이스들을 돌려 적용을 하였고 결과는 원하는 대로 나오면서 끝낼 수 있었다. 내가 가이드를 할 때, 슈도코드 조건절의 컨디션 갯수는 3개이상 하지 말라고 했었으니까...

지금에는 내 결과물을 써 준 클라이언트 들에게는 미안한 마음이지만, 당시의 무모했던 이런 시도가 이후 발전을 견인하지 않았을까 생각된다.




[^1]: 물론 지금은 다 삭제된 상태다.

[^2]: 괄호가 있는 경우는 순서를 변경하였다. 예를 들어 A and ( B or C) 는 B or C and A 로 변경하여 패턴을 계산했다.

[^3]: 뒤에 별도로 글을 쓰겠지만, 결국은 로직을 찾아 내어 완성을 하였다. 이 로직이 반영된 버전이 analyzingcontext.com에 반영되어 있다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari