Skip to main content

AI를 통한 “테스트 혁신”

I. 배경

AI는 디지털 분야에서 핵심적인 화두이며, 향후 인류의 삶에 엄청난 영향을 미치는 분야로 자율주행 자동차 등 4차 산업혁명의 Key factor로서 발전하고 있습니다.

관련하여 본 기사에서는 소프트웨어 테스트의 AI의 기술 적용에 대해 두 가지 측면에서 기술하고자 합니다.

  • 소프트웨어 개발 및 검증팀에서 AI 테스트 적용 방안
  • AI를 활용하여 생산성, 품질 및 보안성을 개선하는 방법

참고로 본 자료는 PARASOFT C/C++ “Guide for AI in Software Testing”에서 발췌한 자료입니다.

먼저 AI에 대해서 몇 가지 측면을 먼저 정리하면,

  • AI의 오해와 현실: 우리가 상상하는 “Real intelligence”등과 같이 자체 지능형 AI의 실체는 명확하지 않고, 아직 실존하지도 않습니다. 하지만, Open source 진영의 ChatGPT 등 학습기반의 다양한 AI 솔루션들이 점점 상용하고 되고 있습니다. 그래서 이러한 Open Source 진형의 학습기반의 AI기술을 테스트 도구에 적용하는 것은 소프트웨어 테스트의 기능이나 성능의 획기적인 향상을 가져올 수 있습니다.
  • AI와 ML이 해결할 수 있는 소프트웨어 테스트 도전: 소프트웨어 도구에서 AI를 적용하는 것은 소프트웨어 개발 생명 주기 (SDLC: Software Development Lifecycle)을 적용하기 쉽고, 시간을 단축시키는데 중점을 둡니다. 이러한 측면에서 테스트 자동화에서 AI의 효능은 개발자와 테스트의 개입을 최대한 줄이는데 있습니다. 만약, AI 봇이 테스트의 현재 상태, 최근 코드 변경사항, 신규 또는 변경되는 요구사항, 코드 커버리지 및 기타 메트릭 등을 검토한 다음 어떤 테스트를 진행할지 결정할 수 있다면 개발의 생산성을 향상시킬 수 있습니다.
  • 더 많은 규모의 소프트웨어는 더 많은 릴리즈를 요구: 전 세계적으로 소프트웨어 요구는 많아지고 규모도 기하급수적으로 증가(“소프트웨어 위기” 또는 “소프트웨어 폭증”)하고 있으며, 당연히 그에 따른 릴리즈 횟수는 많아지고 시기는 짧아지는 것이 추세입니다. 이러한 상황에서 소프트웨어 개발자와 테스트 엔지니어는 이렇게 밀려오는 수많은 릴리즈 이슈와 부하에 적절하게 대응하기 위해서는 테스트 자동화를 구축하고, 이러한 자동화가 효율적이고 원활하게 적용되기 위해 AI와 통합하는 것이 중요합니다.

참고로, Statista의 조사자료에 따르면 소프트웨어 개발 인구가 24,5백만(‘20년)명에서 28.7백만(‘24년)명으로 늘어날 것으로 예측하고 있습니다.

II. 소프트웨어 테스팅에서 AI & ML의 기회

AI와 ML 기술은 테스트 분야에서 아래와 같은 중요한 영향을 줄 수 있습니다.

  • 더 쉽고 효율적인 테스트 시작, 수행, 확장 및 종료
  • 테스트후 추가 테스트에 대한 유지 보수 감소
  • 자가 테스트를 통한 변화에 적용
  • 지능적인 선택을 통한 테스트 시간 단축
  • 비즈니스 위험 감소

그림(Parasoft C/C++ 테스트 툴 체인)은 테스트 피라미드 형태이며, 제일 아래의 Code analysis(Static verification)을 기반으로 다음의 unit test 등을 통한 좋은 품질의 코드가 기반이 될 때, API 및 사용자 기반의 기능에 대한 성공적인 품질을 만들어 낼 수 있습니다. 이러한 측면에서 아래 각 항목들에 대해 AI 및 ML이 어떤 역할들을 하는지 사례와 함께 살펴보도록 하겠습니다.

  • Improve the adoption of static analysis.
  • Increase of unit & integration test coverage.
  • Improving API testing.
  • Automate UI testing efficiency.

