Testes de Software com IA: Entre une couverture illusoire et une qualité réelle

DEV - 22/01
Une promesse de testicules générée automatiquement par IA est séduisante : couverture de code élevée em...

La promesse des tests est automatique pour IA : couverture du code élevée en quelques minutes, cent cas de test sans effort manuel. Les outils comme GitHub Copilot et ChatGPT fournissent des suites complètes de fonctions TypeScript avec des invites [1]. Cependant, des études récentes révèlent une divergence de préoccupation : la couverture jusqu'au niveau n'implique pas les testicules efficaces [2]. Ce texte exploré comme l'IA transforme les pratiques des tests, là où elles sont fausses, et c'est pourquoi les tests de mutation et les tests basés sur les propriétés sont essentiels pour valider la qualité réelle des testicules.

Geração Automatica de Testes: O Panorama Atual

Les LLM sont exceptionnellement bons pour répliquer les connaissances des testicules. Le code TypeScript, modèle comme GPT-4, et Claude produisent rapidement des cas d'entrées valides, invalides et de valeurs extrêmes évidentes [3]. Les expériences montrent des gains de productivité significatifs : le temps de création des cas de test réduit de 40 à 60 % et une augmentation cohérente de la couverture structurelle [4].

Considérez une fonction de calcul de décompte :

fonction d'exportation calculateDiscount(price: number, couponCode?: string): number { if (price <= 0) throw new Error('Le prix doit être positif'); laissez discountPercent = 0 ; si (couponCode === 'SAVE10') discountPercent = 10 ; sinon si (couponCode === 'SAVE20') discountPercent = 20 ; const remise = prix * (remisePercent / 100) ; prix de retour - remise ; }
Entrer en mode plein écran Quitter le mode plein écran

Un modèle d'IA instruit pour faire des tests est complet, typiquement produit :

importer { calculateDiscount } depuis './discount' ; décrire('calculateDiscount', () => { // Happy path - IA semper cobre bem it('appliquer 10% avec SAVE10', () => { expect(calculateDiscount(100, 'SAVE10')).toBe(90); }); it('appliquer 20% avec SAVE20', () => { attendre(calculateDiscount(100, 'SAVE20')).toBe(80); }); it('retorna preço original sem cupom', () => { expect(calculateDiscount(100)).toBe(100); }); // Cas particuliers - je trouve quelqu'un it('trata preço mínimo positivo', () => { expect(calculateDiscount(0.01, 'SAVE10')).toBeCloseTo(0.009); }); // Cas d'erreur - IA cobre erros óbvios it('lança erro para zero', () => { expect(() => calculateDiscount(0)).toThrow('Price must be positive'); }); calculateDiscount(-10)).toThrow('Le prix doit être positif' } });
Entrer en mode plein écran Quitter le mode plein écran

Cela est cohérent avec la littérature : la couverture des flux de princ...
[Courte citation de 8% de l'article original]

Loading...