안녕하세요, 코딩의 신 블로그에 오신 것을 환영합니다. 저는 김코딩스타라고 합니다. 프로그래밍에 관심이 있는 분들을 위해 유용하고 재미있는 정보를 공유하고자 이 블로그를 운영하고 있습니다. 오늘은 코드 리뷰 기법에 대해 알아보겠습니다.
코드 리뷰란 무엇인가요?
코드 리뷰란 코드를 실행하지 않고 사람이 검토하는 과정을 통하여 코드상에 숨어있는 잠재적인 결함을 찾아내고 이를 개선하는 일련의 과정입니다. 테스팅의 범주에서는 정적인 분석에 속합니다. 코드 리뷰 기법은 소프트웨어 개발 주기의 후반에 위치하지만, 같은 로직을 여러 관점에서 생각하는 아이디어 회의나 주니어 개발자에게로의 지식 전달등의 부가적인 목적들도 함께 가지고 있습니다.
코드 리뷰는 코드 품질을 개선하고 결과적으로 생성하는 소프트웨어의 품질을 개선하는 데 필수적인 과정입니다. 또한 개발 비용을 절감하고 프로세스 초기에 버그를 잡는 것과 같은 다른 이점도 있습니다. 코드 리뷰를 통해 다음과 같은 효과를 얻을 수 있습니다.
- 코드의 가독성, 일관성, 유지보수성을 높일 수 있습니다.
- 코드의 보안성, 성능, 안정성을 향상시킬 수 있습니다.
- 코드의 재사용성과 모듈화를 증진시킬 수 있습니다.
- 코드의 표준화와 베스트 프랙티스를 준수할 수 있습니다.
- 코드의 문제점과 개선점을 발견하고 해결할 수 있습니다.
- 코드 작성자와 리뷰어간의 커뮤니케이션과 협업을 강화할 수 있습니다.
- 코드 작성자와 리뷰어간의 지식과 경험을 공유하고 습득할 수 있습니다.
코드 리뷰 기법은 어떤 것들이 있나요?
코드 리뷰 기법은 크게 얼마나 정형적이고 프로세스적인 방법으로 나눌 수 있고, 리뷰어와 작성자가 직접 커뮤니케이션을 하느냐 아니면 기타 자동화된 코드리뷰 도구를 사용하느냐에 따라 온라인 리뷰와 오프라인 리뷰로 나눌 수 있습니다. 먼저 정형성에 따라서 대표적인 리뷰 방법을 나열해보면 다음과 같습니다.
- 코드 인스펙션: 코드리뷰 기법중에서 가장 정형화된 패턴의 기법입니다. 전문화된 코드리뷰팀이 시스템이 어느정도 구현된 단계에서 일정한 패턴을 가지고 코드를 분석합니다. 인스펙션팀은 크게 4 가지 역할을 가지고 구성이 됩니다.
- 모더레이터: 인스펙션팀의 실제적인 메니져로 생각하면 됩니다. 인스펙션팀과 그 대상이 되는 코드를 작성한 개발팀간의 인터페이스를 담당하고 필요한 리소스와 인프라를 확보하는 작업을 합니다. 또한 인스펙션에 대한 프로세스 정의와 산출물의 정리를 담당합니다.
- 리더: 각종 산출물들을 읽고 인터뷰등을 통해서 전체 시스템을 이해하여 인스펙션팀이 어떤 흐름으로 인스펙션을 진행할지에 대한 방향을 지시하며 시스템에 대해서 팀내에서 가장 많은 도메인 지식을 갖는 사람입니다.
- 검사자: 리더가 지시한 방향에 따라서 코드를 검증하고 잠재적인 결함의 발견 및 권장 수정 방안을 만들어 냅니다.
- 검증자: 인스펙션이 진행중인 모듈에 대해서 테스트를 수행하고 결함을 찾아내는 역할을 수행하며, 이외에 검사자가 권장한 수정 코드안에 대한 검증과 실제 업무 개발자가 수정해온 코드에 대한 검증 작업을 수행합니다.
- 팀 리뷰: 코드 인스펙션보다 좀 덜 정형화 되었지만 그래도 일정한 계획과 프로세스를 따릅니다. 코드 인스펙션 프로세스의 단계 (Planning ,Overview ,Preparation등의 사전 준비 단계는 생략됩니다.) 역할은 중복되거나 생략될 수 있는데 발표자(Author)는 필수적으로 구성됩니다. 리뷰시간에는 발표자(코드를 만든 사람)가 코드에 대한 설명을 하고 팀원은 결함이나 개선안을 찾습니다. 리뷰어는 리뷰의 주제를 선정하여 리뷰를 진행하고, 리뷰에서 나온 의견을 정리해서 Action Item으로 기록합니다. Action Item들은 프로젝트 관리자가 실제 프로젝트로 관리해야 합니다. (일정에 반영되어야 합니다.)
- 워크스루: 단체로 하는 코드 리뷰 기법중에서 가장 비정형적인 방법중에 하나입니다. 발표자가 리뷰의 주제와 시간을 정해서 발표를 하고 동료들로부터 의견이나 아이디어를 듣는 시간을 갖습니다. 주로 사례에 대한 정보 공유나 아이디어 수집을 위해서 사용될 수 있습니다. 개발을 위한 프로세스에서 보다는 사례에 대한 회의와 같은 정보 공유성격에 유리합니다. 유일하게 발표자만이 리뷰를 주관하고 발표하는 역할을 가지며 다른 참여인원들은 아무런 책임이나 역할을 가지지 않고 자유롭게 의견을 개진합니다.
코드 리뷰를 효과적으로 하기 위한 팁은 무엇인가요
코드 리뷰를 효과적으로 하기 위한 팁은 다음과 같습니다.
- 리뷰의 목적과 범위를 명확히 하세요. 코드 리뷰는 단순히 코드의 문법이나 스타일을 검사하는 것이 아니라, 코드의 품질과 기능을 개선하고, 개발자의 성장과 협업을 도모하는 것입니다. 따라서 리뷰의 목적과 범위를 미리 정하고, 그에 맞는 기준과 방법을 적용해야 합니다. 예를 들어, 코드 인스펙션은 결함을 찾아내는 것이 주된 목적이므로, 정형화된 프로세스와 체크리스트를 사용할 수 있습니다. 반면, 워크스루는 아이디어나 의견을 공유하는 것이 주된 목적이므로, 자유로운 토론과 피드백을 활용할 수 있습니다.
- 리뷰의 시점과 주기를 적절히 결정하세요. 코드 리뷰는 가능한 한 빠른 시점에 진행하는 것이 좋습니다. 왜냐하면 코드가 오래되면 수정하기 어려워지고, 결함이 다른 부분에 영향을 미칠 수 있기 때문입니다. 또한, 코드 리뷰는 일정한 주기로 반복적으로 수행하는 것이 좋습니다. 왜냐하면 코드 리뷰는 한 번에 모든 문제를 해결할 수 있는 것이 아니라, 지속적인 개선과 학습을 통해 효과를 볼 수 있는 것이기 때문입니다.
- 리뷰의 방식과 도구를 적절히 선택하세요. 코드 리뷰는 온라인 리뷰와 오프라인 리뷰로 나눌 수 있습니다. 온라인 리뷰는 코드 작성자와 리뷰어가 직접 커뮤니케이션을 하지 않고, 기타 자동화된 코드리뷰 도구를 사용하는 방식입니다. 오프라인 리뷰는 코드 작성자와 리뷰어가 직접 만나서 커뮤니케이션을 하는 방식입니다. 온라인 리뷰는 시간과 장소에 구애받지 않고, 편리하고 빠르게 진행할 수 있습니다. 하지만 커뮤니케이션의 한계와 도구의 비용이 있습니다. 오프라인 리뷰는 커뮤니케이션의 품질과 깊이가 높고, 도구의 비용이 없습니다. 하지만 시간과 장소에 제약이 있고, 준비와 진행에 많은 노력이 필요합니다. 따라서 상황에 따라 적절한 방식과 도구를 선택해야 합니다.
- 리뷰의 내용과 피드백을 적절하게 전달하세요. 코드 리뷰는 단순히 결함을 지적하거나 수정안을 제시하는 것이 아니라, 코드 작성자와 리뷰어간의 커뮤니케이션과 협업의 과정입니다. 따라서 리뷰의 내용과 피드백을 적절하게 전달하는 것이 중요합니다. 예를 들어, 다음과 같은 방법을 사용할 수 있습니다.
- 리뷰의 내용은 구체적이고 명확하게 전달하세요. 리뷰의 내용은 구체적인 코드의 위치와 문제점, 그리고 개선안을 포함해야 합니다. 또한, 리뷰의 내용은 명확하고 이해하기 쉬운 언어로 전달해야 합니다. 애매하거나 모호한 표현은 오해와 혼란을 일으킬 수 있습니다.
- 리뷰의 피드백은 존중하고 칭찬하세요. 리뷰의 피드백은 코드 작성자의 노력과 성취를 인정하고, 긍정적인 면을 칭찬해야 합니다. 또한, 리뷰의 피드백은 코드 작성자의 자존감과 자신감을 해치지 않고, 존중하고 배려하는 태도로 전달해야 합니다. 비난하거나 비판하는 표현은 피해야 합니다.
- 리뷰의 피드백은 대화와 소통하세요. 리뷰의 피드백은 단방향적인 지시나 명령이 아니라, 양방향적인 대화와 소통이어야 합니다. 코드 작성자와 리뷰어는 서로 의견을 교환하고, 의문을 제기하고, 해결책을 찾아가는 과정을 거쳐야 합니다. 또한, 코드 작성자와 리뷰어는 서로에게 질문하고, 답변하고, 설명하고, 이해하고, 배우고, 성장하는 기회로 삼아야 합니다.
마치며
코드 리뷰는 프로그래밍에 있어서 매우 중요하고 유익한 활동입니다. 코드 리뷰를 통해 코드의 품질과 기능을 개선하고, 개발자의 성장과 협업을 도모할 수 있습니다. 하지만 코드 리뷰를 잘 하기 위해서는 몇 가지 주의할 점이 있습니다. 코드 리뷰의 목적과 범위를 명확히 하고, 시점과 주기를 적절히 결정하고, 방식과 도구를 적절히 선택하고, 내용과 피드백을 적절히 전달하는 것이 필요합니다.
이번 포스팅에서는 코드 리뷰 기법에 대해 알아보았습니다. 다음 포스팅에서는 코드 리뷰 도구에 대해 알아보겠습니다. 프로그래밍에 관심이 있는 분들께 도움이 되었으면 좋겠습니다. 감사합니다.^^
'프로그래밍 기초 > 프로그래밍의 개념' 카테고리의 다른 글
프로그래밍의 개념: 프로그래밍이란 무엇인가? (0) | 2023.07.18 |
---|---|
프로그래밍이란? 컴퓨터와 대화하는 방법을 배우는 과정 (0) | 2023.06.06 |