우아한테크코스 BE 5기 3주차 회고

POII·2023년 2월 26일
0

이번 주 미션은 2주차때 페어와 함께 만들었던 모양만 있는 사다리를 진짜 사다리 게임으로 바꾸는 것!

레이싱 미션과 비교했을 때 생각해야 될 게 많아서 꽤 시간이 오래 걸렸다.

겨우겨우 금요일 아침에 PR을 날리고 리뷰가 올 때 까지 책을 읽어야지 하는 결심을 세웠었다.

그런데 사다리게임 리뷰어인 찰리가 당일에 캠퍼스에 직접 와서 오프라인 피드백을 해주었다.. ㄷㄷ

피드백 하러 오신 건 아니고 브라운 코치를 만나러 왔다가 겸사겸사?

덕분에 글로 정리하기 힘들어서 풀리퀘스트에 보내지 못했던 질문들을 옆에서 직접 할 수 있었다.

추상적으로 이건 어떨까?하고 생각만하던 것들을 꽤 구체적으로 정리할 수 있었던 시간이었다.

배운 것

테스트의 검증부는 하드코딩으로 하는 편이 좋을 수 있다.

만약 프로덕션 코드의 어떤 로직을 통해 값을 가져와 체크한다면 무의미한 검증이 될 수 있다.

void sum_test() {
        int a = 1;
        int b = 2;
        assertThat(sum(a, b)).isEqualsTo(a+b);
    }

위는 좀 극단적인 예시지만 isEqualsTo의 인자를 3으로 직접 코딩하는 편이 누가봐도 a+b 를 실행하는 sum 메소드의 결과를 의미있게 테스트하는 길일 것이다.

무의미함을 넘어 더 치명적인 상황이 발생할 수도 있다. 만약 a+b 라는 기능 자체에 문제가 있고, sum 이 그 로직을 사용하고 있을 경우 테스트는 언제나 거짓된 성공을 반환한다.

이는 프로그램 자체가 오작동 했을 때, 개발자가 이 기능은 테스트 성공했으니 다른 쪽에 문제가 있을거야라고 생각하게 만들 수 있다.

다음으로 생길 수 있는 문제점은 테스트를 먼저 작성하기 어렵게 한다는 점이다.

void get_name_and_level() {
	var name = new Name("포이");
	var level = new Level("레벨 1");
	var player = new Player(name, position);
	assertThat(player.getNameAndLevelString())
		.isEqualsTo(player.getName().value() + player.getLevel().value());
}

예시를 들기 위해 게터를 테스트하는 이상한 코드를 작성해보았다.

위 처럼 검증부에 로직이 들어가게 되면 결과에 따라 로직을 작성하고 리팩터링하는게 아닌 프로덕션 코드를 먼저 구상한 후 테스트를 작성하는 것이 된다. 이는 getName과 getLevel이라는 메서드의 리팩터링을 제한적으로 만들 수 있다.

도메인과도 강결합 되어있기 때문에 도메인의 로직이 리팩토링으로인해 변경되면 테스트는 그대로인데 갑자기 실패하는 테스트가 되는 결과를 낳을 수도 있다.

ParameterizedTest에 이름을 표시하는 방법

별 거 아닐 수 있지만, DIsplayName 어노테이션을 이용해도 ParameterlizedTest를 이용하면 각 인자들엔 이름이 표시되지 않는다.

		@DisplayName("알맞은 사다리 길이를 입력하면 정상적으로 사다리가 생성된다.")
    @ParameterizedTest()
    @ValueSource(ints = {5, 100})
    void create_success(int rightLadderHeight) {
        assertThatNoException().isThrownBy(() -> new LadderHeight(rightLadderHeight, 3));
    }

이는 ParameterizedTest 안에 name 속성으로 해결할 수 있다. 인자가 여러개라라면 name안에 {0}, {1} 처럼 이의 순서를 활용해 표시하고 싶은 인자를 선택할 수 있다.

@DisplayName("알맞은 사다리 길이를 입력하면 정상적으로 사다리가 생성된다.")
@ParameterizedTest(name = "알맞은 사다리 길이를 입력하면 정상적으로 사다리가 생성된다. 입력 : {0}")
@ValueSource(ints = {5, 100})
void create_success(intrightLadderHeight) {
	assertThatNoException().isThrownBy(() -> new LadderHeight(rightLadderHeight, 3));
}

편안..

궁금한 것

우테코 수료생 (ex. 리뷰어 찰리) 들의 처음 상태는 어땠을까?

찰리와 오프라인 피드백 시간을 보내고나서, 찰리는 개발 스킬은 물론이고 소프트 스킬도 수준급이라는 것을 느꼈다.

대화할 때 상대방이 불편하지 않게 해주는 능력이 대단한 것 같다.

어찌보면 이런 부분은 개발적인 부분보다 더 개인별 편차가 심하고, 또 노력으로 키우기도 힘든 능력이라고 생각한다.

이번 크루들의 첫 테코톡을 듣고 더 그렇게 생각했다.

물론 우테코에서 소프트스킬 향상을 위해 이런 저런 프로그램들을 진행하고 있지만, 솔직히 이게 나아지긴 하는걸까? 하는 의문이 종종 들곤한다..

잡담

다른 크루들과도 더 친해지고 싶지만 온보딩 조원과 있을 때 편한 느낌을 포기할 수가 없다..

다들 상당한 경쟁률을 뚫고 우테코에 합격한 크루들인 만큼 한 명 한 명에게 다 배울 점이 있을 것이라고 생각하고, 모두와 친해지고 싶은 마음은 항상 있다.

이 부분도 적절한 밸런스를 위한 나만의 기준이 필요할 것 같다.

진짜 잡담

요즘 한식이 더 좋아지고 있다. 이 주변 한식이 너무 맛있어서 그런가?

크루들과 코치님들이 추천해 준 제육볶음, 순두부찌개 맛집에 꽂혀버려서 5일중에 4일은 둘 중 하나를 먹게 되는 것 같다ㅋㅋㅋ.. 이 덕에 매운 음식을 조금 더 잘 먹게 된 것 같기도??

profile
https://github.com/poi1649/learning

0개의 댓글