제퍼넷 로고

애자일을 위한 테스트 주문. 검증의 혁신

시간

CI(연속 통합) 흐름에 대한 회귀 테스트를 주문하여 코드 커밋과 실패에 대한 피드백 사이의 시간을 최소화할 수 있습니까? Paul Cunningham(Senior VP/GM, Verification at Cadence), Raúl Camposano(Silicon Catalyst, 기업가, 전 Synopsys CTO, 현재 Silvaco CTO)와 저는 연구 아이디어 시리즈를 계속합니다. 언제나처럼 피드백 환영합니다.

혁신

이번 달의 선택은 지속적인 통합에서 자동 테스트 사례 우선 순위 지정 및 선택을 위한 강화 학습. 이 논문은 2017년 국제 소프트웨어 테스트 및 분석 심포지엄에 발표되었으며 현재까지 96회 인용되었습니다. 저자는 노르웨이의 Simula Research Lab과 University of Stavanger 출신입니다.

회귀 세트에서 테스트를 효율적으로 정렬하면 CI 주기 시간에 의미 있는 영향을 미칠 수 있습니다. 이 메서드는 합리적으로 정렬된 테스트의 시퀀스를 잘라 실행 시간을 더 줄입니다. 이것은 학습을 위한 자연스러운 응용 프로그램이지만 교육 또는 런타임에서 절약된 시간보다 투자가 더 중요할 수 없습니다. 저자는 강화 학습을 통한 적응형 접근 방식이 이상적인 절충안이라고 주장합니다. 교육은 즉시 진행되며 사전 지식/모델이 필요하지 않으며 사용 60일 이내에 다른 방법을 능가합니다.

연속적인 CI 통과를 통해 누적된 테스트당 이진 통과/실패, 실행 기간 및 동일한 유형의 과거 데이터에 대한 순위는 매우 간단합니다. 이 방법은 이 정보를 적용하여 다양한 유형의 보상을 정의하고 테이블 또는 신경망 모델을 통해 우선 순위를 지정합니다. 이 백서는 여러 요인에 대한 효과를 판단하기 위해 몇 가지 비교를 제시합니다.

바울의 견해

이것은 소프트웨어 디자인 커뮤니티에서 널리 논의되지만 하드웨어 디자인 커뮤니티에서 유사한 수준의 관심이 부족한 주제의 또 다른 예인 훌륭한 종이 선택이었습니다. 주어진 RTL 코드 체크인 세트에 대해 어떤 테스트를 실행하는 것이 가장 좋으며 우선 순위는 무엇입니까?

저자는 논문을 매우 잘 구성했으며 쉽게 읽을 수 있습니다. 실행할 테스트와 우선 순위를 결정하기 위해 신경망을 훈련시키는 방법을 설명합니다. 교육은 이전 RTL 코드 체크인의 테스트 통과/실패 데이터만 사용합니다. 적용 범위나 체크인할 때마다 어떤 RTL 코드가 변경되었는지는 확인하지 않습니다. 따라서 저자의 방법은 매우 가볍고 빠르지만 다소 원시적입니다. 그들은 신경망의 성능을 테이블 조회 기반 "tableau" 순위 방법 및 역사적으로 가장 자주 실패한 테스트의 우선 순위를 지정하는 몇 가지 기본 정렬/가중 방법과 비교합니다. 신경망은 더 잘하지만 많이는 아닙니다. RTL 코드 체크인에 대한 간단한 diff 데이터가 모델에 포함되면 어떤 일이 발생하는지 정말 흥미로울 것입니다.

그런데 테스트 사례 우선 순위 지정에 관심이 있는 경우 이 백서의 관련 작업 섹션에는 주제에 대한 다른 작업의 훌륭한 요약이 포함되어 있습니다. 조금씩 재미있게 읽고 있어요.

라울의 견해

이것은 비교적 짧고 독립적인 논문으로 읽는 즐거움이 있습니다. 또한 300월 블로그(딥 러닝에 기반한 오류 위치 파악)에서 이미 살펴본 ML을 사용하여 소프트웨어를 테스트하는 세계에 연결합니다. 해결하는 문제는 CI(연속 통합) 소프트웨어 개발에서 테스트 사례 선택 및 우선 순위 지정입니다. 목표는 실패하고 버그를 노출할 가능성이 있는 테스트를 선택하고 우선 순위를 지정하고 이러한 테스트를 실행하는 데 걸리는 시간을 최소화하는 것입니다. 컨텍스트: 그들이 목표로 삼고 있는 SW 개발의 종류는 수만에서 수백만 개의 "평결"(코드 조각의 통과 또는 실패)을 산출하는 수백에서 수천 개의 테스트 사례를 사용합니다. 고려되는 CI 주기의 수는 약 16입니다. 즉, 두 가지 예에서와 같이 통합이 매일 발생하는 경우 XNUMX년이며, 한 경우에는 XNUMX일의 시간당 통합을 나타냅니다.

사용된 방법인 RETECS(강화 테스트 케이스 선택)는 강화 학습(RL)입니다. RL에서 "에이전트는 상태를 인식하여 환경과 상호 작용합니다. (이전 테스트 및 결과) 그리고 적절한 행동을 선택 (현재 CI에 대한 반환 테스트), 학습된 정책에서 또는 가능한 작업의 무작위 탐색을 통해. 결과적으로 에이전트는 이전 작업의 성능을 평가하는 보상 측면에서 피드백을 받습니다.". 그들은 테이블과 에이전트의 인공 신경망(ANN) 구현을 탐색하고 3가지 보상 기능을 고려합니다. 전체 실패 수, 개별 테스트 사례 실패 및 순위 테스트 사례(분석에서 테스트 사례를 실행하는 순서, 실패한 테스트 사례는 조기에 실행해야 함)입니다.

분석은 이것을 18개의 산업 데이터 세트에 적용하여 XNUMX개의 결과 테이블을 생성합니다. 그들은 "감지된 결함의 정규화된 평균 비율"(NAPFD)을 통해 결과를 측정합니다. 순위 테스트 사례가 있는 tableau와 개별 테스트 사례 실패가 있는 ANN은 다음과 같은 결론을 내립니다. "적절한 조합". 기존 방법(정렬, 가중 및 임의)과의 두 번째 비교는 RETECS가 약 60 통합 주기 후에 잘 비교됨을 보여줍니다.

결과는 그다지 인상적이지 않은 것 같습니다. 데이터 세트 중 하나(GSDTSR)의 경우 개선이 없으며 RETECS가 학습함에 따라 결과가 약간 저하될 수도 있습니다. 기존 방법과의 비교는 9건 중 XNUMX건에서만 상당한 개선을 보였습니다. 그러나이 방법은 가볍고 모델이 없으며 언어에 구애받지 않으며 소스 코드 액세스가 필요하지 않습니다. ㅏ "미래 연구를 위한 유망한 길”, 민첩한 하드웨어 설계에 적용되는 것을 보는 것이 흥미로울 것입니다. 이 모든 것이 잘 설명되고 독립적이며 읽기 좋은 종이에 있습니다.

내 견해

약한 결과에도 불구하고 아이디어 때문에 이 논문이 마음에 든다고 고백합니다. 아마도 보상 함수에 대한 입력에 약간의 확장이 있으면 메서드가 더 결정적인 결과를 표시할 수 있습니다.

다음을 통해이 게시물 공유 :

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?