Westudy.log - TDD

Jakesjk·2023년 1월 18일
0

Dev.Tech.Log

목록 보기
25/26

Software Test 왜 하는 것인가??

내가 개발한 소프트웨어가 어느정도에 있는지 점검을 해보는 단계

자 그러면은.. ? TDD의 중요성과 이유를 말할 수 있게되어보자!

왜 TEST를 하나요??

우리가 만든 코드가 목적은 달성했을지라도, 완전한 제품으로서 평가 받을 수 있는 것일까?
그래서 우리는 우리의 제품을 검증하는 단계를 반드시 거쳐야 하는 것이다.

그래서

결함확인 / 결함방지 / 시간절약 / 구조개선 / 품질검증 / 확장성 을 할 수 있다.


Software Test의 종류는 유닛테스트, 통합테스트, 인수테스트로 나뉜다.

유닛테스트

각 함수 및 클래스 단위로 진행할 수 있기 때문에 가장 많은 수를 차지한다. 개별적 테스트들이 통과할 수 있다면 여러 테스트를 결합하여 그 결과를 검증할 수 있다.

소프트웨어를 단위로 분해하여 테스트하는 방식을 의미한다. 나눌 수 있는 단위로 함수 및 클래스를 주로 이용한다. 단위로 나누는 과정에서 개발 품질을 높일 수 있다. 이를 모듈화라고 하는데 Tastable하게 라는 의미에서 모듈화가 잘 되어있다고 볼 수 있다. 단위 테스트는 모듈 하나 하나 독립적으로 테스트하여 다른 모듈에 영향을 주지 않고 안전하게 테스트 가능하다.

통합테스트

모듈들을 조합하여 테스트를 구성하기 때문에 통합 테스트 수는 상대적으로 적다.

유닛테스트들을 모아서 테스트하는 것을 의미한다. 모듈들을 모아서 테스트하는 방법 외 모듈이 있는 것을 가정하고 테스트하는 방법도 있다.

상향식/하향식 통합테스트

인수테스트

통합테스트와 비슷하지만 실제 환경을 가정하고 테스트하는 것을 의미한다. 유닛테스트, 통합테스트는 빌드를 올바르게 수행할 수 있는가에 초점이 맞춰져있다면, 인수테스트는 빌드 된 소프트웨어가 정상적으로 작동하는가에 초점이 맞춰져있다.

알파테스트는 폐쇄적 환경에서 개발자가 통제하여 테스트를 진행하는 것을 의미하고
베타테스트는 개방적인 환경에서 비교적 자유로운 테스트를 진행하는 것을 의미한다.

알파/베타 테스트

코드 커버리지

테스트가 코드를 얼마나 커버하는지에 대한 정도이다. 커버리지는 함수/구문/조건/분기로 분류되어 진다.

함수커버리지는 총 함수중에 몇 개의 함수가 실행되는 정도를 의미합니다. 함수가 실행되지 않는다면 다른 커버리지 또한 측정을 할 수 없으므로 테스트들을 포괄하는 개념으로 볼 수 있겠습니다.

함수 커버리지(%) = 실행된 함수 개수 / 총 함수 개수 * 100

구문 커버리지는 코드의 하나의 구문이 실행되는 정도를 의미합니다. 만약, 그 하나의 구문이 실행되지 않으면 테스트가 되지 않았다고 볼 수 있습니다. Javascript 에서 하나의 구문은 보통 세미 콜론(;)으로 구분합니다.

구문 커버리지(%) = 실행된 구문 수 / 전체 구문 수 * 100

조건 커버리지는 if 내의 조건들이 true와 false를 가지는 정도를 의미합니다.

예를 들어, if (a > 0 || b < 0) 이라는 조건이 있을 때, 전체 조건으로 나올 수 있는 경우의 수는 a > 0이 true 일 때와 false, b < 0이 true 일 때와 false 를 조합하여 총 4개가 됩니다. 이 때, a = 1, b = 1로 테스트를 한번 한다면 a > 0 조건은 true, b < 0 조건은 false 값이 됩니다. 여기서 테스트를 그만 둔다면 조건 커버리지는 1개의 조합만 테스트 하였으므로 25%가 됩니다. 여기서 (a = 1, b = -1), (a = -1, b = 1), (a = -1, b = -1) 들을 테스트한다면 조건 커버리지는 100%가 될 것입니다.

조건 커버리지(%) = 각 조건마다 true or false 한번의 개수 / (전체 조건 수 ^ 2) * 100

분기 커버리지는 조건으로 인하여 나뉘게 되는 실행 경로를 의미합니다. 조건이 많아지면 많아질 수록 분기 커버리지의 전체 양이 늘어나게 되므로 테스트할 부분들이 많아지게 됩니다.

분기 커버리지(%) = 실행된 분기 수 / 총 분기의 개수 * 100

테스트를 하는 이유

  • 소프트웨어 품질 검증 및 보장
  • 유지보수 시 Human Error방지

자동화의 중요성

  • 개발팀의 생산성을 높이고, 시스템을 안정적으로 운영할 수 있음
profile
Dreams come true

0개의 댓글