포스트

2023-04-28-TIL

Today I Learned

Study for The Pragmatic Programmer

『실용주의 프로그래머』 스터디에서 Topic 40부터 43까지 다루며 나온 이야기를 정리했다.

Topic 40. 리팩터링

Namas

  • 정원가꾸기 이야기가 인상깊고, 처음 입사할 때 사수에게 들었던 이야기라 인상이 깊다.
  • 잡초처럼 자라기 때문에 끊임없이 관리해주어야 한다.

Lake

  • 리팩터링 어떻게 할까

Namas

  • 항상 생활화하되 커밋과 PR을 작게 쪼개어서 코드리뷰도 잘 되도록

Topic 41. 테스트

Namas

  • 메인코드와 테스트코드를 작성한 갭이 클수록 버그가 많아진다.
  • 되도록 바로바로 테스트를 작성하거나 테스트를 먼저 작성해라.

Namas

  • archUnit을 걸어놔서 엔티티를 바로 못 쓰도록 강제

Lake

  • 팀원들이 휴가가거나 로컬에서 실행을 못 하는 환경이라도 테스트가 있으면 돌려볼 수 있다.

Topic 42. 보안

Lake

  • Rm -rf . / 해서 난리난적이 있었다.

Namas

  • 업그레이드는 그때그때 조금씩 하는게 좋다

Namas

  • 면접에서 하고싶은 질문은 미리 준비해라.
  • JDK 1.7 이하인 회사는 가지마라.

Lake

  • 세션을 마샬링해서 넣어놓는 문제가 있었다. 이승욱?

Topic 43. 이름짓기

Namas

  • 문화를 존중하라 -> 로마에 가면 로마법을 따르라
  • 내일 완전히 새로운 사람이 이 코드를 보면 직관적으로 이해할 수 있을까?

Given When Then in Test

Given-When-Then은 테스트, 또는 시스템의 동작을 예시로 명세하는 방식이다. Daniel Terhorst-North와 Chris Matts가 BDD(Behavior-Driven Development)의 일부로 만들었다. 시나리오를 세 부분으로 나눈다.

  • Given: 동작을 시작하기 전 세계의 상태, 즉 테스트의 사전 조건
  • When: 명세하려는 동작
  • Then: 그 동작으로 기대하는 변화

Cucumber 같은 프레임워크의 구조로 쓰이지만 어떤 테스트에도 적용할 수 있고, 단위 테스트 안에서 주석으로 블록을 나누는 용도로도 쓰인다. Martin Fowler는 이를 Four-Phase Test 패턴을 다시 표현한 것으로 볼 수 있다고 쓴다.


Fuzzing vs Property Testing

둘 다 무작위 입력을 만들어 프로그램이 잘못 동작하는지 확인한다는 점은 같다. 차이는 테스트 대상에 대해 얼마나 아느냐다. Fuzzing은 대체로 블랙박스 방식이라 입력을 어떻게 만들지 크게 알려 주지 않고, 그래서 아무 가정도 하지 않아야 하는 보안 견고성 검사에 쓰인다. Property testing은 테스트 대상을 깊이 이해하고 검사할 성질을 직접 정의해야 하지만, 그만큼 적은 예시로도 충분해서 단위 테스트처럼 빠르게 돈다. 글쓴이는 코드 안의 assertion이 두 방식 모두에서 버그를 찾는 힘을 키운다고 정리한다.


End to End Testing vs Integration Testing

통합 테스트는 격리된 작은 단위를 검사하는 단위 테스트와 달리, 다른 기능에 의존하는 특정 기능(모듈)을 함께 검사한다. E2E 테스트는 실제 사용자가 제품을 쓰는 방식 그대로, 사용자의 단계별 경험을 흉내 내며 검사한다. Testim 글은 통합 테스트가 E2E 같은 상위 테스트의 기반이 된다고 본다.


LoadRunner

LoadRunner는 부하 테스트에 쓰는 상용 소프트웨어 테스트 도구로, 현재는 OpenText 제품이다. 2006년 Hewlett Packard Enterprise가 Mercury Interactive를 인수하며 가져갔고, 이후 Micro Focus를 거쳤다.


Selenium

Selenium은 브라우저를 자동화하는 도구이고, 주된 용도는 웹 애플리케이션 테스트 자동화다. 여러 환경에 걸쳐 스크립트를 돌리는 회귀 테스트에는 Selenium WebDriver를, 빠른 버그 재현 스크립트에는 Selenium IDE를 쓴다.


Java Microbenchmark Harness (JMH)

JMH는 nano, micro, milli, macro 단위 벤치마크를 만들고 실행하고 분석하는 도구다. README는 JUnit 같은 일반 테스트 라이브러리처럼 쓰도록 만든 것이 아니라고 못 박고, Maven으로 독립된 벤치마크 프로젝트를 구성해 실행하라고 권한다.


Distributed Systems

분산 락 구현 글을 읽었다. 1인당 구매 수량을 제한하는 코드에서 구매 내역 조회와 저장 사이에 다른 요청이 끼어들면 제한이 깨진다. 서버가 한 대라면 synchronized로 막을 수 있지만 두 대 이상이면 같은 문제가 다시 생기므로, 글쓴이는 Redis로 락을 관리하는 방식을 택한다.

참고한 자료외부 출처 10

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다