4d summit2013 refactoring
TRANSCRIPT
![Page 1: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/1.jpg)
Refactoring4D Summit Europe 2013
![Page 2: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/2.jpg)
4D Summit Europe 2013 • Paris
Bruno LEGAYA&C ConsultingResponsable Bureau d’Etudes
![Page 3: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/3.jpg)
4D Summit Europe 2013 • Paris
Gérer la complexité• le code complexe est nuisible
• le code devrait être
• clair et simple
• facile à lire
• évident
• bien organisé
• robuste
• flexible
![Page 4: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/4.jpg)
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...
![Page 5: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/5.jpg)
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)
Brian W. Kernighan and P. J. Plauger
![Page 6: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/6.jpg)
4D Summit Europe 2013 • Paris
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
![Page 7: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/7.jpg)
4D Summit Europe 2013 • Paris
• one-liner
![Page 8: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/8.jpg)
4D Summit Europe 2013 • Paris
• obfuscation ?
![Page 9: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/9.jpg)
4D Summit Europe 2013 • Paris
• ascii art ?
![Page 10: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/10.jpg)
4D Summit Europe 2013 • Paris
• frime ?
![Page 11: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/11.jpg)
4D Summit Europe 2013 • Paris
Syndrome demoscene
• pas nécessairement plus rapide
• difficile à lire/comprendre/maintenir/débugger
• coder pour un humain
![Page 12: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/12.jpg)
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
![Page 13: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/13.jpg)
4D Summit Europe 2013 • Paris
L’odeur du code• Martin Fowler parle de “puanteur” du code
• expérience / intuition
![Page 14: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/14.jpg)
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
![Page 15: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/15.jpg)
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.
![Page 16: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/16.jpg)
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
![Page 17: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/17.jpg)
4D Summit Europe 2013 • Paris
Think different
• adage “if it aint broken don't fix it”
• pourquoi ?
• gérer le risque
• comment ?
![Page 18: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/18.jpg)
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
![Page 19: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/19.jpg)
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)
![Page 20: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/20.jpg)
4D Summit Europe 2013 • Paris
Pratiques
• TODO tag
• re-lecture de code
• programmation en binôme
![Page 21: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/21.jpg)
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
![Page 22: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/22.jpg)
4D Summit Europe 2013 • Paris
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...
![Page 23: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/23.jpg)
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)
![Page 24: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/24.jpg)
4D Summit Europe 2013 • Paris
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)
![Page 25: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/25.jpg)
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)
![Page 26: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/26.jpg)
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
![Page 27: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/27.jpg)
4D Summit Europe 2013 • Paris
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
![Page 28: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/28.jpg)
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
![Page 29: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/29.jpg)
4D Summit Europe 2013 • Paris
![Page 30: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/30.jpg)
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
![Page 31: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/31.jpg)
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)
![Page 32: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/32.jpg)
4D Summit Europe 2013 • Paris
Programmation par 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”
![Page 33: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/33.jpg)
4D Summit Europe 2013 • Paris
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
![Page 34: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/34.jpg)
4D Summit Europe 2013 • Paris
Test unitaireoù 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
![Page 35: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/35.jpg)
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)
![Page 36: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/36.jpg)
4D Summit Europe 2013 • Paris
Jeu
• Objectif : écrire une fonction qui calcule l’âge (en années)
![Page 37: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/37.jpg)
4D Summit Europe 2013 • Paris
Voter1)
2)
3)
4)
5)
6)
7) aucune
![Page 38: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/38.jpg)
4D Summit Europe 2013 • Paris
Rendre la fonction testable
• Ajouter un paramètre optionnel
![Page 39: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/39.jpg)
4D Summit Europe 2013 • Paris
Test unitaire simple avec ASSERT
![Page 40: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/40.jpg)
4D Summit Europe 2013 • Paris
Composant de test unitaire
• configuration du test cases :
![Page 41: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/41.jpg)
4D Summit Europe 2013 • Paris
Test-cases : list des test• méthode test cases “testCase_ageYearCalc”(partagée avec le composant) :
![Page 42: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/42.jpg)
4D Summit Europe 2013 • Paris
Exemple de test
![Page 43: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/43.jpg)
4D Summit Europe 2013 • Paris
Lancer les test-cases
![Page 44: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/44.jpg)
4D Summit Europe 2013 • Paris
Test-cases stats
![Page 45: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/45.jpg)
4D Summit Europe 2013 • Paris
Test-cases log
![Page 46: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/46.jpg)
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
![Page 47: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/47.jpg)
4D Summit Europe 2013 • Paris
BibliographieRefactoring: Improving the Design of Existing Code
de Martin Fowler, Kent Beck (http://www.refactoring.com/)
Clean Code: A Handbook of Agile Software Craftsmanship
de Robert C. Martin
![Page 48: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/48.jpg)
4D Summit Europe 2013 • Paris
BibliographieTest Driven Development: By Example
de Kent Beck
The Pragmatic Programmer: From Journeyman to Master
de Andrew Hunt, David Thomas
![Page 49: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/49.jpg)
4D Summit Europe 2013 • Paris
BibliographieWardCunningham 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 datatbaseshttp://www.agiledata.org/essays/databaseRefactoring.html
Cyclomatic complexityhttp://www.literateprogramming.com/mccabe.pdf
![Page 50: 4D Summit2013 refactoring](https://reader031.vdocuments.us/reader031/viewer/2022032022/55aa8e331a28abb6558b469f/html5/thumbnails/50.jpg)
4D Summit Europe 2013 • Paris
Merci !Bon code, refactoring (et tests) !