Qualité du code WLangage généré par l’IA : impact des instructions précises

, ,
ia windev apprentissage

Introduction

Le WLangage, langage de développement de PC Soft utilisé avec WinDev, WebDev et WinDev Mobile, reste relativement marginal dans l’écosystème des langages dominants. En conséquence, la plupart des IA génératives n’ont pas été entraînées de manière significative sur ce langage. Cela se traduit par une qualité de code souvent très moyenne, voire incorrecte, lorsqu’on leur demande de générer du WLangage sans indications spécifiques.

Cependant, il est possible d’obtenir du code WLangage de qualité professionnelle via l’IA, à condition de fournir un contexte d’exécution et des conventions de codage précises.

Cet article propose un comparatif « avant / après », suivi d’une analyse des fichiers d’instruction qui permettent de structurer efficacement les réponses d’une IA pour du développement en WinDev 2025.

Tous les fichiers de cet article sont disponibles sur notre github : https://github.com/LG-IsiNeva/IA-Windev-2025

Les tests suivants ont été générés sur les derniers modèles d’IA et sans abonnement.


Comparatif : Sans instructions VS Avec instructions

Le prompt utilisé était : tu es un expert en développement Windev 2025, génère moi une procédure pour calculer la somme séquentielle de 1 à n. un seul paramètre : la borne supérieure.

Exemple 1 : Génération sans instruction

procédure Somme1aN(nFin est entier)

SI nFin <= 0 ALORS
    RETOURNE 0
FIN

n est entier8 = nFin

SI (n MOD 2) = 0 ALORS
    RETOURNE (n / 2) * (n + 1)
SINON
    RETOURNE ((n + 1) / 2) * n
FIN

Commentaires :

  • Type entier8 : inventé
  • Fonction RETOURNE : inventée

Exemple 2 : Génération avec instructions

// nSommeSequentielle
// Calcule la somme des entiers de 1 a n en utilisant la formule n*(n+1)/2
// Parametres d'entree
//   - nBorneSuperieure : borne superieure (entier)
// Type et explications du retour
//   - entier : somme des entiers de 1 a n (0 si n <= 0)
//
procédure nSommeSequentielle(nBorneSuperieure est un entier): entier
nResultat est un entier

SI nBorneSuperieure> 0 ALORS
	nResultat = (nBorneSuperieure * (nBorneSuperieure + 1)) / 2
SINON
	nResultat = 0
FIN

RENVOYER nResultat

Améliorations notables :

  • Respect des bonnes pratiques de documentation.
  • Code clair et documenté
  • code utilisable sans correction

Norme de codage WLangage 2025

Ce fichier définit une structure rigoureuse qui transforme une IA générique en assistant de développement WLangage efficace et fiable. Il impose un cadre de nommage, de documentation et de style que l’IA peut exploiter pour produire un code lisible, cohérent, et directement exploitable.

Points clés détaillés :

  • Typage strict et systématique : Tous les paramètres et retours de procédure doivent être typés. Cela garantit la clarté des intentions et facilite l’autocomplétion dans l’éditeur.
  • Convention de nommage normalisée par préfixe :
    • sNomClient pour les chaînes
    • nCompteur pour les entiers
    • bEstValide pour les booléens
    • oFacture pour les objets
    • Les classes sont préfixées par cl_ et les collections de procédures par col_
  • Nom explicite des procédures :
    • Reflète clairement le type de retour : nCalculerTotal, bValiderPaiement, sFormaterAdresse
    • Favorise des noms affirmatifs pour les booléens (EstValide() plutôt que NonValide())
  • Documentation systématique avec un en-tête clair pour chaque procédure :
    • Description de la finalité
    • Paramètres et types
    • Détail du type et du sens du retour
  • Lisibilité et maintenabilité :
    • Un seul point de sortie par procédure
    • Pas plus de deux niveaux d’imbrication (SI, SELON, etc.)
    • Utilisation de sous-procédures pour éviter les blocs imbriqués complexes
  • Pas de déclaration de variable en ligne : tout est déclaré au début de la procédure.

