>  기사  >  웹 프론트엔드  >  초기 AI를 사용한 단위 테스트 생성

초기 AI를 사용한 단위 테스트 생성

Linda Hamilton
Linda Hamilton원래의
2024-10-20 18:32:30353검색

단위 테스트 생성 가속화 및 코드 품질 개선

최근에는 자동 단위 테스트 생성을 위해 설계된 AI 에이전트인 Early에 대해 자세히 알아볼 기회가 있었습니다. TypeScript 및 ExpressoTS Framework를 정기적으로 사용하는 사람으로서 저는 Early가 어떻게 작업 흐름을 간소화할 수 있는지 알고 싶었습니다. 저는 제가 개발 중인 @expressots/share라는 새로운 NPM 라이브러리에 구축된 vscode 확장을 테스트하기로 결정했습니다.

초기 인상

Early에서 가장 먼저 놀랐던 점은 기존 코드베이스에 대한 단위 테스트를 자동으로 생성하는 기능이었습니다. 처음부터 테스트를 작성하는 대신 생성된 테스트를 개선하고 코드의 견고성과 테스트 가능성을 향상시키는 데 집중할 수 있었습니다. 이러한 변화로 인해 개발 프로세스가 크게 가속화되었습니다. 제가 발견한 또 다른 흥미로운 점은 생성된 코드의 83%가 제가 아무런 조정도 하지 않았으며 즉시 작동하고 코드 적용 범위가 늘어났다는 것입니다. 시간을 많이 절약해 주세요.

시간 절약 및 보장 범위 확대

단 8.5시간 만에 다음을 수행했습니다.

  • 약 3,000줄의 코드에 대한 단위 테스트를 생성합니다.
  • 문제를 수정하고 코드 테스트 가능성을 높입니다.
  • 96번의 테스트로 전체 코드 커버리지 88%를 달성하세요.

이 모든 것을 하루 만에 이룰 수 있다는 사실이 놀라웠습니다. 단위 테스트의 이상적인 시나리오는 실제로 기능을 개발하는 동안 수행하는 것입니다. 이미 라이브러리가 있다는 사실을 알고 나서 그렇게 했기 때문에 코드를 테스트 가능하게 만들기 위해 몇 가지 조정이 필요했습니다.

긍정적인 결과

Edge Case 테스트의 자동 생성. 예를 들어 매개변수가 필요한 경우에도 빈 문자열과 관련된 시나리오에 대한 단위 테스트를 생성했습니다.

export function printSuccess(message: string, component: string): void {
  stdout.write(chalk.green(`${message}:`, chalk.bold(chalk.white(`[${component}] ✔️\n`))));
}

처음에는 이렇게 간단한 함수에서 빈 문자열에 대한 테스트를 만들지 않았습니다. 그러나 Early의 접근 방식은 방어적인 프로그래밍 관행을 장려하여 제가 간과했을 수도 있는 극단적인 경우를 처리하도록 했습니다.

잠재적인 문제 감지

생성된 테스트를 개선하는 동안 유형 불일치 문제가 발생했습니다.

문제: jest.fn()은 any를 반환하지만 process.exit는 반환하지 않아 TypeScript에서 유형 불일치가 발생합니다.
해결 방법: process.exit 서명과 일치하도록 모형을 수정하여 유형의 정확성을 보장하세요.
이 발견을 계기로 저는 더 나은 유형 안전성을 위해 코드를 조정하게 되었고 Early가 눈에 띄지 않을 수도 있는 미묘한 문제를 식별하는 데 어떻게 도움이 되는지 강조했습니다.

개선 분야

전반적으로 긍정적인 경험에도 불구하고, 해결된다면 Early의 유용성을 향상시킬 수 있는 몇 가지 문제에 직면했습니다.

  • 도서관 버전 호환성. 어떤 경우에는 더 이상 사용되지 않는 Jest 메서드를 사용하여 초기에 생성된 테스트입니다. 예를 들면 다음과 같습니다.

Jest 29.7 사용

expect(Compiler.loadConfig()).rejects.toThrowError("process.exit() was called with code 1");

//수정버전

export function printSuccess(message: string, component: string): void {
  stdout.write(chalk.green(`${message}:`, chalk.bold(chalk.white(`[${component}] ✔️\n`))));
}
  • 테스트 생성을 위한 사용자 정의 옵션 극단적인 경우에 대한 테스트를 생성하는 것이 유익했지만 일부 시나리오에서는 필요하지 않을 수도 있습니다.

관찰: 빈 문자열을 포함하여 가능한 모든 입력에 대해 테스트를 생성하는 것은 때로는 과도할 수 있습니다.

제안: 개발자가 필요에 따라 방어 프로그래밍 테스트를 선택할 수 있도록 테스트 생성 수준을 맞춤설정하는 옵션을 도입하세요.

  • VSCODE 확장의 사용자 인터페이스 향상 초기 도구와 다른 도구 사이를 탐색하면서 몇 가지 UI 제한 사항이 드러났습니다.

테스트 결과 가시성: 어떤 테스트가 통과했는지 실패했는지 확인하기 위해 Early와 Jest 사이를 전환해야 했습니다.

파일 트리 상태: 다른 애플리케이션에서 다시 전환하면 Early의 프로젝트 계층 구조가 무너져 폴더를 반복적으로 다시 열어야 합니다.
제안: Jest 구조를 반영하여 Early 내에서 테스트 결과를 표시하도록 UI를 개선하세요. 파일 트리의 상태를 유지하면 사용자 경험도 향상됩니다.

Unit Test Generation with Early AI

  • 모의 및 유형 안전 any를 반환하는 jest.fn() 문제는 보다 정확한 조롱이 필요함을 시사합니다.

관찰: 모의 객체에 어떤 유형을 사용하든 유형 불일치가 발생하고 잠재적으로 버그가 가려질 수 있습니다.
제안: 정확한 서명을 사용하여 모의 생성을 개선하여 유형 안전성을 높이고 수동 수정의 필요성을 줄입니다.

결론

전반적으로 Early에 대한 나의 경험은 매우 긍정적이었습니다. 이 도구는 단위 테스트 프로세스를 크게 가속화하여 처음부터 테스트를 작성하는 대신 테스트를 개선하는 데 집중할 수 있게 해주었습니다. 또한 극단적인 경우를 고려하고 코드의 견고성을 향상시키도록 격려했습니다.

개선할 영역은 비교적 사소하며 유용성과 사용자 정의를 향상시키는 데 중점을 둡니다. 이러한 문제를 해결하면 소프트웨어 개발에서 도구가 더욱 강력한 동맹이 될 것입니다.

훌륭한 작업을 수행한 초기 팀에 찬사를 보냅니다! 도구가 어떻게 발전할지 기대가 되며, 도구를 더욱 개선하는 데 도움이 되도록 계속 피드백을 제공해 드리겠습니다.

위 내용은 초기 AI를 사용한 단위 테스트 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.