티스토리 뷰

8장. 테스트 및 보완

5. 최종 점검하기

엑사젠 2016. 6. 16. 07:08

 

대화 단위 테스트까지 끝났다면 이제 작동은 문제가 없다는 뜻이다. 마지막 단계로 대화내용을 점검하고 regression 테스트를 진행하도록 하자. 대화 내용의 점검이란 말걸기 규칙과 응답 규칙이 말이 되는지”, 어색하거나 추가할 것은 없는지를 검토하는 것이다. 더불어 모든 토픽의 키워드 지도를 만들어 키워드도 함께 검토하도록 한다.

 

    :abstract story ~topicname

CS언어에 맞춰 작성한 스크립트는 조건식이나 변수명, 매칭 연산자 등이 섞여 있을 수 있기 때문에 대화의 흐름을 쫓아 읽어 나가기가 쉽지 않다. 이럴 때 abstract 명령어를 사용하면 대화 내용만 별도로 추출하여 읽을 수 있다. abstract 명령어에 위와 같이 story 옵션을 주면 말걸기만 출력해 준다. 주석이나 조건, 분기 등을 모두 제거하고 말걸기만 출력해 주기 때문에 챗봇이 어떤 내용으로 스토리를 전개해 나가는지에 초점 맞춰 내용을 검토할 수 있다.

 

    :abstract responder ~topicname

story 옵션이 말걸기만 출력해 주는데 반해 responder 옵션은 응답만 출력해 주는 명령어이다. 사용자의 질문과 그에 따른 챗봇의 응답에 초점 맞춰 내용을 검토해 볼 수 있다. 앞서의 story옵션과 responder옵션으로 출력한 결과물은 누구나 쉽게 읽을 수 있는 형태이기 때문에 주변의 동료에게 리뷰를 받을 때도 유용하게 사용할 수 있다.

 

    :topicinfo keys

토픽 단위 테스트를 할 때는 토픽이름을 지정하여 사용하지만 위의 예제처럼 토픽이름을 지정하지 않으면 모든 토픽의 키워드 목록을 찾아준다. 이는 전체 키워드 지도를 확인하는 좋은 방법이 된다. 이 키워드 지도를 보면서 토픽의 이름과 첫번째 키워드가 긴밀하게 연결되는지 전체 키워드 목록에 누락된 키워드는 없는지 등을 확인할 수 있다.

 

    Regression test

잘 작동되던 챗봇이 토픽 추가, 컨셉 추가, 패턴 추가 등을 거치면서 어느 날 갑자기 이상하게 작동하는 경우가 생길 수 있다. 보완이나 개선을 하는 과정에서 의도하지 않게 오류가 발생하는 것인데 문제는 이 의도하지 않은 결과를 가져 온 그 곳을 찾기가 매우 힘들다는 점이다. 스크립트를 이곳 저곳 조금씩 수정했을 테고 새로 추가한 룰도 있을 텐데 수 백 수 천의 룰 중에서 어디를 수정했길래 갑자기 이상 반응을 보이는 지 찾아내기가 무척 어렵다.

이런 경우를 대비해 regression 테스트를 해 두면 장차 업데이트를 하면서 이상행동을 보일 때 어디가 어떻게 달라져서 결과가 달라졌는지를 쉽게 찾아 낼 수 있다. 간단히 말해 Regression 테스트는 새로운 수정이나 추가가 기존의 코드에 어떤 영향을 끼치는지 확인하는 테스트이다.

테스트 절차는 현재의 상태를 보관하는 단계, 그리고 향후 필요한 시점에 보관해 놓은 상태와 새로운 상태를 비교하는 두 단계로 진행한다.

  

가.   현재의 상태를 보관하기

현재의 상태를 보관하기 위해서는 우선 챗봇과 나눌 대화문을 준비해야 하는데 이 대화문은 작성한 룰 전체를 테스트할 수 있도록 빈틈없이 작성해야 한다. 작성한 룰을 하나씩 쫓아 가면서 테스트 문장을 작성하도록 한다. 그 형식은 다음과 같다.


 

문서 편집기로 작성하면 되는데 첫 줄은 키워드 :user로 시작하며 챗봇과 대화할 때 사용하는 사용자 이름을 적어준다. 이때 regression 테스트를 위한 사용자는 고정해 두는 것이 좋으므로 사용자를 별도로 만드는 것도 방법이다. 상태를 보관할 때의 사용자와 향후 비교할 때의 사용자가 달라서 생기는 차이를 방지하기 위함이다. 두 번째 줄은 :reset 명령어를 적는데 이는 올바른 테스트가 되도록 모든 변수 값을 초기화하는 것이다. 이후부터 룰을 테스트하기 위한 대화문을 한 줄씩 작성하면 된다. 가급적 모든 룰을 테스트하도록 작성한다. 필요한 곳에 “#+빈칸으로 주석을 달 수 있고, 변수를 다시 초기화 해야 하는 경우 :reset 명령을 다시 실행하면 된다. 맨 마지막 줄은 :quit로 끝낸다. 개발자가 작성한 예제를 보면 참고가 될 수 있을 것이다.[1] 작성이 끝나면 파일이름을 적절히 정하고 (이곳에서는 dialogueTest.txt라 하겠다.) UTF-8 형식으로 저장한 후 TMP 폴더 아래에 복사해 놓는다.