1. Improve the adoption of static analysis

자동차 도메인 및 다양한 분야에서 ISO 26262, IEC 61508, SEI CERT을 통해 Coding standard(Safety & Security 코딩 룰) 등을 준수하기를 요구하고 있으며, 이러한 상황에서 Static analysis는 필수적입니다. 하지만, 처음 이러한 룰을 적용했을 때, 위반 사항 및 수정 제안 사항들이 너무나 많이 발생됩니다, 특히 코드의 품질에 상관없는 수많은 False alarm이나 개선사항들은 Noise로 간주되어, 개발팀이나 테스트 팀들이 이러한 반복적인 작업에 매우 큰 공수를 투입하거나, 어떤 경우는 무시하는 상황도 발생하고 있습니다

이러한 부분을 개선하기 위해서는 검증팀은 AI나 ML을 적용하여, 내부 기준(Noise에 해당하는 기준)과 우선순위(중요하지 않은 코딩 룰 등)를 도구에 학습을 시켜 관련 Nosie를 무시하도록 하는 것입니다. 결국 이러한 방법은 과거 데이터와 현재 기준을 잘 정립하여 지속적인 학습을 통해, 추가적인 분석 공수를 줄여 나가는 것입니다. 하지만, 안전이나 보안과 관련된 부분은 여전히 Noise로 간주되는 사항들에 대해 추가적인 분석이 필요할 수도 있습니다.

또한 여러 코드들에게서 중복적으로 발생하는 위반사항(특히 필수적으로 해결해야 하는 이슈 들)을 AI나 ML이 자동으로 찾아 내어, 관련 부분 코딩 시 개발자들이 사전에 방지하도록 지원하는 것도 하나의 방법입니다.

 

2. Increase unit & integration test coverage

유닛 및 통합 테스트 단계는 대부분의 개발자 및 테스터들에게 시간이 많이 걸리고, 지루한 영역으로 간주되며, 일반적으로 전체 개발시간의 40%를 차지한다고 합니다.

이러한 부분을 개선하기 위해서 AI는 테스트 대상 소스코드의 제어 경로를 탐색하여 전달해야 하는 매개변수와 아직 만들어 지지 않은 코드에 대한 스텁(Stub)을 자동으로 생성합니다.

그리고 다음 만들어진 유닛(코드)에 생성된 매개변수와 스텁을 전달하여 새로운 유닛 및 통합 테스트를 점진적, 지속적으로 자동 생성을 가능하게 함으로써, 테스트 커버리지를 향상시키고, 테스트 시간을 줄일 수 있습니다. 즉 테스터 엔지니어가 수동으로 분석하고 해야 하는 부분을 AI을 통해 매개변수와 스텁을 생성하여 다음 유닛과 통합함으로써, 테스트의 효율성을 증가시킬 수 있습니다.

 

3. Improving API testing

UI(예, 브라우저 등)가 있는 API 테스트 방법으로, AI는 1) API 및 서비스 계층 테스트를 통해 기능테스트 범위를 확장하고 2) 자동화를 쉽게 하고, 3) 로드 및 성능 테스트의 재사용을 목표로 합니다.

API 테스트 생성기는 UI를 실행 시 다양한 API의 호출의 패턴과 관계를 학습합니다.

이러한 학습을 통해 UI 동작을 학습하여 자동으로 테스트 케이스를 업데이트 하여, 테스트 커버리지를 향상시키는 방법입니다. 여기서 확장하는 방법은 사용자가 수행하는 테스트 작업을 반복하는 것이 아니라, 좀더  매개변수화 된 테스트를 만드는 것으로 먼저 트래픽 내부를 인식하고, 매개변수의 포괄적인 데이터 모델의 생성을 통해, 학습화 된 패턴을 활용하여 사용자가 좀 더 복잡한 테스트 케이스를 만들 수 있도록 지원하는 방식입니다. (PARASOFT SOAtest 모듈의 기능)

  • 1단계: 수동 테스트로부터 트래픽의 분석
  • 2단계: AI가 API 테스트 시나리오를 분석
  • 3단계: AI가 테스트 시나리오 추가

