Unit Test

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS
소프트웨어 공학의 QualityAssurance에서 전통적으로 사용되어 왔던 테스팅 방법 중의 하나. Unit은 최소 실행 단위를 말하는데 보통 하나의 함수에 해당한다.

ExtremeProgramming은 이런 전통적 개념을 바꾸어서, QA가 아니고 개발자 자신이 개발을 해 나가면서 동시에 UnitTest를 하는 방법을 사용한다. 따라서, WhiteBoxTesting이라고 볼 수 있으나, 사실상은 BlackBoxTesting을 같이 포함해서 GrayBoxTesting을 하도록 한다.

김창준님. SOP2.py 에서 보여주신 UnitTest 모듈이 표준은 아닌가 봐요. 파이썬 정보광장에서도 설명을 거의 찾아 보기 힘드네요.(국내에는 아직 잘 알려지지 않았습니다.) 그리고, 코드를 다 이해 못하였지만, error를 방지하기 위해 사용하는 것으로 생각되는데, 이것도 XP 에서 나온 개념인지 궁금합니다. 새로운 걸 또 배운 느낌! --지상은

에러 방지라는 단순한 차원이 아닙니다. UnitTestTestFirstProgramming을 지향합니다. 실제 코드를 작성하기 이전에 테스트 코드를 먼저 만드는 것이죠. 저는 이 TFP를 프로그래밍에 있어 패러다임적 혁명이라고 부릅니다. ExtremeProgramming에서 이 TFP를 핵심 원칙의 하나로 삼습니다. 자세한 내용은 제가 세미나 자료로 준비한 걸 참고하세요. (see also FrontPage, TestFirstProgramming)

링크따라가보시면 아시겠지만 UnitTest모듈은 python2.1부터 포함되는 것으로 알고 있습니다. 개인적으로는 이 TestFirstProgramming 을 잘 써먹어보고 싶지만, 아직은 잘 시도가 되지 않습니다. 아직 머리속에 전체 -> 부분으로 짜야될것만 같은 생각이 지배적이라서요.. 로직이 좀 커진다 싶으면, TestFirstProgramming 이 엄두가 나지 않더라고요.. --yong27
DoTheSimplestThingThatCouldPossiblyWork, 하시고 ProgrammingByIntention하세요. PBI는 TopDown입니다.

김창준님, 전에 말씀하셨던 Xper:MockObject에 대한 정보를 어디서 구할수 있을까요. 정리된 자료는 은근히 찾기가 어렵네요. --영후
MockObject 에 관한 기사들은 www.junit.org 에서 Article 섹션에 보시면 찾으실 수 있습니다. Google 같은데서 MockObject로 찾으면 첫번째로 Wiki:MockObject가 뜨네요. -응주

http://www.mockobjects.com 도 있습니다. 주로 JavaLanguage에 대한 얘기지만.. --yong27

파이썬 CGI를 유닛테스트 하는덴 어떤 방법들이 좋을까요? form을 Xper:MockObject로 만들고 아웃풋을 체킹하는 방법을 사용하는데, 좀 원시적이네요-_- 다음주 부턴 Zope인데-_- --영후
테스트 코드가 없었던 코드를 테스트해야 하는 경우에는 출력 스트림 리디렉션을 했다가 비교하는 방법을 권하고, 그렇지 않거나 혹은 좀 더 용기가 있다면 테스트를 더 잘게 만들거나 혹은 더 잘게 쪼개어 나가는 방법을 권합니다. (이렇게 되면 지금 코드가 CGI를 쓰냐 아니냐는 것은 별로 중요하지 않게 될 것입니다) MockObject를 잘 쓰는 방법 중 하나는 MockObject 사용을 뒤로 미루는 것입니다. --김창준
정말 더 잘게 쪼개면 CGI냐 아니냐 상관이 없겠네요..^^; (picxenk님에게 들은 말과 비슷) 조프는 XML-RPC를 사용하는 방법이 있었군요. [http]Testing Zope with XML-RPC --영후
UnitTest는 꼭 시스템 실행상황을 테스트할 필요가 없습니다. 조프 경우도 XML-RPC를 통한 테스트는 최소화 하는 것이(혹은 layer화해서 layer별로 독립 테스트) 좋습니다. --김창준


"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>