코드 리뷰란? 개발자가 작성한 코드를 다른 개발자가 검토하여 오류를 발견하고 개선하는 활동입니다. 코드 리뷰를 통해 개발자는 코드의 품질을 향상시키고, 버그를 줄이고, 코드의 이해도를 높이고, 유지보수를 쉽게 할 수 있습니다.
출처: 페이지 331, Ilene Burnstein의 저서 Practical Software Testing(Springer-Verlag 출판, 2003년)
코드 리뷰를 할 때는 다음과 같은 체크리스트를 참고할 수 있습니다.
설계 이슈
- 각 유닛이 하나의 단일 기능을 구현하는가?
- 분할되었어야 하는 유닛이 있는가?
- 코드가 상세 설계와 일관적인가?
- 코드가 상세 설계를 커버하는가?
데이터 항목
- 입력 타당성 체크가 있는가?
- 어레이의 차원, 경계, 인덱스가 체크 되었는가?
- 모든 변수가 정의되고 초기화되었는가? 정확한 타입과 범위인지 체크 되었는가?
- 모든 변수가 사용되는가?
컴퓨테이션
- 비일관적인 데이터 타입을 가진 변수들을 사용한 컴퓨테이션이 존재하는가?
- 혼합 모드 컴퓨테이션이 존재하는가?
- 할당의 타겟 값이 우측 표현식보다 작은가?
- 오버플로우 또는 언더플로우 가능성이 있는가(예, 0으로 나누기)?
- 정수 또는 부동소수점 연산의 유효하지 않은 사용이 있는가?
- 부동소수점 숫자들 간의 비교가 존재하는가?
- 부울 표현식에서 평가 순서에 대한 가정이 있는가?
- 비교 연산자가 정확한가?
통제 흐름 이슈
- 프로그램, 모듈, 또는 유닛이 결국에는 종료하는가?
- 무한 루프, 정상보다 일찍 빠져나가는(a premature exit) 루프, 절대 실행되지 않는 루프 등이 있는가?
인터페이스 이슈
- 호출하는 루틴에 의해 사용되는 파라미터의 수와 애트리뷰트가 호출되는 루틴의 그것과 매치되는가? Caller와 Callee에서 파라미터의 순서 또한 정확하고 일관적인가?
- 함수 또는 프로시저가 입력 파라미터만으로 의도된 파라미터를 변경하는가?
- 전역 변수가 있는 경우, 이를 사용하는 모든 모듈에서 상응하는 정의와 애트리뷰트를 가지는가?
입/출력 이슈
- 모든 파일이 사용을 위해 열렸는가?
- 종료 시 모든 파일이 적절하게 닫히는가?
- 파일이 선언된 경우 그 애트리뷰트가 정확한가?
- EOF 또는 I/O 에러 조건이 정확하게 다루어지는가?
- I/O 버퍼 크기와 레코드 크기가 조화되는가(compatible)?
이식성 이슈
- 가정된 문자 집합, 정수 또는 부동소수점 표현이 존재하는가?
- 수정될 필요가 생길 수도 있는 서비스 호출이 존재하는가?
에러 메시지
- 모든 경고와 알림 메시지가 적절하게 체크되고 사용되었는가?
코멘트/코드 문서화
- 코드가 적절하게 문서화되었는가? 적절한 장소에 전역 코멘트, 프로시져 코멘트, 라인 코멘트가 있는가?
- 문서화가 명확하고, 정확하고, 이해를 돕는가?
코드 배치와 여백
- 코드 로직 및 의도에 대한 이해를 돕기 위해 여백과 들여쓰기(indentation)가 사용되었는가?
유지보수
- 각 모듈이 단일 출구점(a single exit point)를 가지는가?
- 모듈들의 변경이 쉬운가(낮은 결합도와 높은 응집도)?