이러한 방법은 OWASP ZAP 또는 Burg Suite와 같은 업계 보안 도구로 확장하여 사이버보안 관련 일부 침투 테스트를 통합할 수 있습니다. 프로세스 흐름은 다음과 같이 설명할 수 있습니다.

4. Automate UI testing efficiency

AI는 Selenium 테스트(사용자 UI 테스트 방법)를 정기적으로 실행하는 동안 내부 데이터 구조에 대해 학습할 수 있습니다. PARASOFT Selenic(테스트 도구) 은 각 테스트 실행을 모니터링하고 테스트 중인 애플리케이션의 웹 UI 콘텐츠에 대한 자세한 정보를 캡처하여 이를 수행합니다. 또한 Selenic은 독점적인 데이터 모델링 접근 방식을 사용하여 해당 정보를 AI 엔진에 저장하여

모델을 지속적으로 업데이트 합니다. 추가적으로 자동 복구는 테스트 시, 웹페이지가 이동, 수정 또는 실패가 발생하는 경우 그 시점으로 되돌려줌으로써 시간을 줄여 줍니다

관련된 프로세스는 아래와 같습니다.

III. 소프트웨어 테스트에서 AI/ML 적용의 이점

AI와 ML은 SDLC상에서 다음과 같은 이점이 있으며, 가장 중요한 것은 사용도구의 효율성을 최대화 시킬 수 있다는 점입니다.

  • 개발의 효율성 및 생산성 향상
  • 개발 비용 및 테스트 시간 절감
  • 높음 품질의 제품

AI기반 테스트 자동화 솔루션은 다음과 같은 이점을 제공합니다.

  • 프로젝트 관리자는
    • 릴리스 일정에 지장을 주는 개발일정의 후반단계에서 결함을 최소화하여 일정목표를 맞출 수 있습니다.
    • AI 솔루션이 적용된 테스트 자동화로 기존 프로젝트의 품질을 향상시킬 수 있습니다.
    • AI로 강화된 테스트 도구 제품군을 통해 테스트 자동화를 최대한 활용하여 위험을 줄이고 기존 프로젝트의 안정성을 높일 수 있습니다
  • 개발자는
    • 자동화된 테스트 케이스 생성, 테스트 확장 및 자동 복구 기능을 통해 테스트를 간소화함으로써, 개발환경내에서 테스트에 실패한 결함 수정에만 개발을 집중할 수 있습니다.
  •    테스터(or QA)는
    • 테스트 실행에 대한 빠른 피드백을 받고, 가능한한 자동으로 많은 테스트 커버리지를 확보가 가능합니다.
    • 단순 반복적인 테스트 부분을 최소화하고, 좀더 복잡하고 다양한 시나리오를 가진 테스트 케이스 개발에 집중할 수 있습니다.

 

결국 소프트웨어가 폭발적인 성장을 하는 시기에는 AI와 강력하게 결합된 소프트웨어 테스트 방법 및 도구 등을 활용하는 것이 중요하다고 할 수 있으며, 여기서 기술한 방법은 하나의 예이며, 다양한 연구와 적용을 통해 제품이나 프로젝트 상황에 맞게 적용이 필요합니다.

[Reference]

  • PARASOFT C/C++(2023), White paper, “Guide for AI in Software Testing”
  • https://www.statista.com/statistics/627312/worldwide-developer-population/
  • Kishore Sugali (2021), Software Testing: Issues and Challenges of Artificial Intelligence & Machine Learning, IJAIA 2021
  • Dhaya Sindhu Battina (2019), Artificial Intelligence in Software Test Automation: A Systematic Literature Review, International Journal of Emerging Technologies, and Innovative Research
  • H, Hammand. A, Lafi. M (2019) The Impact of Artificial Intelligence on Software Testing