Software Testing

유지후·2022년 6월 9일

Software Testing

why? :
결함 확인 , 사전 방지 ,
시간 절약 (사람이 하나하나 코드를 확인하면 시간이 오래걸림),
구조 개선, 품질 개선 , 확장성

Manual Testing vs Automation Testing

Manual Testing :

불안정성 증가
인력소모 증가 => 비용증가,
테스트 속도 감소

Automation Testing :

안정성 증가
인력소모 감소 => 비용감소,
테스트 속도 증가
확장성 증가

UI test(End-to-End Testing)

전체적인 Flow
(브라우저상 클릭 후 생기는 변화에 대한 검증)

  • 크롬 브라우저를 띄운다음에 내가 만든 검색페이지로 들어가서 검색을 해보고 검색한 내용이 제대로 나오는지 화면상에서 확인하거나 직접 회원가입을 해보고 회원가입후에 로그인 되는지 직접 브라우저 상에서 값을 입력해서 테스트 하는방법.

  • UI Testing이 가장 어렵고 까다로움.

  • Manual Testing은 실행하기 쉽다는 장점이 있지만 비용이 많이 들고 부정확 하며 실행 시간이 오래 걸림.

  • 자동화 할 수 있지만 UI Testing은 자동화 하기가 가장 까다롭고 또 실행하기도 까다로움

Integration Test(통합 테스트)

모듈 간의 호환성 검증
(웹페이지 혹은 postman을 통한 api 호출 시 올바르게 동작하는지 확인)

  • 최소 두개이상의 클래스 또는 서브 시스템의 결합을 테스트하는 방법.

  • 예를들면 장고로 서버를 띄우고 모델 클래스와 결합하여 데이터베이스 시스템과 연동한 테스트.

  • Postman 또는 httpie로 호출해서 Json response가 제대로 출력되는지 확인.

  • Integration Testing이 E2E Testing 다음으로 공수가 많이 소요.

Unit Test(단위 테스트)

독립적으로 진행되는 가장 작은 단위의 테스트
(하나의 기능 또는 메소드)

유닛테스트의 중요성
빠른 문제 파악 가능

유닛테스트의 장점

  1. 유닛 테스트는 UI Test 또는 Integration Test 보다 테스트 비용이 쌈
    (UI Test는 백엔드 서버와 프론트를 연동하여 사람이 직접 테스트하지만, 유닛 테스트는 사람이 스크립트로 한꺼번에 자동으로 실행하기 때문)

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

  3. 새로운 기능을 구현할때 유닛 테스트를 잘 작성해놓으면 중장기적으로 유지 보수가 쉬움.

  4. 유닛테스트를 잘 짜놓으면 유닛테스트가 되었던 코드에서는 버그가 거의 발견되지 않고 만약 발견된 버그에 대해서도 버그를 수정한 후 유닛테스트를 작성해놓으면 버그를 방지할 수 있음.

Unit test를 구현할때 지켜야 하는 일반적인 원칙

  1. 발견된 버그에 대해서도 버그를 수정한 후 유닛테스트를 작성해놓으면 버그를 방지할 수 있어야 함.

  2. 각 테스트 유닛은 반드시 독립적

  3. 테스트가 빠르게 돌 수 있도록 만들기 위해 노력

  4. 코딩을 시작하기 전에 항상 풀 테스트 슈트를 돌리기. 끝난 후에도 마찬가지

  5. 모두가 공유하는 저장소에다가 코드를 집어넣기 전에 자동으로 모든 테스트를 수행하도록 하는 훅을 구현하는 하는 것이 좋음.

  6. 코드를 디버깅할 때 가장 먼저 시작할 일은 버그를 찝어내는 새로운 테스트를 작성하는 것

  7. 테스트 함수에는 길고 서술적인 이름을 사용 (ex : test_square_of_number_2(), test_square_negative_number()

0개의 댓글