당신은 멋쟁이, 우리는 장고쟁이~

0%

Writing your first Django app, part5 - 1편

자동화된 테스트 소개하기


튜토리얼 part4 에 이어서 진행합니다


튜토리얼을 통해서, 현재까지 Web-poll 어플리케이션을 만들었습니다.


이번 part 5 에서는, 자동화된 테스트를 생성해 봅니다.



자동화 테스트란?



자동화 테스트는 코드의 동작을 체크하는 루틴 입니다.



테스팅은 모두 다른 단위로 행해집니다. 어떤 테스트는 아주 작은 세부 사항을 테스트를 합니다 (예, 특정 모델 메서드가 예상된 값을 반환하는지)


반면, 어떤 또다른 테스트는 전반적인 소프트웨어의 동작을 테스트 합니다 (예, 사용자 입력값의 순서가 요구하는 결과를 도출해 내는가?)


튜토리얼 part 2 에서 쉘을 이용하여 메서드의 동작과 어플리케이션 실행 그리고 데이터를 입력해서 어떻게 동작하는지 확인해 보았던것과 다르지 않습니다.


자동화 테스트가 다른점은, 시스템에서 자동으로 테스트를 실행해 볼수 있다는 점입니다.


테스트를 한번 생성하고, 앱에 변경 사항들을 만듭니다. 그리고, 생성한 테스트로 코드가 원래 의도했던대로 작동하는지에 대한 확인을. 시간과 귀찮음을 들여서 수동으로 테스트할 필요 없이, 자동으로 테스트를 해볼수 있습니다.



왜 테스트가 필요한가?



어째서 테스트가 필요한가, 그리고 지금 왜 필요할까요?


지금까지 단지 python/django 를 배우는것만 해도 충분하다고 느낄수 있고, 다른것을 배워야 하는것이 버겁고 불필요하게 느껴질수 있습니다. 튜토리얼에서 작성한 투표앱은 현재 잘 동작하고. 자동화 테스트를 생성하는 괴로움이 잘 동작하고 있는 투표앱을 더 나은 앱으로 만들것 같지 않습니다.


투표앱이 우리가 작성할 마지막 Django 프로그램 이라면, 자동화 테스트를 생성하는 괴로움은 불필요할지 모릅니다.
하지만, 투표앱이 우리가 작성할 마지막 단계의 Django 프로그래밍이 아니기 때문에, 지금이 배우기 가장 적절한 때입니다.



테스트는 시간을 절약해 줍니다


지금까지는, ‘잘 작동하는것 같아 보이면’ 만족스러운 테스트 결과 였습니다.


하지만, 좀 더 복잡한 어플리케이션에서는, 각 앱의 구성요소들 끼리 더 복잡한 상호 작용들을 가지게 됩니다.


어떤 구성요소의 변경 사항은 예상치 못한 앱 동작의 결과를 초래할수 있습니다. 이것을 ‘잘 작동하는것 같아 보여’ 라고 테스트 한다는것은, 코드의 기능들을 20개의 다른 테스트 데이터를 가지고 실행 해 보아야 하는데, 어떤것도 잘못된것이 없다는것을 증명하기 위해서 사용하는 시간들은. 시간을 쓰는 좋은 방법이 아닙니다.



특히, 자동화 테스트가 테스트를 몇초 안에 끝낼수 있는 상황이면, 이것은 전적으로 맞는 이야기 입니다. 만약 어떤것이라도 잘못 되었을때, 테스트는 예상치 못한 동작들을 찾아내는데 도움이 됩니다.


때때로, 코드가 정상적으로 잘 작동할때, 흉측하고 재미없는 테스트들을 작성하는 상황에 직면하는것은 우리를 생산성 잇고 창의적인 프로그래밍 작업과 멀어지게 하는일이 될수도 있습니다.


하지만! 테스트를 작성하는것은, 테스트를 수동으로 진행 하는것에 몇시간을 쏟거나 새로 발견된 문제점들을 찾아내는것 보다는 좀 더 생산적입니다.



테스트는 문제점들을 방지해 줍니다



테스트는 문제점들을 찾아내기만 하는게 아니라, 문제점들을 방지해 줍니다. 테스트가 개발의 안좋은 점 이라고 생각하는것은 잘못 된 생각입니다.


테스트 없이는, 어플리케이션의 목적과 의도된 코드의 동작들이 불투명 해질수 있습니다.


본인이 직접 작성한 코드일지라도, 때로 그 코드들을 가지고 정확히 무엇을 수행하는지 찾아내야 할때가 있습니다.

테스트는 이러한 점을 바꿉니다. 테스트는 코드를 내부에서부터 보고, 무언가가 잘못되었을때 어떤 부분이 잘못 되었는지 비추어 줍니다. 본인이 어떤것이 잘못 되었는지에 대해 깨닫지 못했을때에도 어떤게 잘못 되었는지에 대해 비추어 줄수 있습니다.

테스트는 코드를 좀더 매력적으로 만들어 줍니다



우리는 매우 엄청난 소프트웨어를 만들었을지 모릅니다. 하지만 다수의 다른 개발자들은 아무리 좋은 소프트웨어라도 그것을 보는것을 거부할지도 모릅니다. 왜냐하면, 테스트 하기에 어려움이 있을지 모르기 때문입니다. 테스트가 없이는, 엄청난 소프트웨어라는것을 믿지 않을것입니다. Django 의 기본 개발자인 Jacob Kaplan-Moss 는, “테스트가 없는 코드는 디자인적으로 깨져 잇는 코드” 라고 했습니다.


다른 개발자들은 소프트웨어를 심각하게 고려 하기 이전에, 소프트웨어 내의 테스트들을 확인 하기를 원합니다.



테스트는 팀원들이 함께 일하게 도와줍니다



이전까지는, 한명의 개발자가 어플리케이션을 유지 보수하는 시점에서만 작성이 되었습니다

하지만, 복잡한 어플리케이션들은 팀 단위로 유지 보수가 됩니다.

테스트들은 동료들이 좋지 않은 방향으로 당신이 작성한 코드들을 고치는것을 방지해 줍니다. 그리고, 다른 사람들이 작성한 코드들도 알지도 못하면서 바꾸는것을 방지해 줍니다.


만약, Django 프로그래머로 살아가고 싶다면, 테스트 작성하는것을 잘 할줄 알아야 합니다.

마치며..


테스트 코드들을 작성하는것은 어렵고, 지루하고, 재미 없습니다.


하지만, 테스트 코드를 작성하고, 자동화 된 테스트를 진행하면서 소프트웨어의 완성도도 높이고, 코드의 퀄리티도 높일수 있습니다.

협업을 할때에도 많은 도움이 되고, 본인이 작성하는 코드에 대한 이해도도 더 높아집니다.

좋은 Django 개발자가 되기 위해서는, 자동화 테스트를 잘 알아야 합니다.