Objectif du fichier :

Imposer des standards solides pour garantir que le code généré soit à la fois robuste, homogène et facilement maintenable en équipe.

Contenu partiel du fichier

# Instructions pour un code WLangage Windev 2025
## Role
- tu es un développeur expérimenté sur Windev 2025 de PC Soft. Expert en POO et SQL
## instructions générales
- Ecriture de code Windev 2025
- Utilise en priorité la document officielle de Windev 2025 : https://doc.pcsoft.fr/
- N'invente pas d'instruction WLangage si elle n'existe pas dans la documentation
## Convention de nommage
- Toutes les variables sont préfixées selon leur type :
  - s pour chaîne : sNomClient
  - n pour entier : nCompteur
  - r pour réel : rPrixTTC
...

Norme de codage WLangage 2025- HFSQL

Ce second fichier pousse encore plus loin la spécialisation en s’adressant à un contexte d’utilisation très courant en environnement WinDev : le développement avec une base de données HFSQL. Il fournit à l’IA toutes les conventions nécessaires à la génération d’un code HFSQL fiable, sécurisé, et performant.

Points clés détaillés :

  • Utilisation des ordres HFSQL natifs exclusivement :
    • HExécuteRequête()
    • HAjoute(), HModifie(), HSupprime(), HLitPremier(), HLitRecherche()
    • Interdiction explicite d’utiliser SQL_Exec ou SQL.Col, trop bas niveau et générateurs d’erreurs
  • Structure de base de données complète à générer :
    • Tables avec toutes leurs rubriques, contraintes, index (nommés explicitement IDX_<Table>_<Colonne>)
    • Clés primaires avec auto-incrément
    • Clés étrangères nommées selon les colonnes référencées
  • Horodatage automatique :
    • Chaque table contient deux champs horodatés (cree_le, modifie_le) typés Horodatage
    • Ces champs sont renseignés automatiquement à l’insertion ou la modification
  • Nom des requêtes WDR :
    • Sélectives : rqsel_Clients
    • Insertion : rqins_Commandes
    • Mise à jour : rqupd_Produits
    • Suppression : rqdel_Stock
  • Libération mémoire systématique :
    • Utilisation de HAnnuleDéclaration() après le traitement d’une requête
  • Documentation SQL conforme à la documentation officielle :
    • Tous les ordres et instructions doivent être issus du site PC Soft, garantissant leur validité en environnement HFSQL.

Objectif du fichier :

Créer une base de données documentée, conforme aux standards HFSQL, en évitant toute approximation syntaxique. Il s’agit ici de s’assurer que le code généré soit directement exploitable dans des projets d’envergure avec une modélisation relationnelle solide.

Contenu partiel du fichier

# Instructions pour un code Windev 2025 utilisant HFSQL comme base de données
## Role
- tu es un développeur expérimenté sur Windev 2025 de PC Soft. Expert en POO et SQL

## instructions générales
- Ecriture de code Windev 2025 pour une base HFSQL
- Utilise les ordres sql définis dans https://doc.pcsoft.fr/fr-FR/?2034001&name=instructions_sql et https://doc.pcsoft.fr/fr-FR/?2034006&name=commandes_sql_disponibles_dans_une_requete_sql
- N'invente pas d'instruction WLangage ou SQL si elle n'existe pas dans la documentation

## convention de nommage
- Tables et rubriques : noms en PascalCase ou Snake_case selon la norme du projet, sans espaces ni caractères spéciaux.

Et avec une analyse WinDev existante ?

Une autre approche particulièrement puissante consiste à exploiter directement l’analyse existante d’un projet WinDev 2025. Cette analyse, générée en PDF via l’impression technique intégrée à l’EDI, contient toutes les métadonnées des fichiers de données, leurs rubriques, types, clés, index, et relations inter-tables.

Résultat

En fournissant ce PDF à l’IA, celle-ci est capable de :

  • Générer automatiquement les classes d’objets WLangage correspondant à chaque fichier de données, avec typage explicite, constructeurs et méthodes d’accès.
  • Produire les requêtes WDR HFSQL associées (sélection, insertion, mise à jour, suppression).
  • Appliquer les conventions de nommage et les standards internes tels que définis dans les fichiers d’instruction.

