테스트 자동화 (Test Automation)

🌻Truthful·2023년 11월 2일

전공에서 40분간 발표 준비를 해야하기에 테스트 자동화를 주제로 정리를 해보려고 합니다.

What is Testing?

여기서 테스팅은 소프트웨어 테스트 (software test)를 의미합니다.

  • 제품 or 서비스의 품질을 확인합니다.
  • 소프트웨어의 버그를 찾습니다.

한마디로 제품이 원하는대로 동작하는지 확인하는 작업입니다.

when software testing?

예전에는 검증팀에서 소프트웨어를 하나하나 테스트를 하던 시절이 있었습니다.

문제점

  • 수동으로 일일이 검사를 하기에 시간이 많이 듭니다.
  • 빠르게 검사를 하기 위해서는 직원을 더 고용해야하기에 추가적인 비용이 듭니다.
  • 아무리 개발팀에서 빨리 개발을 해도, 검증팀에서 병목 현상이 생깁니다.

이러한 단점들 때문에 검증 자체를 자동화하려는 방향으로 변화해왔습니다.

요즘은 개발을 하면서 자동으로 테스트가 되도록 합니다.

소프트웨어에서 테스팅이 왜 중요한가? (why software test?)

품질 보장

버그를 찾아내고 수정하여 소프트웨어의 품질을 높입니다.

사용자 만족도 향상

오류가 적고 안정적인 소프트웨어는 사용자 경험을 개선합니다.

비용 절감

초기 단계에서 문제를 발견하면 수정 비용이 적게 듭니다.

신뢰성 강화
신뢰할 수 있는 소프트웨어는 사용자와 시장의 신뢰를 얻습니다.

테스트 피라미드

Unit Test

함수, 모듈, 클래스 등을 테스트합니다.

예를 들어 자동차에서 바퀴 하나를 테스트한다고 생각하면 됩니다.

Integration Test

모듈들, 클래스들이 상호작용을 잘하는지를 테스트합니다.

예를 바퀴와 엔진과의 관계를 테스트한다고 볼 수 있습니다.

E2E(end-to-end) Test

UI 테스트, 사용자 테스트에 해당합니다.

자동차 전체, 운전자 입장에서 테스트를 진행합니다.

테스트 유형의 각 장단점

unit test

  1. 즉각적으로 버그를 발견하고 해결 가능 / 위로 올라갈수록 버그를 추적하기 어려움.

그래서 unit test를 가장 많이 작성하고, 그다음 integration test 그리고 E2E Test를 진행하게 된다.

실제 사고 사례

Knight Capital Group 사건 (2012년): 이 회사는 새로운 소프트웨어를 출시했으나 충분한 테스트를 하지 않아 주식시장에서 45분 동안 4억 4천만 달러의 손실을 입었습니다. 이 사건은 소프트웨어 변경에 대한 철저한 테스팅의 중요성을 보여줍니다.

HealthCare.gov 출시 (2013년): 미국 정부의 건강보험 웹사이트인 HealthCare.gov는 출시 초기에 큰 기술적 문제를 겪었습니다. 충분한 부하 테스트를 하지 않아 사용자들이 웹사이트에 접속하는 데 어려움을 겪었고, 이로 인해 큰 혼란과 불만이 발생했습니다.

Apple FaceTime 버그 (2019년): 이 버그는 사용자가 전화를 받지 않았음에도 FaceTime 그룹 콜 기능을 사용하는 동안 다른 사람의 오디오를 듣게 되는 문제를 일으켰습니다. 이는 개인정보 보호와 보안에 심각한 문제를 야기했으며, 소프트웨어의 보안 테스팅이 얼마나 중요한지 보여줍니다.

CI/CD와 테스트 상관관계

테스트코드가 있다는 가정하에, CI, CD의 효과가 극대화됩니다.

CI
코드의 변경사항을 빈번하게 머지해야합니다.

통합을 위한 단계( 빌드, 머지, 테스트) 자동화

profile
"인생의 목적은 타인을 따르는 것이 아니라 자신을 창조하는 것이다."

0개의 댓글