대부분의 소프트웨어 개발 팀은 테스트를 제대로 수행하지 못한다고 생각합니다. 그들은 품질 결함의 영향이 상당하다는 것을 이해하고 품질 보증에 많은 투자를 하지만 여전히 원하는 결과를 얻지 못하고 있습니다. 이는 재능이나 노력이 부족해서가 아닙니다. 소프트웨어 테스트를 지원하는 기술이 단순히 효과적이지 않기 때문입니다. 업계는 충분한 서비스를 받지 못했습니다.
소프트웨어가 적절하고 철저하게 테스트될 때까지는 성공적인 릴리스가 있을 수 없으며, 작업을 올바르게 완료하는 데 필요한 시간과 인적 노력을 고려하면 테스트에는 때때로 상당한 리소스가 필요할 수 있습니다. 이 부족한 욕구가 이제 막 채워지기 시작했습니다 재회 AI.
많은 산업을 혼란에 빠뜨리고 개선해 온 머신 러닝(ML)이 소프트웨어 테스트에 이제 막 진출하기 시작했습니다. 업계가 다시는 예전과 같지 않을 것이라는 데에는 그럴 만한 이유가 있습니다. 기계 학습이 여전히 성장하고 발전하는 동안 소프트웨어 업계는 이를 점점 더 많이 활용하고 있으며 그 영향으로 방식이 크게 바뀌기 시작했습니다. 소프트웨어 테스팅 기술이 발전하는대로 이루어질 것입니다.
소프트웨어 테스트의 현재 상황을 살펴보고, 머신러닝이 어떻게 발전했는지 검토한 다음, ML 기술이 소프트웨어 테스트 산업을 어떻게 근본적으로 변화시키고 있는지 살펴보겠습니다.
소프트웨어 테스팅에 대한 배경지식
소프트웨어 테스팅은 소프트웨어가 설계된 대로 작동하는지 여부를 검사하는 프로세스입니다. 근본적으로 문제가 없는지 확인하는 테스트 형식인 기능적 품질 보증(QA) 테스트는 단위 테스트, API 테스트, 엔드 투 엔드 테스트의 세 가지 방식으로 실행됩니다.
단위 테스트는 코드 블록이 각 입력에 올바른 출력을 제공하는지 확인하는 프로세스입니다. API는 코드 모듈 간의 인터페이스 호출을 테스트하여 통신이 가능한지 확인합니다. 이러한 테스트는 규모가 작고 개별적이며 매우 결정적인 코드 조각의 기능을 보장하기 위한 것입니다.
E2E(엔드 투 엔드) 테스트를 통해 전체 애플리케이션이 모두 통합되어 실제 환경에서 작동할 때 제대로 작동하는지 확인합니다. E2E 테스트는 모든 코드가 함께 작동하는 방식과 애플리케이션이 하나의 제품으로 작동하는 방식을 테스트합니다. 테스터는 소비자가 핵심 테스트(반복적으로 수행된 작업을 테스트하는 곳)와 에지 테스트(예기치 않은 상호 작용을 테스트하는 곳)를 통해 프로그램과 상호 작용합니다. 이러한 테스트를 통해 애플리케이션이 고객이 원하는 방식으로 응답하지 않는 경우를 발견하여 개발자가 수리할 수 있습니다.
기존 E2E 테스트는 수동 또는 자동으로 수행될 수 있습니다. 수동 테스트에서는 테스트할 때마다 사람이 애플리케이션을 클릭해야 합니다. 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 테스트 자동화에는 인간을 대체하기 위한 스크립트 작성이 포함되지만 이러한 스크립트는 일관되지 않게 작동하는 경향이 있으며 애플리케이션이 발전함에 따라 유지 관리에 막대한 시간이 소요됩니다. 두 방법 모두 비용이 많이 들고 성공하려면 인간의 직관에 크게 의존합니다. 전체 E2E 테스트 공간은 충분히 기능 장애가 있어 AI/ML 기술로 인해 중단될 가능성이 높습니다.
머신러닝이란 무엇인가요?
머신러닝은 AI와 동의어로 사용되는 경우가 많지만 엄밀히 말하면 동일한 것은 아닙니다. 기계 학습은 알고리즘을 사용하여 결정을 내리고, 인간 입력의 피드백을 사용하여 해당 알고리즘을 업데이트합니다.
좋은 예는 머신 비전입니다. 머신 비전 애플리케이션은 실제로는 개인데도 고양이로 식별할 수 있습니다. 인간은 이를 수정하고(“아니요, 이건 개입니다”라고 말함) 이 피드백을 기반으로 무언가가 고양이인지 개인지를 결정하는 일련의 알고리즘이 업데이트됩니다. 기계 학습 테스터와 사용자의 지속적인 피드백을 기반으로 시간이 지남에 따라 더 나은 결정을 내리도록 설계되었습니다.
머신러닝은 데이터와 피드백 부족으로 인해 E2E 테스트의 세계에 도달하는 데 어려움을 겪었습니다. E2E 테스트는 일반적으로 테스트에 중요한 것이 무엇인지, 어떤 기능이 중요하거나 위험해 보이는지에 대한 인간의 직관을 통해 구축됩니다. 새로운 애플리케이션은 제품 분석 데이터를 사용하여 테스트 자동화를 알리고 개선하며 기계 학습 주기를 열어 테스트 유지 관리 및 구성을 크게 가속화합니다.
일반적으로 테스트는 속도와 유용성 측면에서 개발보다 뒤떨어집니다. 테스트 자동화는 엔지니어링 팀에게 약점이 되는 경우가 많습니다. ML은 이를 강점으로 만드는 데 도움이 될 수 있습니다.
소프트웨어 테스트의 미래에서 ML이 의미하는 바는 자율성입니다. 스마트 머신은 현재 애플리케이션 사용 및 과거 테스트 경험에서 얻은 데이터를 사용하여 사람의 입력 없이 테스트를 구축, 유지, 실행 및 해석할 수 있습니다.
소프트웨어 개발의 모든 측면이 자동화되어야 하는 것은 아닙니다. 주로 인간의 직관과 인력에 의해 주도되는 E2E 테스트의 오랜 전통을 고려할 때 업계 전체는 처음에는 프로세스를 기계에 넘기는 것을 거부할 수 있습니다. 거의 모든 산업 분야에서 내부자들은 기계가 결코 인간의 일을 할 수 없다고 주장합니다. ML의 부상에 저항하고 인간의 노동력을 두 배로 늘린 사람들은 종종 뒤처지게 됩니다.
테스트 세계에서는 친숙한 이야기가 전개됩니다. ML 기반 테스트 자동화는 현재 초기 단계에 있지만 업계를 장악하는 데는 불과 몇 년 밖에 걸리지 않습니다.
자율적인 엔드투엔드 테스트
E2E 테스트에서 기계 학습의 핵심 이점은 매우 복잡한 제품 분석 데이터를 활용하여 사용자 요구 사항을 식별하고 예측할 수 있다는 것입니다. ML 기반 테스트는 웹 애플리케이션에서 모든 단일 사용자 상호 작용을 관찰하고, 사용자가 거치는 일반적인(및 에지) 여정을 이해하고, 이러한 사용 사례가 항상 예상대로 작동하는지 확인할 수 있습니다.
해당 머신이 많은 애플리케이션을 테스트하는 경우 모든 애플리케이션으로부터 학습하여 애플리케이션에 대한 새로운 변경 사항이 사용자 경험에 어떤 영향을 미칠지 예측할 수 있습니다. ML 기반 테스트는 이 데이터 덕분에 이미 인간보다 더 훌륭하고 의미 있는 테스트를 구축할 수 있습니다.
ML 기반 자동화로 개발된 테스트는 사람이 구축한 테스트 자동화보다 더 빠르고 훨씬 저렴하게 구축 및 유지 관리됩니다. 이러한 테스트는 훨씬 더 빠른(및 더 높은 품질) 배포로 이어지며 VP Engineering의 예산에 도움이 됩니다.
테스터는 어떻습니까?
현재 이러한 일을 하고 있는 사람들은 어떻습니까?
품질 엔지니어는 여전히 소프트웨어 개발에서 중요한 역할을 합니다. 소프트웨어의 품질을 보장하는 가장 효율적인 방법은 코드 자체의 설계 및 개발에 품질 관리를 포함시키는 것입니다. 테스트는 프로세스가 불완전하기 때문에 존재합니다.
ML이 테스트 엔지니어의 E2E 테스트 부담을 떠맡게 되면서 해당 엔지니어는 소프트웨어 엔지니어와 협력하여 전문 지식을 활용하여 처음부터 고품질 코드를 구축할 수 있습니다. 이 문제에 대한 우리의 인터뷰에 따르면 대부분의 품질 엔지니어는 하루 종일 테스트 유지 관리에 전념하는 것보다 이 방법을 훨씬 선호하는 것으로 보입니다.
미래는 밝아 보인다
ML은 보다 효율적이고 효과적인 소프트웨어 테스트 프로세스를 제공합니다. 이는 개발 규모를 처리하고 필요한 전문 테스트를 생성하는 데 더 잘 갖춰진 프로세스를 확립합니다. 스마트 소프트웨어 테스팅은 데이터 기반 테스트, 정확한 결과 및 혁신적인 산업 발전을 의미합니다.
이 기사가 소프트웨어 테스팅의 미래와 기계 학습이 우리 세계를 위해 준비한 놀라운 일을 준비하는 데 도움이 되기를 바랍니다.