Continuous Test

1,520 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,520
On SlideShare
0
From Embeds
0
Number of Embeds
102
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Continuous Test

  1. 1. 지속적인 테스트 (Continuous Test) 남기룡(birdkr@gmail.com)
  2. 2. 지속적인 통합 지속적인 컴파일 지속적인 데이터베이스 통합 지속적인 테스트 지속적인 검사 지속적인 배포 지속적인 피드백
  3. 3. One Click? 테스트 자동화의 목표 위험 감소 지루하고 반복적인 프로세스 줄이기 프로젝트 가시성 높이기 자신감 얻기
  4. 4. CruiseControl.NET + MSBuild CruiseControl.NET 지속적인 통합을 도와주는 빌드 자동화 툴 오픈 소스 프로젝트 Web과 CCTray 트레이 아이콘으로 피드백 MSBuild MS에서 제공하는 빌드 플랫폼 XML로 복잡한 빌드 프로세스를 쉽게 조작할 수 있다.
  5. 5. 단위 테스트 UnitTest++ 라이브러리 사용 대상 : 게임 로직 주기 개발과 관련된 테스트 케이스 : 컴파일할 때마다 항상 전체 테스트 케이스 : 저장소에 커밋할 때마다
  6. 6. DB 테스트 xDBUnit은 C++에 맞지 않았다. UnitTest++와 SQL스크립트를 사용함. 테스트 단계 테스트 데이터베이스에 테스트 데이터 집합을 생성 테스트 케이스 실행 데이터 변경 검증 주기 : 하루에 한 번
  7. 7. Resource Validator 기획자나 아티스트가 입력한 컨텐츠 설정값에 논리적으로 잘못된 값이 입력되었는지 검증 게임을 실행할 때마다 잘못 입력된 값이 있으면 로그인 화면에서 에러 리포트 모듈화시켜 맵툴 등에서도 체크할 수 있도록 한다. 주기 : 게임을 실행할 때마다
  8. 8. 통합 테스트 대상 : 단위 테스트 + DB + 컨텐츠(아이템 정보, 퀘스트 정보, 스킬 정보 등) 주기 : 소스를 저장소에 커밋할 때마다
  9. 9. 네트워크 스트레스 테스트 클라이언트 패킷 핸들링을 XML로 쉽게 조작 테스트 케이스 로그인 반복, 캐릭터 생성,삭제 반복, 이동 반복 등 스케줄링 Crash가 발생하거나 성능이 일정 수치 이하이면 테스트 실패로 간주 주기 : 일주일에 한 번
  10. 10. AI 전투 테스트 랜덤으로 특정 맵에 x마리의 몬스터를 스폰시켜 서로 싸우도록 한다. Crash가 발생하거나 성능이 일정 수치 이하이면 테스트 실패로 간주 주기 : 하루에 한 번
  11. 11. 프레임 테스트(클라이언트) 리플레이 파일을 재생하여 평균 프레임이 특정값 이상이면 테스트 성공 프레임율 그래프 출력 3DMark의 벤치마크 테스트와 유사한 방식
  12. 12. 픽셀 테스트(클라이언트) 특정 씬을 렌더링하여 원본 이미지와 같은 이미지인지 픽셀당 비교하여 일정 비율(90% 정도) 이상이면 테스트 성공. 3d 엔진을 포함한 단위 테스트를 만들지 못하여 나온 대안 방법 랜덤 요소 제거 등의 몇가지 추가 작업이 필요함.
  13. 13. 그래서~ 이 모든 테스트를 자동화!!
  14. 14. CruiseControl.NET
  15. 15. CruiseControl.NET
  16. 16. CruiseControl.NET에 원하는 내용 출력하기
  17. 17. 테스트 결과 XML 로그 <?xml version=quot;1.0quot;?> <maiettest-results tests=“2quot; failedtests=“1quot; failures=quot;1quot; time=quot;0.137quot;> <report text=quot;time : 680 secquot; /> <report text=“총 클라이언트 개수 : 4650quot; /> <test name=“로그인 반복quot; time=quot;0.062quot; > <success message=quot;successquot; /> </test> <test name=“캐릭터 생성 반복quot; time=quot;0.062quot; > <failure message=quot;Crash!quot; /> </test> </maiettest-results>
  18. 18. Dashboard의 xsl 파일 설정 <xsl:stylesheet version=quot;1.0quot; xmlns:xsl=http://www.w3.org/1999/XSL/Transform > xmlns:xsl= <xsl:output method=quot;htmlquot;/> <xsl:template match=quot;/quot;> <xsl:variable name=quot;maiettest.result.listquot; select=quot;/cruisecontrol/build/maiettest-resultsquot;/> name=quot;maiettest.result.listquot; select=quot;/cruisecontrol/build/maiettest- <xsl:variable name=quot;maiettest.report.listquot; select=quot;$maiettest.result.list/reportquot;/> name=quot;maiettest.report.listquot; select=quot;$maiettest.result.list/reportquot;/> <xsl:variable name=quot;maiettest.case.listquot; select=quot;$maiettest.result.list/testquot;/> name=quot;maiettest.case.listquot; select=quot;$maiettest.result.list/testquot;/> <table class=quot;section-tablequot; cellpadding=quot;2quot; cellspacing=quot;0quot; border=quot;0quot; width=quot;98%quot;> class=quot;section- cellpadding=quot;2quot; cellspacing=quot;0quot; <tr> tr> <td class=quot;sectionheaderquot;> class=quot;sectionheaderquot;> Maiet Test report: </td> </tr> </tr> <xsl:call-template name=quot;maiettest__reportdetailquot;> xsl:call- name=quot;maiettest__reportdetailquot;> <xsl:with-param name=quot;detailnodesquot; select=quot;//reportquot;/> xsl:with- name=quot;detailnodesquot; </xsl:call-template> </xsl:call- </table> <table class=quot;section-tablequot; cellpadding=quot;2quot; cellspacing=quot;0quot; border=quot;0quot; width=quot;98%quot;> class=quot;section- cellpadding=quot;2quot; cellspacing=quot;0quot; <tr> tr> <td class=quot;sectionheaderquot; colspan=quot;2quot;> class=quot;sectionheaderquot; colspan=quot;2quot;> Maiet Test Case results: </td> </tr> </tr> <xsl:call-template name=quot;maiettest__testdetailquot;> xsl:call- name=quot;maiettest__testdetailquot;> <xsl:with-param name=quot;detailnodesquot; select=quot;//testquot;/> xsl:with- name=quot;detailnodesquot; </xsl:call-template> </xsl:call- </table> </xsl:template> </xsl:template> </xsl:stylesheet> </xsl:stylesheet>
  19. 19. 참고 서적 지속적인 통합(위키북스) 리팩토링 데이터베이스(위키북스) 사이트 http://confluence.public.thoughtworks.org/display/CCN ET http://msdn.microsoft.com/ko-kr/library/0k6kkbsd.aspx http://kaistizen.net/EE/

×