백엔드 Back-end/테스트 Test

테스트Test 기반 없는 코드 리뷰Code Review의 비효율성과 위험성

Tap to restart 2023. 2. 17. 10:00
반응형

코드 리뷰

코드 리뷰를 하는 리뷰어는 보통 눈으로 변경된 코드를 읽고 자신의 의견을 말한다. 코드 전체가 아니라 바뀐 부분만 주로 본다. 따라서 코드 변경에 따른 의도하지 않은 부작용까지는 생각하기 어렵다. 리뷰어는 의견을 낼 뿐 책임지지 않는다. 책임은 코드 작성자 몫이다.

테스트 기반 없는 코드 리뷰의 비효율성

리뷰어가 제시한 사소한 변경이라도 만에 하나 있을 부작용 확인을 위해 작성자는 매번 테스트를 해야 한다. 테스트가 없는 상태라면 일일이 리뷰어의 의견을 반영할 때마다 관련 코드 전반을 테스트 해야 한다.
리뷰어들이 같은 시간 한꺼번에 리뷰해주면 좋겠지만 A 리뷰어, B리뷰어가 리뷰하는 시간은 다른 경우가 대부분이다. 따라서 리뷰를 받을 때마다 테스트하게 된다.

테스트 기반 없는 코드 리뷰의 위험성

코드 변경 부작용은 예측하기 어렵다. 지금 작업하고 있는 범위만 영향을 받을 거라고 생각하고 작업하지만 가끔 범위를 벗어난 경우가 있다. 테스트 커버리지가 넓어 전체 테스트를 할 수 있다면 좋겠지만 테스트 주도 개발Test Driven Development(TDD)을 하지 않는다면 테스트가 부족하다. 이 경우에는 오류를 개발단계에서 잡을 수 없고 운영 중에 발견하게 된다.

비효율성과 위험성이 가져오는 코드 리뷰 기피

몇 번 코드 리뷰 때 제안 받은 사소한 변경으로 운영 중 장애가 발생해 책임을 추궁 당한 경험을 한 개발자들은 코드 리뷰를 반기지 않게 된다. 대부분 이런 경우 왜 테스트를 충분히 하지 않았냐고 코드 작성자를 탓하기 때문이다. 자신이 처음 짠 코드는 문제 없는데 리뷰어 의견을 반영해서 수정한 부분에서 문제가 터져도 작성자 탓이다. 자신이 처음 짠 코드는 충분히 테스트하지만 코드 리뷰로 변경한 코드는 시간이 부족해서 충분히 테스트 못하는 경우가 많고 결국 그 부분에서 문제가 터진다.

테스트 기반 있는 코드 리뷰

테스트 기반이 있다면 달라진다. 어떤 코드 리뷰를 받더라도 바로 변경해서 더 나은지 아니지 다른 부작용은 없는지 테스트할 수 있기 때문이다. 리뷰어의 의견을 더 적극적으로 수용할 수 있다. 프로젝트 전반의 코드 커버리지가 100프로에 가깝다면 코드 변경 뒤 전체 테스트를 돌려서 쉽게 혹시 모를 부작용까지 확인할 수 있다.

코드 리뷰보다 테스트 주도 개발이 더 중요

코드 리뷰와 테스트 주도 개발 중 하나를 선택해야 한다면 테스트 주도 개발을 선택할 거 같다. 테스트 기반이 있는 코드는 언제든 쉽게 위험 없이 개선해 나갈 수 있기 때문이다. 처음에는 코드 품질이 별로더라도 쉽게 나아질 수 있다. 테스트 기반 없는 코드는 나아지기 어렵다. 잘 작동하는 코드를 괜히 건드려서 오류가 발생한다면 오로지 변경한 개발자 책임이 되기 때문이다.

테스트 주도 개발하는 기업 추천

테스트 기반 없이 코드 리뷰만 하는 기업과 테스트 주도 개발 문화를 제대로 갖고 기업 중 선택해야 한다면 TDD 기업을 추천한다. TDD가 습관이 되면 훨씬 개발 생산성도 높을 뿐만 아니라 이런 저런 실험을 쉽게 할 수 있다. 코드 리뷰가 없어도 스스로 발전할 수 있다. 코드 리뷰만 하는 경우 앞에서 말한 비효율성과 위험성 때문에 코드 리뷰를 반기지 않게 될 가능성이 크다.

 

반응형