ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] 테스트를 작성해야 하는 이유
    스위프트 2024. 1. 21. 18:43

     

    테스트 코드 왜 작성?

     

    최근 면접을 보는데 테스트 코드를 작성해야 하는 이유에 대해 질문이 들어왔다.

    단순히 내가 작성한 코드가 안전하다는 것을 보장한다는 답을 했다.

    그런데 이후에 꼬리 질문이 들어오니 면접관의 질문과 답변에 털리고 왔다.

     


     

    테스트 코드를 작성하지 않아야 하는 상황?

    반대로 생각을 해보기로 했다.

    일단 2가지 정도를 생각했는데

     

    1. 유지 보수를 전혀 하지 않을 생각일 때
    2. 기억력이 굉장해서 기존 코드를 수정할 때 어디에서 어떤 결과가 나올지 알고 있을 때

    2번 케이스는 잘 없을 것 같고..

    생각보다 1번 케이스는 많다.

    짧은 기간동안 하는 프로젝트 경우에는 테스트 코드를 작성하는 것보다 빠르게 기능 개발을 우선으로 했다.

     

    스타트업에서 재직할 때는 위 상황과는 달랐다.

    기존에 추가한 기능이 유지될 가능성이 굉장히 낮았다.

    이런 상황일 때 나는 이렇게 합리화했다.

    • 코드 생명 주기가 짧으니 기존 코드 개선보다는 아예 새로 만드는 것이 더 빠를 것이다.
    • 그냥 빠르게 기능 개발이나 하자.
    • 테스트 코드를 쓰면 오래 걸린다.

     

    그러나 반대로 추가한 기능이 오래 유지되는 경우도 있었다.

    그리고 아무리 내가 작성한 코드라도 몇개월이 지난 후에 다시 슬쩍 봐도 이해가 되지 않을 때가 있다.

    결국 내가 작성한 코드라도 기억력은 완전하지 않기 때문에 언젠가는 남이 작성한 코드가 되는 것이다.

     

    테스트 코드를 작성해야 하는 이유

    테스트 코드는 일종의 거름망이다. 라는 이야기를 인터넷에서 보았다.

    테스트 코드가 있어야 수정을 했을 때 어떤 상황인지 알 수 있다.

    만약 테스트 코드를 작성하지 않았다면 아래와 같은 상황이 생길 수 있다.

     

    1. 특정 코드가 수정이 되었을 때 이에 대한 영향을 받는 것들이 생긴다.
    2. 영향받는 것들을 하나하나 확인한다.
    3. 컴파일 에러가 난다면 좋지만 예상하지 않은 동작이 발생한다면 큰일이다.
    4. 만약 잘 동작한다고 생각하고 배포했지만 이미 배포한 상태에서 에러를 발생할 수 있다.
    5. 기존 기능 개발을 멈추고 핫픽스를 나간다.
    6. 핫픽스가 나갔지만 또 어디선가 사이드 이펙트가 생겼다.
    7. (반복)

    테스트 코드가 없을 때 상황

     

     

     

    위의 이미지를 보면 결국 똑같은 것 아닌가? 하는 생각이 들 수 있다.

    완벽한 테스트는 존재할 수 없기에 버그 발생 가능성이 0이 되는 것은 불가능하다.

    그래도 테스트 코드가 잘 작성이 되어있다면 버그 발생이 줄어든다는 것은 명확한 사실이다.

     

    테스트 자동화를 해야 하는 이유

    테스트 코드 자동화는 필수라고 생각한다.

    프로젝트의 크기가 커질수록 더욱 필요하다.

    처음에는 모든 테스트 케이스를 돌려도 오래 걸리지 않는다.

    그냥 몇초면 뚝딱하면서 테스트가 성공되고 PR을 올리면 된다.

    그러나 프로젝트가 커질수록 내가 작성한 테스트 코드만 돌리고 프로젝트 전체 테스트 코드를 돌리지 않는다.

    이렇게 되면 결국 테스트 코드를 작성한 이유가 사라지는 것이다.

     

    자동화를 통해서 반드시 테스트 케이스를 통과하도록 어느 정도 강제가 있어야 한다.

     

    요약하자면...

    Q. 테스트 코드를 왜 작성해야 하나요?

    A. 코드를 변경하는 것에 안전성을 부여하는 것 입니다.

     

    Q. 안전하게 코드를 변경하는 것은 무슨 의미인가요?

    A. 코드가 되었을 때 영향을 받는 다른 코드가 정상적으로 결과가 잘 나오는지 확인을 해야 합니다. 테스트 코드는 정상적으로 결과가 잘 나오는 지 확인 시켜주는 것이라고 생각합니다.

     


     

    테스트 코드 작성에 대한 개인적인 생각입니다.

    다른 의견 있으시면 댓글 달아주시면 감사하겠습니다! 🙇🏻‍♂️🙇🏻

Designed by Tistory.