반응형
SMALL
프로그래머 경력 20년이 내가 생각한 코드 리뷰 요청 전 셀프 체크리스트
출처: https://qiita.com/y-some/items/d9bd43d683e429fb3afb
체크리스트
- 맞춤법 오류가 없나?
- 죽은 코드나 의미 없는 주석이 있는 것은 아닌가?
- 주석이 코드와 다르지 않나??
- 복사한 부분을 검토 했나?
- 들여 쓰기가 어긋나지 않았나?
- 컨텍스트와 이름이 일치하는가?
- 타입이 너무 크거나 함수가 너무 크지 않나?
- 한 줄이 (옆으로) 너무 길지 않나?
- IDE에 경고가 발생하지 않았나?
- 수평 확장 조사 했나?
- 기존의 공통 처리가 있다는 것을 놓치지 않았나?
각 항목의 이유와 배경 등
맞춤법 오류가 없나?
- 케어리스 미스의 대표적인 것이다.
- 철자 오류가 치명적인 버그의 직접적인 원인이 되는 것도 드물지 않지만 나중에 코드를 검색 할 때 찾기 힘들다는 것도 위험하다.
- 영어 단어의 철자는 조금이라도 확실하지 않으면 구글링으로 확인한다.
죽은 코드나 의미없는 주석이 남아 있지 않나?
- 「시행착오 단계에서 쓴 코드가 그대로 리뷰 때까지 남아 버렸다」라고 하는 것이, 일반적인 패턴이다.
- 나중에 코드를 읽을 때 시행 착오 코드의 의도를 읽을 수 없다. 나중에 누군가에게 "삭제해야 할 것 같지만, 삭제해서 버그가 생긴다면 싫다 ..."라는 불필요한 수고를 만든다.
- 또 위의 항목과 반대로, 나중에 코드를 검색할 때 검색이 걸려서 귀찮게 한다.
- 나는 시행 착오 용으로 쓰는 코드에 미리, TODO: 시행착오용 코드 같은 나름대로의 마크를 결정하고, 코드 리뷰를 의뢰하기 전에 검색한다.
코멘트가 코드와 다르지 않나?
- 흔한 패턴은, 「복사 붙여넣기 했을 때에, 주석과 코드를 원본에서 복사해 와서, 이 주석이 복사된 곳과는 매치하고 있지 않다」라는 경우이다.
- 이것도 나중에 누군가에게 "주석 잘못처럼 보이지만, 실은 뭔가 뒷사정이 있지 않을까?…"라는 불필요한 수고를 만든다.
복사한 부분을 검토 했나?
- 구현의 의도를 누군가에게 물었을 때 「아, 그것은 ○○로부터 복사했을 뿐입니다(그러니까 따지지 말아 주세요)」라고 대답하고 있지 않나?
- 첫째, 논리가 공통이면 공통화를 고려해야 한다 .2
- 둘째, 복사 소스 코드가 테스트 되고 잘 작동하더라도 붙여 넣기에서 예상대로 작동한다는 보장은 없으므로 충분히 확인해야 한다.
- 이러한 copipe를 용서하는 문화가되면, 이 코드는 또한 누군가에 의해 깊이 생각하지 않고 복사된다. 이러면 저장소가 혼돈으로 향한다.
- 그래서 복사-붙여넣기에 트랩이 숨어있는 경우가 많기 때문에 copipe한 부분은 면밀히 검토해야 한다.
들여 쓰기가 어긋나지 않나?
- 코드의 체제는 명명과 마찬가지로 나중에 코드의 의도를 이해하는 속도에 영향을 미친다.
- 이것은 변경 차이만으로는 눈치 채지 않는 경우도 있으므로 요주의이다.
- 이것 역시, 복사-붙여넣기 원인이 경우가 많다. 복사-붙여넣기의 원래와 앞에서의 중첩 깊이가 다른 경우에 어긋나 버린다.
- 대부분의 IDE에는 자동 정형 기능이 붙어 있으므로, 자동 정형의 바로 가기를 손가락에 기억시켜 두는 것이 좋다 .
컨텍스트와 이름이 일치하는가?
- 클래스의 이름과 책임, 함수의 이름과 처리 내용, 변수의 이름과 용도, 이다.
- 나중에 누군가가 코드를 읽을 때 이름에서 많은 정보를 얻는다. 프로그램은 쓰기 시간보다 읽기 시간이 훨씬 많기 때문에 명명은 생산성과 품질에 큰 영향을 미친다.
타입이 너무 크거나, 함수가 너무 길지는 않나?
- 이 근처는 가능하면, Linter 라이브러리를 넣어 기계적으로 체크해야 한다.
- 기준으로는 아래와 같다
- 클래스나 구조체의 행수는 200행 이내
- 함수의 행 수는 40행 이내
- 이 문제의 주제는 행 수가 길어 이해가 어려워지는 것뿐만 아니라, 본질적으로는 「책무가 너무 클 가능성이 있으므로 분할을 검토하자」 라고 하는 것이다.
- 이 관점에서는 혼자 고민하는 것보다 빨리 제삼자의 지혜를 빌리는 것도 의미 있다고 생각한다.
한 줄이 (옆으로) 너무 길지 않나?
- 기준으로는 120자 이내입니다.
- 프레임워크 등에 의해 자동 생성된 코드도 긴 경우도 있으므로, 거기까지 중요성이 높은 것은 아니지만, 역시 코드의 독자에게 배려하는 차원에서 중요하다고 생각한다.
IDE에서 경고가 발생하지 않았나?
- Linter를 넣고 있어도, Linter에 의한 경고를 무시해 버리면 엉망이다.
- 이른바 ‘갈라진 창 이론’이라는 녀석으로 ‘이 경미한 경고 정도는 … 라고 그냥 넘겨버리면 바로 경고 수가 수십 수백이 되고, 정말 중요하고 대처해야할 경고를 보지 못할 수 있다.
- Linter 이외에도, 언어나 IDE에 의해, 미 사용 변수나, 메모리 누수, 여러가지 경고를 내 주고 있으므로 기본적으로는 모두 대처해야한다고 생각한다.
수평 확장 조사 했나?
- 특히 신규가 아니고 개수의 경우, 수정해야 할 부분이 그 밖에 없는지 프로젝트 소스 전체에 대해 검색을 걸어 조사하는 것이 좋다.
- 손을 넣은 「없다」 개소가 문제가 없다고 하는 시점은 실무적으로 소중 하기도 하다.
기존 공통 처리가 있다는 것을 놓치지 않았나?
- 이쪽도 위의 항목과 유사하고, 「쓴 코드는 올바르지만, 원래 코드를 쓸 필요가 없을 가능성은 없는가?」 라고 하는 시점이다.
- 공통 처리가 벌써 있는데 자신이 구현을 늘려 버리면, 장래의 사양 변경 시에 횡전개 조사·개수가 필요하게 되어 버리고, 놓치는 위험성도 있다.
반응형
LIST
'Programming' 카테고리의 다른 글
[ChatGPT]Build a Serverless ChatGPT SMS Chatbot with the OpenAI API (0) | 2023.01.15 |
---|---|
[Redmine] Windows 에 레드마인(Redmine) 설치 (0) | 2023.01.11 |
[Programming] Clean Code (0) | 2023.01.11 |
[Okky]왜 서비스 회사에서는 SI 경력을 곱게 보지 않는가. 그리고 왜 나는 서비스 회사 경력을 곱게만 보지 않는가. (0) | 2023.01.09 |
[IT강좌]청년취업사관학교 (0) | 2023.01.08 |