반응형
출처: 페이지 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)가 적절하게 사용되는가?
반응형
'개발생명주기단계별 > 구현_코드 정적 분석' 카테고리의 다른 글
영상자료 - MISRA 및 정적 코드 분석 지원 도구 PC-Lint (0) | 2021.09.06 |
---|---|
논문요약 - 임베디드 시스템을 위한 정적 코드 분석 by AGREN (0) | 2019.06.17 |
JSF 코딩 표준 - 임무 및 안전 필수 플랫폼 상에 C++ 사용하기 by Emshoff (0) | 2019.06.10 |
HICPP(High Integrity C++) 코딩 표준 소개 (0) | 2019.06.03 |
페이퍼요약 - Simulink Code Inspector로 코드 리뷰 자동화하기 by Conrad (0) | 2019.05.31 |