Quand l'IA générative prend les commandes

Retour d'expérience sur la génération autonome de code 

Introduction : le pari de l'autonomie totale

Et si on laissait une IA générative développer du code de production en totale autonomie ? C'est le défi que nous avons relevé récemment sur un projet d'entreprise complexe. Pas de supervision constante, pas de micro-management : juste des règles claires et une confiance totale accordée à l'intelligence artificielle.
Le résultat ? Une expérience révélatrice sur l'état actuel de l'IA générative et ses capacités réelles en développement.

Prérequis : qui est Cline ?

Cline est une IA générative spécialisée dans le développement logiciel, intégrée à VS Code. Contrairement aux assistants de code classiques, Cline peut exécuter des commandes, créer des fichiers, lancer des tests et naviguer dans un projet de manière autonome. Elle fonctionne par configuration de règles personnalisées (fichiers .clinerules) qui définissent les contraintes architecturales, les bonnes pratiques de développement et les workflows à respecter.
Cette approche permet une génération de code cohérente et conforme aux standards d'entreprise.

Pour en savoir plus, vous pouvez consulter les articles suivants :

Ainsi que le livre blanc :

Le contexte : un projet d'entreprise aux contraintes strictes

Le projet en question était loin d'être un simple "Hello World". Il s'agissait de développer une nouvelle page dans une application Angular respectant :

  • Une architecture hexagonale stricte avec séparation claire des responsabilités
  • L'utilisation exclusive d'une bibliothèque de composants propriétaire (Design System)
  • Une bonne couverture de tests pertinents (unitaires et composants)
  • Des conventions de nommage et bonnes pratiques spécifiques
    Ces contraintes ne sont pas anodines. Elles reflètent la réalité des projets d'entreprise où la qualité, la maintenabilité et la cohérence architecturale sont primordiales.

L'expérience : configurer l'IA pour l'autonomie

La configuration des règles

Plutôt que de donner des instructions au cas par cas, nous avons configuré l'IA (Cline) avec un ensemble de règles détaillées stockées dans des fichiers .clinerules :

Règles architecturales (default-rules.md)

  • Architecture hexagonale obligatoire
  • Structure par bounded contexts
  • Domain : reflet de la logique métier
  • Primary : composants UI avec séparation HTML/TS
  • Secondary : implémentation des repositories
Règles de développement imposées à Cline
Règles de développement imposées à Cline

Workflow de génération (generate.md)

  • Créer le code métier
  • Ajouter les tests nécessaires
  • Développer l'UI
Workflow définissant les différentes étapes pour la génération de code par Cline
Workflow définissant les différentes étapes pour la génération de code par Cline

L'autonomie accordée

Une fois ces règles définies, nous avons donné carte blanche à l'IA pour :

  • Interpréter les besoins fonctionnels
  • Concevoir l'architecture technique
  • Générer tout le code nécessaire
  • Créer les tests complets
  • Respecter les conventions d'entreprise
Prompt utilisant le workflow et le lien d’une maquette Figma
Prompt utilisant le workflow et le lien d’une maquette Figma

La génération a été entièrement automatisée à partir d’une maquette Figma, sans supervision humaine.

Les résultats : au-delà des attentes

Code généré automatiquement

L'IA a produit un système de feedback complet

Arborescence de fichiers générés par Cline
Arborescence de fichiers générés par Cline

Couche Domain (logique métier)

export class FeedbackRating {
  private constructor(private readonly _value: number) {}
  
  static of(value: number): FeedbackRating {
    if (value < 1 || value > 5) {
      throw new Error('Rating must be between 1 and 5');
    }
    return new FeedbackRating(value);
  }
}

Couche Secondary (adapteurs)

export class RestFeedbackRepository implements FeedbackRepository { 
  async save(feedback: RestFeedbackToCreate): Promise<void> {
    // Appel API
  }
}

Couche Primary (interface utilisateur)

@Component({
  selector: 'app-feedback-page',
  templateUrl: './feedback-page.component.html',
  imports: [ButtonComponent, TextAreaComponent], // Issus de la librairie de composants
})
export class FeedbackPageComponent {
  private feedbackRepository = inject(FEEDBACK_REPOSITORY);
  // Code du composant
}

