spatialguy의 얼음집: "소년이여 신화가 되어라!"의 ruby on rails에서 test를 쓰지 않으면, 실제로 반도 안 쓰는 것 에서 트랙백.
요즘의 프로그래머들이 다뤄야하는 현실의 문제는 매우 복잡하다. 뭐하나 간단(?)한 것만 짜려고해도,
- 네트웍 통신: 수많은 예외사항 (예기치않은 연결 종료, 과부하로 디바이스 드라이버 사망, DNS 주소 문제, 인터페이스 선택 문제)이 한 가득
- 암호화된 통신: 민감한 정보나, "내가 누구다!"라고 주장하는 것에 대한 challenge등등
- DB: 대부분의 시스템에는 보이던, 그렇지 않던 뒷단에는 거의 DB가 있다
- 분산된 부하 관리: 한 두대의 머신으로는 보통 감당 안되는 부하들을 처리해야 한다
등등, 산적한 현실의 벽과 싸워야 한다. 그리고 발 한 번 헛디디면, 언젠가 터지는 버그가 안에 곱게(…) 자리잡게 된다.
이런 복잡한 프로그래밍 환경과 맞서는 방법으로 최근…이라기보단 이미 좀 된 과거부터 대세(…이 단어는 싫어하지만)가 된 것 중 하나인 테스트 주도 개발이다. 여기에서 사용되는 개념이,
- 반복가능하고, 될 때까지(regression) 재실행되는 자동화된 테스트들
- 자동화된 테스트들을 도와주는 프레임웍 — xUnit 처럼 테스트 준비(setUp), 실행, 종료 처리(tearDown)를 도와주는 것들. ((여기서 setUp/tearDown 되는 부분을 fixture라고 부르기도 한다)
- DB나 네트웍 등을 테스트하기 쉽게해주는 가짜 디바이스 드라이버나 DB 테스트 유닛들
- 특정 형태/순서로 값을 되돌려주거나 미리 입력된 상태로 반응하는 가짜 객체(mock-object)들
정도가 있다. Spat. 군이 언급한게 이런거고, 이런 안전띠(?)없이 프로그래밍 하는 일은 장인의 반열에 오르지 않고서야 쉬운 일이 아닐 거다. 비슷한 이유로 이클립스에는 대부분의 개발환경에서 xUnit 류를 실행하는 실행옵션들이 존재 한다 — 예를 들어 python 개발 환경인 pyDev의 실행 옵션은 python, pyUnit, jython 환경들이 있다. MS의 VS도 Team System 이상의 팩키지에는 테스트 용 환경들이 있고, 기업 환경급에서 널리 쓰이는 개발도구들은 이런 자동화된 각 여러 테스트 단계들을 잘 지원하는 것들이 여럿 나와 있다.
즉, RoR은 요즘 나온 환경이라서 저게 보이기 쉬운 곳에 있는 것 뿐이고, 현존하는 주요 언어들 — 한참된 C++부터, 몇 년 안된 python이나 ruby, C#에 이르기까지 — 은 TDD용 환경에 해당하는 test, testUnit, test-fixture, mock-object 같은 것들을 잔뜩 껴안고(?)있다. …다만 안 쓰는 사람들이 많은게 문제지 (…)
덤으로 소스 코드를 분석하거나, "이게 좀 이상한거 같다" 하는 식으로 보고하는 도구들 — covertura라거나 vtune이라거나 소스코드 복잡도 분석툴들 — 도 언어마다 잔뜩 있다. 그리고 이런 류의 툴은 사용자 수나 기업환경에서 많이 쓰이는 애들에 더 많이(비싼걸로) 존재하기도 한다…
ps. 덤으로 웹 응용 쪽에서 사용하는 breakpoint에 대한 얘기를 했는데, 이걸 데스크탑 응용이나 서버 응용 쪽에서 놓고 보면 코어 덤프, 로그 등등이 되겠지…
임베디드 환경에서는 TDD를 어떻게 하면 될까.. 요즘 하는 고민입니다. 이누무회사 짱이라능 ㅎㅎ
SW자체에서야 큰 차이 없을꺼고;
A모군 — 그러니까 너희 회사(…) — 하는 거 보니까, 하드웨어 시뮬레이션 해서 테스트하긴 하던데;
시뮬레이터는 너무 이상적이어서요 ㅎㅎ;;
실제로 보기 힘든 예외상황 (특히 디바이스 드라이버보다 밑단 혹은 네트웍 스택 밑단) 인 경우엔 사실 시뮬레이터 말곤 별 대책(?)이 없기도 하다. 재현이 거의 불가능하거든 -_-;;
AT&T처럼 버그 하나에 한 팀 투입해서 2년 넘게 추적할 수 있는 곳이라면 모를까(…)
ps. 작년 중순에 모 사의 모 팀에서 윈도우 드라이버로 네트웍 예외상황 시뮬레이션 하는 거 시도하는 것 같던데.
안전띠 없이…하는곳도 있습지요…저희 팀 이랄까.
ㅡ _-;
덕분에 여러분들의 3G 생활이 즐겁지아니합니까? (응? -.-;;;)
…
뭐 전 S모 전자와 L모 전자에서 핸드폰 만드는 선배/동기/후배들이 많아서 얘기는 좀 들었죠(…)
[…] 프로그래머를 위한 안전띠 […]