반응형

출처: 페이지 331, Ilene Burnstein의 저서 Practical Software Testing(Springer-Verlag 출판, 2003)


일반적인 코드 리뷰 체크리스트 예

설계 이슈(Design Issues)

  • 각 유닛(unit)이 하나의 단일 기능(function)을 구현하는가?
  • 분할되었어야 하는 유닛이 있는가?
  • 코드가 상세 설계(detailed design)와 일관적인가?
  • 코드가 상세 설계(detailed design)를 커버하는가?

 

데이터 항목(Data Items)

  • 입력 타당성 체크(an input validity check)가 있는가?
  • 어레이의 디멘젼(dimensions), 경계(boundaries), 인덱스(indices) 체크
  • 모든 변수가 정의되고(defined) 초기화되는가(initiated)? 정확한 타입(types)과 범위(scopes)인지 체크되었는가?
  • 모든 변수가 사용되는가?

 

컴퓨테이션(Computations)

  • 비일관적인 데이터 타입을 가진 변수들을 사용한 컴퓨테이션이 존재하는가?
  • 혼합 모드(mixed-mode) 컴퓨테이션이 존재하는가?
  • 할당(an assignment)의 타겟 값이 우측 표현식(the right-hand expression) 보다 작은가?
  • 오버플로우 또는 언더플로우 가능성이 있는가(, 0으로 나누기)?
  • 정수(integer) 또는 부동소수점(floating point) 연산의 유효하지 않은 사용이 있는가?
  • 부동소수점 숫자들 간의 비교가 존재하는가?
  • 부울표현식(Boolean expression)에서 평가 순서에 대한 가정이 있는가?
  • 비교 오퍼레이터(the comparison operators)가 정확한가?

 

통제 흐름 이슈(Control Flow Issues)

  • 프로그램, 모듈, 또는 유닛이 결국에는 종료하는가(terminate)?
  • 무한 루프, 정상보다 일찍 빠져나가는(a premature exit) 루프, 절대 실행되지 않는 루프 등이 있는가?

 

인터페이스 이슈(Interface Issues)

  • 호출하는 루틴(Caller)에 의해 사용되는 패러미터의 수와 애트리뷰트가 호출되는 루틴(Callee)의 그것과 매치되는가? Caller Callee에서 패러미터의 순서 또한 정확하고 일관적인가?
  • 함수(function) 또는 프로시져(procedure)가 입력 패러미터(an input parameter)만으로 의도된 패러미터를 변경하는가?
  • 전역 변수(global variables)가 있는 경우, 이를 사용하는 모든 모듈에서 상응하는 정의(definitions)와 애트리뷰트(attributes)를 가지는가?

 

/출력 이슈(Input/output Issues)

  • 모든 파일이 사용을 위해 열렸는가?
  • 종료 시 모든 파일이 적절하게 닫히는가?
  • 파일이 선언된(declared) 경우 그 애트리뷰트가 정확한가?
  • EOF 또는 I/O 에러 조건이 정확하게 다루어지는가?
  • I/O 버퍼 크기와 레코드 크기가 조화되는가(compatible)?

 

이식성 이슈(Portability Issues)

  • 가정된 문자 집합(an assumed character set), 정수 또는 부동소수점 표현이 존재하는가?
  • 수정될 필요가 생길 수도 있는 서비스 호출이 존재하는가?

 

에러 메시지(Error Messages)

  • 모든 경고(warnings)와 알림 메시지가 적절하게 체크되고 사용되었는가?

 

코멘트/코드 문서화(Comments/Code Documentation)

  • 코드가 적절하게 문서화되었는가? 적절한 장소에 전역 코멘트, 프로시져 코멘트, 라인 코멘트가 있는가?
  • 문서화가 명확하고, 정확하고, 이해를 돕는가?

 

코드 배치와 여백(Code Layout and White Space)

  • 코드 로직 및 의도에 대한 이해를 돕기 위해 여백과 들여쓰기(indentation)가 사용되었는가?

 

유지보수(Maintenance)

  • 각 모듈이 단일 출구점(a single exit point)를 가지는가?
  • 모듈들의 변경이 쉬운가(낮은 결합도와 높은 응집도)?



C 프로그램을 위한 코드 리뷰 체크리스트 예

데이터 항목(Data Items)

  • 모든 변수가 소문자로 되어있는가?
  • 모든 변수가 초기화되는가(initialized)?
  • 모든 변수명이 일관적이고 그 사용 의도를 나타내는가?
  • 모든 선언(declarations)이 문서화되었는가(이해하기 매우 간단한 것들은 제외)?
  • 각 이름이 단일 함수(function)를 위해 사용되는가(루프 변수명은 제외)?
  • 변수의 범위(scope)가 의도한대로인가?

 

상수(Constants)

  • 모든 상수가 대문자로 되어있는가?
  • 모든 상수가 "#define"으로 정의되었는가?
  • 다수 파일에서 사용되는 모든 상수가 INCLUDE 헤더 파일에서 정의되었는가?

 

포인터(Pointers)

  • 포인터가 적절하게 포인터로서 선언되었는가?
  • 포인터가 적절하게 초기화되었는가?

 

통제(Control)

  • if/then, else, switch 문이 명확하고 적절하게 사용되는가?

 

스트링(Strings)

  • 스트링이 적절한 포인터를 가져야 함
  • 스트링이 NULL로 끝나야 함

 

괄호(Brackets)

  • 모든 중괄호(curly brackets)가 적절하게 들여쓰기가 되어있으며 매치되어야 함

 

논리 연산자(Logic Operators)

  • 모든 초기화(initialization)"= ="가 아니라 "="를 사용하는가?
  • 모든 논리 연산자가 정확한지 체크

 

컴퓨테이션(Computations)

  • 복잡한 표현식에서 괄호가 선후 관계 명세를 위해 적절하게 사용되는가?
  • 시프트(shifts)가 적절하게 사용되는가?



반응형

+ Recent posts