5. 코드리뷰 클리닉 체크리스트(지도교수, 멘토).hwp
코드 리뷰 체크리스트 1안 – 공통
<표 1> 공통된 코드 리뷰 체크리스트 (예시)
순번 |
내용 |
평가 |
||
Pass |
Fail |
해당유무 |
||
1 |
․ Coding Conventions에 따라 개발되었는가? (예: 변수 네이밍, 들여쓰기, 괄호 등) |
○ |
||
2 |
․ 변수 정의가 적절히 주석처리가 되어있는가? |
|||
3 |
․ 숫자 데이터의 단위가 명확히 명시되어 있는가? (예: cm, m, sec, min 등) |
|||
4 |
․ 주석화된 코드가 하나의 설명으로 되어있는가? |
|||
5 |
․ 코드 안의 빠진 기능 또는 해결되지 않은 이슈에 대해 주석화되어 있는가? |
|||
6 |
․ 에러에 대한 함수 리턴(return)이 적절히 다루어 지고 있는가? |
|||
7 |
․ 에러 핸들링 코드가 테스트 되었는가? |
|||
8 |
․ 같은 객체가 두 번 이상 해제되고 있는가? |
|||
9 |
․ 모든 전역 변수들은 쓰레드(thread)에 안전한가? |
|||
10 |
․ 코드가 무한 루프에서 자유로운가? |
|||
11 |
․ 재귀 함수는 스택 영역을 충분히 확보한 상태에서 실행되는가? |
|||
12 |
․ 함수가 스택에 정의된 객체에 대한 참조를 리턴하고 있는가? |
|||
13 |
․ 배열(array)에서 인덱스(index)가 범위 밖인지를 체크 하는가? |
|||
14 |
․ 변수들이 사용되기 전에 초기화되어 있는가? |
|||
15 |
․ 코드에서 존재하는 API를 사용해서 새로운 기능을 만들었는가? |
|||
16 |
․ 버그가 발견되면 모두 올바르게 수정(문서화)하는가? |
|||
17 |
․ (필요 시 교수자는 프로그램 언어별 특성을 고려하여 체크리스트를 추가 작성) |
코드 리뷰 체크리스트 2안 – Scratch, R, Python 언어
<표 2> Scratch, R, Python 프로그램 언어를 위한 코드 리뷰 체크리스트 (예시)
순번 |
항목 |
내용 |
평가 |
||
Pass |
Fail |
해당유무 |
|||
1 |
설계 이슈 (Design Issues) |
․ 각 유닛이 하나의 단일 기능을 구현하는가? |
○ |
||
․ 분할되었어야 하는 유닛이 있는가? |
|||||
․ 코드가 상세 설계(detailed design)와 일관적인가? |
|||||
2 |
데이터 항목 (Data Items) |
․ 모든 변수가 정의되고 초기화되는가(initiated)? |
|||
․ 정확한 타입(types)과 범위(scopes)인가? |
|||||
․ 모든 변수가 의미있게 사용하는가? |
|||||
3 |
컴퓨테이션 (Computations) |
․ 오버플로우 또는 언더플로우 가능성이 있는가? |
|||
․ 정수(integer) 또는 부동소수점(floating point) 연산에서 유효하지 않은 사용이 있는가? |
|||||
․ 비교 오퍼레이터가 정확한가? |
|||||
4 |
통제 흐름 이슈 (Control Flow Issues) |
․ 프로그램, 모듈, 또는 유닛이 결국에는 종료하는가? |
|||
․ 무한 루프, 정상보다 일찍 빠져나가는(a premature exit) 루프, 절대 실행되지 않는 루프 등이 있는가? |
|||||
5 |
인터페이스 이슈 (Interface Issues) |
․ 호출하는 루틴(Caller)에서의 파라미터의 수와 속성이 호출되는 루틴(Callee)의 그것과 매치되는가? |
|||
․ 함수(function 또는 procedure)가 입력 파라미터만으로 의도된 파라미터를 변경하는가? |
|||||
6 |
입/출력 이슈 (Input/output Issues) |
․ 모든 파일이 사용을 위해 열렸는가? |
|||
․ 종료 시 모든 파일이 적절하게 닫히는가? |
|||||
․ 파일이 선언된(declared) 경우 그 속성이 정확한가? |
|||||
․ EOF 또는 I/O 에러 조건이 정확하게 다루어지는가? |
|||||
․ I/O 버퍼 크기와 레코드 크기가 조화되는가? |
|||||
7 |
이식성 이슈 (Portability Issues) |
․ 가정된 문자 집합(an assumed character set), 정수 또는 부동소수점 표현이 존재하는가? |
|||
․ 수정될 필요가 생길 수도 있는 서비스 호출이 존재하는가? |
|||||
8 |
에러 메시지 (Error Messages) |
․ 모든 경고(warnings)와 알림 메시지가 적절하게 체크되고 사용되었는가? |
|||
9 |
코멘트/코드 문서화 (Comments/Code Doc.) |
․ 코드가 적절하게 문서화 되었는가? |
|||
․ 문서화가 명확하고, 정확하고, 이해를 돕는가? |
|||||
10 |
코드 배치와 여백 (Code Layout/White Space) |
․ 코드 로직 및 의도에 대한 이해를 돕기 위해 여백과 들여쓰기(indentation)가 사용되었는가? |
|||
11 |
유지보수 (Maintenance) |
․ 각 모듈이 단일 출구점을 가지는가? |
|||
․ 모듈들의 변경이 쉬운가? |
코드 리뷰 체크리스트 3안 – Python, C, Java 언어
<표 3> Python, C, Java 프로그램 언어를 위한 코드 리뷰 체크리스트 (예시)
순번 |
항목 |
내용 |
평가 |
||
Pass |
Fail |
해당유무 |
|||
1 |
데이터 항목 (Data Items) |
․ 모든 변수가 소문자로 되어있는가? |
○ |
||
․ 모든 변수가 초기화되는가(initialized)? |
|||||
․ 모든 변수명이 일관적이고 그 사용 의도를 나타내는가? |
|||||
․ 모든 선언(declarations)이 문서화 되었는가? |
|||||
․ 각 이름이 단일 함수(function)를 위해 사용되는가? |
|||||
․ 변수의 범위(scope)가 의도한대로인가? |
|||||
2 |
상수 (Constants) |
․ 모든 상수가 대문자로 되어있는가? |
|||
․ 모든 상수가 "#define"으로 정의되었는가? |
|||||
․ 다수 파일에서 사용되는 모든 상수가 INCLUDE 헤더 파일에서 정의되었는가? |
|||||
3 |
포인터 (Pointers) |
․ 포인터가 적절하게 포인터로서 선언되었는가? |
|||
․ 포인터가 적절하게 초기화되었는가? |
|||||
4 |
통제 (Control) |
․ if/then, else, switch 문이 명확하고 적절하게 사용되는가? |
|||
5 |
스트링 (Strings) |
․ 스트링이 적절한 포인터를 가져야 함 |
|||
․ 스트링이 NULL로 끝나는가? |
|||||
6 |
괄호 (Brackets) |
․ 모든 중괄호가 적절하게 들여쓰기가 되어있으며 매치되는가? |
|||
7 |
논리 연산자 (Logic Operators) |
․ 모든 초기화가 "="가 아니라 "=="를 사용하는가? |
|||
․ 모든 논리 연산자가 정확한가? |
|||||
8 |
컴퓨테이션 (Computations) |
․ 복잡한 표현식에서 괄호가 선후 관계 명세를 위해 적절하게 사용되는가? |
|||
․ 시프트(shifts)가 적절하게 사용되는가? |