Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL - Assignment #12(~ 9장. 단위 테스트)
#clean_code
2년 전
726

오늘 TIL 3줄 요약

  • 테스트 당 개념 하나, 테스트 후 실제 코드 작성!

  • 테스트 케이스는 결국 설계와 아키텍처를 깨끗하게 보존하는 열쇠다

  • 테스트 케이스는 가독성이 제일 중요!

TIL (Today I Learned) 날짜

2022.03.05(토) ~ 2022.03.06(일)

오늘 읽은 범위

~9장. 단위테스트

책에서 기억하고 싶은 내용을 써보세요.

  • 학습 테스트는 공짜 이상이다. ...오히려 필요한 지식만 확보하는 손쉬운 방법이다. 학습 테스트는 이해도를 높여주는 정확한 실험이다.(149p)

  • 외부 패키지를 호출하는 코드를 줄여 경계를 관리하자.(152p)

  • TDD의 법칙 3가지(155p)

    • 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.

    • 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.

    • 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.

  • 테스트 코드는 실제 코드 못지 않게 중요하다.(157p)

  • 테스트는 유연성, 유지보수성, 재사용성을 제공한다.(157p)

  • ...그러므로 실제 코드를 점검하는 자동화된 단위 테스트 슈트는 설계와 아키텍처를 최대한 깨끗하게 보존하는 열쇠다.(57p)

  • 깨끗한 테스트 코드를 만들려면? 가독성!!!(158p)

  • 테스트 당 개념 하나(166p)

  • 깨끗한 테스트, FIRST(167p)

    • Fast

    • Independent

    • Repeatable

    • Self-Validating

    • Timely

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 경계에 관한 챕터는 무난하게 읽을 수 있었다. 하지만 실제로 적용하기엔 조금 더 익숙해지지 않으면 정말 가볍게 지나칠 수 있는 부분이라고 생각한다. 실제로 해당 챕터에서 예를 들었던 Map이라는 메소드가 제공하는 유용성에 집중하지 위험에는 크게 집중하지 않으니까. 하지만 견고한 소프트웨어를 만들기 위해서 경계에 위치하는 코드를 분리하는 스킬은 꼭 가지고 있어야 할 능력이라고 생각한다.

  • 이번 챕터도 결코 가벼운 챕터는 아니다. TDD! 개인적으로는 논쟁이 많은 주제라고 생각한다. 물론, 모든 사람에 해당하는 케이스는 아니지만 시간도 인원도 부족한 상황에서 수시로 바뀌는 클라이언트의 요구와 마감시간에 쫓기는 우리를 생각해보면 TDD는 어쩌면 상상속에 존재하는 유니콘 같은 존재같다. 하지만 우리가 지향해야할 목표는 확실하다. 테스트 코드 이후 실제 코드 작성!

  • 실제로 현재 회사에서 진행중인 프로젝트들도 마감시간에 쫓겨 테스트 케이스는 커녕 마감일자 맞추기도 바쁜 상황이다. 개인적으로라도 시간이 난다면, 이미 개발된 내용에라도 테스트 케이스를 추가하고 싶은 개인적인 바람이 있는데 현실은 절대 도와주지 않는다.

  • 그리고, TDD라는 방법론 자체가 주위에 알고는 있지만 실제로 사용한 사람이 없기 때문에 더욱 더 접근하기 어려운 주제인 것 같다. 누군가는 끌어주는 사람이 있어야 TDD가 유용해질텐데 아직까지 내 주변에서 TDD를 제대로 하는 사람이 본 적이 없다. + TDD라는 개념 자체가 너무 추상적인 개념인라고 생각한다. 테스트 케이스 작성은 해야되는데 어디서부터 어디까지 해야할지를 명확하게 알려주는 사람이 없기 때문에.. 없다면 내가 공부해서 다른 사람에게 알려주는 역할을 해야할텐데 나 조차도 알고는 있지만 실현을 못하고 있다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • BUILD-OPERATE-CHECK 패턴

  • TEMPLATE METHOD 패턴: 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴

  • 도메인 특화 언어(Domain Specific Language, DSL): 특정 도메인(산업, 분야 등 특정 영역)에 특화된 언어를 말한다. -> 예를 보면 이해가 될 것 같기도 한데, 너무 개념이 붕 떠있는 느낌이다

    • JAVA: ANT, Maven, struts-config.xml, Seasar S2DAO, HQL(Hibernate Query Language), JMOCK

    • Ruby: Rails Validations, Rails ActiveRecord, Rake, RSpec, Capistrano, Cucumber

    • 기타: SQL, CSS, Regular Expression, Make, graphviz

오늘 읽은 다른사람의 TIL