본문 바로가기
📝 회고/✅ 22년 회고

[일일 회고] 22.01.03.월 - 유닛 테스트 적용기

by kukim 2022. 1. 3.

👍 Keep

  • 금일 주어진 요구사항에 주어진 기능 구현 완료
  • 구현 후 문서 작성 완료
  • 유닛 테스트 작성 후 기능 구현 시도

🔥Problem

  • 안쉬고 계속 자리에 앉아있음 (허리가 너무 아프다)
  • 팀원 간 토론이 적었다. 늘려봐야겠다.!

🚒 Try

  • 적어도 한 시간 마다 자리에 일어나 스트레칭 필수
  • TDD 사이클 대로 구현 연습을 해보자

📚TIL

- 디지털 논리회로 이론 공부와 단순 게이트 부터 가산기(half, full), 1바이트 이상 계산기 구현

- @becoreEach 를 활용해 테스트할때 마다 클래스 생성하여 테스트 

적용 전

public class mission2Test {
    Adder adder = new Adder(); // 모든 테스트 동일한 클래스 사용하여 테스트

    @Test
    @DisplayName("반가산기 테스트1")
    void halfAdderTest1() {
        assertArrayEquals(new boolean[]{false, false}, adder.halfadder(false, false));
    }
    
    @Test
    @DisplayName("반가산기 테스트2")
    void halfAdderTest2() {
        assertArrayEquals(new boolean[]{false, false}, adder.halfadder(false, false));
    }

}

적용 후

public class mission2Test {
    Adder adder;

    @BeforeEach() // 매 테스트마다 클래스 생성
    void init() {
        adder = new Adder();
    }

    @Test
    @DisplayName("반가산기 테스트1")
    void halfAdderTest1() {
        assertArrayEquals(new boolean[]{false, false}, adder.halfadder(false, false));
    }
    
    @Test
    @DisplayName("반가산기 테스트2")
    void halfAdderTest2() {
        assertArrayEquals(new boolean[]{false, false}, adder.halfadder(false, false));
    }

}

+a) 테스트 코드 작성시 AAA 패턴 적용 한다면 위와 같은 방법은 좋지 못할 수 있겠다. 다시 작성해야겠다.

 

- TDD를 적용할 때 어떻게 commit 단위를 주어야 하는가?

방법 1 : red → green → refactor → commit

방법 2 : red → green ⇒ commit → refatcor ⇒ commit

방법 3 : red ⇒ commit → red에 발생하는 구현되어 있지 않은 메서드, 인터페이스 구현 ⇒ commit → green ⇒ commit → refactor ⇒ commit

 

코드 양과 리팩터링이 많이 필요해 보이는 경우 방법 2로 했고, 양이 적은 경우 방법 1로 커밋함

refer : https://stackoverflow.com/questions/11984338/what-is-a-good-git-workflow-for-tdd

 

- 배열 복사 최적화

for loop vs System.arraycopy(src, srcPos, dest, destPos, length) 메서드 사용하여 최적화 하였다.

 loop보다 arraycopy가 2배 이상 빠르다고 한다.

적용 전

public void testHardCopyBytes()
{
    byte[] bytes = new byte[0x5000000]; /*~83mb buffer*/
    byte[] out = new byte[bytes.length];
    for(int i = 0; i < out.length; i++)
    {
        out[i] = bytes[i];
    }
}

적용 후

public void testArrayCopyBytes()
{
    byte[] bytes = new byte[0x5000000]; /*~83mb buffer*/
    byte[] out = new byte[bytes.length];
    System.arraycopy(bytes, 0, out, 0, out.length);
}

 

 

- 이미지, Gif 캡처 후 손쉬운 웹 업로드, 공유까지

  • 이미지 캡처 후 이미지 편집 앱 (Sannpy)
  • 이미지 캡처 업로드 (imgur, 회원 가입 후 이미지 관리 가능)
  • Gif 업로드 (giphy, 회원 가입 후 손쉬운 업로드, 이미지 관리 가능, 단 30초 까지)

댓글