이제 이 대화문을 이용해서 로그화일을 만들기로 하자. 아래와 같이 명령한다.

 

:source tmp/dialogueTest.txt

 

위의 source명령어는 파일을 읽어 들여 사용자가 입력한 것처럼 한 줄씩 차례로 챗봇에게입력하는 명령어이다. 이제 dialogue 파일에 있는 대화문에 챗봇이 순차적으로 답변을 하고 그 결과는 모두 USERS 폴더에 기록될 것이다. 이제 이 로그화일에서 현재의 상태, 즉 대화결과를 수집하여 기록으로 남기면 된다.

 

:regress init username

 

username은 앞에서 대화문을 작성할 때 사용하였던 username과 일치하여야 한다. CS USERS 폴더 아래에 username으로 기록된 로그화일을 열어 사용자와 챗봇이 나눈 대화내용을 수집한 후 TMP 폴더 아래에 regress.txt 파일로 저장한다. 이로써 비교를 위해 현재의 상태를 보관하는 작업을 끝냈다. 이 결과 파일은 별도로 보관하는 것이 좋은데 파일을 덮어쓰게 되기 때문이다. 그러므로 파일의 위치도 다른 곳으로 옮기고, 예를 들면 regress폴더, 파일이름에도 regression을 수행한 날을 포함시켜 두면 나중에 활용하기 편리할 것이다.

 

나.   새로운 상태와 비교하기

 

이제 새로 수정한 챗봇과 이전의 챗봇을 비교해 볼 수 있다. 새로 수정한 챗봇을 빌드한 후 그 상태에서 아래의 명령을 실행한다.

 

:regress regress/oldRegrssion.txt

 

위와 같이 regress 명령어 뒤에 저장해 둔 regression 파일을 지정해 주면 된다. 위의 경우는 regress폴더 아래에 있는 oldRegression.txt 파일과 비교하라고 지정해 주고 있다. CS는 이 파일에 저장되어 있는 사용자의 질문으로 대화를 나누고 그 결과를 저장되어 있는 대화문과 비교하여 차이가 나는 것을 출력해 준다. 결과는 화면으로도 출력하지만 USERS 폴더 아래의 tmpregresslog.txt에 저장하므로 이 파일을 열어서 살피면 된다.

아주 사소한 차이까지 보여 주기 때문에 파일이 매우 복잡해 보인다. 예를 들면 출력문에서단어 하나 바꾼 것도 보여주는데, 너무 복잡하니 중요한 차이만 보고 싶을 경우 regression 테스트를 할 때 아래와 같이 옵션을 추가해 주면 된다.

 

:regress terse regress/oldRegrssion.txt

 

이렇게 하면, 출력문의 형태가 많이 다른 것, 따라서 대응하는 규칙이 바뀌었다고 생각될 정도로 차이가 나는 것만 보여 준다. 그러한 차이가 왜 생겼는지, 의도한 것인지는 스크립트를 직접 살펴보며 판단하면 된다.

만약 이 새로운 차이가 의도한 것이고 올바른 것이라면, 위의 명령을 한 번 더 실행하여 맨 마지막 줄에서 update 하겠냐고 물을 때, 정확하게 yes를 입력해 주면, 현재의 상태를 TMP폴더 아래의 regress.txt 파일로 저장한다. 마찬가지로 이 파일을 regress폴더로 옮기고 파일이름에도 날짜 정보를 포함해서 재지정하면 나중에 활용하기 좋을 것이다.

 

    필요한 메모리의 용량 계산

 

시스템이 원활히 작동하도록 필요한 메모리 용량을 지정해 줄 수 있는데 이렇게 하기 위해서는 개발한 챗봇의 필요 최소 용량을 알아야 한다. 이를 아는 가장 좋은 방법은 regress테스트를 진행해 보는 것이다. regression테스트를 진행할 때 챗봇이 사용한 메모리 값을 확인하고 여기에 여유 값을 보태 주면 원활한 메모리 용량이 된다. 다음과 같이 두 가지 명령을 순차적으로 실행하자.

 

:show stats

:source regress/oldRegrssion.txt

 

첫줄의 show 명령어는 통계값을 보여주라는 명령어이고 토글식이기 때문에 동일한 명령을 한 번 더 입력하면 보여주지 않는다. regression테스트가 끝난 후 챗봇이 사용한 메모리 용량에 아래의 추천 사이즈를 참조하여 메모리 용량을 결정하면 된다.

 



[1] Chatscript폴더 아래에 있다. Regress/ChatbotQuestions/Loebner.txt

'8장. 테스트 및 보완' 카테고리의 다른 글

6. 대화내용 분석하고 보완하기  (0) 2016.06.17
4. 대화 단위 테스트  (0) 2016.06.15
3. 토픽 단위 테스트  (1) 2016.06.14
2. 룰 단위 테스트  (0) 2016.06.13
1. 테스트 단계와 종류  (0) 2016.06.10
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함