본문으로 건너뛰기

소프트웨어 개발에서 지속적 테스트

Rei
· 약 14분

소프트웨어 테스트는 개발한 소프트웨어가 요구사항을 잘 반영하였는지, 기능이 정상적으로 작동하는지, 안정적인지 등을 확인하여 품질을 유지하고 결함을 확인하는 활동으로 개발 라이프사이클에서 중요한 과정 중 하나입니다. 개발 초기에 버그와 결함을 감지할수록 개발 시간 단축, 비용 최적화, 품질 향상 등의 이점이 있지만 늦게 발견할수록 잠재적 부채가 증가하여 품질이 떨어지고 위험도가 증가하게 됩니다. 따라서 개발 초기부터 주기적으로 테스트 오류와 결함을 줄이는 것이 장기적으로 중요합니다. 이 글에서는 소프트웨어 테스트를 자동화하고 주기적으로 실행하는 지속적 테스트를 알아보겠습니다.

지속적 테스트란?

지속적 테스트(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 부서로 보낸 뒤, 소프트웨어 테스트를 진행했습니다. 버그가 발견되면 개발자에게 코드를 돌려보내 이를 수정했는데요. 시간이 오래 걸렸죠. 그러나 지속적 테스트는 수동 테스트 프로세스를 자동화하면서 테스트 시간을 단축할 수 있고요. 개발 팀에 즉각 피드백을 줄 수 있습니다. 이로써 개발 팀이 잠재적 문제를 빠르고, 효율적으로 감지하고 해결하도록 지원하죠. 그 결과, 시장에 고품질 제품을 신속하게 선보일 수 있고요.

지속적 테스트의 장점

소프트웨어 기업 Synopsys, IBM, KITRUM의 기술 책임자인 Alexander Tarasov는 지속적 테스트의 장점을 이렇게 설명합니다. 첫째, 개발자는 코드를 수정하기 전에 QA 팀이 테스트를 끝낼 때까지 기다리지 않아도 돼 시간과 노력을 절감할 수 있습니다. 둘째, 테스트는 지속적으로 진행돼 코드 품질과 보안 문제를 실시간으로 수정할 수 있고요. 셋째, 소프트웨어를 더 많이, 더 다양한 방식으로 점검해 취약점을 발견할 기회가 더 늘어납니다. 넷째, 잠재적 문제가 실제 문제로 나타나기 전에 이를 평가하고 확인해 비즈니스 위험을 최소화할 수 있고요. 다섯째, 고급 지속적 테스트로 다양한 사용 사례와 트러블슈팅 시나리오를 시뮬레이션하고, ‘사용자가 이에 어떻게 반응하는지’ 관찰할 수 있습니다. 여섯째, 개발자는 시뮬레이션에서 얻은 통찰을 토대로 사용자 인터페이스에서 비효율을 조기에 없앨 수 있죠.

지속적 테스트 도입 시 유의사항

물론 지속적 테스트를 진행할 때 유의할 점도 많습니다. 최고정보책임자 출신인 Isaac Sacolick의 Infoworld 기고 글과 KITRUM의 기술 책임자인 Alexander Tarasov의 DevOps.com 기고 글에서는 다음 사항을 유의하도록 제언하는데요. 첫째, 테스트를 실행하는 툴을 Jenkins, CircleCI, Bamboo, 다른 주요 CI/CD 툴과 원활하게 통합해야 하고요. 둘째, DevOps, 자동화, CI/CD 파이프라인 전문 지식을 포함해 기존 테스트와 다른 기술이 필요합니다. 셋째, 자동화 테스트를 실행할 수 있도록 적절한 컴퓨팅 환경이 있어야 하고요. 넷째, 지속적 테스트에 활용할 수 있는 도구와 기술이 다양하기에 올바른 도구를 고르는 일이 어려울 수 있죠. 다섯째, 테스트를 손쉽게 자동화하고, 적절한 기간에 이를 실행해야 합니다. 여섯째, 정의된 통과 또는 실패 조건, 문제 해결을 위한 구체적 경로도 있어야 하고요.

맺음말

지속적 테스트는 이제 소프트웨어 개발에서 필수 프로세스로 자리잡고 있습니다.

다양한 최신 기술들과 자동화로 테스트를 진행함으로써 프로세스를 간소화하고 품질, 안전성을 높일 수 있습니다. 지속적 테스트를 만들기 위해 새로운 기술, 도구들을 선택하고 통합하는 부분이 힘들 수 있습니다. 하지만 이러한 프로세스를 개발 라이프사이클 초기에 만들게 되면 잠재적인 위험과 부채가 쌓이지 않게 되고 병목 현상 없이 소프트웨어를 배포할 수 있습니다.

인포그랩은 GitLab 및 DevOps에 대한 맞춤 기술 지원을 제공합니다. GitLab(Omnibus/Cloud Native Hybrid) 구축 관련한 지원이 필요하시면 문의하기 로 연락 주십시오.

<참고자료>

1.The Future of Continuous Testing in CI/CD

2.Continuous Testing

3.What is continuous testing?

4.“비즈니스 가치 극대화를 위한” 지속적 테스트 전략의 정의와 베스트 프랙티스