Cette approche permet de démarrer un projet à partir d’un existant documentaire sans avoir à redéfinir manuellement les structures, et garantit une continuité parfaite entre l’analyse métier et le code applicatif.

Exemple

Nom : rqsel_LignesParCommande (paramètre pIDCommande)

-- fichier .WDR (extrait) — sélection
SELECT
  LigneCommande.IDLigneCommande,
  LigneCommande.IDCommande,
  LigneCommande.Référence,
  LigneCommande.LibProd,
  LigneCommande.Quantité,
  LigneCommande.Remise,
  LigneCommande.TauxTVA,
  LigneCommande.PrixVente,
  LigneCommande.QuantitéLivrée
FROM LigneCommande
WHERE LigneCommande.IDCommande = {pIDCommande}

Générer une classe Windev

Le PDF de l’analyse WinDev contient toutes les métadonnées (tables, rubriques, types, clés, index, relations). En le fournissant à l’IA, on peut générer automatiquement des classes WLangage fidèles au modèle (typage, noms, clés)

// ========================= ENUMS / TYPES =========================

// Type du client (page 8)
eTypeClient est une Enumération 
	tcClient	= 0
	tcProspect	= 1
FIN
eTypeCommande est une Enumération
	tcoStandard	= 0
	tcoProforma	= 1
	tcoAchat	= 2
	tcoReappro	= 3
FIN
eEtatCommande est une Enumération
	ecBrouillon	= 0
	ecValidée	= 1
	ecFacturée	= 2
	ecLivrée	= 3
	ecAnnulée	= 4
FIN

// ========================= CLASSE COMMANDE =========================
// D'après "Commande" (pages 10–11)
CCommande est une Classe
	// --- Données
	IDCommande	est un entier sur 8 octets
	DateCommande	est une Date
	IDClient	est un entier sur 8 octets

	// Totaux seront recalculables via RecalculeTotaux()
	TotalHT		est un monétaire
	TotalTVA	est un monétaire
	TotalTTC	est un monétaire

	// Adresses & modes
	IDAdresseLivraison	est un entier sur 8 octets
	IDModeLivraison		est un entier sur 8 octets
	IDAdresseFacturation	est un entier sur 8 octets

	// Divers
	NuméroInterneCommande	est une chaîne
	Etat			est un eEtatCommande
	Observations		est une chaîne

	// Suivi & règlement
	SaisiPar		est une chaîne
	SaisiLe			est une Date
	IDModeRèglement		est un entier sur 8 octets
	DateFacturation		est une Date
	DateExigibilité		est une Date
	DélaiPaiement		est une chaîne
	Transporteur		est une chaîne
	FraisPort		est un monétaire
	NumPAQ			est un entier sur 4 octets
	Type			est un eTypeCommande
	LCR			est une chaîne
	Banque			est une chaîne
	IBAN			est une chaîne
	ModifiéPar		est une chaîne
	ModifiéLe		est une Date
	COD			est une chaîne

	// Composition
	Lignes			est un tableau de CLigneCommande

FIN

// Ajout d'une ligne de commande
PROCÉDURE AjouterLigne(l est un CLigneCommande)

l.IDCommande = IDCommande
TableauAjoute(Lignes, l)

// Suppression d'un ligne de commande
PROCÉDURE SupprimerLigneParId(nIdLigne est un entier sur 8 octets)
nCpt est un entier

POUR inCpt = 1 _À_ Lignes.Occurrence()
	SI Lignes[nCpt].IDLigneCommande = nIdLigne ALORS
		TableauSupprime(Lignes, nCpt)
		SORTIR
	FIN
FIN

// Recalcul des totaux
PROCÉDURE RecalculeTotaux()
TotalHT		= 0
TotalTVA	= 0

POUR TOUT l DE Lignes
    TotalHT += l.rTotalLigneHT()
    TotalTVA += l.rTotalLigneTVA()
FIN

