전공에서 40분간 발표 준비를 해야하기에 테스트 자동화를 주제로 정리를 해보려고 합니다.
여기서 테스팅은 소프트웨어 테스트 (software test)를 의미합니다.
한마디로 제품이 원하는대로 동작하는지 확인하는 작업입니다.
예전에는 검증팀에서 소프트웨어를 하나하나 테스트를 하던 시절이 있었습니다.

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

요즘은 개발을 하면서 자동으로 테스트가 되도록 합니다.
품질 보장
버그를 찾아내고 수정하여 소프트웨어의 품질을 높입니다.
사용자 만족도 향상
오류가 적고 안정적인 소프트웨어는 사용자 경험을 개선합니다.
비용 절감
초기 단계에서 문제를 발견하면 수정 비용이 적게 듭니다.
신뢰성 강화
신뢰할 수 있는 소프트웨어는 사용자와 시장의 신뢰를 얻습니다.

Unit Test
함수, 모듈, 클래스 등을 테스트합니다.
예를 들어 자동차에서 바퀴 하나를 테스트한다고 생각하면 됩니다.
Integration Test
모듈들, 클래스들이 상호작용을 잘하는지를 테스트합니다.
예를 바퀴와 엔진과의 관계를 테스트한다고 볼 수 있습니다.
E2E(end-to-end) Test
UI 테스트, 사용자 테스트에 해당합니다.
자동차 전체, 운전자 입장에서 테스트를 진행합니다.

unit test
그래서 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
코드의 변경사항을 빈번하게 머지해야합니다.
통합을 위한 단계( 빌드, 머지, 테스트) 자동화