Code Review - cleancodeclass/cleancode_theory GitHub Wiki

  • Code Reviewλž€?

    • 전톡적 μ •μ˜ : μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‹€ν–‰ν•˜μ§€ μ•Šκ³  μ†ŒμŠ€μ½”λ“œ κ²€ν† λ₯Ό 톡해 잠재된 결함을 μ°Ύμ•„λ‚΄κ³  κ°œμ„ ν•΄λ‚˜κ°€λ©΄μ„œ μ†Œν”„νŠΈμ›¨μ–΄μ˜ ν’ˆμ§ˆμ„ λ†’μ΄λŠ” ν™œλ™
    • 졜근의 μ½”λ“œλ¦¬λ·°
    • Goal is cooperation, not only bug-hunting
    • μ½”λ“œλ₯Ό 톡해 μ„œλ‘œ μ†Œν†΅ν•˜κ³  배움을 μ£Όκ³  λ°›λŠ” ν™œλ™
    • κ°œλ°œμ™„λ£Œ 단계에 ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 개발 쀑 μΌμƒμ μœΌλ‘œ μˆ˜ν–‰ -"Code review is the discipline of discussing your code with your peers" Derek Prior, RailsConf 2015
  • The Ten Commandments of Egoless Programming(λΉ„μžμ•„μ  ν”„λ‘œκ·Έλž˜λ°μ„ μ˜ν•œ 10개의 원칙)

    • Understand and accept that you will make mistakes.

    1

    • You are not your code.

    2

    • No matter how much "karate" you know, someone else will always know more.

    3

    • Don't rewrite code without consultation.

    4

    • Treat people who know less than you with respect, deference, and patience.

    5

    • The only constant in the world is change.

    6

    • The only true authority stems from knowledge, not from position.

    7

    • Fight for what you believe, but gracefully accept defeat.

    8

    • Don't be "the guy in the room."

    9

    • Critique code instead of people – be kind to the coder, not to the code.

    10

  • μ½”λ“œλ¦¬λ·°μ˜ λͺ©ν‘œ

    • κ°œλ°œμ§„ν–‰ 쀑에 일찍 결함을 λ°œκ²¬ν•˜κ³  고치기 μœ„ν•΄
    • νŒ€ λ©€λ²„λ‘œμ„œ μ½”λ“œ 베이슀의 이해λ₯Ό 곡유λ₯Ό 톡해 μ„œλ‘œ 배움(ν›„λ°° μ–‘μ„± 및 기술 이전)
    • λ””μžμΈκ³Ό κ΅¬ν˜„μ—μ„œ μΌκ΄€μ„±μ˜ λ ˆλ²¨μ„ μœ μ§€
    • μž¬μž‘μ—…μ„ μ€„μ΄λŠ” 것과 같은 ν”ν•œ 결함을 ν™•μΈν•˜κΈ° μœ„ν•΄ 도움을 쀌
    • 싀행단계 기술적인 ν’ˆμ§ˆμ— λŒ€ν•œ μ΄ν•΄κ΄€κ³„μžμ˜ μ‹ λ’°
    • νŒ€λ©€λ²„λ“€κ°„μ— μ†ŒμŠ€λ₯Ό κ³΅μœ ν•˜μ—¬ λ‹€λ₯Έ 개발자의 μ—­ν•  λŒ€ν–‰ κ°€λŠ₯(λ°±μ—…κ°œλ…)
    • 관점을 λ‹¬λ¦¬ν•˜μ—¬ λ™λ£Œμ˜ 리뷰λ₯Ό ν†΅ν•˜μ—¬ 문제λ₯Ό λ°œκ²¬ν•˜κΈ° μœ„ν•œ 계기가 됨
    • μžλΆ€μ‹¬, 보상, μ½”λ”© κΈ°λŸ‰μ˜ μΈμ •μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ¨Έ 사기 μ§„μž‘
    • νŒ€μ˜ 응집λ ₯. νŒ€ 멀버듀간 더 κ°€κΉŒμ›Œμ§ˆ 수 있게 도움

