Having a high quality software is essential in software engineering, which requires robust validation and verification processes during testing activities. Manual testing, while effective, can be time consuming and costly, leading to an increased demand for automated methods. Recent advancements in Large Language Models (LLMs) have significantly influenced software engineering, particularly in areas like requirements analysis, test automation, and debugging. This paper explores an agent-oriented approach to automated software testing, using LLMs to reduce human intervention and enhance testing efficiency. The proposed framework integrates LLMs to generate unit tests, visualize call graphs, and automate test execution and reporting. Evaluations across multiple applications in Python and Java demonstrate the system's high test coverage and efficient operation. This research underscores the potential of LLM-powered agents to streamline software testing workflows while addressing challenges in scalability and accuracy.
- 논문 ID: 2501.00217
- 제목: The Potential of LLMs in Automating Software Testing: From Generation to Reporting
- 저자: Betim Sherifi, Khaled Slhoub, Fitzroy Nembhard (플로리다 공과대학교)
- 분류: cs.SE (소프트웨어 공학), cs.AI (인공지능)
- 발표 시간: 2024년 12월 31일
- 논문 링크: https://arxiv.org/abs/2501.00217
소프트웨어 공학에서 고품질 소프트웨어 개발을 위해서는 강건한 검증 및 확인 프로세스가 필요하다. 수동 테스팅이 효과적이지만 시간이 많이 걸리고 비용이 많이 들기 때문에 자동화 방법에 대한 수요가 증가하고 있다. 대규모 언어 모델(LLM)의 최근 발전은 소프트웨어 공학, 특히 요구사항 분석, 테스트 자동화 및 디버깅 분야에 상당한 영향을 미쳤다. 본 논문은 LLM을 활용하여 인적 개입을 줄이고 테스트 효율성을 높이는 에이전트 지향 소프트웨어 테스팅 자동화 방법을 탐구한다. 제안된 프레임워크는 LLM을 통합하여 단위 테스트를 생성하고, 호출 그래프를 시각화하며, 테스트 실행 및 보고를 자동화한다. Python과 Java의 여러 애플리케이션에 대한 평가 결과, 본 시스템은 높은 테스트 커버리지와 효율적인 실행 능력을 보여준다.
- 핵심 문제: 전통적인 소프트웨어 테스팅 방법은 효율성 저하, 높은 비용, 과도한 인적 개입의 문제가 있다
- 실제 요구사항: 소프트웨어 품질 보증을 위해서는 포괄적인 검증 및 확인 프로세스가 필요하지만, 수동 테스팅은 현대 소프트웨어 개발의 효율성 요구사항을 충족하기 어렵다
- 소프트웨어 테스팅은 소프트웨어 공학 교육에서 가장 중요한 분야 중 하나로 인식되고 있다
- 회귀 테스팅 등의 수동 테스팅 방법은 특히 시간이 많이 걸리고 비용이 많이 든다
- 소프트웨어 제품이 예상대로 실행되고 품질 표준을 충족하는지 확인하는 것은 소프트웨어 공학에 필수적이다
- 수동 테스팅: 효과적이지만 시간이 많이 걸리고 비용이 많이 든다
- 전통적인 자동화 테스팅: 수동 방법을 완전히 대체할 수 없으며, GUI 테스팅 등의 시나리오에서는 여전히 인적 개입이 필요하다
- 전통적인 에이전트 기반 소프트웨어 테스팅(ABST): 지능형 테스트 케이스 생성 능력이 부족하다
LLM의 강력한 능력을 활용하고 다중 에이전트 시스템과 결합하여, 테스트 케이스를 동적으로 생성하고 인적 입력을 크게 줄이며 테스트 케이스 생성 및 실행 시간을 최소화할 수 있는 지능형 테스팅 프레임워크를 구축한다.
- LLM 기반 다중 에이전트 소프트웨어 테스팅 프레임워크 제안: 테스트 생성부터 보고까지의 엔드-투-엔드 자동화 실현
- 4계층 아키텍처 시스템 설계: 오디오 웹 클라이언트, 소프트웨어 테스팅 에이전트, LLM 및 개발 환경 포함
- 동적 테스트 케이스 생성 구현: LLM을 활용한 맞춤형 단위 테스트 및 테스트 근거 자동 생성
- 시각화 기능 통합: 애플리케이션 상호작용을 보여주는 DOT 그래프 형식의 호출 그래프 자동 생성
- 시스템 유효성 검증: Python 및 Java 프로젝트에서 높은 테스트 커버리지(평균 93.45%-97.71%) 달성
입력: 사용자가 음성 또는 텍스트로 제공하는 테스팅 요청(프로젝트 이름, 하위 폴더, 프로그래밍 언어 등 정보 포함)
출력: 테스트 결과, 커버리지 분석, 테스트 근거 및 호출 그래프를 포함한 종합 PDF 보고서
제약사항: Python 및 Java 프로젝트 지원, 단위 테스트 수준에 초점
시스템은 4개의 주요 구성 요소로 구성된다:
- 오디오 웹 클라이언트: 사용자 입력(음성 명령 또는 텍스트)을 캡처하고 HTTP GET 요청을 통해 테스팅 워크플로우 시작
- 소프트웨어 테스팅 에이전트: 시스템의 핵심 구성 요소로, 각 구성 요소 간의 상호작용을 조율하며 테스트 스크립트 생성, 실행 및 보고서 작성의 추상화 계층 역할
- 대규모 언어 모델(LLM): 엔티티 추출, 테스트 생성 및 DOT 그래프 생성 작업 수행
- 개발 환경: 프로젝트 코드 접근 제공, 생성된 테스트 케이스 실행 및 결과 표시
- 초기화: 클라이언트가 음성 명령을 테스트 생성기 API로 전송
- 엔티티 추출: LLM이 사용자 프롬프트에서 프로젝트 이름, 하위 폴더 및 프로그래밍 언어 추출
- 파일 위치 지정: FileLocator 모듈이 지정된 프로젝트 폴더를 찾고 파일 내용 추출
- 테스트 생성: LLM(Gemini 사용)이 단위 테스트 및 해당 근거 생성
- 그래프 생성: LLM이 호출 그래프 시각화를 위한 DOT 그래프 문자열 생성
- 실행 및 보고: 테스트 실행기가 테스트를 실행하고, PDF 보고서 생성기가 결과, 커버리지 및 호출 그래프를 포함한 종합 보고서 작성
- 지능형 엔티티 추출: LLM을 활용한 자연어 지시사항에서 핵심 테스팅 매개변수 자동 추출
- 동적 테스트 생성: 코드 분석을 기반으로 기본 사용 사례 및 엣지 케이스를 포함한 테스트 스크립트 자동 생성
- 근거 생성: 각 테스트 케이스에 대한 상세한 테스팅 근거 및 커버리지 시나리오 설명 제공
- 통합 시각화: 코드베이스 상호작용 관계를 이해하는 데 도움이 되는 호출 그래프 자동 생성
- 엔드-투-엔드 자동화: 사용자 입력부터 최종 보고서까지의 완전 자동화 프로세스
다양한 복잡도의 4개 애플리케이션 사용:
Python 프로젝트:
- Experiment: 기본 계산기 기능(47줄 코드)
- Cinema: 영화관 관리 시스템(183줄 코드)
Java 프로젝트:
- StudentAverage: 학생 성적 계산(114줄 코드)
- LibrarySystem: 도서관 관리 시스템(269줄 코드)
- 실행 성공률: 모든 단계(테스트 생성, 실행, PDF 보고서 생성)를 완료한 실행의 비율
- 테스트 커버리지: 생성된 테스트 케이스가 커버하는 코드의 백분율
- 실행 시간: 각 작업 단계의 소요 시간 분석
- 언어 비교: Python 대 Java 프로젝트의 성능 차이
- LLM 모델: 주로 Google Gemini 사용, 비교 실험에서 ChatGPT 사용
- 테스트 횟수: Python 프로젝트 20회 실행, Java 프로젝트 24회 실행
- 입력 형식: 다양한 자연어 프롬프트 형식 테스트
- Python 프로젝트: 20회 실행 모두 성공(100% 성공률)
- Java 프로젝트: 24회 실행 중 3회 실패(87.5% 성공률)
- 실패 원인: 주로 모호한 프롬프트 및 생성된 테스트 스크립트 컴파일 오류로 인함
- 평균 총 실행 시간: 83.5초
- 테스트 생성 시간: 62.8초(최대 비중)
- 폴더 위치 지정: 9.7초
- DOT 그래프 생성: 5.4초
- 테스트 실행: 3.2초
| 지표 | Java | Python |
|---|
| 평균 총 실행 시간 | 86.7초 | 80초 |
| 테스트 생성 시간 | 62.4초 | 63.3초 |
| 테스트 실행 시간 | 5.44초 | 0.87초 |
| 평균 테스트 커버리지 | 97.71% | 93.45% |
| 프로젝트 | 언어 | 코드 줄 수 | 총 시간 | 테스트 생성 | 테스트 실행 | 커버리지 |
|---|
| LibrarySystem | Java | 269 | 119.06초 | 92.54초 | 5.39초 | 94.67% |
| StudentManager | Java | 114 | 62.55초 | 39.79초 | 5.48초 | 100.00% |
| Cinema | Python | 183 | 110.13초 | 92.43초 | 0.79초 | 88.30% |
| Experiment | Python | 47 | 49.78초 | 34.17초 | 0.96초 | 98.60% |
ChatGPT 대 Gemini (LibrarySystem 프로젝트):
- ChatGPT 생성 시간: ~180초(Gemini의 약 2배)
- ChatGPT 테스트 커버리지: 98%
- 주의: ChatGPT 웹 애플리케이션 사용(API 아님)이 생성 시간에 영향을 미칠 수 있음
Cinema 프로젝트 - rent_movie 함수:
- 기본 사용 사례: "이용 가능한 영화를 기존 회원에게 대여하는 테스트"
- 엣지 케이스: "존재하지 않는 영화 대여, 존재하지 않는 회원에게 영화 대여, 이미 대여된 영화 대여 테스트"
Library 프로젝트 - getTitle 함수:
- 기본 사용 사례: "객체 생성 후 도서 제목 검색 테스트"
- 엣지 케이스: 해당 없음
- 발전 과정: 1999년부터 주목받기 시작하여 지난 10년간 상당한 성장 달성
- 응용 중점: 주로 시스템 수준 테스팅에 중점, Java가 주요 대상 언어
- 대표 연구:
- 웹 시스템 자동화 테스팅 프레임워크(다중 에이전트 협력)
- 산업용 커피 머신 테스팅(퍼지 논리 우선순위 지정)
- 산업 응용 조사: 48%의 실무자가 이미 LLM을 테스팅 활동에 통합
- 응용 분야: 요구사항 분석, 테스트 계획 개발, 테스트 자동화
- 일반적인 도구: ChatGPT, GitHub Copilot
- 연구 동향: 102개 관련 논문 분석 결과 LLM이 테스트 케이스 생성, 어설션 작성 등에서 상당한 가치를 보유
- 높은 성공률: LLM 기반 에이전트는 소프트웨어 테스팅 자동화에서 우수한 성능을 보이며, Python 프로젝트에서 100% 성공률 달성
- 높은 커버리지: 평균 테스트 커버리지가 93% 이상으로, 생성된 테스트 케이스의 효과성을 입증
- 효율성 향상: 인적 개입을 크게 줄이고 테스트 생성부터 보고까지의 엔드-투-엔드 자동화 실현
- 언어 적응성: 프레임워크가 Python과 Java 두 가지 주류 프로그래밍 언어를 성공적으로 지원
- Java 프로젝트 안정성: Java 실행 중 상대적으로 높은 실패율로, 자연어 처리 및 구문 정확성 개선 필요
- 테스팅 범위 제한: 현재는 단위 테스팅에만 초점을 맞추고 있으며, 통합 테스팅 및 시스템 수준 테스팅 부족
- 시각화 기능: 호출 그래프는 유용하지만 열지도 커버리지 등 고급 기능 부족
- 입력 의존성: 프롬프트 품질에 민감하며, 모호한 프롬프트는 실패를 초래할 수 있음
- 테스팅 유형 확장: 통합 테스팅 및 시스템 수준 테스팅 지원 도입
- 언어 지원 강화: 더 많은 프로그래밍 언어로 확장
- 시각화 개선: 결함 경향성 열지도 커버리지 추가
- 요구사항 통합: 요구사항 명세 문서를 프롬프트 입력으로 활용하여 정확성 향상
- 오류 처리: 모호한 프롬프트에 대한 처리 개선 및 오류 복구 메커니즘
- 높은 혁신성: LLM을 다중 에이전트 아키텍처와 결합하여 엔드-투-엔드 소프트웨어 테스팅 자동화에 처음으로 체계적으로 적용
- 높은 실용 가치: 소프트웨어 테스팅 분야의 실제 문제를 해결하며 강한 공학 응용 가치 보유
- 충분한 실험: 언어 간, 다중 프로젝트의 포괄적인 평가로 결과의 설득력 확보
- 명확한 아키텍처: 상위 및 하위 계층 아키텍처 설계가 합리적이며 모듈화 수준이 높아 확장 및 유지보수 용이
- 테스팅 범위 제한: 단위 테스팅만 지원하여 완전한 소프트웨어 테스팅 요구사항을 충족할 수 없음
- 오류 분석 부족: Java 프로젝트 실패 원인에 대한 심층 분석 제한
- 벤치마크 비교 부재: 기존 자동화 테스팅 도구와의 상세한 비교 부족
- 확장성 검증 미흡: 대규모 복잡한 프로젝트에서 시스템의 확장성 검증 미실시
- 학술적 기여: LLM의 소프트웨어 공학 분야 응용에 새로운 연구 방향 제시
- 실용 가치: 소프트웨어 개발 프로세스에 직접 적용 가능하며 테스팅 효율성 향상
- 기술 확산: LLM의 자동화 테스팅 분야 거대한 잠재력 입증
- 재현성: 아키텍처 설명이 상세하여 다른 연구자의 재현 및 개선 용이
- 중소 규모 프로젝트: 특히 코드 규모가 수백 줄 이내인 프로젝트에 적합
- 단위 테스팅 자동화: 단위 테스팅의 인적 작성 작업을 크게 줄일 수 있음
- 빠른 프로토타입 검증: 테스트 케이스를 빠르게 생성해야 하는 시나리오에 적용 가능
- 교육 및 훈련: 소프트웨어 테스팅 교육 및 훈련 시나리오에 활용 가능
논문은 전통적인 ABST 방법, 소프트웨어 테스팅에서의 LLM 응용, 소프트웨어 테스팅 기초 이론 등 핵심 분야를 포함한 13개의 중요 참고문헌을 인용하여 연구에 견고한 이론적 기초를 제공한다.
종합 평가: 본 논문은 소프트웨어 공학과 인공지능 교차 분야에서 중요한 가치를 지닌 연구 논문이다. 일부 한계가 있지만, 혁신적인 방법론과 실용적인 결과는 LLM의 소프트웨어 테스팅 자동화 분야 응용에 새로운 방향을 개척했으며, 양호한 학술 가치와 실용적 전망을 보유하고 있다.