4. • 업무를 통해 개인의 실력이 향상.
• 업무의 결과가 좋다. 일정과 코드.
• 반복적이거나 지겹지 않다.
• 도전적이고 성취감 있다.
• 대상 업무를 선택할 수 있다.
• 대상 프로젝트를 선택할 수 있다.
• 매출이 잘된다.
• 버그가 적다.
• 신 기술을 적용해 볼 수 있다.
• 이직이 쉽다.
• 연봉이 잘 오른다.
• 외부에 이름이 알려진다.
이상적인 개발
5. • 적절한 일정.
• 업무와 무관한 공부도 할수 있고.
• 외부 세미나도 참석하고.
• 미팅 적고.
• 문서 작성 적고.
• 프로젝트도, 팀도, 회사도 안정되고.
• 동료와 얘기가 통하고.
• 인사 평가 신경 안쓰고.
• 당연한 퇴근, 주말, 취미.
이상적인 개발
6. • 전부 반대
• 항상 같은 일, 지겹고 반복적이고.
• 코드 파악 어렵고, 문서 없고, 코드 고치면 버그 생기고.
• 항상 일정 쪼이고, 야근에, 피곤에
• 매출 적고, 프로젝트/팀/회사 위태. 연봉 적고, 안오르고.
• 쪼이고, 쪼고, 짜증내고, 싸우고.
• 실력보단 인맥. 사람에 충성.
• 공부할 시간 없고, 세미나 스터디 외면.
• 이직할 생각만, 하지만 이직은 어렵고.
현실은
38. • 커밋 전에 전체 실행해서 성공을 확인
• 전체 실행해서 성공 확인하는 거… 생각보다 아주 어렵다.
• 그리고 CI 서버가 필요.
• CI 서버 없이 테스트 케이스로 개발하기 어렵다.
항상 성공을 지키려면
39. • 본 코드를 작성하면, 하여간 동작을 확인해야 한다.
• 이를 테스트 케이스로 한다.
• 작성한 테스트 케이스는 당연히 성공해야 하고
본 코드와 테스트 케이스 작성
40. • 작성한 테스트 케이스외에, 기존에 있던 모든 테스트 케이스의
성공을 확인한다.
• 실패한다면, 하여간에 수정된 것에 기인한 것이다.
• 이 과정을 누락하면, 타인이 작업을 못한다.
모든 테스트 케이스 성공 확인
41. • 무엇을 했는 지 문서만 보고도 파악할 수 있어야.
• 코드를 보고 파악하는 것은 무척 어렵다. 특히 여러 파일에 걸쳐
작업된 경우는.
• 하여간에 코드만을 보고 이해할 수 없는 것은 전부 기술되어야
한다.
• 작성하는 문서는 코드 리뷰를 목적으로 한다.
• 포멧은 상관없다.
문서 작성
42. • 커밋 하기 전에 변경된 부분 하나하나 검토한다.
• 그러면서 기억안나는, 코드 변경 이유가 생각나고 이를 문서에
적어주면 좋다.
문서 작성 팁
43. • 전체 작업 내용을 요약
• 변경된 파일 리스트와 각 변경 요약
• 세부 작업의 설명
• 실패하고 고생한 사항.
• 추후 진행할 TODO
문서에 포함될 내용
45. • 머지 리퀘스트에 첨부된 문서를 가지고 작업을 설명.
• 코딩 완료 여부는 테스트 케이스 리스트로 판단한다.
• 충분한 테스트 케이스가 있고, 테스트 케이스가 충실히 구현되어
다면, 본 코드의 구현 여부는 믿을 수 있다.
• 이후 본 코드의 리뷰는 로직 보다는 단지 컨벤션만 보면 된다.
코드 리뷰
46. • 내가 타인이 작업한 결과를 이어서 작업할 정도로 정리가 잘 되
었는가.
• 문서와 코드가 내가 이해할 정도로 잘 정리되었는가.
• 파악할 사항
• 테스트 케이스의 내용
• 코드 컨벤션.
• 대면 코드리뷰가 아닌 online 코드리뷰 만으로 이해가 되어야 한
다.
코드 리뷰의 기준
47. • 코드 리뷰.
• 타인이 이해하고 이후 작업할 수 있다는 확신이 들도록 작업을
설명하는 것.
• 그리고 최종적으로 머징.
문서의 목적
48. • 언급된 사항들을 수정한다.
• 혹은 언급된 사항에 대한 설명을 한다.
코드 리뷰 사항 반영
57. 버그 부활 방지
한번 픽스된 버그는 그 픽스한 테스트 케이스가 커버한다.
부활되어(테스트 케이스 실패하여) 커밋 될 수 없다.
58. 전체 이해 없이
부분 작업 가능
부분만 이해하고 수정해도,
이로 이한 부작용을 우려하지 않아도 된다.
59. • 기존 코드 파악이 어렵다.
• 작업을 진행해도 불안하다.
• 버그가 발생해도 모른다.
• 긴 시간 후에 고객이 버그를 리포팅한다.
• 리포팅된 정보만으로 버그를 유추한다.
• 분석에 오랜 시간이 걸린다.
• 버그 현상을 재현하기 어렵다. 못하는 경우도 있다.
• 유추한 사항으로 원인을 상상한다.
• 상상한 대로 코드를 수정하고 배포.
• 하지만 버그를 픽스했는지 확신하지 못한다.
버그 발생과 픽스 - 테스트 케이스 없이
60. • 기존 코드 파악이 쉽다.
• 수정 직후 기존 테스트 케이스가 실패하여 버그 출현을 파악한다.
• 분석할 필요도 없이 직관적으로 픽스한다.
버그 발생과 픽스 - 테스트 케이스 있으면
92. • 시스템 밖에서의 입출력으로 하는 테스트 케이스를 작성.
• 시스템의 내부를 수정해도 그 정상 동작을 확인하기 위한.
• 시스템의 크기 만큼 충반한 양의 테스트 케이스 작성 필요.
• 충분의 기준.
• 임의의 코드에서 인위적으로 버그를 만들고, 실패 하는 지 확인.
• 80%정도면 아주 양호.
시스템의 리팩터링위한 테스트 케이스
94. • 처음부터 너무 작게 쪼개는 것은 힘들다.
• 5,6개 정도의 기능단위로 구분하고, 퍼져 있는 기능을 각 단위로
응축.
• 이렇게 하기 위해서는 구분 후에 각 단위간의 인터페이스를 정의.
• 이렇게 쪼개고 나서는 각 단위별로 정의한 인터페이스를 가지고
테스트 케이스를 작성.
• 그리고 실 작업(기능 추가, 버그 픽스)를 위한 단위 만큼 쪼개질때
까지 해당 단위의 쪼개기 리팩터링 반복
내부 쪼개기