소프트웨어 테스트

누리·2022년 11월 2일
0

이론

목록 보기
1/1

소프트웨어 테스팅이란?

순차 분기 반복으로 계속 이루어진다

작성한코드(백엔드API) >> Expected Result >> Test >> 1. Success 2. Failure >> 실패시 처음으로 돌아가 Modify Fix 과정이 반복된다

  • 제대로된 소프트웨어를 개발했는가
    • 좀더 철학적으로 바라보는 관점이 필요하다
  • 소프트웨어를 제대로 개발했는가
    • 원하는 기능을 잘 수행하고 포함시켰는지

왜 테스트를 하는가?

  1. 결함 확인
  2. 사전 방지 (제품 출시전 결함을 사전 방지하는 목적에 있다)
  3. 시간 절약 (사람이 아닌 테스트 프로그램을 이용하여 테스트 전략을 짜면 효과적)
  4. 구조 개선 (테스트 과정에서 좀 더 효율적인 코드로 리팩토링할 여지를 확인할 수 있다)
  5. 품질 개선
  6. 확장성 (기존의 다양한 코드들과 잘 어우러져 에러를 양산하지 않는 견고한 코드를 만들 수 있다)

개발 문화의 변화

WaterFall 👉🏻 Real Time Test

  • WaterFall : 요즘 방식과는 맞지 않다 (소비자들의 니즈를 충족시키지 못함)
    설계 → 개발 → 테스트 코드 작성
  • TDD : 끊임없이 배포함 (지속적인 업데이트)
    테스트 코드 작성 → 개발 → 리팩토링

자동화의 중요성

Manul Testing (수동)

  • 단점 : 불안정성 증가, 인력소모, 비용 상승, 테스트속도 저하

Automation Testing (자동)

  • 장점 : 안정성 증가, 인력소모 감소, 비용 절감, 테스트속도 증가, 확장성 증가

단위 테스트의 자동화는 필수 요소이다

단위 테스트는 개발자가 테스트 코드를 작성하여 코드로 코드를 테스트하는 방법으로 작성하기 쉬우며, 언제든지 실행할 수 있고, 실행 속도도 굉장히 빠르기 때문에 100% 자동화가 가능합니다.

또한, 자동화와 더불어 디버깅을 도와준다는 장점이 더해져 소프트웨어를 빌드할 때, 사전에 오류 찾아내어 수정할 수 있습니다. 빌드 전에 단위 테스트를 자동을 수행하는 스크립트를 통해 자동화를 할 수 있으며 이는 빌드 혹은 컴파일 하기 전, 원격 저장소에 코드가 올라가기 전에 검사하여 안정적으로 코드를 관리할 수 있습니다.
디버깅 하기 쉽고 100% 자동화가 가능한 단위 테스트는 시스템 테스트 전략중에 가장 많은 비율을 차지합니다.

시스템 테스트 전략 3가지

1. End-to-End (E2E) Tests

머리부터 발끝까지 ~
전체적인 Flow
ex) 브라우저상 클릭 후 생기는 변화에 대한 검증

2. Integration Tests (통합 테스트)

모듈간의 호환성 검증
ex) 내가 짠 코드가 다른 개발자들이 짠 코드와 잘 융합되는지
ex) 웹페이지 혹은 Postman을 통한 API 호출 시 올바르게 동작하는지 확인

3. Unit Tests (단위 테스트)

독립적으로 진행되는 가장 작은 단위의 테스트
얼마나 많은 실패케이스를 경험하고 테스트 해보는지가 중요
ex) 하나의 기능 또는 메소드

  • 단위 테스트 작성의 필요성
    • 빠른 문제 파악가능
    • 시간과 비용 절감
    • 리팩토링 시 안정성 확보
    • 코드에 대한 문서로 활용

코드 커버리지 : 테스트가 코드를 얼마나 커버하는지에 대한 정도를 나타내는 지표

  • 함수커버리지(%) = 실행된 함수 개수 / 총 함수 개수 * 100
  • 구문커버리지(%) = 실행된 구문 수 / 전체 구문 개수 * 100
  • 조건커버리지(%) = 각 조건마다 true or false 한번의 개수 / (전체 조건 개수^2) * 100
  • 분기 커버리지(%) = 실행된 분기 수 / 총 분기의 개수 * 100
profile
프론트엔드 개발자

0개의 댓글