본문 바로가기

배움 조각 (Computer Science)4

비결정적 코드를 결정적 코드로 만들기 소프트웨어 개발에서 비결정적 코드(Non-deterministic Code)는 동일한 입력에도 실행할 때마다 다른 결과를 내놓을 수 있는 코드를 의미한다. 이는 테스트나 디버깅을 어렵게 만들고, 예상치 못한 동작을 초래할 가능성이 있다. 그래서 비결정적 코드를 결정적(Deterministic)으로 만들어야 할 필요성이 있다. 이번 글에서는 비결정적 코드의 문제를 해결하는 방법을 간단한 예시와 함께 살펴보겠다. 1. 비결정적 코드의 문제점비결정적 코드는 다음과 같은 문제를 일으킬 수 있다.테스트 불안정성: 동일한 테스트가 실행 환경이나 시간에 따라 다른 결과를 낼 수 있다.디버깅 어려움: 문제가 발생했을 때 원인을 재현하기 어렵다.예측 불가능한 동작: 의도하지 않은 동작이 발생할 가능성이 높아진다. 2. .. 2024. 12. 9.
Exception 사용 팁: 효과적으로 예외를 다루는 방법 개발자 온보딩 가이드의 "4장: 운영 환경을 고려한 코드 작성"에 Exception 사용 방법이 잘 정리되어 있다. 이 책의 내용과 ChatGPT를 활용하여, Exception 사용 팁을 정리해봤다.  1. Exception 이름은 구체적으로 네이밍하자.구체적인 이름은 Exception이 발생한 원인을 빠르게 이해하고, 문제를 해결하는 데 도움을 준다.Good Example: InvalidOrderException, UserNotFoundException 2. Exception에 추가 정보를 활용하자.Exception 생성자에 메시지를 포함하거나, 필요한 경우 커스텀 필드를 추가하여 유용한 정보를 제공하.public class InvalidOrderException extends RuntimeExcept.. 2024. 11. 19.
[구글엔지니어는 이렇게 일한다] 테스트 크기와 범위 테스트의 크기와 범위를 규정한 것이 흥미롭다. 어떤 테스트를 더 많이 만들어야 하는지 참고 자료로 활용 가능할 것 같다. 테스트가 많아져서 전체 수행 시간이 길어질 경우, 어떤 영역의 테스트를 언제 돌릴지 전략을 세울 수도 있을 것 같다. 테스트 크기와 범위 크기(size): 테스트 케이스 하나를 실행하는 데 필요한 자원. 메모리, 프로세스, 시간 등 범위(scope): 주어진 테스트가 얼마나 많은 코드를 검증하느냐를 말함 테스트 크기 테스트 크기 자원 제약 특징 작은 테스트 • 프로세스(혹은 쓰레드) 하나에서 동작 • 데이터베이스와 같은 제3의 프로그램을 수행해서도 안됨 • 블로킹 호출 안됨 (sleep, 네트워크, 디스크 I/O) • 블로킹 호출 대상은 테스트 대역을 사용해야함 • 불규칙한 테스트가 .. 2023. 12. 22.
[구글엔지니어는 이렇게 일한다] 테스트 코드가 주는 혜택 평소 테스트 코드를 짜면서 느끼던 것이 명료하게 표현되어 있어서 요약해봤다. 1. 디버깅 감소 결함 대부분이 서브밋 전에 고쳐짐 (자동화 테스트를 통해 발견) 2. 자신 있게 변경 행위가 달라지지 않는 변경은 테스트코드를 수정할 필요 없음. 즉 리팩토링이 권장됨 3. 더 나은 문서자료 한 번에 하나의 행위만 집중해 검증한 명확한 테스트는 실행 가능한 문서와 같음 4. 더 단순한 리뷰 정확성, 극단 상황, 오류 상황 등 다양한 측면에서 코드를 검사해주는 테스트가 있다면 리뷰어의 코드 작동 검증 시간을 줄여줌 5. 사려 깊은 설계 테스트 작성은 해당 API가 잘 설계되었는지 실험하는 행위임. 테스트하기 어려운 코드는 너무 많은 역할을 짊어지거나 의존성을 관리하기 어렵게 짜여졌기 때문일 가능성이 큼. 잘 설계.. 2023. 12. 12.