codereview


  • μ½”λ“œλ¦¬λ·°μ— μž„ν•˜λŠ” μžμ„Έ
  1. μ†ŒμŠ€μ½”λ“œκ°€ μ™„λ²½ν•˜μ§€ μ•Šλ‹€λŠ” 것을 μΈμ •ν•˜μž.
  2. Code Reviewλ₯Ό 톡해 μƒˆλ‘œμš΄ 아이디어 및 μŠ΅κ΄€μ„ 배울 수 μžˆλ‹€κ³  μƒκ°ν•˜μž.
  3. Code Reviewλ₯Ό ν•˜λŠ” κ°€μž₯ 큰 μ΄μœ λŠ” 더 λ‚˜μ•„μ§€κΈ° μœ„ν•œ 방법이닀.
  4. λŒ€λ‹€μˆ˜ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ‚΄λ €μ§„ 결정은 각각의 견해에 λ”°λ₯Έλ‹€λŠ” 사싀을 받아듀인닀. μ–΄λŠ μͺ½μ΄ 더 쒋은지 μž₯단점을 μ˜λ…Όν•˜κ³  λΉ λ₯΄κ²Œ 결정을 λ‚΄λ¦°λ‹€.
  5. μ§ˆλ¬Έν•œλ‹€. λŒ€μ‹  닡을 κ°•μš”ν•˜μ§€ μ•ŠλŠ”λ‹€. (β€œμ΄ :user_idλΌλŠ” 넀이밍에 λŒ€ν•΄ μ–΄λ–»κ²Œ μƒκ°ν•˜λ‚˜μš”?”)
  6. λͺ…ν™•ν•˜κ²Œ 해달라고 λ¬»λŠ”λ‹€. (β€œμ œκ°€ μ΄ν•΄ν•˜μ§€ λͺ»ν–ˆμ–΄μš”. λ‹€μ‹œ μ„€λͺ…해쀄 수 μžˆμ–΄μš”?”)
  7. μ½”λ“œμ˜ μ†Œμœ κΆŒμ— λŒ€ν•΄ νŠΉμ •ν•˜λŠ” 것을 ν”Όν•œλ‹€. (β€œλ‚΄κ°€ μž‘μ„±ν•œβ€, β€œλ‚΄ μ½”λ“œκ°€ μ•„λ‹Œβ€, β€œλ‹Ήμ‹ μ΄ μž‘μ„±ν•œβ€)
  8. 개인적인 νŠΉμ§•μ€ μ–ΈκΈ‰ν•˜λŠ” κ²ƒμœΌλ‘œ 보일 수 μžˆλŠ” 단어λ₯Ό ν”Όν•œλ‹€. (β€œλ°”λ³΄β€, β€œλ©μ²­ν•œβ€). λͺ¨λ“  μ‚¬λžŒμ΄ λ§€λ ₯적이고 λ˜‘λ˜‘ν•˜λ©° μ„ μ˜κ°€ μžˆλŠ” κ²ƒμœΌλ‘œ 여겨야 ν•œλ‹€.
  9. λͺ…μ‹œμ μœΌλ‘œ ν•œλ‹€. μ‚¬λžŒλ“€μ€ μ˜¨λΌμΈμ—μ„œ λ‹Ήμ‹ μ˜ 속내λ₯Ό 항상 μ‰½κ²Œ 이해할 수 μžˆλŠ” 것은 μ•„λ‹ˆλž€ 점을 μœ λ…ν•œλ‹€.
  10. 겸손해야 ν•œλ‹€. (β€œν™•μ‹ ν•˜κΈ° μ–΄λ ΅λ‹€. ν•œλ²ˆ μ‚΄νŽ΄λ³΄κ² λ‹€.”)
  11. κ³Όμž₯ν•˜μ§€ μ•ŠλŠ”λ‹€. (β€œν•­μƒβ€, β€œμ ˆλŒ€β€, β€œλŠμž„μ—†μ΄β€, β€œμ•„λ¬΄κ²ƒλ„β€)
  12. λΉˆμ •λŒ€μ§€ μ•ŠλŠ”λ‹€.
  13. μ‹€μ œμ²˜λŸΌ 행동해야 ν•œλ‹€. λ‹Ήμ‹ μ—κ²Œ ν•΄λ‹Ήν•˜μ§€ μ•ŠλŠ” 이λͺ¨μ§€, 움지 gif λ˜λŠ” 유머λ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ κ·Έ μ‚¬λžŒλ“€μ„ λΉ„κΌ¬μ•„μ„œλŠ” μ•ˆλœλ‹€. λ§Œμ•½ 그듀이 그런 행동을 ν•œλ‹€λ©΄ μΉ¨μ°©ν•˜κ²Œ λŒ€μ‘ν•œλ‹€.
  14. β€œμ΄ν•΄ν•  수 없닀” λ˜λŠ” β€œλŒ€μ•ˆ:” μ‹μ˜ μ½”λ©˜νŠΈλ₯Ό λ„ˆλ¬΄ 많이 μ‚¬μš©ν•œλ‹€λ©΄ λŒ€ν™”κ°€ ν•„μš”ν•˜λ‹€. μ˜€ν”„λΌμΈμ—μ„œ λŒ€ν™”ν•œ λ‚΄μš©μ„ μš”μ•½ν•΄ 후속 μ½”λ©˜νŠΈλ‘œ 남긴닀.

  • λ‚΄ μ½”λ“œλ₯Ό 리뷰받을 λ•Œ
  1. μžμ‹ μ˜ μ½”λ“œλ₯Ό 남이 μ„€λͺ…ν•  λ•ŒλŠ” 남이 늘 κ°κ΄€μ μœΌλ‘œ μ½”λ©˜νŠΈλ₯Ό μ€€λ‹€κ³  μƒκ°ν•˜μž.
  2. λ¦¬λ·°μ–΄μ˜ μΆ”μ²œμ— 감사해야 ν•œλ‹€. (β€œλ¦¬λ·° κ³ λ§™λ‹€. κ·Έλ ‡κ²Œ λ³€κ²½ν•˜λ„λ‘ ν•˜κ² λ‹€.”)
  3. 개인적인 λΆ€λΆ„μœΌλ‘œ 받아듀이지 μ•ŠλŠ”λ‹€. 리뷰의 λŒ€μƒμ€ μ½”λ“œμ§€ 당신이 μ•„λ‹ˆλ‹€.
  4. μ™œ μ½”λ“œκ°€ μ‘΄μž¬ν•˜λŠ”μ§€ μ„€λͺ…ν•œλ‹€. (β€œμ΄ 뢀뢄을 μ΄λ ‡κ²Œ μ§  μ΄μœ λŠ” 이런 이유 λ•Œλ¬Έμ΄λ‹€. λ‚΄κ°€ 클래슀/파일/λ©”μ†Œλ“œ/ν•¨μˆ˜λͺ…을 μ΄λ ‡κ²Œ λ°”κΎΈλ©΄ 더 λͺ…ν™•ν•΄μ§ˆ 수 μžˆμ„κΉŒ?”)
  5. 변경점과 κ°œμ„ μ μ„ κΊΌλ‚΄ 미래의 ν‹°μΌ“/μŠ€ν† λ¦¬λ‘œ λ‘”λ‹€.
  6. ν‹°μΌ“/μŠ€ν† λ¦¬μ— μ½”λ“œ 리뷰λ₯Ό λ§ν¬ν•œλ‹€. (β€œλ¦¬λ·°λ₯Ό μœ„ν•œ μ€€λΉ„κ°€ λ˜μ—ˆμŒ:”)
  7. 초기 ν”Όλ“œλ°±μ„ 받을 λ•ŒλŠ” 독립적인 μ»€λ°‹μœΌλ‘œ λ§Œλ“€μ–΄ 브랜치둜 ν‘Έμ‹œν•œλ‹€. λΈŒλŸ°μΉ˜κ°€ λ¨Έμ§€λ˜κΈ° μ „κΉŒμ§€ 컀밋을 뭉쳐버리지 μ•ŠλŠ”λ‹€. λ¦¬λ·°μ–΄λŠ” 초기 ν”Όλ“œλ°±μ— κΈ°λ°˜μ„ 둬 μž‘μ„±ν•œ 각각의 μ—…λ°μ΄νŠΈλ₯Ό μ½λŠ” 것이 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
  8. λ¦¬λ·°μ–΄μ˜ κ΄€μ μ—μ„œ μ΄ν•΄ν•˜λ„λ‘ λ…Έλ ₯ν•œλ‹€.
  9. λͺ¨λ“  μ½”λ©˜νŠΈμ— μ‘λ‹΅ν•˜λ„λ‘ λ…Έλ ₯ν•œλ‹€.
  10. 지속적인 톡합(TDDium, TravisCI λ“±)이 λΈŒλžœμΉ˜μ—μ„œ λͺ¨λ“  ν…ŒμŠ€νŠΈκ°€ ν†΅κ³Όλ˜κΈ° μ „κΉŒμ§€ 브랜치둜 λ¨Έμ§€ν•˜μ§€ μ•Šκ³  κΈ°λ‹€λ¦°λ‹€.
  11. μ½”λ“œλ₯Ό λ¨Έμ§€ν•˜λŠ” 일은 ν”„λ‘œμ νŠΈμ— 영ν–₯을 μ€€λ‹€. κ·ΈλŸ¬λ―€λ‘œ μžμ‹ μ˜ μ½”λ“œμ— 확신이 μžˆμ„ λ•Œ λ¨Έμ§€ν•œλ‹€.

  • λ‹€λ₯Έ μ‚¬λžŒμ˜ μ½”λ“œλ₯Ό 리뷰할 λ•Œ
  1. μ˜€ν”ˆ λ§ˆμΈλ“œλ‘œ λ‹€λ₯Έ μ‚¬λžŒμ˜ μ½”λ“œλ₯Ό 보고, κ°œμ„  μ œμ•ˆ μ‹œμ—λŠ” 이유λ₯Ό 잘 μ„€λͺ…ν•˜μž.
  2. μ™œ 이 μ½”λ“œκ°€ ν•„μš”ν•œμ§€ μ΄ν•΄ν•œλ‹€. (버그, μ‚¬μš©μž κ²½ν—˜, λ¦¬νŒ©ν† λ§.) 그러고 λ‚˜μ„œ:
  3. μ–΄λŠ 아이디어가 강점이라 μƒκ°λ˜λŠ”μ§€, ν˜Ήμ€ κ·Έ λ°˜λŒ€μΈμ§€ μ†Œν†΅ν•œλ‹€.
  4. 문제λ₯Ό ν•΄κ²°ν•  λ•ŒκΉŒμ§€ μ½”λ“œλ₯Ό λ‹¨μˆœν™”ν•˜λŠ” κ²ƒμœΌλ‘œ λ°©ν–₯을 찾아라.
  5. λ…Όμ˜κ°€ μ² ν•™μ μ΄κ±°λ‚˜ ν•™λ¬Έμ μœΌλ‘œ 흐λ₯Ό λ•ŒλŠ” κ·Έ 주제λ₯Ό κΈˆμš”μΌ μ˜€ν›„ 기술 ν† μ˜μ²˜λŸΌ μ˜€ν”„λΌμΈμœΌλ‘œ κ°€μ Έμ™€μ„œ λ…Όμ˜ν•œλ‹€. κ·Έ ν›„ μ½”λ“œ μž‘μ„±μžκ°€ λŒ€μ•ˆμ μΈ κ΅¬ν˜„μœΌλ‘œ μ΅œμ’… 결정을 내리도둝 ν•œλ‹€.
  6. λŒ€μ•ˆμ μΈ κ΅¬ν˜„μ„ μ œκ³΅ν•  λ•ŒλŠ” μž‘μ„±μžκ°€ 이미 κ·Έ κ΅¬ν˜„μ„ κ³ λ €ν–ˆμ„ κ²ƒμœΌλ‘œ κ°€μ •ν•œλ‹€. (β€œcustom validatorλ₯Ό μ—¬κΈ°μ„œ μ‚¬μš©ν•˜λŠ” 것에 λŒ€ν•΄ μ–΄λ–»κ²Œ μƒκ°ν•˜λ‚˜μš”?”)
  7. μž‘μ„±μžμ˜ 관점을 μ΄ν•΄ν•˜λ„λ‘ λ…Έλ ₯ν•œλ‹€.
  8. β€œλ¨Έμ§€ 쀀비됨 Ready to merge”와 같은 μ½”λ©˜νŠΈμ™€ ν•¨κ»˜ ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό μˆ˜λ½ν•œλ‹€.