Qualité du code

Les métriques parlent d'elles-mêmes :

  • 100% de couverture de tests (unitaires + composants)
  • Architecture hexagonale respectée à la lettre
  • Séparation des responsabilités stricte
  • Utilisation exclusive de la bibliothèque de composants
  • Conventions de nommage appliquées
  • Injection de dépendances correctement implémentée

Tests automatisés complets

Tests unitaires (logique métier)

describe('FeedbackRating', () => {
  it('should create valid rating', () => {
    const rating = FeedbackRating.of(5);
    expect(rating.value).toBe(5);
  });

  it('should throw error for invalid rating', () => {
    expect(() => FeedbackRating.of(6)).toThrow();
  });
});
Résultat des tests unitaires
Résultat des tests unitaires

Tests composants (interface utilisateur)

it('should submit feedback with rating and comment', () => {
  cy.get('[data-testid="rating-5"]').click();
  cy.get('[data-testid="comment-input"]').type('Great service');
  cy.get('[data-testid="submit-button"]').click();
  cy.url().should('eq', Cypress.config().baseUrl + '/');
});
Résultat des tests de composant
Résultat des tests de composant

Les apprentissages : ce que révèle cette expérience

L'IA peut respecter des contraintes complexes

Contrairement aux idées reçues, l'IA générative peut parfaitement :

  • Suivre des architectures logicielles sophistiquées
  • Respecter des conventions d'entreprise strictes
  • Maintenir la cohérence sur l'ensemble d'un projet

La configuration est la clef du succès

L'autonomie ne signifie pas l'anarchie. La qualité du résultat dépend directement de :

  • La précision des règles définies en amont
  • La structuration du workflow de développement
  • La clarté des contraintes techniques et fonctionnelles

L'IA excelle dans l'application systématique

Là où un développeur humain pourrait parfois "oublier" une convention ou prendre des raccourcis, l'IA applique systématiquement :

  • Les patterns architecturaux
  • Les conventions de nommage
  • Les bonnes pratiques de test
  • Les règles de qualité code

La reproductibilité est un atout majeur

Une fois configurée, l'IA peut reproduire le même niveau de qualité sur :

  • Différentes fonctionnalités du même projet
  • D'autres projets avec des contraintes similaires
  • Des équipes différentes avec les mêmes standards

Limites et perspectives

Les aspects qui nécessitent encore une attention particulière :

  • La définition initiale des règles métier, qui requiert l’intervention d’experts humains afin de garantir leur pertinence et leur applicabilité dans le contexte opérationnel.
  • La validation fonctionnelle des besoins métier, indispensable pour s’assurer que les solutions mises en œuvre répondent fidèlement aux attentes des utilisateurs finaux.
  • Les décisions architecturales complexes, qui impliquent une analyse approfondie et une capacité à anticiper les impacts à long terme sur la maintenabilité, la performance et l’évolutivité du système.
  • La gestion des cas limites ou non anticipés, souvent absents des scénarios standards, et qui exigent une vigilance particulière pour éviter des comportements imprévus en production.

Conclusion : l'IA générative, un partenaire de développement mature

Cette expérience démontre que l'IA générative a atteint un niveau de maturité permettant de lui confier la génération autonome de code de production, sous réserve d'un cadrage approprié.
Les implications sont importantes :

  • Pour les développeurs : L'IA devient un multiplicateur de productivité capable de gérer les tâches répétitives et l'application de standards
  • Pour les entreprises : La possibilité d'automatiser la génération de code respectant leurs contraintes spécifiques
  • Pour l'industrie : Une évolution vers des rôles de développeurs plus axés sur l'architecture et la définition de règles que sur l'implémentation
    L'avenir du développement logiciel ne sera probablement pas "Humain vs IA" mais plutôt "Humain + IA", où chacun excelle dans son domaine de prédilection.

Et vous, êtes-vous prêts à faire confiance à l'IA pour votre prochain projet ?