소프트웨어 테스트는 개발한 소프트웨어가 요구사항을 잘 반영하였는지, 기능이 정상적으로 작동하는지, 안정적인지 등을 확인하여 품질을 유지하고 결함을 확인하는 활동으로 개발 라이프사이클에서 중요한 과정 중 하나입니다. 개발 초기에 버그와 결함을 감지할수록 개발 시간 단축, 비용 최적화, 품질 향상 등의 이점이 있지만 늦게 발견할수록 잠재적 부채가 증가하여 품질이 떨어지고 위험도가 증가하게 됩니다. 따라서 개발 초기부터 주기적으로 테스트 오류와 결함을 줄이는 것이 장기적으로 중요합니다. 이 글에서는 소프트웨어 테스트를 자동화하고 주기적으로 실행하는 지속적 테스트를 알아보겠습니다.
지속적 테스트란?
지속적 테스트(Continuous Testing)는 ‘소프트웨어 개발 라이프사이클 전반에 걸쳐 테스트를 자동화하고 실행하는 소프트웨어 테스트 접근 방식’입니다. 소프트웨어 기업 Synopsys에 따르면, 지속적 테스트는 (소프트웨어 개발 라이프사이클 전반에 걸쳐) 소프트웨어 품질을 평가해 중요한 피드백을 조기에 제공하며, 품질이 더 높고 더 빠르게 (소프트웨어를) 배포하는 게 목표이죠. 소프트웨어 기업 KITRUM의 기술 책임자인 Alexander Tarasov는 “결함과 문제를 가능한 한 빨리 확인해 나중에 이를 바로 잡는 데 드는 비용과 시간을 줄이는 것도 지속적 테스트의 목표”라고 설명합니다. IBM에 따르면, “지속적 테스트는 코드 품질을 개선하고, 비싼 병목 현상을 방지하며, DevOps 프로세스를 더 신속히 처리” 하는데요. 이로써 소프트웨어 개발 라이프사이클 타임라인을 가속하는 데 중요한 역할을 합니다.
지속적 테스트의 작동 방식
앞서 개념 정의에서 살펴봤듯, 자동화는 지속적 테스트의 핵심 수단인데요. IBM에 따르면, 이는 자동화 툴을 사용해 모든 프로덕션 단계에서 사전 정의된 QA 스크립트를 로드하면서 작동합니다. 이러한 자동화 스크립트는 QA 테스트를 실행할 때 사람이 정기적으로 개입할 필요성을 없애고요. 아울러 이는 소스 코드 효율을 순차적으로 검증하고, 관련 있는 피드백이 해당 팀에 즉시 제공되도록 보장하죠. 자동화 테스트가 실패하면, 개발 팀은 해당 개발 단계에서 알림을 받고요. 이로써 소프트웨어 개발 라이프사이클의 다른 단계에 있는 또 다른 팀에 영향을 주기 전에 소스 코드를 수정할 수 있습니다. 자동화 테스트가 검사를 통과하면, 프로젝트는 자동으로 소프트웨어 개발 라이프사이클의 다음 단계로 넘어가고요.
지속적 테스트의 새로운 기술
오늘날 지속적 테스트에는 인공지능(AI)/머신러닝(ML), 자동화, DevOps 등 새로운 기술이 접목되고 있습니다. 소프트웨어 기업 KITRUM의 기술 책임자인 Alexander Tarasov는 DevOps 미디어인 DevOps.com 기고 글에서 AI/ML, 자동화, DevOps, 블록체인, 사물인터넷(IoT)을 지속적 테스트의 새로운 기술로 꼽았는데요. 각 기술은 지속적 테스트에서 다음 기능을 수행합니다.
AI/ML: 이는 테스트 케이스 생성을 자동화해 수동 테스트의 필요성을 줄이고, 다른 업무를 위한 시간을 확보하도록 돕습니다. 테스터는 애플리케이션을 더 포괄적으로, 자주 테스트할 수 있고요. 이로써 결함이나 문제를 신속하게 확인하고, 해결하도록 보장합니다.
자동화: 이는 자동화 도구와 프로세스를 이용해 소프트웨어 테스트를 반복적이고 지속적으로 실행합니다. 자동화는 테스트 계획, 테스트 케이스 설계, 테스트 실행, 테스트 리포트와 같은 소프트웨어 테스트 라이프사이클의 여러 단계를 자동화하죠.
DevOps: 이는 지속적 테스트 맥락에서, 개발 프로세스에 테스트 통합을 강조해 개발자가 초기에 결함을 감지하고 수정하도록 합니다. 아울러 DevOps는 개발 팀과 운영 팀 간의 자동화, 협업, 소통을 촉진해 더 빠르고 효율적으로 테스트하고 배포하도록 합니다.
블록체인: 이는 탈중앙화되고, 투명한 방식으로 테스트 결과와 데이터를 저장합니다. 이로써 사실상 아무도 데이터를 수정하거나 조작할 수 없도록 하죠. 블록체인은 테스트 프로세스에 포함된 이해관계자 간에 효율적이고 매끄러운 데이터 공유를 지원하고요. 더 빠르고, 더 정확하게 의사결정을 내리도록 돕습니다.
IoT: 이는 많은 IoT 디바이스와 플랫폼을 시뮬레이션해 테스터가 여러 디바이스와 플랫폼에서 애플리케이션을 테스트하도록 지원합니다. 이는 애플리케이션이 다양한 IoT 디바이스, 플랫폼과 호환되고 여러 환경에서 안정적이고 일관되게 작동하도록 보장합니다.
지속적 테스트의 필요성
오늘날 지속적 테스트가 필요한 이유는 뭘까요? 이는 소프트웨어 문제를 신속하게 발견하고, 수정하며, 시장에 제품을 더 빠르게 출시하는 데 도움이 되기 때문입니다. 소프트웨어 기업 KITRUM의 기술 책임자인 Alexander Tarasov에 따르면, 과거에는 코드를 작성하고 독립적 테스트를 위해 이를 QA 부서로 보낸 뒤, 소프트웨어 테스트를 진행했습니다. 버그가 발견되면 개발자에게 코드를 돌려보내 이를 수정했는데요. 시간이 오래 걸렸죠. 그러나 지속적 테스트는 수동 테스트 프로세스를 자동화하면서 테스트 시간을 단축할 수 있고요. 개발 팀에 즉각 피드백을 줄 수 있습니다. 이로써 개발 팀이 잠재적 문제를 빠르고, 효율적으로 감지하고 해결하도록 지원하죠. 그 결과, 시장에 고품질 제품을 신속하게 선보일 수 있고요.