코드 냄새가 나는 부분들
주석
- 부적절한 정보
- 성의없는 주석
- 쓸모없는 주석
- 주석처리된 코드
- 중복된 주석
환경
- 여러 단계 빌드
- 여러 단계 테스트
함수
- 너무 많은 인수
- 플래그 인수
- 출력 인수
- 죽은 함수
일반
- 한 소스 파일에 여러 언어 사용
- 당연한 동작을 구현하지 않음
- 경계를 올바로 처리하지 않음
- 안전절차 무시
- 중복 (코드 중복 줄이기!!)
- 코드 중복: 함수로 분리
- switch, if-case: 다형성 대체
- 알고리즘이 유사하지만 코드는 다름: Template Method 패턴, strategy 패턴
- 추상화 수준이 올바르지 못함
- 기초 클래스가 파생 클래스에 의존
- 과도한 정보
- 더이상 사용되지 않는 코드 (죽은 코드), 쓸모 없는 코드
- 수직 분리 x
- 일관성 부족
- 인위적 결합 … 함수, 상수, 변수들이 당장 편한 위치가 아닌 올바른 위치에 들어갔는지에 대해 고민하기
- 기능 욕심
- 선택자 인수 (bool값을 함수의 파라메터로 넘기지 말자)
- 모호한 의도
- 잘못 지운 책임
- 부적절한 static 함수 (재정의 가능성은 없는지 꼭 체크)
- 서술적 변수 (많을수록 읽기 쉬워진다)
- 이름과 기능이 일치하지 않는 함수 (함수 네이밍을 정확히 하는 것이 좋다)
- 알고리즘을 이해하라
- 논리적 의존성은 물리적으로 드러내라
- 표준 표기법을 따르라
- 매직 넘버는 이름을 붙인 상수로 사용
- 관례보다 구조를 사용하라
- 조건을 캡슐화 하라
- 부정 조건은 피하라
- 함수는 한 가지만 하도록 구현
- 숨겨진 시간적인 결합 피하기 (호출 순서가 정해진 곳은 그것이 보이도록)
- 일관성 유지하라
- 경계 조건을 캡슐화하라
- 함수는 추상화 수준을 한 단계만 내려가야 한다
- 설정 정보는 최상위 단계에 둬라
- 추이적 탐색을 피하라 (A가 B를 사용하고 B가 C를 사용한다고 해서 A가 C를 알 필요는 없다)
테스트
- 불충분한 테스트
- 커버리지 도구를 사용하라
- 사소한 테스트를 건너뛰지 마라
- 무시한 테스트는 모호함을 뜻한다
- 경계 조건을 테스트 하라
- 버그 주변을 철저히 테스트하라
- 테스트 커버리지 패턴을 살펴라
- 테스트는 빨라야 한다
반응형