Unit Test

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS

애인있는사람을좋아하는것만약귀동냥IfYouWantToWrite봄날은간다노래 UnitTest

소프트웨어 공학의 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; ?> # # ?>