주석
- C1: 부적절한 정보
- C2: 쓸모 없는 주석
- C3: 중복된 주석
- C4: 성의 없는 주석
- C5: 주석 처리된 코드
환경
- E1: 여러 단계로 빌드해야 한다
- E2: 여러 단계로 테스트해야 한다
함수
- F1: 너무 많은 인수
- 인수는 없는게 가장 좋고, 다음 하나, 그 다음 둘, 그 다음 셋, 넷 이상은 의심
- F2: 출력 인수
- F3: 플래그 인수
- F4: 죽은 함수
일반
- G1: 한 소스 파일에 여러 언어를 사용한다
- G2: 당연한 동작을 구현하지 않는다
- G3: 경계를 올바로 처리하지 않는다
- G4: 안전 절차 무시
- G5: 중복
- G6: 추상화 수준이 올바르지 못하다
- 어려운 부분이지만 저차원 개념은 파생 클래스에, 고차원 개념은 기초 클래스에 넣는다
- 세부 구현과 관련된 상수, 변수, 유틸리티 함수는 기초클래스에 넣으면 안됨
- 기초 클래스는 구현 정보에 무지해야 함
- G7: 기초 클래스가 파생 클래스에 의존한다
- G8: 과도한 정보
- G9: 죽은 코드
- G10: 수직 분리
- 변수와 함수는 사용되는 위치에 가깝게 정의한다
- G11: 일관성 부족
- G12: 잡동사니
- 비어있는 생성자를 제거한다
- 사용하지 않는 코드를 제거한다
- G13: 인위적 결합
- G14: 기능 욕심
- 다른 클래스의 범위를 욕심내지 말아야 한다
- G15: 선택자 인수
- 함수 인자로 들어가는 flag 부울값은 없애는 것이 좋다
- G16: 모호한 의도
- G17: 잘못 지운 책임
- G18: 부적절한 static 함수
- G19: 서술적 변수
- G20: 이름과 기능이 일치하지 않는 함수
- G21: 알고리즘을 이해하지 않음
- G22: 논리적 의존성만 있는 경우
- 논리적 의존성을 물리적으로 드러내야 한다
- G23: if/else 혹은 switch/case 문의 무분별한 사용
- 다형성을 사용하는 것으로 고치는 것이 좋다
- G24: 표준 표기법을 따르라
- G25: 매직 숫자 사용
- 상수료 교체하자
- 너무 당연한 숫자(예를 들어 2를 TWO로 고치는 것은 별로다)
- G26: 정확하라
- G27: 관례보다 구조를 사용하라
- G28: 조건을 캡슐화하라
- G29: 부정 조건은 피하라
- G30: 함수는 한 가지만 해야 한다
- G31: 숨겨진 시간적인 결합
- 두 함수 사이의 어떤것이 먼저 행해져야 한다는 시간적 결합이 존재한다면 이후에 사용되는 함수 인자로 첫 번째 호출되야 하는 함수의 결과값을 넣는 것이 좋다
G32: 일관성을 유지하라G11과 유사- G33: 경계 조건을 캡슐화하라
- G34: 함수는 추상화 수준을 한 단계만 내려가야 한다
- 추가로 함수 내부는 동일한 추상화 단계로 구현하는 것이 읽기 쉽다
- 아래로 내려갈수록 더 상세한 구현단계, 위로 올라갈수록 추상화된 함수를 호출해 사용하는 것으로 구현하자
- G35: 설정 정보는 최상위 단계에 둬라
- G36: 추이적 탐색을 피하라
- 디미터의 법칙 참고
이름
- N1: 서술적인 이름을 사용하라
- N2: 적절한 추상화 수준에서 이름을 선택하라
- N3: 가능하다면 표준 명명법을 사용하라
- N4: 명확한 이름
- N5: 긴 범위는 긴 이름을 사용하라
- N6: 인코딩을 피하라
- N7: 이름으로 부수 효과를 설명하라
테스트
- T1: 불충분한 테스트
- T2: 커버리지 도구를 사용하라
- T3: 사소한 테스트를 건너뛰지 마라
- T4: 무시한 테스트는 모호함을 뜻한다
- T5: 경계 조건을 테스트하라
- T6: 버그 주변은 철저히 테스트하라
- T7: 실패 패턴을 살펴라
- T8: 테스트 커버리지 패턴을 살펴라
- T9: 테스트는 빨라야 한다