SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
Refactoring 
4D Summit Europe 2013
4D Summit Europe 2013 
• Paris 
Bruno LEGAY 
A&C Consulting 
Responsable Bureau d’Etudes
Gérer la complexité 
• le code complexe est nuisible 
• le code devrait être 
• clair et simple 
• facile à lire 
• évident 
• bien organisé 
• robuste 
• flexible 
4D Summit Europe 2013 
• Paris
Code propre ? 
• nommage variable / champ / méthode / fonction 
• convention nommage 
• locale vs globale, paramètre vs globale, pointeur var locale 
• commentaires 
• constantes 
• méthodes courtes vs méthodes longues fortes imbrication 
• recopie de paramètres 
• couplage fort / faible 
• design modulaire, polymorphisme, encapsulation, etc... 
4D Summit Europe 2013 
• Paris
Code simple ? 
• “Everyone knows that debugging is twice as hard as 
writing a program in the first place. So if you’re as clever 
as you can be when you write it, how will you ever debug 
it ?” 
The Elements of Programming Style (1978) 
4D Summit Europe 2013 
• Paris 
Brian W. Kernighan and P. J. Plauger
Syndrome demoscene 
• hackers qui font des tours de force en programmation bas 
niveau et qui poussent les limites du matériel pour produire 
des démos multimédia impressionnantes 
4D Summit Europe 2013 
• Paris
• one-liner 
4D Summit Europe 2013 
• Paris
• obfuscation ? 
4D Summit Europe 2013 
• Paris
• ascii art ? 
4D Summit Europe 2013 
• Paris
• frime ? 
4D Summit Europe 2013 
• Paris
Syndrome demoscene 
• pas nécessairement plus rapide 
• difficile à lire/comprendre/maintenir/débugger 
• coder pour un humain 
4D Summit Europe 2013 
• Paris
Rapidité / optimisation 
• la rapidité est importante 
• optimisation prématurée est un fléau 
• ne pas se fier à son intuition 
• outils 
• mesures 
• bancs d’essai 
4D Summit Europe 2013 
• Paris
L’odeur du code 
• Martin Fowler parle de “puanteur” du code 
• expérience / intuition 
4D Summit Europe 2013 
• Paris
Dette technique 
• métaphore de Ward Cunningham (XP, Wiki, etc...) 
• emprunter / sortir l’application rapidement (connaissance 
partielle) 
• accumulation de dette => tous les revenus servent à payer 
l'intérêt de la dette 
• rembourser l’emprunt / affiner le code 
4D Summit Europe 2013 
• Paris
Définition du Refactoring 
• définition proposée par Martin Fowler 
• improving the design of existing code 
• refactoring (noun) : a change made in the internal 
structure of software to make it easier to 
understand and cheaper to modify without 
changing its observable behavior. 
4D Summit Europe 2013 
• Paris
Ethymologie 
• facteur 
• factorisation en mathématiques 
ab + ac = a(b+c) 
• expressions remarquables 
a2 - b2 = (a+b)(a-b) 
a2 + 2ab + b2 = (a+b)2 
a2 - 2ab + b2 = (a-b)2 = (b-a)2 
4D Summit Europe 2013 
• Paris
Think different 
• adage “if it aint broken don't fix it” 
• pourquoi ? 
• gérer le risque 
• comment ? 
4D Summit Europe 2013 
• Paris
Identifier les objectifs 
• nommage de variable/fonction abscond 
• duplication 
• méthodes longues 
• trop de commentaires 
• quand le débuggeur est nécessaire pour comprendre 
• profondeur des boucles / conditions 
• couplage fort 
4D Summit Europe 2013 
• Paris
Outils d’analyse 
• nombre de lignes 
• bugs / ligne de code 
• densité des commentaires 
• Thomas McCabe (1976) : complexité cyclomatique 
• Sanity Check (RIP, Committed Software) 
• accès objets développement / METHODE LIRE CODE 
• Code Analysis Component (gratuit / Open Road Development) 
• Inventive Toolkit 4D (commercial / Synectique) 
4D Summit Europe 2013 
• Paris
4D Summit Europe 2013 
• Paris 
Pratiques 
• TODO tag 
• re-lecture de code 
• programmation en binôme
4D Summit Europe 2013 
• Paris 
Les outils 
• IDE 4D 
• compilateur / vérification de la syntaxe 
• macros 
• 4D Pop (éditeur de constantes, etc...) 
• accès objets développement 
• composants
Refactoring simple 
• renommer une méthode (et mettre à jour les appelants) 
• renommer un(e) table/champ (tokenisé, attention sql, html, 
etc...) 
• renommer une variable (chercher / remplacer) 
• remplacer une expression littérale par une constante 
• extraire un bloc de code et en faire une méthode/fonction 
• extraire un module et en faire un composant 
• etc... 
4D Summit Europe 2013 
• Paris
4D Summit Europe 2013 
• Paris 
Conseils 
• déclaration des variables locales (haut vs bloc) 
• recopier les paramètres dans des variables locales 
• utiliser des variables locales si possible (les pointeurs sur 
des variables comme paramètres)
Adopter le changement 
• 4D apporte des nouvelles fonctionnalités 
• Composants, Unicode, SQL, SVG, Listbox, Expression régulières, 
Séparateur de dossier, WebArea, LPE, “r”, “n”, “t”, Executer sur 
serveur, etc... (v11) 
• PHP, Texte enrichi, UUID, ASSERT, Wigdets, PDFCreator (v12) 
• Client HTTP, progress bar, Constantes XLIFF (v13) 
• Objets / json (v14) 
4D Summit Europe 2013 
• Paris
Accepter le changement 
• les nouvelles versions de 4D nécessitent parfois des 
adaptations 
• Sous-tables, Unicode, Resources, Extras, AP Sublaunch, 4D Draw, 
4D open, 4D for Oracle (v11) 
• Scrollable areas (v13) 
• 4D Chart (v14) 
• remplacer des plug-ins (manque de support ?, coût ?) 
• aussi vrai pour 4D (QuickTime, Carbon, Altura) 
4D Summit Europe 2013 
• Paris
4D Summit Europe 2013 
• Paris 
API 
• interfaces 
• fonction/méthode de composants (noms et paramètres) 
• webservice (SOAP/REST) 
• modèle de données (ODBC), couche d’abstraction avec 
les vues 
• formats de fichier 
• notion public/private
Modèle de données 
• il faut démystifier la modification du modèle de données 
• ce n’est pas simple, mais la pratique aide 
• le fichier de données doit contenir un numéro de version 
(dans une table) 
• la structure doit contenir un numéro de version et les 
méthodes de mise à niveau 
• exécution automatique des méthodes de mise à niveau 
• on doit pouvoir exécuter plusieurs mises à niveau 
séquentiellement 
4D Summit Europe 2013 
• Paris
Refactor vs Ré-écriture 
• ça dépend 
• le refactoring n’est envisageable que sur un produit qui 
marche (à peu près) 
• diviser pour mieux régner 
4D Summit Europe 2013 
• Paris
4D Summit Europe 2013 
• Paris
Pas de panique 
• le refactoring engendre des risques 
• écrire des tests automatisés 
• petites étapes validées par des tests automatisés 
4D Summit Europe 2013 
• Paris
Prendre le l’assurance 
• ASSERT (exprBooléenne {;messageTexte}) 
• Asserted (exprBooléenne {; messageTexte}) -> booléen 
• FIXER ACTIVATION ASSERTIONS (active {;*}) 
• désactive l’évaluation des expression booléenne d’ASSERT !!! 
• Lire activation assertions -> booléen 
• APPELER SUR ERREUR (erreur -10518, error, error method, 
error line) 
• dans la méthode (tester pré-conditions et post-conditions cf “programmation par 
contrat”) 
• en dehors de la méthode (“test unitaires” allégés) 
4D Summit Europe 2013 
• Paris
Programmation par 
4D Summit Europe 2013 
• Paris 
contrat 
• ASSERT dans la méthode 
• échouer tout de suite vs échouer doucement 
• pré-conditions / post-conditions 
• nombre de paramètres, enregistrement courant, 
enregistrement verrouillé, pointeur nil, type de pointeur, 
valeurs attendues, valeurs vide, plage de valeur 
• une autre façon de documenter les “limites opérationnelles”
Test unitaires 
• ASSERT en dehors de la méthode 
• valider le fonctionnement d’une méthode/fonction 
• tester an une valeur attendue en sortie avec une valeur 
connue en entrée 
4D Summit Europe 2013 
• Paris
Test unitaire 
où commencer ? 
• robots test vs test unitaire 
• pas d’excuse pour ne pas commencer 
• commencer par ce qui est facile a tester et fragile 
• tester aux limites 
• essayer de couvrir tous les chemins 
• tester les formulaires 
• adapter son code pour qu’il soit testable 
• métadonnées de test 
4D Summit Europe 2013 
• Paris
Outils de tests unitaires 
• 4DUnitTest de Rob Laveaux/pluggers.nl (gratuit, open-source) 
• UnitTester4D de Mark Schaake (commercial, abandonné, 
open source) 
4D Summit Europe 2013 
• Paris
4D Summit Europe 2013 
• Paris 
Jeu 
• Objectif : écrire une fonction qui calcule l’âge (en années)
4D Summit Europe 2013 
• Paris 
Voter 
1) 
2) 
3) 
4) 
5) 
6) 
7) aucune
Rendre la fonction 
4D Summit Europe 2013 
• Paris 
testable 
• Ajouter un paramètre optionnel
Test unitaire simple 
avec ASSERT 
4D Summit Europe 2013 
• Paris
Composant de test 
4D Summit Europe 2013 
• Paris 
unitaire 
• configuration du test cases :
Test-cases : list des test 
• méthode test cases “testCase_ageYearCalc”(partagée avec le composant) : 
4D Summit Europe 2013 
• Paris
Exemple de test 
4D Summit Europe 2013 
• Paris
Lancer les test-cases 
4D Summit Europe 2013 
• Paris
Test-cases stats 
4D Summit Europe 2013 
• Paris
Test-cases log 
4D Summit Europe 2013 
• Paris
4D Summit Europe 2013 
• Paris 
Résumé 
• écrire le code pour les humains 
• faire du refactoring de manière régulière 
• rendre le code testable 
• écrire des tests automatisés
Bibliographie 
Refactoring: Improving the Design of Existing Code 
de Martin Fowler, Kent Beck (http://www.refactoring.com/) 
4D Summit Europe 2013 
• Paris 
Clean Code: A Handbook of Agile Software 
Craftsmanship 
de Robert C. Martin
Bibliographie 
Test Driven Development: By Example 
4D Summit Europe 2013 
• Paris 
de Kent Beck 
The Pragmatic Programmer: From Journeyman to 
Master 
de Andrew Hunt, David Thomas
Bibliographie 
WardCunningham explains tehcnical dept : 
http://c2.com/cgi/wiki?WardExplainsDebtMetaphor 
Unit Tester 4D (Mark Schaake) : 
https://github.com/markschaake/UnitTester4D 
4D Unit Test (Rob Laveaux / pluggers.nl) : 
http://www.pluggers.nl/downloads/4DUnitTest.zip 
Code analysis component (Open Road Development) : 
http://openroaddevelopment.com/projects_4dComponent_CodeAnalysis.html 
Inventive Toolkit 4D (Synectique) : 
http://www.synectique.eu/ 
Don't be a White Rabbit anymore ! 
presentation by Christophe Keromen, october 2010, San Diego 2010 
Refactoring datatbases 
http://www.agiledata.org/essays/databaseRefactoring.html 
Cyclomatic complexity 
http://www.literateprogramming.com/mccabe.pdf 
4D Summit Europe 2013 
• Paris
4D Summit Europe 2013 
• Paris 
Merci ! 
Bon code, refactoring (et tests) !

Contenu connexe

En vedette

LA WEB dariobuitron
LA WEB dariobuitronLA WEB dariobuitron
LA WEB dariobuitron
dariobuitron
 
Habitat S.A. By Franklin Vega
Habitat S.A. By Franklin VegaHabitat S.A. By Franklin Vega
Habitat S.A. By Franklin Vega
ESPOL
 
Mamíferos
MamíferosMamíferos
Mamíferos
m4c2l11
 

En vedette (20)

Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010
 
Geothermal energy
Geothermal energyGeothermal energy
Geothermal energy
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
Passez un test de la vue - Outils visuels pour y voir clair!
Passez un test de la vue - Outils visuels pour y voir clair!Passez un test de la vue - Outils visuels pour y voir clair!
Passez un test de la vue - Outils visuels pour y voir clair!
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Refactoring vers les design patterns pyxis v2
Refactoring vers les design patterns   pyxis v2Refactoring vers les design patterns   pyxis v2
Refactoring vers les design patterns pyxis v2
 
Symfony Best Practices
Symfony Best PracticesSymfony Best Practices
Symfony Best Practices
 
[Agile Testing Day] Techniques avancées de tests
[Agile Testing Day] Techniques avancées de tests[Agile Testing Day] Techniques avancées de tests
[Agile Testing Day] Techniques avancées de tests
 
Paisajes Vegetales
Paisajes VegetalesPaisajes Vegetales
Paisajes Vegetales
 
Historia De Las Computadoras
Historia De Las ComputadorasHistoria De Las Computadoras
Historia De Las Computadoras
 
LOGOTIPOS - Diente 2009
LOGOTIPOS - Diente 2009LOGOTIPOS - Diente 2009
LOGOTIPOS - Diente 2009
 
LA WEB dariobuitron
LA WEB dariobuitronLA WEB dariobuitron
LA WEB dariobuitron
 
A
AA
A
 
Habitat S.A. By Franklin Vega
Habitat S.A. By Franklin VegaHabitat S.A. By Franklin Vega
Habitat S.A. By Franklin Vega
 
Mamíferos
MamíferosMamíferos
Mamíferos
 
A N I B I T A L
A N I B I T A LA N I B I T A L
A N I B I T A L
 
Funciones
FuncionesFunciones
Funciones
 
Presentaciondel Curso
Presentaciondel CursoPresentaciondel Curso
Presentaciondel Curso
 
Emission et réception de l'information digitalisée : quelle concordance des t...
Emission et réception de l'information digitalisée : quelle concordance des t...Emission et réception de l'information digitalisée : quelle concordance des t...
Emission et réception de l'information digitalisée : quelle concordance des t...
 
Qué Es La Guerra
Qué Es La GuerraQué Es La Guerra
Qué Es La Guerra
 

Similaire à 4D Summit2013 refactoring

[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
Christophe HERAL
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
boulonvert
 

Similaire à 4D Summit2013 refactoring (20)

Carnet de Route du Développeur - ENSIMAG 2012
Carnet de Route du Développeur - ENSIMAG 2012Carnet de Route du Développeur - ENSIMAG 2012
Carnet de Route du Développeur - ENSIMAG 2012
 
QR codes et codes à barres sous Delphi
QR codes et codes à barres sous DelphiQR codes et codes à barres sous Delphi
QR codes et codes à barres sous Delphi
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projet
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 
Application de pointage basé sur la technologie rfid
Application de pointage basé sur la technologie rfidApplication de pointage basé sur la technologie rfid
Application de pointage basé sur la technologie rfid
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
 
Hands on Sonar
Hands on SonarHands on Sonar
Hands on Sonar
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & tools
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPF
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation
 
DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)
 
Agile Tour 2010 - Mise en place d'un projet agile
Agile Tour 2010 - Mise en place d'un projet agileAgile Tour 2010 - Mise en place d'un projet agile
Agile Tour 2010 - Mise en place d'un projet agile
 
AT2010 Mise place d'un projet Agile
AT2010 Mise place d'un projet AgileAT2010 Mise place d'un projet Agile
AT2010 Mise place d'un projet Agile
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
 
Tech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesTech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobiles
 
DrupalCamp Paris 2013 - Drupal un cms oriente metier
DrupalCamp Paris 2013 - Drupal un cms oriente metierDrupalCamp Paris 2013 - Drupal un cms oriente metier
DrupalCamp Paris 2013 - Drupal un cms oriente metier
 
DrupalCamp Paris 2013 - Drupal : un CMS orienté métier
 DrupalCamp Paris 2013 - Drupal : un CMS orienté métier DrupalCamp Paris 2013 - Drupal : un CMS orienté métier
DrupalCamp Paris 2013 - Drupal : un CMS orienté métier
 
Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)
 

