본문 바로가기

개발 Note/C++11,14 (modern C++)

C/C++: Code Review 하는 방법

반응형

많은 사람들이 코드리뷰는 매우 중요하다고 생각하고 필요하다고 말한다.
하지만 정작 코드리뷰를 어떻게 해야 할지 모르는 경우가 많다. 어떻게 하는 것이 좋을까?

 

일단 가장 좋은 방법은 툴을 활용하는 방법이 있다.

그러나 Prevent 같은 툴을 돌려서 확인할 수 있는 환경이라면 코드리뷰상 고민거리가 없겠지만, 실제 그런 환경에서 개발하고 있는 개발자는 많지 않다. 때문에 개발자가 눈으로 코드리뷰 하는 방법도 알아둘 필요가 있다.

 


1. 프로그래밍 상 기본적으로 지켜야 하는 사항( 문법적인 요소)을 지켰는지 확인한다.


http://reiot.springnote.com/pages/115620    <-- 여기 사이트에서 가져온 내용인데 참 유용한 내용이 많네요.

 

  • 상속 관계의 베이스 클래스에 virtual destructor 를 선언했는가?
  • 배열 포인터를 delete[] 로 삭제하는가?
    • delete:Wh*[]으로 정규식 검색을 하면 편하다.
  • 배열이 아닌 포인터를 delete[] 로 삭제하는가?
  • memcpy(), memset(), memmove(), strcpy() 메모리 관련 함수들의 BoundCheck가 잘 되어 있는가?
  • 배열을 인덱싱할 때 파라미터의 BoundCheck 가 잘 되어 있는가?
  • 다른 네트워크에서 넘어온 모든 정수형 파라미터에 대한 BoundCheck가 잘 되어 있는가? (특히 문자열 길이에 유의)
  • STL string 을 사용한다면, %s 포맷팅할 때 c_str() 을 사용하는가?
  • Singleton 이나 STL 컨테이너에 대해서 2개 이상의 쓰레드가 동시에 읽기/쓰기 모드로 접근하는 경우 lock 을 걸고 있는가?
  • 사용하지 않는 copy constructor, assignment operator 가 private 로 선언되어 있는가?
  • 포인터 멤버를 가진 객체를 복사할 때 assignment operator 를 재정의했는가?
  • Warning Level 을 4 로 높인 다음 컴파일해봤는가?
    • 초기화하지 않고 사용하는 변수(또는 클래스 데이터 멤버)가 가장 위험하다.
  • try ~ catch( … )은 절대 사용하지 말라. SEH Exception 까지도 캐치해버린다.버그를 숨겨서 더 큰 버그를 만들 뿐이다.
  • set_se_translator() 를 쓰지 마라. 쓰레드 로컬이라, 매 쓰레드마다 해줘야 한다. SetUnhandledExceptionFilter()는 프로세스 글로벌이다.
  • Visual Studio .net 2005 에서 지원하는 [코드 분석] - [C/C++에 코드 분석 사용] (/analyze) 을 사용해서 주기적으로컴파일러를 이용한 코드분석을 시행하라.

2. 도메인 지식을 기반으로 리뷰를 해야한다.

도메인 별로 중요하게 생각하는 부분들이 있기 마련이고, 그때문에 도메인 만의 독특한 형태의 코드 구성이 있을 수 있다.

도메인 내의 개발자는 이런 포인트들을 미리 정리해서 가이드를 만들어 둔다면 , 이 가이드 기반으로 코드리뷰를 진행할 수 있다.

  • naming을 잘 지켰는가?
  • allocation된 메모리나 생성된 객체에 대한 소유 정책이 정책이 있는가? 또 이를 잘 지켰는가?
    • 즉, 생성한쪽에서 소멸하는 정책인가 ?
    • 객체나 메모리를 위임할 수 있는 정책인가?
  • System의 처리방식과 잘 조화가 이뤄졌는가?

이런 문제들을 먼저 채크해 봐야 할듯싶다.


3. 위와같이 체크리스트를 만들고 주기적으로 update를 수행하여 체크리스트 를 보완해 나가야한다.