ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 테스트코드를 왜 작성 해야 하는 걸까?
    Android/Android 2020. 8. 21. 21:08

    개발을 잘하는 것에 대한 정의를 내리라고 한다면 아래와 같이 정의를 할 것이다.

     

    코드의 유지보수성을 좋게 만드는 개발

    우리가 실제 사용하는 앱이나 프로그램이 간단할 수 있지만 대부분은 복잡하다. 복잡하다는 뜻은 특정 기능을 개발 하였을 경우 Side Effect 가 나기 쉽다는 소리다.

    하지만 시간을 투자하여 내가 만든 프로그램의 버그를 줄이고 내 코드에 대한 신뢰를 형성 할 수 있다면 어떨까? 그것이 바로 테스트 코드이고 아래에서 설명을 할 것이다.

     

    테스트 코드의 장점은 무엇이 있을까?

    1. 결함을 사전에 발견 할 수 있다. 테스트 코드는 모든 상황을 작성해야 한다. (성공, 실패) 이를 통해 내가 놓치고 있는 부분이 없는지 생각을 통해 코드의 허점을 보완하여 안정서 있는 코드를 개발 할 수 있다.

    2. 문서로서 작용할 수 있다. 이미 제작 되어 있거나 참고하려는 코드를 이용 할때 테스트 코드를 작성자의 의도, 사용법, 주의사항 등이 드러나게 되어 있어 문서로 작용 할 수 있다.

    3. Refactoring 대한 확신 예를 들어 기존에는 느린 File I/O 를 사용하여 데이터를 반환하는 함수가 있다. 이를 더 빠른 I/O 를 이용 하려 할때 기존의 소스와 동일한 동작을 하는지에 대한 걱정을 하지 않아도 된다. 수정을 하고 테스트 코드를 실행 함으로 서 오류가 나지 않는다면 제대로 잘 수정 한 것이고 만약 오류가 난다면 오류가 안나도록 수정을 하면 되는 것이다.

    4. 더 나은 구조를 유도 테스트 코드를 짜다보면 이리저리 의존성에 걸려 테스트코드를 짜기 어렵거나 짤 수 없는 상황이 생길 수 있다 이는 해당 소스가 나쁜 구조라는 의미로 테스트가 가능하게 역할 분담 및 관심사의 분리 등을 진행 하여 좀더 나은 방향의 구조를 유도 할 수 있다.

    테스트 코드 어떻게 작성할까?

    우선 테스트 코드를 작성하기 전에 아래의 3가지를 명심하고 가자

    1. 모든 테스트는 독립적으로 실행된다.

      해당 조건은 테스트에 사용 되는 변수나 값은 다른 테스트에 의존이 되어서는 안된다는 말이다. 하지만 이런 경우는 있다, 테스트에 유저 라는 데이터가 사용이 되는데 유저 생성에 사용된 유저를 사용 할지 안 할지는 테스트 코드를 작성하는 개발자의 마음이지만 필자의 경우에는 그냥 사용한다. 원칙적으로는 사용을 하지 않는게 올바르다고 생각한다.

    2. 모든 케이스를 다루어야 한다. ( 성공, 실패, 오류 )

      네트워크 통신을 하면 총 3단계의 결과가 반환된다.
      1. 네트워크 통신을 통해 올바른 데이터를 반환 할때 ( 로그인 성공 )
      2. 네트워크 통신을 통해 올바르지 않은 데이터를 반환 할때 ( 로그인 실패 )
      3. 어떠한 요인으로 인해 네트워크 통신을 실패 할때 ( Time Out ) 위 3가지 상황에 대해서는 모든 테스트가 갖추어져 있어야 한다.

    3. Given, When, Then
      테스트 코드는 가독성이 제일 중요하다. 아무리 테스트코드를 작성해도 해당 코드가 어떠한 테스트를 하는지 모르면 답이 없다는 거다.
      Test Case → 로그인을 테스트 합니다.
      Given → 올바른 아이디와 패스워드가 주어진 상태에서
      When → 로그인을 실행 하였을때
      Then → "성공하여야 합니다."

    완벽한 코드가 없듯이 완벽한 테스트 코드는 없다.
    차근차근 본인의 프로그램을 테스트 하면서 부족한 테스트코드를 보충한다면 완벽할 것이다.

    다음번에는 직접 코드로 짜보는거를 해보자

    'Android > Android' 카테고리의 다른 글

    View Binding 사용해보기  (0) 2020.11.05

    댓글

Designed by Tistory.