4D Summit2013 refactoring

  • 1. Refactoring 4D Summit Europe 2013
  • 2. 4D Summit Europe 2013 • Paris Bruno LEGAY A&C Consulting Responsable Bureau d’Etudes
  • 3. Gérer la complexité • le code complexe est nuisible • le code devrait être • clair et simple • facile à lire • évident • bien organisé • robuste • flexible 4D Summit Europe 2013 • Paris
  • 4. Code propre ? • nommage variable / champ / méthode / fonction • convention nommage • locale vs globale, paramètre vs globale, pointeur var locale • commentaires • constantes • méthodes courtes vs méthodes longues fortes imbrication • recopie de paramètres • couplage fort / faible • design modulaire, polymorphisme, encapsulation, etc... 4D Summit Europe 2013 • Paris
  • 5. Code simple ? • “Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it ?” The Elements of Programming Style (1978) 4D Summit Europe 2013 • Paris Brian W. Kernighan and P. J. Plauger
  • 6. Syndrome demoscene • hackers qui font des tours de force en programmation bas niveau et qui poussent les limites du matériel pour produire des démos multimédia impressionnantes 4D Summit Europe 2013 • Paris
  • 7. • one-liner 4D Summit Europe 2013 • Paris
  • 8. • obfuscation ? 4D Summit Europe 2013 • Paris
  • 9. • ascii art ? 4D Summit Europe 2013 • Paris
  • 10. • frime ? 4D Summit Europe 2013 • Paris
  • 11. Syndrome demoscene • pas nécessairement plus rapide • difficile à lire/comprendre/maintenir/débugger • coder pour un humain 4D Summit Europe 2013 • Paris
  • 12. Rapidité / optimisation • la rapidité est importante • optimisation prématurée est un fléau • ne pas se fier à son intuition • outils • mesures • bancs d’essai 4D Summit Europe 2013 • Paris
  • 13. L’odeur du code • Martin Fowler parle de “puanteur” du code • expérience / intuition 4D Summit Europe 2013 • Paris
  • 14. Dette technique • métaphore de Ward Cunningham (XP, Wiki, etc...) • emprunter / sortir l’application rapidement (connaissance partielle) • accumulation de dette => tous les revenus servent à payer l'intérêt de la dette • rembourser l’emprunt / affiner le code 4D Summit Europe 2013 • Paris
  • 15. Définition du Refactoring • définition proposée par Martin Fowler • improving the design of existing code • refactoring (noun) : a change made in the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior. 4D Summit Europe 2013 • Paris
  • 16. Ethymologie • facteur • factorisation en mathématiques ab + ac = a(b+c) • expressions remarquables a2 - b2 = (a+b)(a-b) a2 + 2ab + b2 = (a+b)2 a2 - 2ab + b2 = (a-b)2 = (b-a)2 4D Summit Europe 2013 • Paris
  • 17. Think different • adage “if it aint broken don't fix it” • pourquoi ? • gérer le risque • comment ? 4D Summit Europe 2013 • Paris
  • 18. Identifier les objectifs • nommage de variable/fonction abscond • duplication • méthodes longues • trop de commentaires • quand le débuggeur est nécessaire pour comprendre • profondeur des boucles / conditions • couplage fort 4D Summit Europe 2013 • Paris
  • 19. Outils d’analyse • nombre de lignes • bugs / ligne de code • densité des commentaires • Thomas McCabe (1976) : complexité cyclomatique • Sanity Check (RIP, Committed Software) • accès objets développement / METHODE LIRE CODE • Code Analysis Component (gratuit / Open Road Development) • Inventive Toolkit 4D (commercial / Synectique) 4D Summit Europe 2013 • Paris
  • 20. 4D Summit Europe 2013 • Paris Pratiques • TODO tag • re-lecture de code • programmation en binôme
  • 21. 4D Summit Europe 2013 • Paris Les outils • IDE 4D • compilateur / vérification de la syntaxe • macros • 4D Pop (éditeur de constantes, etc...) • accès objets développement • composants
  • 22. Refactoring simple • renommer une méthode (et mettre à jour les appelants) • renommer un(e) table/champ (tokenisé, attention sql, html, etc...) • renommer une variable (chercher / remplacer) • remplacer une expression littérale par une constante • extraire un bloc de code et en faire une méthode/fonction • extraire un module et en faire un composant • etc... 4D Summit Europe 2013 • Paris
  • 23. 4D Summit Europe 2013 • Paris Conseils • déclaration des variables locales (haut vs bloc) • recopier les paramètres dans des variables locales • utiliser des variables locales si possible (les pointeurs sur des variables comme paramètres)
  • 24. Adopter le changement • 4D apporte des nouvelles fonctionnalités • Composants, Unicode, SQL, SVG, Listbox, Expression régulières, Séparateur de dossier, WebArea, LPE, “r”, “n”, “t”, Executer sur serveur, etc... (v11) • PHP, Texte enrichi, UUID, ASSERT, Wigdets, PDFCreator (v12) • Client HTTP, progress bar, Constantes XLIFF (v13) • Objets / json (v14) 4D Summit Europe 2013 • Paris
  • 25. Accepter le changement • les nouvelles versions de 4D nécessitent parfois des adaptations • Sous-tables, Unicode, Resources, Extras, AP Sublaunch, 4D Draw, 4D open, 4D for Oracle (v11) • Scrollable areas (v13) • 4D Chart (v14) • remplacer des plug-ins (manque de support ?, coût ?) • aussi vrai pour 4D (QuickTime, Carbon, Altura) 4D Summit Europe 2013 • Paris
  • 26. 4D Summit Europe 2013 • Paris API • interfaces • fonction/méthode de composants (noms et paramètres) • webservice (SOAP/REST) • modèle de données (ODBC), couche d’abstraction avec les vues • formats de fichier • notion public/private
  • 27. Modèle de données • il faut démystifier la modification du modèle de données • ce n’est pas simple, mais la pratique aide • le fichier de données doit contenir un numéro de version (dans une table) • la structure doit contenir un numéro de version et les méthodes de mise à niveau • exécution automatique des méthodes de mise à niveau • on doit pouvoir exécuter plusieurs mises à niveau séquentiellement 4D Summit Europe 2013 • Paris
  • 28. Refactor vs Ré-écriture • ça dépend • le refactoring n’est envisageable que sur un produit qui marche (à peu près) • diviser pour mieux régner 4D Summit Europe 2013 • Paris
  • 29. 4D Summit Europe 2013 • Paris
  • 30. Pas de panique • le refactoring engendre des risques • écrire des tests automatisés • petites étapes validées par des tests automatisés 4D Summit Europe 2013 • Paris
  • 31. Prendre le l’assurance • ASSERT (exprBooléenne {;messageTexte}) • Asserted (exprBooléenne {; messageTexte}) -> booléen • FIXER ACTIVATION ASSERTIONS (active {;*}) • désactive l’évaluation des expression booléenne d’ASSERT !!! • Lire activation assertions -> booléen • APPELER SUR ERREUR (erreur -10518, error, error method, error line) • dans la méthode (tester pré-conditions et post-conditions cf “programmation par contrat”) • en dehors de la méthode (“test unitaires” allégés) 4D Summit Europe 2013 • Paris
  • 32. Programmation par 4D Summit Europe 2013 • Paris contrat • ASSERT dans la méthode • échouer tout de suite vs échouer doucement • pré-conditions / post-conditions • nombre de paramètres, enregistrement courant, enregistrement verrouillé, pointeur nil, type de pointeur, valeurs attendues, valeurs vide, plage de valeur • une autre façon de documenter les “limites opérationnelles”
  • 33. Test unitaires • ASSERT en dehors de la méthode • valider le fonctionnement d’une méthode/fonction • tester an une valeur attendue en sortie avec une valeur connue en entrée 4D Summit Europe 2013 • Paris
  • 34. Test unitaire où commencer ? • robots test vs test unitaire • pas d’excuse pour ne pas commencer • commencer par ce qui est facile a tester et fragile • tester aux limites • essayer de couvrir tous les chemins • tester les formulaires • adapter son code pour qu’il soit testable • métadonnées de test 4D Summit Europe 2013 • Paris
  • 35. Outils de tests unitaires • 4DUnitTest de Rob Laveaux/pluggers.nl (gratuit, open-source) • UnitTester4D de Mark Schaake (commercial, abandonné, open source) 4D Summit Europe 2013 • Paris
  • 36. 4D Summit Europe 2013 • Paris Jeu • Objectif : écrire une fonction qui calcule l’âge (en années)
  • 37. 4D Summit Europe 2013 • Paris Voter 1) 2) 3) 4) 5) 6) 7) aucune
  • 38. Rendre la fonction 4D Summit Europe 2013 • Paris testable • Ajouter un paramètre optionnel
  • 39. Test unitaire simple avec ASSERT 4D Summit Europe 2013 • Paris
  • 40. Composant de test 4D Summit Europe 2013 • Paris unitaire • configuration du test cases :
  • 41. Test-cases : list des test • méthode test cases “testCase_ageYearCalc”(partagée avec le composant) : 4D Summit Europe 2013 • Paris
  • 42. Exemple de test 4D Summit Europe 2013 • Paris
  • 43. Lancer les test-cases 4D Summit Europe 2013 • Paris
  • 44. Test-cases stats 4D Summit Europe 2013 • Paris
  • 45. Test-cases log 4D Summit Europe 2013 • Paris
  • 46. 4D Summit Europe 2013 • Paris Résumé • écrire le code pour les humains • faire du refactoring de manière régulière • rendre le code testable • écrire des tests automatisés
  • 47. Bibliographie Refactoring: Improving the Design of Existing Code de Martin Fowler, Kent Beck (http://www.refactoring.com/) 4D Summit Europe 2013 • Paris Clean Code: A Handbook of Agile Software Craftsmanship de Robert C. Martin
  • 48. Bibliographie Test Driven Development: By Example 4D Summit Europe 2013 • Paris de Kent Beck The Pragmatic Programmer: From Journeyman to Master de Andrew Hunt, David Thomas
  • 49. Bibliographie WardCunningham explains tehcnical dept : http://c2.com/cgi/wiki?WardExplainsDebtMetaphor Unit Tester 4D (Mark Schaake) : https://github.com/markschaake/UnitTester4D 4D Unit Test (Rob Laveaux / pluggers.nl) : http://www.pluggers.nl/downloads/4DUnitTest.zip Code analysis component (Open Road Development) : http://openroaddevelopment.com/projects_4dComponent_CodeAnalysis.html Inventive Toolkit 4D (Synectique) : http://www.synectique.eu/ Don't be a White Rabbit anymore ! presentation by Christophe Keromen, october 2010, San Diego 2010 Refactoring datatbases http://www.agiledata.org/essays/databaseRefactoring.html Cyclomatic complexity http://www.literateprogramming.com/mccabe.pdf 4D Summit Europe 2013 • Paris
  • 50. 4D Summit Europe 2013 • Paris Merci ! Bon code, refactoring (et tests) !