software Testing

hazel's·2022년 5월 12일
0

web

목록 보기
10/10

Software Testing

도자기 장인들은 도기를 굽고 나서 마음에 들지않으면 바로 깨버리듯이, 우린 코드를 그렇게 다룰줄 알아야 하지만, 다시 처음 부터 시작하기란 쉽지 않은 일이기에 조금이라도 문제적인 점을 줄이기 위해서는 미리 테스트를 하여 문제가 되는 부분을 줄일수 있어야 한다.

소프트 웨어 테스팅이란?

소프트웨어테스팅 표

테스트는 200ok는 떴지만 내부의 값이 다를 수 있다. 그럴 경우가 있기때문에 결과값과 테스트를 거쳐서 정확히 해봐야한다.

"did you build right product?"

Why Test?

  • 결함확인 : 다양한 경우의 수에서 결함을 케이스 바이 케이스로 확인할 수 있다.
  • 사전방지 : 고객의 불만족의 경험을 사전에 방지할 수 있다. 이것은 곧 개발자에게도 큰 메리트가 될 수 있다. 내가 짠 코드가 유저의 만족을 받을 수 있다.
  • 시간절약 : 다양한 유저의 경우의 수가 엔터 한번으로 다 볼 수 있다면 좋을 것이다.
  • 구조개선 : 테스트를 하다보니 디버깅하니 구조가 꼬여있었다면 스스로 깨우치고 리팩토링 할 수 있다.
  • 품질개선 : 유저의 만족감과 사용은 높아질 것이다.
  • 확장성 : 견고하게 짜여진 코드를 새로운 코드를 짜더라도 잘 돌아갈수 있다.

Manual Testing vs Automation Testing

Manual Testing을 한다면

  • 불안정성이 높아진다.
  • 인력소모가 증가된다.휴먼에러 가능성이 높다.
  • 인력을 많이 고용하면서 임금으로 인한 지불이 증가한다.
  • 테스트 속도도 감소될 수 있다. 엔터한번에 수천건 수만건이 진행되는 것을 수기로진행된다. 엄청 오랜 시간이 걸릴 수 있다.

그렇지만 한번은 꼭 하는 것이 좋다. 사람이 사용하기 때문에 필요는 한 부분이다.(하지만 이또한 시스템적으로 가능)

Automation Testing을 한다면

  • 안정성이 높아진다.
  • 인력소모 감소
  • 비용 감소
  • 테스트 속도 빨라진다.
  • 확장성이 올라갈떄마다 기존의 코드에 대해서 새로운 코드의 호환성에 대해서 다시 검토 될수 있다.

시스템 테스트 전략 3가지

결국의 사람의 손을 이용해야하는 ux적 부분도 있지만 그 부분도 자동으로 할 수 있다.

End to End(E2E) Tests :

  • 서버열어달라고 요청하는 것을 얻어오는 데이터를 화면에 노출이 되는지 테스트 하는 것
  • 크롬 브라우저를 띄운 다음에 내가 만든 페이지로 들어가서 출력이 잘되는 지 화면상 확인하거나 직접 가입을 하고 회원가입후 로그인이 되는지 직접 브라우저 상에서 값을 입력해서 테스트하는 방법.
  • UI Testing이 가장 어렵고 까다롭다.
  • 자동화 할 수 있지만 UI Testing은 자동화 하기가 가장 까다롭고 또 실행하기 까다롭다.
  • 복잡도는 가장 높다.

단점: 코드를 치는 과정 속에서 자주 사용하면 안된다. ux적 관점에서 가장 끝부분에서 이루어져야 한다. 그전 더 많이 이루어 져야 하는 테스트는 Intergration 테스트다.

Intergration Tests(통합 테스트) :

  • 유닛테스트를 모아서 한번에 합쳐졌을때 테스트
  • 최소 두개 이상의 클래스 또는 서브 시스템의 결합을 테스트 하는 방법
  • 예를 들면 장고로 서버를 띄우고 모델 클래스와 결합하여 데이터 베이스 시스템과 연동한 테스트
  • Integration Testing이 E2E Testing 다음으로 공수가 많이 든다.

Unit Tests(단위 테스트):

  • 유닛 테스트란, 내가 작성한 코드의 가장 작은 단위인 함수를 테스트하는 메소드이다. 그래서 내가 작성한 로직을 테스트하는 유닛테스트 코드를 짜서 테스트하게 됩니다.

  • 하나의 기능만 테스트 하는게 유닛 전체적인 연계된 기능 테스트 통합

  • 독립된 테스트에서 파생될 수 있는 경우의 수를 테스트하는 것

  • 로그인이나 회원가입시 키에러가 날 경우

  • 테스트 파일 폴더를 들어가서 다양한 라이브러리 테스트를 의도한다고 하면 수천개의 코드가 테스트 시행

  • 프론트는 크롬브라우저를 띄워서 실제로 동작시켜보는 E2E 테스트

  • 백은 장고서버를 동작시키고 Httpie나 포스트맨으로 주로 intergration테스트를 수행

Unit Test 장점

  • 유닛테스트는 UI Test 또는 Integration Test 보다 테스트 비용이 비싸다고 할 수 있다. 왜냐하면 UI Test는 백엔드 서버와 프론트를 연동하여 사람이 직접 테스트 하지만, 유닛테스트는 사람이 스크립트로 한꺼번에 자동으로 실행하기 때문이다.

  • 유닛 테스트는 다른 테스트에 비해서 실행속도가 매우빠르다. 그래서 활용하면서 하루에도 배포를 여러번 할 수 있어 개발 및 배포 속도에 중요한 영향을 주기 때문에 개발 할 때 최대한 활용 가능하다.

  • 새로운 기능을 구현할 때 유닛 테스를 잘 작성해놓으면 중장기적으로 유지 보수가 쉬운 장점이 있다. 즉, 이전에 통과했던 테스트집합을 가지고 버그를 찾기 위해서 이전 테스트되었던 유닛테스트를 반복하는 것을 regression 테스트라고 하는데 유닛테스트만 반복하면 되기때문에 regression 테스트도 반복적으로 수행 할 수 있다.

  • 잘 짜놓으면 버그가 잘 발견되지 않을것이고 발견되더라도 유닛테스트가 없어서 발생하는 경우가 많다. 그리고 만약 사후에 발견된 버그에 대해서도 버그를 수정한 후 유닛테스트를 작성해놓으면 버그를 방지 할 수 있다.

profile
좋아하는 것을 하나하나 채워가면 행복해질꺼야

0개의 댓글