Développement

Programmation défensive avec WinDev

</Programmation défensive avec WinDev : principe et bonnes pratiques>

En tant que développeur expérimenté sur WinDev, je me suis souvent retrouvé face à des applications « trop confiantes » : procédures qui supposent que tout va bien, champs non contrôlés, fichiers absents, etc.

Résultat : des plantages, des erreurs incompréhensibles pour les utilisateurs et des heures perdues en maintenance.

👉 Pour éviter cela, la programmation défensive est une approche essentielle. Elle permet de limiter les risques en anticipant les erreurs.

🧠 Qu’est-ce que la programmation défensive ?

  • ✅ Vérifier les préconditions avant d’exécuter une action
  • ✅ Gérer explicitement les cas inattendus ou les erreurs
  • ✅ Limiter l’impact d’un bug en détectant tôt les anomalies
  • ✅ Fournir des messages d’erreur clairs et utiles

C’est partir du principe que « tout peut mal tourner » et prévoir des garde-fous dans le code.

🛠️ Fonctions utiles en WLangage

WinDev propose des fonctions spécifiques pour faciliter cette approche :

  • dbgAssertion
  • dbgVérifieEgalité
  • dbgVérifieDifférence
  • dbgVérifieNonNull
  • dbgVérifieNull
  • dbgVérifieVrai
  • dbgVérifieFaux
  • dbgActiveAssertion

📌 Exemples concrets

Fiche utilisateur

Contrôlez les champs obligatoires et incohérences. Par exemple :

  • ❌ Un âge à -5 doit bloquer l’enregistrement.

Arguments de procédure

Une procédure charge un objet via son ID :

  • ✅ Si l’ID est ≤ 0, on affiche un message pour éviter un comportement inattendu.

⚙️ Activation en test / production

Les assertions sont actives par défaut en mode test, et inactives en exécution compilée.

Mais vous pouvez les activer à la volée en utilisant dbgActiveAssertion pour faire du diagnostic ciblé même en production.

✅ Conclusion

Adopter la programmation défensive, c’est :

  • 💡 Anticiper les erreurs
  • 🔧 Améliorer la qualité du code
  • 👨‍💻 Réduire la maintenance
  • 🔐 Livrer des applications plus robustes

Une bonne habitude à prendre sur tous vos projets WinDev 😉