본문 바로가기
Etc/Study Note

TDD, 리팩토링, 클린코드(1주차)

by happy coding! 2018. 4. 1.
반응형

TDD, 리팩토링, 클린코드 (1주차 수업)




학습목표

- TDD, 리팩토링, 클린코드

- 순수 자바, 웹 기반으로 객체지향 프로그래밍

- ATDD 기반 웹 애플리케이션 개발



의식적인 연습

- 목적의식 있는 연습에 얼마나 많은 시간을 투자했느냐? (아마추어와 프로의 결정적 차이)


의식적인 연습의 7가지 원칙

1. 효과적인 훈련 기법이 수립되어 있는 기술 연마

2. 개인의 컴포트 존을 벗어난 지점에서 진행, 자신의 현재 능력을 살짝 넘어가는 작업을 지속적으로 시도

3. 명확하고 구체적인 목표를 가지고 진행

4. 신중하고 계획적. 즉 개인이 온전히 집중하고 '의식적'으로 행동할 것을 요구

5. 피드백과 피드백에 따른 행동 변경을 수반

6. 효과적인 심적 표상을 만들어내는 한편 심적 표상에 의존

7. 기존에 습득한 기술의 특정 부분을 집중적으로 개선함으로써 발전시키고, 수정하는 과정을 수반


의식적인 연습 1 - 온라인 코드 리뷰 (단계별 난이도를 높혀가면서 미션 진행)

의식적인 연습 2 - 객체지향 생활 체조 원칙

의식적인 연습 도구 3 - 테스트



객체지향 생활 체조 원칙

객체지향 생활 체조 원칙은 소트웍스 앤솔러지 책에서 다루고 있는 내용으로 객체지향 프로그래밍을 잘하기 위한 9가지 원칙을 제시하고 있다.


규칙 1: 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다.

규칙 2: else 예약어를 쓰지 않는다.

규칙 3: 모든 원시값과 문자열을 포장한다.

규칙 4: 한 줄에 점을 하나만 찍는다.

규칙 5: 줄여쓰지 않는다(축약 금지)

규칙 6: 모든 엔티티를 작게 유지한다.

규칙 7: 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.

규칙 8: 일급 콜렉션을 쓴다.

규칙 9: 게터/세터/프로퍼티를 쓰지 않는다.



객체 지향 연습을 위한 좋은 방법

- 요구사항이 명확한 프로그래밍

- 약간은 복잡한 로직이 있는 프로그래밍

- DB 연동이 없도록 연습

- 특별히 UI에 대한 고려는 하지 않도록 연습

- 웹 프로그래밍은 객체 지향을 연습하기 위한 좋은 시작은 아니다.



좋은 예 : HTTP 웹 서버, 프레임워크 또는 라이브러리 구현해보기, 볼링게임 점수판(단, UI는 콘솔), 체스 게임(단 UI는 콘솔), 지뢰 찾기 게임(단 UI는 콘솔)



좋은 코드 품질을 유지하는 환경 만들기


1단계 : 새롭게 구현하는 코드, Legacy 코드 중 개선하는 코드에 대해 테스트 코드를 구현하고 리팩토링하기. 단위 테스트가 힘들다면 핵심 기능에 대한 인수테스트(Acceptance Test)라도 추가하기


2단계: Jenkins, Travis와 같은 지속적 통합 도구(Continuous Integration, CI)를 적용해 지속ㅈ거으로 테스트 코드를 실행할 수 있는 환경을 구축하기. 테스트 코드를 많이 만든느 것보다 100% 성공하는 환경을 유지하는 것이 더 중요하다.


3단계: sonarqube와 같은 정적 분석 도구를 적용한다.


4단계: 코드 리뷰 문화를 만든다.



Clean Code 가이드


함수(메소드)

- 작게 만들어라

- 한가지만 해라

- 함수 당 추상화 수준은 하나로

- 서술적인 이름을 사용하라

- 함수 인수(함수에서 이상적인 인수 개수는 0개(무항)이다. 다음은 1개이고, 다음은 2개이다)

- side effect를 만들지 마라

- 명령과 조회를 분리하라

- 오류 코드보다 예외를 사용하라

- 반복하지 마라



JUnit 사용법 및 단위 테스트


main method 의 용도

- 프로그램을 시작

- 구현한 프로그램을 테스트


main method 테스트 문제점

- Production code 와 Test Code가 클래스 하나에 존재함. 클래스 크기가 커짐. 복잡도 증가함

- Test Code가 실 서비스에 같이 배포됨

- main method 하나에서 여러 개의 기능을 테스함. 복잡도 증가

- method 이름을 통해 어떤 부분을 테스트하는지에 대한 의도를 드러내기 힘듬

- 테스트 결과를 사람이 수동으로 확인


JUnit

- main method를 활용해 테스트할 때 발생하는 문제점을 해결하기 위해 등장한 도구가 JUnit.







반응형

'Etc > Study Note' 카테고리의 다른 글

스프링 MVC 패턴  (0) 2018.01.06
Java & HTTP RESTFul API & Servlet  (0) 2018.01.06
[GIS] OpenLayers Simple Map 만들기  (0) 2017.12.16

댓글