버그들을 제거하기 위해서는 테스터가 필요합니다.
하지만 프로그램의 모든 기능을 비롯해 지금까지 나온 모든 버그들을 완벽하게
점검해주는 건 쉬운 일이 아닙니다.
그러므로 프로그래머에겐!
프로그램을 자동으로 테스트해주는 로봇이 필요합니다!
메이드 복을 입은 로봇 커피도 타주고 밥도 타다주고 하면서
프로그램 테스트를 해준다면 더욱 좋겠지만...
이건 미래의 목표로 남겨두기로 하고...
내 옆에 놀고 있는 고물 X노트 노트북이
내가 일하고 있는 사이 프로그램 테스트를 해준다면
버그로 인한 노화 걱정을 덜 수 있을겁니다.
테스트 로봇의 필요성은 알고 있지만...
그것을 만드는 일은 쉬운 일이 아닙니다.
물론 입력후 바로 출력을 토해내는 다음과 같은 프레시맨 코드라면
def plus(a, b):
return a + b
assert(plus(3, 5)==8)
쉬울지도 모르겠습니다만...;
아이디에 "빗자루"를 입력하고, 비밀번호에 "하하하"를 입력한다음
로그인 버튼을 눌러 비밀번호가 틀렸다고 나오는지를 확인해라.
위와 같은걸 만들려면 좀 정신이 멍해집니다.
첫번째 이유는 GUI 때문이라고 생각됩니다. 로그인 버튼이 어딨는지 모르니 -_-)>
하드 코딩으로 좌표를 찍는 구닥다리 MMORPG 로봇 방식이라면 UI 디자이너가 아웃라인을 바꿔버리는 순간 미칠듯한 테스트 실패 에러를 보게 될겁니다. 이렇게 되면 하기 싫어지겠죠.
아! 버튼이미지를 화면상에서 찾아 클릭하는 방법은 어떨까요?
테스트 실패 에러 역시 스크린샷으로 대조하고?
... 직업으로 MMORPG 로봇을 만드는 일을 하고 있다면 도전해볼만 하겠습니다만...
자기가 작성한 프로그램을 저렇게 테스트하다가는 지쳐버릴겁니다.
두번째 이유는 위의 작업이 넌블럭 작업이라는 겁니다.
책에서 나오는 대부분의 테스트 코드는 입력후 즉시 결과가 나오는 블럭 방식이더군요.
하지만 위의 형태는 로그인 버튼을 누르고 한참후에 비밀번호가 틀렸다는게 나옵니다.
함수 호출후 결과값 비교하는걸로 안된다는거죠.
경우에 따라서는 로그인 버튼을 누르는 과정 자체가 메시지일수도 있습니다.
아아 차라리 서버 프로그래머면 쉬울텐데 ... orz;
어-_-)? 가만... 서버는 왜 쉽지?
서버는 그냥 텍스트 기반 프로토콜 쓴 다음에 테스트용 더미 클라이언트를 만들면 끝이기 때문이죠.
client = Client()
assert(client.Test("login 빗자루 하하하", "wrong_password"))
웃 -_-)!
생각해보니 테스트용 더미 서버를 만들면 되겠더군요.
1. 클라이언트 실행시 바로 테스트용 서버에 접속합니다.
2. 클라이언트에서 발생한 로그는 모두 테스트 서버로 보냅니다.
3. 테스트 서버에서는 클라이언트에 무슨일을 하라는 명령을 보냅니다.
4. 클라이언트는 서버에서 받은 명령을 수행합니다.
와하하 -_-)/ 잘 될지는 모르겠지만... 한번 도전해봐야겠습니다.


python 을 좋아하는 게임 프로그래머