TotalTTC = TotalHT + TotalTVA + FraisPort

Itérer les fichiers d’instruction IA (WinDev 2025 & HFSQL)

Objectif

Augmenter la qualité du code généré (lisibilité, conformité WinDev/HFSQL, testabilité) en faisant évoluer régulièrement les deux fichiers d’instruction via une boucle courte : proposer → tester → mesurer → publier.

Fichier “WLangage / WinDev 2025”

Ce que l’on améliore

  • Conventions de nommage (procédures, classes, membres, enumérations).
  • Squelettes standard (classes métier, services, UI si besoin).
  • Gestion des erreurs (retours booléens + codes/constantes d’erreur).
  • Compatibilité compilation (zéro avertissement bloquant).
  • Exemples (few-shot) : petits extraits “bon vs. mauvais” pour guider l’IA.

Actions concrètes à ajouter au fichier

  • Section “Patterns canoniques” (classe métier, méthodes calcul, helpers dates/monétaires).
  • Section “Anti-exemples” (pièges WinDev fréquents + correction).
  • Checklist WLangage (à coller en bas du fichier) :
    • Noms explicites, pas d’abréviations opaques
    • Types exacts (entier 8o, monétaire, réel 4o, etc.)
    • Méthodes pures pour calculs & pas d’IO cachées
    • Pas de “magie” numérique → utiliser les énumérations, les combinaisons
    • Commentaires d’en-tête normalisés (but, paramètres, retour, exceptions)

Exemple de few-shot

// BON : ENUMERATION au lieu d’entier "magique"
eEtatCommande est une ENUMERATION 
  ecBrouillon
  ecValidee
  ecFacturee
  ecLivree
  ecAnnulee
FIN

// MAUVAIS : usage d’un entier sans signification
// EtatCommande est un entier = 3

Fichier “HFSQL” :

Ce que l’on améliore

  • DAO génériques (CRUD + mapping FIC ↔ objets).
  • Requêtes paramétrées (WDR) + nomenclature.
  • Transactions (début/fin/annule) et stratégie de rollback.
  • Journalisation (SaisiPar/Le, ModifiéPar/Le).
  • Tolérance aux erreurs (HLitRecherche/HAjoute/HModifie/HSupprime : vérifs systématiques).

Actions concrètes à ajouter au fichier

  • Section “Contrats DAO” : signatures standard (Inserer/MettreAJour/Supprimer/Lire), valeurs de retour, exceptions.
  • Section “Transactions & intégrité” : règles (quand ouvrir/fermer, comment réagir en cas d’erreur multi-tables).
  • Checklist HFSQL :
    • Aucune concaténation SQL brute (toujours paramétrée)
    • Vérifier HAjoute/HModifie + lire HErreur() en cas d’échec
    • HExécuteRequête + HAnnuleDéclaration systématiques
    • Indiquer clés et index attendus (lecture par ID → indexé)
    • Encadrer les opérations multi-DAO par transaction

Exemple de few-shot

// BON : requête paramétrée + vérifs retour
SI HExécuteRequête(rqsel_ParId, hRequêteDéfaut, nId) = Vrai ALORS
  POUR TOUT rqsel_ParId 
     ...
  FIN
FIN
HAnnuleDéclaration(rqsel_ParId)

// MAUVAIS : pas de test et absence de HAnnuleDéclaration
HExécuteRequête(rqsel_ParId, hRequêteDéfaut, nId)
POUR TOUT rqsel_ParId 
   ... 
FIN

Conclusion

Chez IsiNeva, où les projets WinDev intègrent souvent des architectures complètes autour de HFSQL, pouvoir s’appuyer sur une IA qui génère un code conforme aux standards internes représente un gain de temps considérable.

En fournissant des fichiers d’instructions détaillés, on transforme une IA généraliste en assistant technique spécialisé, capable de produire du code fiable, lisible, documenté, et directement exploitable dans un environnement WinDev 2025.

C’est une démarche que nous recommandons vivement pour les équipes techniques qui souhaitent intégrer efficacement l’IA dans leur flux de développement.


Liens externes