'코드 리뷰(소스 리뷰)'란 소프트웨어 개발의 질을 높이는 것 등을 목적으로 실시하는 소스 코드의 리뷰입니다. 순서가 명확하게 정해져 있는 것은 아니기 때문에, 어떠한 목적으로 실시하고 있는지 애매한 채로 있는 부분도 있을지도 모릅니다.
우선 코드 리뷰의 장점과 기본적인 실시 방법 및 마음가짐에 대해 설명하겠습니다.
코드 리뷰의 장점
코드 리뷰에서는 소스 코드를 눈으로 보고 체크함으로써 수정해야 할 오류를 발견합니다. 잘못이라고는 말할 수 없지만, 「여기를 고치면 더 나아지지 않을까」라고 하는 아이디어를 서로 내어, 개선을 위한 논의로 연결하는 것도 가능합니다.
이를 통해 소프트웨어의 품질 향상을 기대할 수 있지만, 그 밖에도 다음과 같은 장점을 생각할 수 있습니다.
- 멤버의 스킬이 향상
- 설계 등의 기술정보의 공유
- 코딩 스타일의 통일
- 팀 내 커뮤니케이션 원활
어떤 장점을 기대하는지는 팀원 구성이나 스킬 등에 따라 달라질 것입니다. 예를 들어 팀 내에 신인이 많으면 스킬 향상이 우선 사항이 될 수도 있습니다. 멤버 개개인의 책임이나 부담을 경감하기 위해 정보 공유를 중시하는 것도 생각할 수 있습니다.
코드 리뷰 실시 방법
코드 리뷰를 '언제', '누가' 하는지는 팀마다 다르더라도 문제가 없습니다. 왜냐하면 리뷰는 팀별 개발 프로세스에 통합되어야 하는 공정이기 때문입니다.
그렇다고 해도 코드 리뷰를 실시하기 쉬운 타이밍은 어느 정도 정해져 있습니다. 그중에서도 Git 등의 버전 관리와 얽히는 것이 대표적인 방법일 것입니다. 변경을 병합하기 전이나 풀 요청 시점에 책임자가 소스 코드를 체크하는 방식입니다.
또한 페어 프로그래밍을 도입하고 있는 팀에서는 어느 정도 코드 리뷰가 실시되고 있다고 할 수 있습니다. 페어 작업 중 네비게이터 역할을 하는 사람이 소스 코드를 확인하는 장면이 많기 때문입니다. 이에 대해서는 관련 기사가 있으니 참고해 보세요.
코드 리뷰의 마음가짐
코드 리뷰에서는, 무심코 논의가 히트 업해 버리는 경우도 적지 않습니다. 하지만 팀이 험악한 분위기가 되는 사태는 피해야 할 것입니다. 그러기 위해서는, 「완벽한 코드」를 너무 추구하지 않는 것입니다. 그다지 본질적이라고는 할 수 없는 세세한 부분을 고집하거나, 몇 번이나 수정을 반복해 버려서 리뷰가 끝나지 않거나 하면, 장점보다 악영향이 더 커지게 됩니다.
그렇다고는 해도, 뭔가 문제가 있으면 지적하지 않으면 안 되는 것이 리뷰입니다. 지적을 할 때 재검토해야 할 것은 소스 코드이며, 개개의 성격이나 인격에는 아무런 문제가 없다는 의식을 가지는 것이 좋습니다. 그래도 리뷰 자체에 익숙하지 않은 사람은 약간의 충격을 받을지도 모릅니다. 신인 이 같은 경우 등은 좋은 점을 발견하고 적극적으로 칭찬하도록 하는 것도 추천합니다.
코드 검토 관점
코드 리뷰에서는 어떤 점에 주목해야 할까요? 여기에서는 코드 리뷰를 통해 체크하고 싶은 포인트에 대해 설명합니다.
코딩 규칙을 따르고 있는가?
규칙에 따른 코딩은 소스 코드의 가독성은 물론 팀워크 측면에서도 중요합니다. 구체적인 규칙은 팀의 방침이나 개발 대상에 따라서도 달라지지만 대체로 다음과 같은 관점을 생각할 수 있을 것입니다.
- 코멘트가 필요에 따라 쓰여 있는가?
- 식별자 네이밍을 알기 쉬운가
- 알고리즘이 필요 이상으로 복잡하지 않은가?
이때 사람이 하는 의미 있는 체크를 의식하는 것이 포인트입니다. 도구로 자동으로 체크할 수 있다면 그것으로 충분할 것입니다. 예를 들어, 아래에 관한 규칙은 툴에 의한 체크에 적합합니다.
- 글자를 내릴 때 탭과 스페이스 중 어느 쪽을 사용할지
- 파일의 종단에 줄 바꿈을 넣을지 어떨지
의도한 대로 실장이 되어 있는가
소스 코드는 사양과 설계를 충족해야 합니다. 그러나 모든 사양과 설계가 소스 코드와 동일한 입도로 문서화되어 있는 것은 아닙니다. 그 때문에, 코드 리뷰에서는 「개발자가 무엇을 의도했는가」와 「그대로 실장 할 수 있었는가」가 보다 중요합니다. 아래와 같은 관점에서 소스 코드를 체크하는 것이 좋습니다.
- 의도한 기능을 망라할 수 있는가?
- 오류나 예외 판정에 빠진 것은 없는가?
- 에지 케이스(일반적인 상황)를 상정할 수 있는가
자동 테스트를 도입하고 있는 팀에서는 위의 대부분은 테스트 시에 체크됩니다. 이것은 테스트로 인해 코드 리뷰가 불필요해진다는 것은 아닙니다. 코드 리뷰에서 '소스 코드와 함께 테스트 케이스도 적절하게 갱신되고 있는가'라는 관점도 추가되는 것을 의미합니다.
불량으로 이어지는 부분이 없는지
소스 코드를 정밀 조사하면 논리적으로 오류로 이어질 우려가 있는 부분을 찾아내는 것도 가능합니다. 예를 들어, 다음과 같은 관점에서의 코드 리뷰도 유익할 것입니다.
- 병렬 처리가 교착 상태에 빠질 우려는 없는가?
- 보안을 위한 판정은 충분히 이루어지고 있는가?
- 적절한 알고리즘이 선택되어 있는가(속도가 중시되는 상황에서 고속의 수법을 사용하고 있는가, 등)
단, 코드 리뷰는 설계를 다시 시작하기 위한 장소는 아닙니다. 근본적인 설계 변경의 필요성을 코드 리뷰 단계에 이르러서야 깨달았을 경우 코딩에 착수하기보다 이전 공정에 문제가 없는지 돌아보도록 하겠습니다.
코드 리뷰의 효과적인 방법
코드 리뷰에는 다양한 장점이 있지만, 실시하려면 시간과 수고가 필요합니다. 그래서 코드 리뷰의 실시를 돕고 효과를 높이기 위한 고안에 대해 소개합니다.
정적 해석 도구를 활용
코드 리뷰의 진가는 '사람'이 체크하는 점에 있습니다. 자동화가 가능한 부분에 대해서는 적극적으로 툴을 활용하는 것이 좋습니다. 예를 들어 lint에 의한 정적 해석을 도입하여 오류의 원인이 되기 쉬운 기술을 검출하는 것은 간단하고 유효한 방법 중 하나입니다. 또한 보안상의 잠재적인 문제를 검출해 주는 정적 해석 도구도 있습니다. 이것들은 코드 리뷰에서 효율적으로 문제를 발견하는 데 보조적인 역할을 할 것입니다.
자동 테스트와 조합
코드 리뷰와 자동 테스트는 서로를 보완합니다. 코드 리뷰에서 빠뜨린 문제는 자동 테스트로 어느 정도 검출할 수 있을 것입니다. 자동 테스트에서는 검출이 어려운 문제가 숨어 있었다고 해도 코드 리뷰를 실시하고 있으면 알아차릴 수 있습니다.
어느 쪽을 먼저 실시할지는 팀별 개발 프로세스에 따라 달라지는 부분입니다. 일반적으로 자동 테스트에 합격한 후 변경 사항을 병합하기 전이 코드 리뷰를 실시하기 쉬운 타이밍일 것입니다.
지식을 공유하다
팀 내 정보 공유나 멤버의 스킬 향상은 많은 사람들이 코드 리뷰에 기대하는 장점일 것입니다. 그러기 위해서는 과제 관리 툴을 이용하는 것을 추천합니다. 과제 관리 도구는 프로젝트의 해결되지 않은 문제를 나열하고 해결까지 상황을 추적하기 위한 것이지만 코드 리뷰에도 적용할 수 있습니다. 지적 사항을 과제로 등록해 두고 빠짐없이 대응할 수 있도록 하는 것입니다. 이때, 대응이 끝난 것을 포함해 모든 과제를 멤버가 열람할 수 있도록 해 두면, 정보 공유나 스킬 향상에도 도움이 되기 쉬워질 것입니다.
'IT' 카테고리의 다른 글
TypeScript 란? (0) | 2023.03.05 |
---|---|
Azure란? (0) | 2023.03.05 |
C언어란 무엇인가 (0) | 2023.03.04 |
Flutter 에 대한 소개 (0) | 2023.03.04 |
Java 의 Class 란 무엇인가? (0) | 2023.02.05 |
댓글