[{"data":1,"prerenderedAt":9965},["ShallowReactive",2],{"search-api":-1,"listing-tag-software-craftsmanship-page-2":3},[4,4597,5965],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"id":11,"date":12,"listed":13,"nocomments":7,"hidden":7,"categories":14,"tags":15,"cover":18,"readingTime":19,"body":24,"_type":4591,"_id":4592,"_source":4593,"_file":4594,"_stem":4595,"_extension":4596},"\u002Ffr\u002Fdette-technique\u002Fclean-code-software-craftsmanship-principes-java","dette-technique",false,"","Découvrir le Clean Code en Software Craftsmanship, Les Bonnes Pratiques en Java","Découvrez les principes du Clean Code et comment écrire du code propre et maintenable avec des exemples concrets en Java. Astuces, FAQ et bonnes pratiques pour...",49,"2024-07-17",true,[6],[16,17],"clean-code","software-craftsmanship","covers\u002Farticles\u002Fprincipe-clean-code.jpg",{"text":20,"minutes":21,"time":22,"words":23},"14 min read",13.555,813300,2711,{"type":25,"children":26,"toc":4552},"root",[27,40,50,80,92,97,101,110,115,124,143,151,250,271,276,285,297,304,1164,1177,1182,1185,1198,1207,1225,1232,1532,1537,1540,1549,1567,1576,1587,1594,1672,1693,1702,1707,1714,2192,2197,2202,2205,2214,2219,2226,2571,2576,2590,2599,2609,2618,2636,2643,3040,3045,3051,3060,3065,3072,3545,3550,3556,3565,3582,3589,3907,3919,3925,3934,3945,3954,3974,3981,4281,4294,4300,4309,4314,4326,4361,4367,4376,4393,4401,4434,4439,4451,4454,4463,4478,4491,4504,4517,4520,4529,4534,4546],{"type":28,"tag":29,"props":30,"children":32},"element","h2",{"id":31},"découvrir-le-clean-code-en-software-craftsmanship-les-bonnes-pratiques-en-java",[33],{"type":28,"tag":34,"props":35,"children":36},"strong",{},[37],{"type":38,"value":39},"text","Découvrir le Clean Code en Software Craftsmanship : Les Bonnes Pratiques en Java",{"type":28,"tag":41,"props":42,"children":44},"h3",{"id":43},"le-coût-caché-dun-code-mal-écrit",[45],{"type":28,"tag":34,"props":46,"children":47},{},[48],{"type":38,"value":49},"Le coût caché d'un code mal écrit",{"type":28,"tag":51,"props":52,"children":53},"p",{},[54,56,63,65,71,72,78],{"type":38,"value":55},"Mission chez BNP Paribas CIB, fin 2018. Un module de pricing critique, écrit dans l'urgence trois ans plus tôt par une équipe depuis dispersée. Le code fonctionnait, c'était même un de ses problèmes : personne n'osait y toucher. La moindre évolution réglementaire prenait six semaines de chiffrage et deux mois d'exécution, l'essentiel passé à reverse-engineerer des méthodes de 400 lignes aux variables ",{"type":28,"tag":57,"props":58,"children":60},"code",{"className":59},[],[61],{"type":38,"value":62},"tmp",{"type":38,"value":64},", ",{"type":28,"tag":57,"props":66,"children":68},{"className":67},[],[69],{"type":38,"value":70},"data2",{"type":38,"value":64},{"type":28,"tag":57,"props":73,"children":75},{"className":74},[],[76],{"type":38,"value":77},"result_final",{"type":38,"value":79},".",{"type":28,"tag":51,"props":81,"children":82},{},[83,85,90],{"type":38,"value":84},"Même schéma chez Agirc-Arrco quelques mois plus tard. Le code livré dans la précipitation lors d'un sprint serré devient le code que personne ne veut maintenir l'année suivante. C'est précisément le problème que résout le ",{"type":28,"tag":34,"props":86,"children":87},{},[88],{"type":38,"value":89},"Clean Code",{"type":38,"value":91}," : produire du code qui reste modifiable six mois ou trois ans après, par soi-même comme par un autre développeur.",{"type":28,"tag":51,"props":93,"children":94},{},[95],{"type":38,"value":96},"Cet article rassemble les principes formalisés par Robert C. Martin dans son ouvrage de référence, avec des exemples Java applicables au quotidien, même quand la pression de livraison est forte.",{"type":28,"tag":98,"props":99,"children":100},"hr",{},[],{"type":28,"tag":29,"props":102,"children":104},{"id":103},"les-principes-fondamentaux-du-clean-code",[105],{"type":28,"tag":34,"props":106,"children":107},{},[108],{"type":38,"value":109},"Les principes fondamentaux du Clean Code",{"type":28,"tag":51,"props":111,"children":112},{},[113],{"type":38,"value":114},"Trois principes structurent la lecture d'un code propre. Ils ne sont pas magiques : appliqués isolément, leur effet est limité. Combinés et répétés sur la durée, ils transforment radicalement la maintenabilité d'une base.",{"type":28,"tag":41,"props":116,"children":118},{"id":117},"_1-des-noms-de-variables-et-de-fonctions-explicites",[119],{"type":28,"tag":34,"props":120,"children":121},{},[122],{"type":38,"value":123},"1. Des noms de variables et de fonctions explicites",{"type":28,"tag":51,"props":125,"children":126},{},[127,129,134,136,141],{"type":38,"value":128},"L'un des premiers pas vers un code propre est de choisir des noms ",{"type":28,"tag":34,"props":130,"children":131},{},[132],{"type":38,"value":133},"clairs",{"type":38,"value":135}," et ",{"type":28,"tag":34,"props":137,"children":138},{},[139],{"type":38,"value":140},"significatifs",{"type":38,"value":142}," pour vos variables, vos fonctions et vos classes. Si quelqu'un peut comprendre ce qu'une variable fait rien qu'en lisant son nom, alors vous êtes sur la bonne voie.",{"type":28,"tag":51,"props":144,"children":145},{},[146],{"type":28,"tag":34,"props":147,"children":148},{},[149],{"type":38,"value":150},"Exemple en Java :",{"type":28,"tag":152,"props":153,"children":157},"pre",{"className":154,"code":155,"language":156,"meta":8,"style":8},"language-java shiki shiki-themes catppuccin-frappe github-dark","\u002F\u002F Mauvais exemple\nint a = 5;\n\n\u002F\u002F Meilleur exemple\nint nombreDeJours = 5;\n","java",[158],{"type":28,"tag":57,"props":159,"children":160},{"__ignoreMap":8},[161,173,207,216,225],{"type":28,"tag":162,"props":163,"children":166},"span",{"class":164,"line":165},"line",1,[167],{"type":28,"tag":162,"props":168,"children":170},{"style":169},"--shiki-default:#737994;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit",[171],{"type":38,"value":172},"\u002F\u002F Mauvais exemple\n",{"type":28,"tag":162,"props":174,"children":176},{"class":164,"line":175},2,[177,183,189,195,201],{"type":28,"tag":162,"props":178,"children":180},{"style":179},"--shiki-default:#CA9EE6;--shiki-dark:#F97583",[181],{"type":38,"value":182},"int",{"type":28,"tag":162,"props":184,"children":186},{"style":185},"--shiki-default:#C6D0F5;--shiki-dark:#E1E4E8",[187],{"type":38,"value":188}," a ",{"type":28,"tag":162,"props":190,"children":192},{"style":191},"--shiki-default:#81C8BE;--shiki-dark:#F97583",[193],{"type":38,"value":194},"=",{"type":28,"tag":162,"props":196,"children":198},{"style":197},"--shiki-default:#EF9F76;--shiki-dark:#79B8FF",[199],{"type":38,"value":200}," 5",{"type":28,"tag":162,"props":202,"children":204},{"style":203},"--shiki-default:#949CBB;--shiki-dark:#E1E4E8",[205],{"type":38,"value":206},";\n",{"type":28,"tag":162,"props":208,"children":210},{"class":164,"line":209},3,[211],{"type":28,"tag":162,"props":212,"children":213},{"emptyLinePlaceholder":13},[214],{"type":38,"value":215},"\n",{"type":28,"tag":162,"props":217,"children":219},{"class":164,"line":218},4,[220],{"type":28,"tag":162,"props":221,"children":222},{"style":169},[223],{"type":38,"value":224},"\u002F\u002F Meilleur exemple\n",{"type":28,"tag":162,"props":226,"children":228},{"class":164,"line":227},5,[229,233,238,242,246],{"type":28,"tag":162,"props":230,"children":231},{"style":179},[232],{"type":38,"value":182},{"type":28,"tag":162,"props":234,"children":235},{"style":185},[236],{"type":38,"value":237}," nombreDeJours ",{"type":28,"tag":162,"props":239,"children":240},{"style":191},[241],{"type":38,"value":194},{"type":28,"tag":162,"props":243,"children":244},{"style":197},[245],{"type":38,"value":200},{"type":28,"tag":162,"props":247,"children":248},{"style":203},[249],{"type":38,"value":206},{"type":28,"tag":51,"props":251,"children":252},{},[253,255,261,263,269],{"type":38,"value":254},"En nommant la variable ",{"type":28,"tag":57,"props":256,"children":258},{"className":257},[],[259],{"type":38,"value":260},"nombreDeJours",{"type":38,"value":262},", on rend immédiatement évident ce que représente cette donnée, sans avoir besoin de commentaires ou de devinettes. De plus, évitez les abréviations trop courtes ou ambiguës comme ",{"type":28,"tag":57,"props":264,"children":266},{"className":265},[],[267],{"type":38,"value":268},"nbr",{"type":38,"value":270},", qui peuvent prêter à confusion.",{"type":28,"tag":51,"props":272,"children":273},{},[274],{"type":38,"value":275},"Question simple à se poser : ce nom passerait-il dans une explication orale à un collègue ? Si la réponse est non, c'est qu'il est à reprendre.",{"type":28,"tag":41,"props":277,"children":279},{"id":278},"_2-la-règle-des-fonctions-courtes",[280],{"type":28,"tag":34,"props":281,"children":282},{},[283],{"type":38,"value":284},"2. La règle des fonctions courtes",{"type":28,"tag":51,"props":286,"children":287},{},[288,290,295],{"type":38,"value":289},"Une bonne fonction ne doit faire ",{"type":28,"tag":34,"props":291,"children":292},{},[293],{"type":38,"value":294},"qu'une seule chose",{"type":38,"value":296}," et bien la faire. Si une fonction devient trop longue, il y a de fortes chances qu'elle fasse trop de choses à la fois. Un bon indicateur : si vous pouvez résumer ce que fait votre fonction en une seule phrase claire, elle est probablement assez concise.",{"type":28,"tag":51,"props":298,"children":299},{},[300],{"type":28,"tag":34,"props":301,"children":302},{},[303],{"type":38,"value":150},{"type":28,"tag":152,"props":305,"children":307},{"className":154,"code":306,"language":156,"meta":8,"style":8},"\u002F\u002F Mauvais exemple - Trop de responsabilités dans une seule fonction\npublic void processOrder(Order order) {\n    \u002F\u002F Valider la commande\n    if (order.isValid()) {\n        \u002F\u002F Calculer le total\n        double total = order.getAmount() + calculateTax(order);\n\n        \u002F\u002F Traiter le paiement\n        processPayment(order, total);\n\n        \u002F\u002F Envoyer une confirmation\n        sendConfirmationEmail(order);\n    } else {\n        System.out.println(\"Commande invalide\");\n    }\n}\n\n\u002F\u002F Meilleur exemple - Chaque fonction a une responsabilité unique\npublic void processOrder(Order order) {\n    if (order.isValid()) {\n        double total = calculateTotal(order);\n        processPayment(order, total);\n        sendConfirmation(order);\n    } else {\n        handleInvalidOrder();\n    }\n}\n\nprivate double calculateTotal(Order order) {\n    return order.getAmount() + calculateTax(order);\n}\n\nprivate void processPayment(Order order, double total) {\n    \u002F\u002F Code pour traiter le paiement\n}\n\nprivate void sendConfirmation(Order order) {\n    \u002F\u002F Code pour envoyer l'email de confirmation\n}\n\nprivate void handleInvalidOrder() {\n    System.out.println(\"Commande invalide\");\n}\n",[308],{"type":28,"tag":57,"props":309,"children":310},{"__ignoreMap":8},[311,319,364,372,408,416,475,483,492,523,531,540,561,579,620,629,638,646,655,691,723,756,784,805,821,835,843,851,859,897,942,950,958,1007,1016,1024,1032,1069,1078,1086,1094,1119,1156],{"type":28,"tag":162,"props":312,"children":313},{"class":164,"line":165},[314],{"type":28,"tag":162,"props":315,"children":316},{"style":169},[317],{"type":38,"value":318},"\u002F\u002F Mauvais exemple - Trop de responsabilités dans une seule fonction\n",{"type":28,"tag":162,"props":320,"children":321},{"class":164,"line":175},[322,327,332,338,343,349,354,359],{"type":28,"tag":162,"props":323,"children":324},{"style":179},[325],{"type":38,"value":326},"public",{"type":28,"tag":162,"props":328,"children":329},{"style":179},[330],{"type":38,"value":331}," void",{"type":28,"tag":162,"props":333,"children":335},{"style":334},"--shiki-default:#8CAAEE;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[336],{"type":38,"value":337}," processOrder",{"type":28,"tag":162,"props":339,"children":340},{"style":203},[341],{"type":38,"value":342},"(",{"type":28,"tag":162,"props":344,"children":346},{"style":345},"--shiki-default:#CA9EE6;--shiki-dark:#E1E4E8",[347],{"type":38,"value":348},"Order",{"type":28,"tag":162,"props":350,"children":351},{"style":185},[352],{"type":38,"value":353}," order",{"type":28,"tag":162,"props":355,"children":356},{"style":203},[357],{"type":38,"value":358},")",{"type":28,"tag":162,"props":360,"children":361},{"style":203},[362],{"type":38,"value":363}," {\n",{"type":28,"tag":162,"props":365,"children":366},{"class":164,"line":209},[367],{"type":28,"tag":162,"props":368,"children":369},{"style":169},[370],{"type":38,"value":371},"    \u002F\u002F Valider la commande\n",{"type":28,"tag":162,"props":373,"children":374},{"class":164,"line":218},[375,380,385,390,394,399,404],{"type":28,"tag":162,"props":376,"children":377},{"style":179},[378],{"type":38,"value":379},"    if",{"type":28,"tag":162,"props":381,"children":382},{"style":203},[383],{"type":38,"value":384}," (",{"type":28,"tag":162,"props":386,"children":387},{"style":185},[388],{"type":38,"value":389},"order",{"type":28,"tag":162,"props":391,"children":392},{"style":203},[393],{"type":38,"value":79},{"type":28,"tag":162,"props":395,"children":396},{"style":334},[397],{"type":38,"value":398},"isValid",{"type":28,"tag":162,"props":400,"children":401},{"style":203},[402],{"type":38,"value":403},"())",{"type":28,"tag":162,"props":405,"children":406},{"style":203},[407],{"type":38,"value":363},{"type":28,"tag":162,"props":409,"children":410},{"class":164,"line":227},[411],{"type":28,"tag":162,"props":412,"children":413},{"style":169},[414],{"type":38,"value":415},"        \u002F\u002F Calculer le total\n",{"type":28,"tag":162,"props":417,"children":419},{"class":164,"line":418},6,[420,425,430,434,438,442,447,452,457,462,466,470],{"type":28,"tag":162,"props":421,"children":422},{"style":179},[423],{"type":38,"value":424},"        double",{"type":28,"tag":162,"props":426,"children":427},{"style":185},[428],{"type":38,"value":429}," total ",{"type":28,"tag":162,"props":431,"children":432},{"style":191},[433],{"type":38,"value":194},{"type":28,"tag":162,"props":435,"children":436},{"style":185},[437],{"type":38,"value":353},{"type":28,"tag":162,"props":439,"children":440},{"style":203},[441],{"type":38,"value":79},{"type":28,"tag":162,"props":443,"children":444},{"style":334},[445],{"type":38,"value":446},"getAmount",{"type":28,"tag":162,"props":448,"children":449},{"style":203},[450],{"type":38,"value":451},"()",{"type":28,"tag":162,"props":453,"children":454},{"style":191},[455],{"type":38,"value":456}," +",{"type":28,"tag":162,"props":458,"children":459},{"style":334},[460],{"type":38,"value":461}," calculateTax",{"type":28,"tag":162,"props":463,"children":464},{"style":203},[465],{"type":38,"value":342},{"type":28,"tag":162,"props":467,"children":468},{"style":185},[469],{"type":38,"value":389},{"type":28,"tag":162,"props":471,"children":472},{"style":203},[473],{"type":38,"value":474},");\n",{"type":28,"tag":162,"props":476,"children":478},{"class":164,"line":477},7,[479],{"type":28,"tag":162,"props":480,"children":481},{"emptyLinePlaceholder":13},[482],{"type":38,"value":215},{"type":28,"tag":162,"props":484,"children":486},{"class":164,"line":485},8,[487],{"type":28,"tag":162,"props":488,"children":489},{"style":169},[490],{"type":38,"value":491},"        \u002F\u002F Traiter le paiement\n",{"type":28,"tag":162,"props":493,"children":495},{"class":164,"line":494},9,[496,501,505,509,514,519],{"type":28,"tag":162,"props":497,"children":498},{"style":334},[499],{"type":38,"value":500},"        processPayment",{"type":28,"tag":162,"props":502,"children":503},{"style":203},[504],{"type":38,"value":342},{"type":28,"tag":162,"props":506,"children":507},{"style":185},[508],{"type":38,"value":389},{"type":28,"tag":162,"props":510,"children":511},{"style":203},[512],{"type":38,"value":513},",",{"type":28,"tag":162,"props":515,"children":516},{"style":185},[517],{"type":38,"value":518}," total",{"type":28,"tag":162,"props":520,"children":521},{"style":203},[522],{"type":38,"value":474},{"type":28,"tag":162,"props":524,"children":526},{"class":164,"line":525},10,[527],{"type":28,"tag":162,"props":528,"children":529},{"emptyLinePlaceholder":13},[530],{"type":38,"value":215},{"type":28,"tag":162,"props":532,"children":534},{"class":164,"line":533},11,[535],{"type":28,"tag":162,"props":536,"children":537},{"style":169},[538],{"type":38,"value":539},"        \u002F\u002F Envoyer une confirmation\n",{"type":28,"tag":162,"props":541,"children":543},{"class":164,"line":542},12,[544,549,553,557],{"type":28,"tag":162,"props":545,"children":546},{"style":334},[547],{"type":38,"value":548},"        sendConfirmationEmail",{"type":28,"tag":162,"props":550,"children":551},{"style":203},[552],{"type":38,"value":342},{"type":28,"tag":162,"props":554,"children":555},{"style":185},[556],{"type":38,"value":389},{"type":28,"tag":162,"props":558,"children":559},{"style":203},[560],{"type":38,"value":474},{"type":28,"tag":162,"props":562,"children":564},{"class":164,"line":563},13,[565,570,575],{"type":28,"tag":162,"props":566,"children":567},{"style":203},[568],{"type":38,"value":569},"    }",{"type":28,"tag":162,"props":571,"children":572},{"style":179},[573],{"type":38,"value":574}," else",{"type":28,"tag":162,"props":576,"children":577},{"style":203},[578],{"type":38,"value":363},{"type":28,"tag":162,"props":580,"children":582},{"class":164,"line":581},14,[583,588,592,597,601,606,610,616],{"type":28,"tag":162,"props":584,"children":585},{"style":185},[586],{"type":38,"value":587},"        System",{"type":28,"tag":162,"props":589,"children":590},{"style":203},[591],{"type":38,"value":79},{"type":28,"tag":162,"props":593,"children":594},{"style":185},[595],{"type":38,"value":596},"out",{"type":28,"tag":162,"props":598,"children":599},{"style":203},[600],{"type":38,"value":79},{"type":28,"tag":162,"props":602,"children":603},{"style":334},[604],{"type":38,"value":605},"println",{"type":28,"tag":162,"props":607,"children":608},{"style":203},[609],{"type":38,"value":342},{"type":28,"tag":162,"props":611,"children":613},{"style":612},"--shiki-default:#A6D189;--shiki-dark:#9ECBFF",[614],{"type":38,"value":615},"\"Commande invalide\"",{"type":28,"tag":162,"props":617,"children":618},{"style":203},[619],{"type":38,"value":474},{"type":28,"tag":162,"props":621,"children":623},{"class":164,"line":622},15,[624],{"type":28,"tag":162,"props":625,"children":626},{"style":203},[627],{"type":38,"value":628},"    }\n",{"type":28,"tag":162,"props":630,"children":632},{"class":164,"line":631},16,[633],{"type":28,"tag":162,"props":634,"children":635},{"style":203},[636],{"type":38,"value":637},"}\n",{"type":28,"tag":162,"props":639,"children":641},{"class":164,"line":640},17,[642],{"type":28,"tag":162,"props":643,"children":644},{"emptyLinePlaceholder":13},[645],{"type":38,"value":215},{"type":28,"tag":162,"props":647,"children":649},{"class":164,"line":648},18,[650],{"type":28,"tag":162,"props":651,"children":652},{"style":169},[653],{"type":38,"value":654},"\u002F\u002F Meilleur exemple - Chaque fonction a une responsabilité unique\n",{"type":28,"tag":162,"props":656,"children":658},{"class":164,"line":657},19,[659,663,667,671,675,679,683,687],{"type":28,"tag":162,"props":660,"children":661},{"style":179},[662],{"type":38,"value":326},{"type":28,"tag":162,"props":664,"children":665},{"style":179},[666],{"type":38,"value":331},{"type":28,"tag":162,"props":668,"children":669},{"style":334},[670],{"type":38,"value":337},{"type":28,"tag":162,"props":672,"children":673},{"style":203},[674],{"type":38,"value":342},{"type":28,"tag":162,"props":676,"children":677},{"style":345},[678],{"type":38,"value":348},{"type":28,"tag":162,"props":680,"children":681},{"style":185},[682],{"type":38,"value":353},{"type":28,"tag":162,"props":684,"children":685},{"style":203},[686],{"type":38,"value":358},{"type":28,"tag":162,"props":688,"children":689},{"style":203},[690],{"type":38,"value":363},{"type":28,"tag":162,"props":692,"children":694},{"class":164,"line":693},20,[695,699,703,707,711,715,719],{"type":28,"tag":162,"props":696,"children":697},{"style":179},[698],{"type":38,"value":379},{"type":28,"tag":162,"props":700,"children":701},{"style":203},[702],{"type":38,"value":384},{"type":28,"tag":162,"props":704,"children":705},{"style":185},[706],{"type":38,"value":389},{"type":28,"tag":162,"props":708,"children":709},{"style":203},[710],{"type":38,"value":79},{"type":28,"tag":162,"props":712,"children":713},{"style":334},[714],{"type":38,"value":398},{"type":28,"tag":162,"props":716,"children":717},{"style":203},[718],{"type":38,"value":403},{"type":28,"tag":162,"props":720,"children":721},{"style":203},[722],{"type":38,"value":363},{"type":28,"tag":162,"props":724,"children":726},{"class":164,"line":725},21,[727,731,735,739,744,748,752],{"type":28,"tag":162,"props":728,"children":729},{"style":179},[730],{"type":38,"value":424},{"type":28,"tag":162,"props":732,"children":733},{"style":185},[734],{"type":38,"value":429},{"type":28,"tag":162,"props":736,"children":737},{"style":191},[738],{"type":38,"value":194},{"type":28,"tag":162,"props":740,"children":741},{"style":334},[742],{"type":38,"value":743}," calculateTotal",{"type":28,"tag":162,"props":745,"children":746},{"style":203},[747],{"type":38,"value":342},{"type":28,"tag":162,"props":749,"children":750},{"style":185},[751],{"type":38,"value":389},{"type":28,"tag":162,"props":753,"children":754},{"style":203},[755],{"type":38,"value":474},{"type":28,"tag":162,"props":757,"children":759},{"class":164,"line":758},22,[760,764,768,772,776,780],{"type":28,"tag":162,"props":761,"children":762},{"style":334},[763],{"type":38,"value":500},{"type":28,"tag":162,"props":765,"children":766},{"style":203},[767],{"type":38,"value":342},{"type":28,"tag":162,"props":769,"children":770},{"style":185},[771],{"type":38,"value":389},{"type":28,"tag":162,"props":773,"children":774},{"style":203},[775],{"type":38,"value":513},{"type":28,"tag":162,"props":777,"children":778},{"style":185},[779],{"type":38,"value":518},{"type":28,"tag":162,"props":781,"children":782},{"style":203},[783],{"type":38,"value":474},{"type":28,"tag":162,"props":785,"children":787},{"class":164,"line":786},23,[788,793,797,801],{"type":28,"tag":162,"props":789,"children":790},{"style":334},[791],{"type":38,"value":792},"        sendConfirmation",{"type":28,"tag":162,"props":794,"children":795},{"style":203},[796],{"type":38,"value":342},{"type":28,"tag":162,"props":798,"children":799},{"style":185},[800],{"type":38,"value":389},{"type":28,"tag":162,"props":802,"children":803},{"style":203},[804],{"type":38,"value":474},{"type":28,"tag":162,"props":806,"children":808},{"class":164,"line":807},24,[809,813,817],{"type":28,"tag":162,"props":810,"children":811},{"style":203},[812],{"type":38,"value":569},{"type":28,"tag":162,"props":814,"children":815},{"style":179},[816],{"type":38,"value":574},{"type":28,"tag":162,"props":818,"children":819},{"style":203},[820],{"type":38,"value":363},{"type":28,"tag":162,"props":822,"children":824},{"class":164,"line":823},25,[825,830],{"type":28,"tag":162,"props":826,"children":827},{"style":334},[828],{"type":38,"value":829},"        handleInvalidOrder",{"type":28,"tag":162,"props":831,"children":832},{"style":203},[833],{"type":38,"value":834},"();\n",{"type":28,"tag":162,"props":836,"children":838},{"class":164,"line":837},26,[839],{"type":28,"tag":162,"props":840,"children":841},{"style":203},[842],{"type":38,"value":628},{"type":28,"tag":162,"props":844,"children":846},{"class":164,"line":845},27,[847],{"type":28,"tag":162,"props":848,"children":849},{"style":203},[850],{"type":38,"value":637},{"type":28,"tag":162,"props":852,"children":854},{"class":164,"line":853},28,[855],{"type":28,"tag":162,"props":856,"children":857},{"emptyLinePlaceholder":13},[858],{"type":38,"value":215},{"type":28,"tag":162,"props":860,"children":862},{"class":164,"line":861},29,[863,868,873,877,881,885,889,893],{"type":28,"tag":162,"props":864,"children":865},{"style":179},[866],{"type":38,"value":867},"private",{"type":28,"tag":162,"props":869,"children":870},{"style":179},[871],{"type":38,"value":872}," double",{"type":28,"tag":162,"props":874,"children":875},{"style":334},[876],{"type":38,"value":743},{"type":28,"tag":162,"props":878,"children":879},{"style":203},[880],{"type":38,"value":342},{"type":28,"tag":162,"props":882,"children":883},{"style":345},[884],{"type":38,"value":348},{"type":28,"tag":162,"props":886,"children":887},{"style":185},[888],{"type":38,"value":353},{"type":28,"tag":162,"props":890,"children":891},{"style":203},[892],{"type":38,"value":358},{"type":28,"tag":162,"props":894,"children":895},{"style":203},[896],{"type":38,"value":363},{"type":28,"tag":162,"props":898,"children":900},{"class":164,"line":899},30,[901,906,910,914,918,922,926,930,934,938],{"type":28,"tag":162,"props":902,"children":903},{"style":179},[904],{"type":38,"value":905},"    return",{"type":28,"tag":162,"props":907,"children":908},{"style":185},[909],{"type":38,"value":353},{"type":28,"tag":162,"props":911,"children":912},{"style":203},[913],{"type":38,"value":79},{"type":28,"tag":162,"props":915,"children":916},{"style":334},[917],{"type":38,"value":446},{"type":28,"tag":162,"props":919,"children":920},{"style":203},[921],{"type":38,"value":451},{"type":28,"tag":162,"props":923,"children":924},{"style":191},[925],{"type":38,"value":456},{"type":28,"tag":162,"props":927,"children":928},{"style":334},[929],{"type":38,"value":461},{"type":28,"tag":162,"props":931,"children":932},{"style":203},[933],{"type":38,"value":342},{"type":28,"tag":162,"props":935,"children":936},{"style":185},[937],{"type":38,"value":389},{"type":28,"tag":162,"props":939,"children":940},{"style":203},[941],{"type":38,"value":474},{"type":28,"tag":162,"props":943,"children":945},{"class":164,"line":944},31,[946],{"type":28,"tag":162,"props":947,"children":948},{"style":203},[949],{"type":38,"value":637},{"type":28,"tag":162,"props":951,"children":953},{"class":164,"line":952},32,[954],{"type":28,"tag":162,"props":955,"children":956},{"emptyLinePlaceholder":13},[957],{"type":38,"value":215},{"type":28,"tag":162,"props":959,"children":961},{"class":164,"line":960},33,[962,966,970,975,979,983,987,991,995,999,1003],{"type":28,"tag":162,"props":963,"children":964},{"style":179},[965],{"type":38,"value":867},{"type":28,"tag":162,"props":967,"children":968},{"style":179},[969],{"type":38,"value":331},{"type":28,"tag":162,"props":971,"children":972},{"style":334},[973],{"type":38,"value":974}," processPayment",{"type":28,"tag":162,"props":976,"children":977},{"style":203},[978],{"type":38,"value":342},{"type":28,"tag":162,"props":980,"children":981},{"style":345},[982],{"type":38,"value":348},{"type":28,"tag":162,"props":984,"children":985},{"style":185},[986],{"type":38,"value":353},{"type":28,"tag":162,"props":988,"children":989},{"style":203},[990],{"type":38,"value":513},{"type":28,"tag":162,"props":992,"children":993},{"style":179},[994],{"type":38,"value":872},{"type":28,"tag":162,"props":996,"children":997},{"style":185},[998],{"type":38,"value":518},{"type":28,"tag":162,"props":1000,"children":1001},{"style":203},[1002],{"type":38,"value":358},{"type":28,"tag":162,"props":1004,"children":1005},{"style":203},[1006],{"type":38,"value":363},{"type":28,"tag":162,"props":1008,"children":1010},{"class":164,"line":1009},34,[1011],{"type":28,"tag":162,"props":1012,"children":1013},{"style":169},[1014],{"type":38,"value":1015},"    \u002F\u002F Code pour traiter le paiement\n",{"type":28,"tag":162,"props":1017,"children":1019},{"class":164,"line":1018},35,[1020],{"type":28,"tag":162,"props":1021,"children":1022},{"style":203},[1023],{"type":38,"value":637},{"type":28,"tag":162,"props":1025,"children":1027},{"class":164,"line":1026},36,[1028],{"type":28,"tag":162,"props":1029,"children":1030},{"emptyLinePlaceholder":13},[1031],{"type":38,"value":215},{"type":28,"tag":162,"props":1033,"children":1035},{"class":164,"line":1034},37,[1036,1040,1044,1049,1053,1057,1061,1065],{"type":28,"tag":162,"props":1037,"children":1038},{"style":179},[1039],{"type":38,"value":867},{"type":28,"tag":162,"props":1041,"children":1042},{"style":179},[1043],{"type":38,"value":331},{"type":28,"tag":162,"props":1045,"children":1046},{"style":334},[1047],{"type":38,"value":1048}," sendConfirmation",{"type":28,"tag":162,"props":1050,"children":1051},{"style":203},[1052],{"type":38,"value":342},{"type":28,"tag":162,"props":1054,"children":1055},{"style":345},[1056],{"type":38,"value":348},{"type":28,"tag":162,"props":1058,"children":1059},{"style":185},[1060],{"type":38,"value":353},{"type":28,"tag":162,"props":1062,"children":1063},{"style":203},[1064],{"type":38,"value":358},{"type":28,"tag":162,"props":1066,"children":1067},{"style":203},[1068],{"type":38,"value":363},{"type":28,"tag":162,"props":1070,"children":1072},{"class":164,"line":1071},38,[1073],{"type":28,"tag":162,"props":1074,"children":1075},{"style":169},[1076],{"type":38,"value":1077},"    \u002F\u002F Code pour envoyer l'email de confirmation\n",{"type":28,"tag":162,"props":1079,"children":1081},{"class":164,"line":1080},39,[1082],{"type":28,"tag":162,"props":1083,"children":1084},{"style":203},[1085],{"type":38,"value":637},{"type":28,"tag":162,"props":1087,"children":1089},{"class":164,"line":1088},40,[1090],{"type":28,"tag":162,"props":1091,"children":1092},{"emptyLinePlaceholder":13},[1093],{"type":38,"value":215},{"type":28,"tag":162,"props":1095,"children":1097},{"class":164,"line":1096},41,[1098,1102,1106,1111,1115],{"type":28,"tag":162,"props":1099,"children":1100},{"style":179},[1101],{"type":38,"value":867},{"type":28,"tag":162,"props":1103,"children":1104},{"style":179},[1105],{"type":38,"value":331},{"type":28,"tag":162,"props":1107,"children":1108},{"style":334},[1109],{"type":38,"value":1110}," handleInvalidOrder",{"type":28,"tag":162,"props":1112,"children":1113},{"style":203},[1114],{"type":38,"value":451},{"type":28,"tag":162,"props":1116,"children":1117},{"style":203},[1118],{"type":38,"value":363},{"type":28,"tag":162,"props":1120,"children":1122},{"class":164,"line":1121},42,[1123,1128,1132,1136,1140,1144,1148,1152],{"type":28,"tag":162,"props":1124,"children":1125},{"style":185},[1126],{"type":38,"value":1127},"    System",{"type":28,"tag":162,"props":1129,"children":1130},{"style":203},[1131],{"type":38,"value":79},{"type":28,"tag":162,"props":1133,"children":1134},{"style":185},[1135],{"type":38,"value":596},{"type":28,"tag":162,"props":1137,"children":1138},{"style":203},[1139],{"type":38,"value":79},{"type":28,"tag":162,"props":1141,"children":1142},{"style":334},[1143],{"type":38,"value":605},{"type":28,"tag":162,"props":1145,"children":1146},{"style":203},[1147],{"type":38,"value":342},{"type":28,"tag":162,"props":1149,"children":1150},{"style":612},[1151],{"type":38,"value":615},{"type":28,"tag":162,"props":1153,"children":1154},{"style":203},[1155],{"type":38,"value":474},{"type":28,"tag":162,"props":1157,"children":1159},{"class":164,"line":1158},43,[1160],{"type":28,"tag":162,"props":1161,"children":1162},{"style":203},[1163],{"type":38,"value":637},{"type":28,"tag":51,"props":1165,"children":1166},{},[1167,1169,1175],{"type":38,"value":1168},"Dans le second exemple, chaque étape du processus est divisée en fonctions plus petites et spécifiques. La fonction ",{"type":28,"tag":57,"props":1170,"children":1172},{"className":1171},[],[1173],{"type":38,"value":1174},"processOrder",{"type":38,"value":1176}," ne fait plus qu'orchestrer les étapes, tandis que les détails comme le calcul du total ou l'envoi de l'email de confirmation sont délégués à des fonctions plus courtes et plus ciblées.",{"type":28,"tag":51,"props":1178,"children":1179},{},[1180],{"type":38,"value":1181},"Un commentaire qui décrit ce que fait une fonction est presque toujours le signe que la fonction fait trop de choses. Le commentaire devient le nom d'une nouvelle méthode extraite.",{"type":28,"tag":98,"props":1183,"children":1184},{},[],{"type":28,"tag":1186,"props":1187,"children":1192},"cta",{"cta":1188,"href":1189,"title":1190,"type":1191},"Coder comme un senior →","https:\u002F\u002Fapp.kamanga.fr\u002Fforms\u002Fmentoring","Vous voulez écrire du code que vous comprendrez encore dans six mois ?","call",[1193],{"type":28,"tag":51,"props":1194,"children":1195},{},[1196],{"type":38,"value":1197},"Nommer juste, garder une fonction courte, écarter les responsabilités qui s'accumulent : ces réflexes ne s'acquièrent pas en lisant un article, ils se travaillent sur votre vrai code. En mentoring 1:1, je relis vos fonctions et vos classes avec vous, je vous montre où ça dérape et comment reprendre la main. Vous repartez avec des gestes que vous appliquez dès la PR suivante.",{"type":28,"tag":41,"props":1199,"children":1201},{"id":1200},"_3-comment-structurer-le-code-pour-le-rendre-lisible",[1202],{"type":28,"tag":34,"props":1203,"children":1204},{},[1205],{"type":38,"value":1206},"3. Comment structurer le code pour le rendre lisible",{"type":28,"tag":51,"props":1208,"children":1209},{},[1210,1212,1216,1218,1223],{"type":38,"value":1211},"La lisibilité du code est essentielle pour un ",{"type":28,"tag":34,"props":1213,"children":1214},{},[1215],{"type":38,"value":89},{"type":38,"value":1217},". Un code bien structuré est celui qui peut être compris facilement par un autre développeur, même sans explication supplémentaire. Pour cela, je vous recommande de suivre une ",{"type":28,"tag":34,"props":1219,"children":1220},{},[1221],{"type":38,"value":1222},"hiérarchie logique",{"type":38,"value":1224}," et d'éviter les longs blocs de code imbriqués.",{"type":28,"tag":51,"props":1226,"children":1227},{},[1228],{"type":28,"tag":34,"props":1229,"children":1230},{},[1231],{"type":38,"value":150},{"type":28,"tag":152,"props":1233,"children":1235},{"className":154,"code":1234,"language":156,"meta":8,"style":8},"\u002F\u002F Mauvais exemple\nif (isValidUser(user)) {\n    if (hasSufficientBalance(user)) {\n        processPayment();\n    } else {\n        \u002F\u002F ...\n    }\n} else {\n    \u002F\u002F ...\n}\n\n\u002F\u002F Meilleur exemple\nif (!isValidUser(user)) {\n    return;\n}\n\nif (!hasSufficientBalance(user)) {\n    return;\n}\n\nprocessPayment();\n",[1236],{"type":28,"tag":57,"props":1237,"children":1238},{"__ignoreMap":8},[1239,1246,1281,1313,1324,1339,1347,1354,1370,1378,1385,1392,1399,1435,1446,1453,1460,1495,1506,1513,1520],{"type":28,"tag":162,"props":1240,"children":1241},{"class":164,"line":165},[1242],{"type":28,"tag":162,"props":1243,"children":1244},{"style":169},[1245],{"type":38,"value":172},{"type":28,"tag":162,"props":1247,"children":1248},{"class":164,"line":175},[1249,1254,1258,1263,1267,1272,1277],{"type":28,"tag":162,"props":1250,"children":1251},{"style":179},[1252],{"type":38,"value":1253},"if",{"type":28,"tag":162,"props":1255,"children":1256},{"style":203},[1257],{"type":38,"value":384},{"type":28,"tag":162,"props":1259,"children":1260},{"style":334},[1261],{"type":38,"value":1262},"isValidUser",{"type":28,"tag":162,"props":1264,"children":1265},{"style":203},[1266],{"type":38,"value":342},{"type":28,"tag":162,"props":1268,"children":1269},{"style":185},[1270],{"type":38,"value":1271},"user",{"type":28,"tag":162,"props":1273,"children":1274},{"style":203},[1275],{"type":38,"value":1276},"))",{"type":28,"tag":162,"props":1278,"children":1279},{"style":203},[1280],{"type":38,"value":363},{"type":28,"tag":162,"props":1282,"children":1283},{"class":164,"line":209},[1284,1288,1292,1297,1301,1305,1309],{"type":28,"tag":162,"props":1285,"children":1286},{"style":179},[1287],{"type":38,"value":379},{"type":28,"tag":162,"props":1289,"children":1290},{"style":203},[1291],{"type":38,"value":384},{"type":28,"tag":162,"props":1293,"children":1294},{"style":334},[1295],{"type":38,"value":1296},"hasSufficientBalance",{"type":28,"tag":162,"props":1298,"children":1299},{"style":203},[1300],{"type":38,"value":342},{"type":28,"tag":162,"props":1302,"children":1303},{"style":185},[1304],{"type":38,"value":1271},{"type":28,"tag":162,"props":1306,"children":1307},{"style":203},[1308],{"type":38,"value":1276},{"type":28,"tag":162,"props":1310,"children":1311},{"style":203},[1312],{"type":38,"value":363},{"type":28,"tag":162,"props":1314,"children":1315},{"class":164,"line":218},[1316,1320],{"type":28,"tag":162,"props":1317,"children":1318},{"style":334},[1319],{"type":38,"value":500},{"type":28,"tag":162,"props":1321,"children":1322},{"style":203},[1323],{"type":38,"value":834},{"type":28,"tag":162,"props":1325,"children":1326},{"class":164,"line":227},[1327,1331,1335],{"type":28,"tag":162,"props":1328,"children":1329},{"style":203},[1330],{"type":38,"value":569},{"type":28,"tag":162,"props":1332,"children":1333},{"style":179},[1334],{"type":38,"value":574},{"type":28,"tag":162,"props":1336,"children":1337},{"style":203},[1338],{"type":38,"value":363},{"type":28,"tag":162,"props":1340,"children":1341},{"class":164,"line":418},[1342],{"type":28,"tag":162,"props":1343,"children":1344},{"style":169},[1345],{"type":38,"value":1346},"        \u002F\u002F ...\n",{"type":28,"tag":162,"props":1348,"children":1349},{"class":164,"line":477},[1350],{"type":28,"tag":162,"props":1351,"children":1352},{"style":203},[1353],{"type":38,"value":628},{"type":28,"tag":162,"props":1355,"children":1356},{"class":164,"line":485},[1357,1362,1366],{"type":28,"tag":162,"props":1358,"children":1359},{"style":203},[1360],{"type":38,"value":1361},"}",{"type":28,"tag":162,"props":1363,"children":1364},{"style":179},[1365],{"type":38,"value":574},{"type":28,"tag":162,"props":1367,"children":1368},{"style":203},[1369],{"type":38,"value":363},{"type":28,"tag":162,"props":1371,"children":1372},{"class":164,"line":494},[1373],{"type":28,"tag":162,"props":1374,"children":1375},{"style":169},[1376],{"type":38,"value":1377},"    \u002F\u002F ...\n",{"type":28,"tag":162,"props":1379,"children":1380},{"class":164,"line":525},[1381],{"type":28,"tag":162,"props":1382,"children":1383},{"style":203},[1384],{"type":38,"value":637},{"type":28,"tag":162,"props":1386,"children":1387},{"class":164,"line":533},[1388],{"type":28,"tag":162,"props":1389,"children":1390},{"emptyLinePlaceholder":13},[1391],{"type":38,"value":215},{"type":28,"tag":162,"props":1393,"children":1394},{"class":164,"line":542},[1395],{"type":28,"tag":162,"props":1396,"children":1397},{"style":169},[1398],{"type":38,"value":224},{"type":28,"tag":162,"props":1400,"children":1401},{"class":164,"line":563},[1402,1406,1410,1415,1419,1423,1427,1431],{"type":28,"tag":162,"props":1403,"children":1404},{"style":179},[1405],{"type":38,"value":1253},{"type":28,"tag":162,"props":1407,"children":1408},{"style":203},[1409],{"type":38,"value":384},{"type":28,"tag":162,"props":1411,"children":1412},{"style":191},[1413],{"type":38,"value":1414},"!",{"type":28,"tag":162,"props":1416,"children":1417},{"style":334},[1418],{"type":38,"value":1262},{"type":28,"tag":162,"props":1420,"children":1421},{"style":203},[1422],{"type":38,"value":342},{"type":28,"tag":162,"props":1424,"children":1425},{"style":185},[1426],{"type":38,"value":1271},{"type":28,"tag":162,"props":1428,"children":1429},{"style":203},[1430],{"type":38,"value":1276},{"type":28,"tag":162,"props":1432,"children":1433},{"style":203},[1434],{"type":38,"value":363},{"type":28,"tag":162,"props":1436,"children":1437},{"class":164,"line":581},[1438,1442],{"type":28,"tag":162,"props":1439,"children":1440},{"style":179},[1441],{"type":38,"value":905},{"type":28,"tag":162,"props":1443,"children":1444},{"style":203},[1445],{"type":38,"value":206},{"type":28,"tag":162,"props":1447,"children":1448},{"class":164,"line":622},[1449],{"type":28,"tag":162,"props":1450,"children":1451},{"style":203},[1452],{"type":38,"value":637},{"type":28,"tag":162,"props":1454,"children":1455},{"class":164,"line":631},[1456],{"type":28,"tag":162,"props":1457,"children":1458},{"emptyLinePlaceholder":13},[1459],{"type":38,"value":215},{"type":28,"tag":162,"props":1461,"children":1462},{"class":164,"line":640},[1463,1467,1471,1475,1479,1483,1487,1491],{"type":28,"tag":162,"props":1464,"children":1465},{"style":179},[1466],{"type":38,"value":1253},{"type":28,"tag":162,"props":1468,"children":1469},{"style":203},[1470],{"type":38,"value":384},{"type":28,"tag":162,"props":1472,"children":1473},{"style":191},[1474],{"type":38,"value":1414},{"type":28,"tag":162,"props":1476,"children":1477},{"style":334},[1478],{"type":38,"value":1296},{"type":28,"tag":162,"props":1480,"children":1481},{"style":203},[1482],{"type":38,"value":342},{"type":28,"tag":162,"props":1484,"children":1485},{"style":185},[1486],{"type":38,"value":1271},{"type":28,"tag":162,"props":1488,"children":1489},{"style":203},[1490],{"type":38,"value":1276},{"type":28,"tag":162,"props":1492,"children":1493},{"style":203},[1494],{"type":38,"value":363},{"type":28,"tag":162,"props":1496,"children":1497},{"class":164,"line":648},[1498,1502],{"type":28,"tag":162,"props":1499,"children":1500},{"style":179},[1501],{"type":38,"value":905},{"type":28,"tag":162,"props":1503,"children":1504},{"style":203},[1505],{"type":38,"value":206},{"type":28,"tag":162,"props":1507,"children":1508},{"class":164,"line":657},[1509],{"type":28,"tag":162,"props":1510,"children":1511},{"style":203},[1512],{"type":38,"value":637},{"type":28,"tag":162,"props":1514,"children":1515},{"class":164,"line":693},[1516],{"type":28,"tag":162,"props":1517,"children":1518},{"emptyLinePlaceholder":13},[1519],{"type":38,"value":215},{"type":28,"tag":162,"props":1521,"children":1522},{"class":164,"line":725},[1523,1528],{"type":28,"tag":162,"props":1524,"children":1525},{"style":334},[1526],{"type":38,"value":1527},"processPayment",{"type":28,"tag":162,"props":1529,"children":1530},{"style":203},[1531],{"type":38,"value":834},{"type":28,"tag":51,"props":1533,"children":1534},{},[1535],{"type":38,"value":1536},"Dans le second exemple, la structure est plus claire : chaque condition est traitée séparément, les cas d'erreur sont écartés au début. Le lecteur suit le flux nominal sans avoir à dépiler trois niveaux d'imbrication.",{"type":28,"tag":98,"props":1538,"children":1539},{},[],{"type":28,"tag":29,"props":1541,"children":1543},{"id":1542},"exemples-de-clean-code-en-java",[1544],{"type":28,"tag":34,"props":1545,"children":1546},{},[1547],{"type":38,"value":1548},"Exemples de Clean Code en Java",{"type":28,"tag":51,"props":1550,"children":1551},{},[1552,1554,1558,1560,1565],{"type":38,"value":1553},"Rien ne vaut des exemples concrets pour mieux comprendre comment appliquer les principes du ",{"type":28,"tag":34,"props":1555,"children":1556},{},[1557],{"type":38,"value":89},{"type":38,"value":1559},". Voici quelques exemples pratiques en ",{"type":28,"tag":34,"props":1561,"children":1562},{},[1563],{"type":38,"value":1564},"Java",{"type":38,"value":1566},", basés sur les principes vus précédemment. Ces exemples vous montreront comment améliorer la clarté, la lisibilité et la maintenabilité de votre code.",{"type":28,"tag":41,"props":1568,"children":1570},{"id":1569},"_1-variables-bien-nommées",[1571],{"type":28,"tag":34,"props":1572,"children":1573},{},[1574],{"type":38,"value":1575},"1. Variables bien nommées",{"type":28,"tag":51,"props":1577,"children":1578},{},[1579,1581,1585],{"type":38,"value":1580},"Donner des noms explicites aux variables reste l'une des bases du ",{"type":28,"tag":34,"props":1582,"children":1583},{},[1584],{"type":38,"value":89},{"type":38,"value":1586}," : un code bien nommé se passe de commentaires.",{"type":28,"tag":51,"props":1588,"children":1589},{},[1590],{"type":28,"tag":34,"props":1591,"children":1592},{},[1593],{"type":38,"value":150},{"type":28,"tag":152,"props":1595,"children":1597},{"className":154,"code":1596,"language":156,"meta":8,"style":8},"\u002F\u002F Mauvais exemple\ndouble v = getVolume();\n\n\u002F\u002F Meilleur exemple\ndouble volumeDeLaBoite = getVolume();\n",[1598],{"type":28,"tag":57,"props":1599,"children":1600},{"__ignoreMap":8},[1601,1608,1634,1641,1648],{"type":28,"tag":162,"props":1602,"children":1603},{"class":164,"line":165},[1604],{"type":28,"tag":162,"props":1605,"children":1606},{"style":169},[1607],{"type":38,"value":172},{"type":28,"tag":162,"props":1609,"children":1610},{"class":164,"line":175},[1611,1616,1621,1625,1630],{"type":28,"tag":162,"props":1612,"children":1613},{"style":179},[1614],{"type":38,"value":1615},"double",{"type":28,"tag":162,"props":1617,"children":1618},{"style":185},[1619],{"type":38,"value":1620}," v ",{"type":28,"tag":162,"props":1622,"children":1623},{"style":191},[1624],{"type":38,"value":194},{"type":28,"tag":162,"props":1626,"children":1627},{"style":334},[1628],{"type":38,"value":1629}," getVolume",{"type":28,"tag":162,"props":1631,"children":1632},{"style":203},[1633],{"type":38,"value":834},{"type":28,"tag":162,"props":1635,"children":1636},{"class":164,"line":209},[1637],{"type":28,"tag":162,"props":1638,"children":1639},{"emptyLinePlaceholder":13},[1640],{"type":38,"value":215},{"type":28,"tag":162,"props":1642,"children":1643},{"class":164,"line":218},[1644],{"type":28,"tag":162,"props":1645,"children":1646},{"style":169},[1647],{"type":38,"value":224},{"type":28,"tag":162,"props":1649,"children":1650},{"class":164,"line":227},[1651,1655,1660,1664,1668],{"type":28,"tag":162,"props":1652,"children":1653},{"style":179},[1654],{"type":38,"value":1615},{"type":28,"tag":162,"props":1656,"children":1657},{"style":185},[1658],{"type":38,"value":1659}," volumeDeLaBoite ",{"type":28,"tag":162,"props":1661,"children":1662},{"style":191},[1663],{"type":38,"value":194},{"type":28,"tag":162,"props":1665,"children":1666},{"style":334},[1667],{"type":38,"value":1629},{"type":28,"tag":162,"props":1669,"children":1670},{"style":203},[1671],{"type":38,"value":834},{"type":28,"tag":51,"props":1673,"children":1674},{},[1675,1677,1683,1685,1691],{"type":38,"value":1676},"Dans le second exemple, le nom ",{"type":28,"tag":57,"props":1678,"children":1680},{"className":1679},[],[1681],{"type":38,"value":1682},"volumeDeLaBoite",{"type":38,"value":1684}," explique clairement ce que représente cette donnée, tandis que ",{"type":28,"tag":57,"props":1686,"children":1688},{"className":1687},[],[1689],{"type":38,"value":1690},"v",{"type":38,"value":1692}," est trop vague. On facilite ainsi la compréhension du code sans avoir besoin de lire toute la logique.",{"type":28,"tag":41,"props":1694,"children":1696},{"id":1695},"_2-fonctions-courtes-et-focalisées",[1697],{"type":28,"tag":34,"props":1698,"children":1699},{},[1700],{"type":38,"value":1701},"2. Fonctions courtes et focalisées",{"type":28,"tag":51,"props":1703,"children":1704},{},[1705],{"type":38,"value":1706},"Une bonne fonction doit être courte et se concentrer sur une seule responsabilité. Cela rend votre code plus lisible et plus facile à tester.",{"type":28,"tag":51,"props":1708,"children":1709},{},[1710],{"type":28,"tag":34,"props":1711,"children":1712},{},[1713],{"type":38,"value":150},{"type":28,"tag":152,"props":1715,"children":1717},{"className":154,"code":1716,"language":156,"meta":8,"style":8},"\u002F\u002F Mauvais exemple\npublic void calculerEtEnvoyerFacture(Client client) {\n    \u002F\u002F Calcul des montants\n    double montantHT = client.getPrixHT();\n    double taxe = montantHT * 0.2;\n    double montantTotal = montantHT + taxe;\n    \n    \u002F\u002F Envoi du mail\n    String message = \"Facture envoyée\";\n    envoyerMail(client.getEmail(), message);\n}\n\n\u002F\u002F Meilleur exemple\npublic double calculerMontantTotal(Client client) {\n    double montantHT = client.getPrixHT();\n    double taxe = montantHT * 0.2;\n    return montantHT + taxe;\n}\n\npublic void envoyerFacture(Client client) {\n    envoyerMail(client.getEmail(), \"Facture envoyée\");\n}\n",[1718],{"type":28,"tag":57,"props":1719,"children":1720},{"__ignoreMap":8},[1721,1728,1766,1774,1808,1842,1876,1884,1892,1918,1958,1965,1972,1979,2015,2046,2077,2100,2107,2114,2150,2185],{"type":28,"tag":162,"props":1722,"children":1723},{"class":164,"line":165},[1724],{"type":28,"tag":162,"props":1725,"children":1726},{"style":169},[1727],{"type":38,"value":172},{"type":28,"tag":162,"props":1729,"children":1730},{"class":164,"line":175},[1731,1735,1739,1744,1748,1753,1758,1762],{"type":28,"tag":162,"props":1732,"children":1733},{"style":179},[1734],{"type":38,"value":326},{"type":28,"tag":162,"props":1736,"children":1737},{"style":179},[1738],{"type":38,"value":331},{"type":28,"tag":162,"props":1740,"children":1741},{"style":334},[1742],{"type":38,"value":1743}," calculerEtEnvoyerFacture",{"type":28,"tag":162,"props":1745,"children":1746},{"style":203},[1747],{"type":38,"value":342},{"type":28,"tag":162,"props":1749,"children":1750},{"style":345},[1751],{"type":38,"value":1752},"Client",{"type":28,"tag":162,"props":1754,"children":1755},{"style":185},[1756],{"type":38,"value":1757}," client",{"type":28,"tag":162,"props":1759,"children":1760},{"style":203},[1761],{"type":38,"value":358},{"type":28,"tag":162,"props":1763,"children":1764},{"style":203},[1765],{"type":38,"value":363},{"type":28,"tag":162,"props":1767,"children":1768},{"class":164,"line":209},[1769],{"type":28,"tag":162,"props":1770,"children":1771},{"style":169},[1772],{"type":38,"value":1773},"    \u002F\u002F Calcul des montants\n",{"type":28,"tag":162,"props":1775,"children":1776},{"class":164,"line":218},[1777,1782,1787,1791,1795,1799,1804],{"type":28,"tag":162,"props":1778,"children":1779},{"style":179},[1780],{"type":38,"value":1781},"    double",{"type":28,"tag":162,"props":1783,"children":1784},{"style":185},[1785],{"type":38,"value":1786}," montantHT ",{"type":28,"tag":162,"props":1788,"children":1789},{"style":191},[1790],{"type":38,"value":194},{"type":28,"tag":162,"props":1792,"children":1793},{"style":185},[1794],{"type":38,"value":1757},{"type":28,"tag":162,"props":1796,"children":1797},{"style":203},[1798],{"type":38,"value":79},{"type":28,"tag":162,"props":1800,"children":1801},{"style":334},[1802],{"type":38,"value":1803},"getPrixHT",{"type":28,"tag":162,"props":1805,"children":1806},{"style":203},[1807],{"type":38,"value":834},{"type":28,"tag":162,"props":1809,"children":1810},{"class":164,"line":227},[1811,1815,1820,1824,1828,1833,1838],{"type":28,"tag":162,"props":1812,"children":1813},{"style":179},[1814],{"type":38,"value":1781},{"type":28,"tag":162,"props":1816,"children":1817},{"style":185},[1818],{"type":38,"value":1819}," taxe ",{"type":28,"tag":162,"props":1821,"children":1822},{"style":191},[1823],{"type":38,"value":194},{"type":28,"tag":162,"props":1825,"children":1826},{"style":185},[1827],{"type":38,"value":1786},{"type":28,"tag":162,"props":1829,"children":1830},{"style":191},[1831],{"type":38,"value":1832},"*",{"type":28,"tag":162,"props":1834,"children":1835},{"style":197},[1836],{"type":38,"value":1837}," 0.2",{"type":28,"tag":162,"props":1839,"children":1840},{"style":203},[1841],{"type":38,"value":206},{"type":28,"tag":162,"props":1843,"children":1844},{"class":164,"line":418},[1845,1849,1854,1858,1862,1867,1872],{"type":28,"tag":162,"props":1846,"children":1847},{"style":179},[1848],{"type":38,"value":1781},{"type":28,"tag":162,"props":1850,"children":1851},{"style":185},[1852],{"type":38,"value":1853}," montantTotal ",{"type":28,"tag":162,"props":1855,"children":1856},{"style":191},[1857],{"type":38,"value":194},{"type":28,"tag":162,"props":1859,"children":1860},{"style":185},[1861],{"type":38,"value":1786},{"type":28,"tag":162,"props":1863,"children":1864},{"style":191},[1865],{"type":38,"value":1866},"+",{"type":28,"tag":162,"props":1868,"children":1869},{"style":185},[1870],{"type":38,"value":1871}," taxe",{"type":28,"tag":162,"props":1873,"children":1874},{"style":203},[1875],{"type":38,"value":206},{"type":28,"tag":162,"props":1877,"children":1878},{"class":164,"line":477},[1879],{"type":28,"tag":162,"props":1880,"children":1881},{"style":185},[1882],{"type":38,"value":1883},"    \n",{"type":28,"tag":162,"props":1885,"children":1886},{"class":164,"line":485},[1887],{"type":28,"tag":162,"props":1888,"children":1889},{"style":169},[1890],{"type":38,"value":1891},"    \u002F\u002F Envoi du mail\n",{"type":28,"tag":162,"props":1893,"children":1894},{"class":164,"line":494},[1895,1900,1905,1909,1914],{"type":28,"tag":162,"props":1896,"children":1897},{"style":345},[1898],{"type":38,"value":1899},"    String",{"type":28,"tag":162,"props":1901,"children":1902},{"style":185},[1903],{"type":38,"value":1904}," message ",{"type":28,"tag":162,"props":1906,"children":1907},{"style":191},[1908],{"type":38,"value":194},{"type":28,"tag":162,"props":1910,"children":1911},{"style":612},[1912],{"type":38,"value":1913}," \"Facture envoyée\"",{"type":28,"tag":162,"props":1915,"children":1916},{"style":203},[1917],{"type":38,"value":206},{"type":28,"tag":162,"props":1919,"children":1920},{"class":164,"line":525},[1921,1926,1930,1935,1939,1944,1949,1954],{"type":28,"tag":162,"props":1922,"children":1923},{"style":334},[1924],{"type":38,"value":1925},"    envoyerMail",{"type":28,"tag":162,"props":1927,"children":1928},{"style":203},[1929],{"type":38,"value":342},{"type":28,"tag":162,"props":1931,"children":1932},{"style":185},[1933],{"type":38,"value":1934},"client",{"type":28,"tag":162,"props":1936,"children":1937},{"style":203},[1938],{"type":38,"value":79},{"type":28,"tag":162,"props":1940,"children":1941},{"style":334},[1942],{"type":38,"value":1943},"getEmail",{"type":28,"tag":162,"props":1945,"children":1946},{"style":203},[1947],{"type":38,"value":1948},"(),",{"type":28,"tag":162,"props":1950,"children":1951},{"style":185},[1952],{"type":38,"value":1953}," message",{"type":28,"tag":162,"props":1955,"children":1956},{"style":203},[1957],{"type":38,"value":474},{"type":28,"tag":162,"props":1959,"children":1960},{"class":164,"line":533},[1961],{"type":28,"tag":162,"props":1962,"children":1963},{"style":203},[1964],{"type":38,"value":637},{"type":28,"tag":162,"props":1966,"children":1967},{"class":164,"line":542},[1968],{"type":28,"tag":162,"props":1969,"children":1970},{"emptyLinePlaceholder":13},[1971],{"type":38,"value":215},{"type":28,"tag":162,"props":1973,"children":1974},{"class":164,"line":563},[1975],{"type":28,"tag":162,"props":1976,"children":1977},{"style":169},[1978],{"type":38,"value":224},{"type":28,"tag":162,"props":1980,"children":1981},{"class":164,"line":581},[1982,1986,1990,1995,1999,2003,2007,2011],{"type":28,"tag":162,"props":1983,"children":1984},{"style":179},[1985],{"type":38,"value":326},{"type":28,"tag":162,"props":1987,"children":1988},{"style":179},[1989],{"type":38,"value":872},{"type":28,"tag":162,"props":1991,"children":1992},{"style":334},[1993],{"type":38,"value":1994}," calculerMontantTotal",{"type":28,"tag":162,"props":1996,"children":1997},{"style":203},[1998],{"type":38,"value":342},{"type":28,"tag":162,"props":2000,"children":2001},{"style":345},[2002],{"type":38,"value":1752},{"type":28,"tag":162,"props":2004,"children":2005},{"style":185},[2006],{"type":38,"value":1757},{"type":28,"tag":162,"props":2008,"children":2009},{"style":203},[2010],{"type":38,"value":358},{"type":28,"tag":162,"props":2012,"children":2013},{"style":203},[2014],{"type":38,"value":363},{"type":28,"tag":162,"props":2016,"children":2017},{"class":164,"line":622},[2018,2022,2026,2030,2034,2038,2042],{"type":28,"tag":162,"props":2019,"children":2020},{"style":179},[2021],{"type":38,"value":1781},{"type":28,"tag":162,"props":2023,"children":2024},{"style":185},[2025],{"type":38,"value":1786},{"type":28,"tag":162,"props":2027,"children":2028},{"style":191},[2029],{"type":38,"value":194},{"type":28,"tag":162,"props":2031,"children":2032},{"style":185},[2033],{"type":38,"value":1757},{"type":28,"tag":162,"props":2035,"children":2036},{"style":203},[2037],{"type":38,"value":79},{"type":28,"tag":162,"props":2039,"children":2040},{"style":334},[2041],{"type":38,"value":1803},{"type":28,"tag":162,"props":2043,"children":2044},{"style":203},[2045],{"type":38,"value":834},{"type":28,"tag":162,"props":2047,"children":2048},{"class":164,"line":631},[2049,2053,2057,2061,2065,2069,2073],{"type":28,"tag":162,"props":2050,"children":2051},{"style":179},[2052],{"type":38,"value":1781},{"type":28,"tag":162,"props":2054,"children":2055},{"style":185},[2056],{"type":38,"value":1819},{"type":28,"tag":162,"props":2058,"children":2059},{"style":191},[2060],{"type":38,"value":194},{"type":28,"tag":162,"props":2062,"children":2063},{"style":185},[2064],{"type":38,"value":1786},{"type":28,"tag":162,"props":2066,"children":2067},{"style":191},[2068],{"type":38,"value":1832},{"type":28,"tag":162,"props":2070,"children":2071},{"style":197},[2072],{"type":38,"value":1837},{"type":28,"tag":162,"props":2074,"children":2075},{"style":203},[2076],{"type":38,"value":206},{"type":28,"tag":162,"props":2078,"children":2079},{"class":164,"line":640},[2080,2084,2088,2092,2096],{"type":28,"tag":162,"props":2081,"children":2082},{"style":179},[2083],{"type":38,"value":905},{"type":28,"tag":162,"props":2085,"children":2086},{"style":185},[2087],{"type":38,"value":1786},{"type":28,"tag":162,"props":2089,"children":2090},{"style":191},[2091],{"type":38,"value":1866},{"type":28,"tag":162,"props":2093,"children":2094},{"style":185},[2095],{"type":38,"value":1871},{"type":28,"tag":162,"props":2097,"children":2098},{"style":203},[2099],{"type":38,"value":206},{"type":28,"tag":162,"props":2101,"children":2102},{"class":164,"line":648},[2103],{"type":28,"tag":162,"props":2104,"children":2105},{"style":203},[2106],{"type":38,"value":637},{"type":28,"tag":162,"props":2108,"children":2109},{"class":164,"line":657},[2110],{"type":28,"tag":162,"props":2111,"children":2112},{"emptyLinePlaceholder":13},[2113],{"type":38,"value":215},{"type":28,"tag":162,"props":2115,"children":2116},{"class":164,"line":693},[2117,2121,2125,2130,2134,2138,2142,2146],{"type":28,"tag":162,"props":2118,"children":2119},{"style":179},[2120],{"type":38,"value":326},{"type":28,"tag":162,"props":2122,"children":2123},{"style":179},[2124],{"type":38,"value":331},{"type":28,"tag":162,"props":2126,"children":2127},{"style":334},[2128],{"type":38,"value":2129}," envoyerFacture",{"type":28,"tag":162,"props":2131,"children":2132},{"style":203},[2133],{"type":38,"value":342},{"type":28,"tag":162,"props":2135,"children":2136},{"style":345},[2137],{"type":38,"value":1752},{"type":28,"tag":162,"props":2139,"children":2140},{"style":185},[2141],{"type":38,"value":1757},{"type":28,"tag":162,"props":2143,"children":2144},{"style":203},[2145],{"type":38,"value":358},{"type":28,"tag":162,"props":2147,"children":2148},{"style":203},[2149],{"type":38,"value":363},{"type":28,"tag":162,"props":2151,"children":2152},{"class":164,"line":725},[2153,2157,2161,2165,2169,2173,2177,2181],{"type":28,"tag":162,"props":2154,"children":2155},{"style":334},[2156],{"type":38,"value":1925},{"type":28,"tag":162,"props":2158,"children":2159},{"style":203},[2160],{"type":38,"value":342},{"type":28,"tag":162,"props":2162,"children":2163},{"style":185},[2164],{"type":38,"value":1934},{"type":28,"tag":162,"props":2166,"children":2167},{"style":203},[2168],{"type":38,"value":79},{"type":28,"tag":162,"props":2170,"children":2171},{"style":334},[2172],{"type":38,"value":1943},{"type":28,"tag":162,"props":2174,"children":2175},{"style":203},[2176],{"type":38,"value":1948},{"type":28,"tag":162,"props":2178,"children":2179},{"style":612},[2180],{"type":38,"value":1913},{"type":28,"tag":162,"props":2182,"children":2183},{"style":203},[2184],{"type":38,"value":474},{"type":28,"tag":162,"props":2186,"children":2187},{"class":164,"line":758},[2188],{"type":28,"tag":162,"props":2189,"children":2190},{"style":203},[2191],{"type":38,"value":637},{"type":28,"tag":51,"props":2193,"children":2194},{},[2195],{"type":38,"value":2196},"Dans le second exemple, calcul et envoi d'email sont séparés : chaque fonction se teste indépendamment, et l'intention de chaque bloc devient explicite.",{"type":28,"tag":51,"props":2198,"children":2199},{},[2200],{"type":38,"value":2201},"Règle empirique utile : au-delà de vingt lignes, une fonction est presque toujours candidate à être découpée.",{"type":28,"tag":98,"props":2203,"children":2204},{},[],{"type":28,"tag":41,"props":2206,"children":2208},{"id":2207},"_3-bonne-gestion-des-exceptions",[2209],{"type":28,"tag":34,"props":2210,"children":2211},{},[2212],{"type":38,"value":2213},"3. Bonne gestion des exceptions",{"type":28,"tag":51,"props":2215,"children":2216},{},[2217],{"type":38,"value":2218},"La gestion des erreurs et des exceptions est souvent négligée, mais elle joue un rôle clé dans un code propre. Un bon code doit être capable de traiter les erreurs de manière claire et concise, sans masquer les problèmes.",{"type":28,"tag":51,"props":2220,"children":2221},{},[2222],{"type":28,"tag":34,"props":2223,"children":2224},{},[2225],{"type":38,"value":150},{"type":28,"tag":152,"props":2227,"children":2229},{"className":154,"code":2228,"language":156,"meta":8,"style":8},"\u002F\u002F Mauvais exemple\ntry {\n    processOrder(order);\n} catch (Exception e) {\n    System.out.println(\"Erreur lors du traitement de la commande\");\n}\n\n\u002F\u002F Meilleur exemple\ntry {\n    processOrder(order);\n} catch (InvalidOrderException e) {\n    System.out.println(\"Commande invalide : \" + e.getMessage());\n} catch (PaymentFailedException e) {\n    System.out.println(\"Échec du paiement : \" + e.getMessage());\n}\n",[2230],{"type":28,"tag":57,"props":2231,"children":2232},{"__ignoreMap":8},[2233,2240,2252,2272,2307,2343,2350,2357,2364,2375,2394,2426,2480,2512,2564],{"type":28,"tag":162,"props":2234,"children":2235},{"class":164,"line":165},[2236],{"type":28,"tag":162,"props":2237,"children":2238},{"style":169},[2239],{"type":38,"value":172},{"type":28,"tag":162,"props":2241,"children":2242},{"class":164,"line":175},[2243,2248],{"type":28,"tag":162,"props":2244,"children":2245},{"style":179},[2246],{"type":38,"value":2247},"try",{"type":28,"tag":162,"props":2249,"children":2250},{"style":203},[2251],{"type":38,"value":363},{"type":28,"tag":162,"props":2253,"children":2254},{"class":164,"line":209},[2255,2260,2264,2268],{"type":28,"tag":162,"props":2256,"children":2257},{"style":334},[2258],{"type":38,"value":2259},"    processOrder",{"type":28,"tag":162,"props":2261,"children":2262},{"style":203},[2263],{"type":38,"value":342},{"type":28,"tag":162,"props":2265,"children":2266},{"style":185},[2267],{"type":38,"value":389},{"type":28,"tag":162,"props":2269,"children":2270},{"style":203},[2271],{"type":38,"value":474},{"type":28,"tag":162,"props":2273,"children":2274},{"class":164,"line":218},[2275,2279,2284,2288,2293,2299,2303],{"type":28,"tag":162,"props":2276,"children":2277},{"style":203},[2278],{"type":38,"value":1361},{"type":28,"tag":162,"props":2280,"children":2281},{"style":179},[2282],{"type":38,"value":2283}," catch",{"type":28,"tag":162,"props":2285,"children":2286},{"style":203},[2287],{"type":38,"value":384},{"type":28,"tag":162,"props":2289,"children":2290},{"style":345},[2291],{"type":38,"value":2292},"Exception",{"type":28,"tag":162,"props":2294,"children":2296},{"style":2295},"--shiki-default:#EA999C;--shiki-default-font-style:italic;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit",[2297],{"type":38,"value":2298}," e",{"type":28,"tag":162,"props":2300,"children":2301},{"style":203},[2302],{"type":38,"value":358},{"type":28,"tag":162,"props":2304,"children":2305},{"style":203},[2306],{"type":38,"value":363},{"type":28,"tag":162,"props":2308,"children":2309},{"class":164,"line":227},[2310,2314,2318,2322,2326,2330,2334,2339],{"type":28,"tag":162,"props":2311,"children":2312},{"style":185},[2313],{"type":38,"value":1127},{"type":28,"tag":162,"props":2315,"children":2316},{"style":203},[2317],{"type":38,"value":79},{"type":28,"tag":162,"props":2319,"children":2320},{"style":185},[2321],{"type":38,"value":596},{"type":28,"tag":162,"props":2323,"children":2324},{"style":203},[2325],{"type":38,"value":79},{"type":28,"tag":162,"props":2327,"children":2328},{"style":334},[2329],{"type":38,"value":605},{"type":28,"tag":162,"props":2331,"children":2332},{"style":203},[2333],{"type":38,"value":342},{"type":28,"tag":162,"props":2335,"children":2336},{"style":612},[2337],{"type":38,"value":2338},"\"Erreur lors du traitement de la commande\"",{"type":28,"tag":162,"props":2340,"children":2341},{"style":203},[2342],{"type":38,"value":474},{"type":28,"tag":162,"props":2344,"children":2345},{"class":164,"line":418},[2346],{"type":28,"tag":162,"props":2347,"children":2348},{"style":203},[2349],{"type":38,"value":637},{"type":28,"tag":162,"props":2351,"children":2352},{"class":164,"line":477},[2353],{"type":28,"tag":162,"props":2354,"children":2355},{"emptyLinePlaceholder":13},[2356],{"type":38,"value":215},{"type":28,"tag":162,"props":2358,"children":2359},{"class":164,"line":485},[2360],{"type":28,"tag":162,"props":2361,"children":2362},{"style":169},[2363],{"type":38,"value":224},{"type":28,"tag":162,"props":2365,"children":2366},{"class":164,"line":494},[2367,2371],{"type":28,"tag":162,"props":2368,"children":2369},{"style":179},[2370],{"type":38,"value":2247},{"type":28,"tag":162,"props":2372,"children":2373},{"style":203},[2374],{"type":38,"value":363},{"type":28,"tag":162,"props":2376,"children":2377},{"class":164,"line":525},[2378,2382,2386,2390],{"type":28,"tag":162,"props":2379,"children":2380},{"style":334},[2381],{"type":38,"value":2259},{"type":28,"tag":162,"props":2383,"children":2384},{"style":203},[2385],{"type":38,"value":342},{"type":28,"tag":162,"props":2387,"children":2388},{"style":185},[2389],{"type":38,"value":389},{"type":28,"tag":162,"props":2391,"children":2392},{"style":203},[2393],{"type":38,"value":474},{"type":28,"tag":162,"props":2395,"children":2396},{"class":164,"line":533},[2397,2401,2405,2409,2414,2418,2422],{"type":28,"tag":162,"props":2398,"children":2399},{"style":203},[2400],{"type":38,"value":1361},{"type":28,"tag":162,"props":2402,"children":2403},{"style":179},[2404],{"type":38,"value":2283},{"type":28,"tag":162,"props":2406,"children":2407},{"style":203},[2408],{"type":38,"value":384},{"type":28,"tag":162,"props":2410,"children":2411},{"style":345},[2412],{"type":38,"value":2413},"InvalidOrderException",{"type":28,"tag":162,"props":2415,"children":2416},{"style":2295},[2417],{"type":38,"value":2298},{"type":28,"tag":162,"props":2419,"children":2420},{"style":203},[2421],{"type":38,"value":358},{"type":28,"tag":162,"props":2423,"children":2424},{"style":203},[2425],{"type":38,"value":363},{"type":28,"tag":162,"props":2427,"children":2428},{"class":164,"line":542},[2429,2433,2437,2441,2445,2449,2453,2458,2462,2466,2470,2475],{"type":28,"tag":162,"props":2430,"children":2431},{"style":185},[2432],{"type":38,"value":1127},{"type":28,"tag":162,"props":2434,"children":2435},{"style":203},[2436],{"type":38,"value":79},{"type":28,"tag":162,"props":2438,"children":2439},{"style":185},[2440],{"type":38,"value":596},{"type":28,"tag":162,"props":2442,"children":2443},{"style":203},[2444],{"type":38,"value":79},{"type":28,"tag":162,"props":2446,"children":2447},{"style":334},[2448],{"type":38,"value":605},{"type":28,"tag":162,"props":2450,"children":2451},{"style":203},[2452],{"type":38,"value":342},{"type":28,"tag":162,"props":2454,"children":2455},{"style":612},[2456],{"type":38,"value":2457},"\"Commande invalide : \"",{"type":28,"tag":162,"props":2459,"children":2460},{"style":191},[2461],{"type":38,"value":456},{"type":28,"tag":162,"props":2463,"children":2464},{"style":185},[2465],{"type":38,"value":2298},{"type":28,"tag":162,"props":2467,"children":2468},{"style":203},[2469],{"type":38,"value":79},{"type":28,"tag":162,"props":2471,"children":2472},{"style":334},[2473],{"type":38,"value":2474},"getMessage",{"type":28,"tag":162,"props":2476,"children":2477},{"style":203},[2478],{"type":38,"value":2479},"());\n",{"type":28,"tag":162,"props":2481,"children":2482},{"class":164,"line":563},[2483,2487,2491,2495,2500,2504,2508],{"type":28,"tag":162,"props":2484,"children":2485},{"style":203},[2486],{"type":38,"value":1361},{"type":28,"tag":162,"props":2488,"children":2489},{"style":179},[2490],{"type":38,"value":2283},{"type":28,"tag":162,"props":2492,"children":2493},{"style":203},[2494],{"type":38,"value":384},{"type":28,"tag":162,"props":2496,"children":2497},{"style":345},[2498],{"type":38,"value":2499},"PaymentFailedException",{"type":28,"tag":162,"props":2501,"children":2502},{"style":2295},[2503],{"type":38,"value":2298},{"type":28,"tag":162,"props":2505,"children":2506},{"style":203},[2507],{"type":38,"value":358},{"type":28,"tag":162,"props":2509,"children":2510},{"style":203},[2511],{"type":38,"value":363},{"type":28,"tag":162,"props":2513,"children":2514},{"class":164,"line":581},[2515,2519,2523,2527,2531,2535,2539,2544,2548,2552,2556,2560],{"type":28,"tag":162,"props":2516,"children":2517},{"style":185},[2518],{"type":38,"value":1127},{"type":28,"tag":162,"props":2520,"children":2521},{"style":203},[2522],{"type":38,"value":79},{"type":28,"tag":162,"props":2524,"children":2525},{"style":185},[2526],{"type":38,"value":596},{"type":28,"tag":162,"props":2528,"children":2529},{"style":203},[2530],{"type":38,"value":79},{"type":28,"tag":162,"props":2532,"children":2533},{"style":334},[2534],{"type":38,"value":605},{"type":28,"tag":162,"props":2536,"children":2537},{"style":203},[2538],{"type":38,"value":342},{"type":28,"tag":162,"props":2540,"children":2541},{"style":612},[2542],{"type":38,"value":2543},"\"Échec du paiement : \"",{"type":28,"tag":162,"props":2545,"children":2546},{"style":191},[2547],{"type":38,"value":456},{"type":28,"tag":162,"props":2549,"children":2550},{"style":185},[2551],{"type":38,"value":2298},{"type":28,"tag":162,"props":2553,"children":2554},{"style":203},[2555],{"type":38,"value":79},{"type":28,"tag":162,"props":2557,"children":2558},{"style":334},[2559],{"type":38,"value":2474},{"type":28,"tag":162,"props":2561,"children":2562},{"style":203},[2563],{"type":38,"value":2479},{"type":28,"tag":162,"props":2565,"children":2566},{"class":164,"line":622},[2567],{"type":28,"tag":162,"props":2568,"children":2569},{"style":203},[2570],{"type":38,"value":637},{"type":28,"tag":51,"props":2572,"children":2573},{},[2574],{"type":38,"value":2575},"Dans le second exemple, chaque type d'erreur reçoit son propre traitement : on sait précisément ce qui a échoué et la réaction peut être adaptée au cas.",{"type":28,"tag":29,"props":2577,"children":2579},{"id":2578},"le-catch-exception-e-générique-est-un-anti-pattern-classique-il-masque-les-vraies-causes-et-complique-le-débogage-en-production",[2580,2582,2588],{"type":38,"value":2581},"Le ",{"type":28,"tag":57,"props":2583,"children":2585},{"className":2584},[],[2586],{"type":38,"value":2587},"catch (Exception e)",{"type":38,"value":2589}," générique est un anti-pattern classique : il masque les vraies causes et complique le débogage en production.",{"type":28,"tag":29,"props":2591,"children":2593},{"id":2592},"les-bonnes-pratiques-pour-écrire-du-code-maintenable",[2594],{"type":28,"tag":34,"props":2595,"children":2596},{},[2597],{"type":38,"value":2598},"Les bonnes pratiques pour écrire du code maintenable",{"type":28,"tag":51,"props":2600,"children":2601},{},[2602,2603,2607],{"type":38,"value":2581},{"type":28,"tag":34,"props":2604,"children":2605},{},[2606],{"type":38,"value":89},{"type":38,"value":2608}," ne se limite pas à écrire du code lisible ; il doit aussi être facilement maintenable et évolutif. Voici quelques bonnes pratiques pour s'assurer que votre code reste propre même après plusieurs itérations.",{"type":28,"tag":41,"props":2610,"children":2612},{"id":2611},"_1-le-principe-de-responsabilité-unique-single-responsibility-principle-srp",[2613],{"type":28,"tag":34,"props":2614,"children":2615},{},[2616],{"type":38,"value":2617},"1. Le principe de responsabilité unique (Single Responsibility Principle - SRP)",{"type":28,"tag":51,"props":2619,"children":2620},{},[2621,2622,2627,2629,2634],{"type":38,"value":2581},{"type":28,"tag":34,"props":2623,"children":2624},{},[2625],{"type":38,"value":2626},"principe de responsabilité unique",{"type":38,"value":2628},", formalisé par Robert C. Martin dans ",{"type":28,"tag":2630,"props":2631,"children":2632},"em",{},[2633],{"type":38,"value":89},{"type":38,"value":2635},", énonce qu'une classe ou une fonction ne doit avoir qu'une seule raison de changer. Le bénéfice est direct : moins de dépendances, des tests plus simples, une maintenance qui n'engendre pas d'effets de bord.",{"type":28,"tag":51,"props":2637,"children":2638},{},[2639],{"type":28,"tag":34,"props":2640,"children":2641},{},[2642],{"type":38,"value":150},{"type":28,"tag":152,"props":2644,"children":2646},{"className":154,"code":2645,"language":156,"meta":8,"style":8},"\u002F\u002F Mauvais exemple - Une classe gère trop de responsabilités\npublic class GestionnaireDeCommande {\n    public void creerCommande() {\n        \u002F\u002F Crée une commande\n    }\n    \n    public void calculerRemises() {\n        \u002F\u002F Calcule les remises\n    }\n\n    public void envoyerEmailConfirmation() {\n        \u002F\u002F Envoie un email de confirmation\n    }\n}\n\n\u002F\u002F Meilleur exemple - Responsabilités divisées en plusieurs classes\npublic class CommandeService {\n    public void creerCommande() {\n        \u002F\u002F Crée une commande\n    }\n}\n\npublic class RemiseService {\n    public void calculerRemises() {\n        \u002F\u002F Calcule les remises\n    }\n}\n\npublic class NotificationService {\n    public void envoyerEmailConfirmation() {\n        \u002F\u002F Envoie un email de confirmation\n    }\n}\n",[2647],{"type":28,"tag":57,"props":2648,"children":2649},{"__ignoreMap":8},[2650,2658,2680,2705,2713,2720,2727,2751,2759,2766,2773,2797,2805,2812,2819,2826,2834,2854,2877,2884,2891,2898,2905,2925,2948,2955,2962,2969,2976,2996,3019,3026,3033],{"type":28,"tag":162,"props":2651,"children":2652},{"class":164,"line":165},[2653],{"type":28,"tag":162,"props":2654,"children":2655},{"style":169},[2656],{"type":38,"value":2657},"\u002F\u002F Mauvais exemple - Une classe gère trop de responsabilités\n",{"type":28,"tag":162,"props":2659,"children":2660},{"class":164,"line":175},[2661,2665,2670,2676],{"type":28,"tag":162,"props":2662,"children":2663},{"style":179},[2664],{"type":38,"value":326},{"type":28,"tag":162,"props":2666,"children":2667},{"style":179},[2668],{"type":38,"value":2669}," class",{"type":28,"tag":162,"props":2671,"children":2673},{"style":2672},"--shiki-default:#E5C890;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[2674],{"type":38,"value":2675}," GestionnaireDeCommande",{"type":28,"tag":162,"props":2677,"children":2678},{"style":203},[2679],{"type":38,"value":363},{"type":28,"tag":162,"props":2681,"children":2682},{"class":164,"line":209},[2683,2688,2692,2697,2701],{"type":28,"tag":162,"props":2684,"children":2685},{"style":179},[2686],{"type":38,"value":2687},"    public",{"type":28,"tag":162,"props":2689,"children":2690},{"style":179},[2691],{"type":38,"value":331},{"type":28,"tag":162,"props":2693,"children":2694},{"style":334},[2695],{"type":38,"value":2696}," creerCommande",{"type":28,"tag":162,"props":2698,"children":2699},{"style":203},[2700],{"type":38,"value":451},{"type":28,"tag":162,"props":2702,"children":2703},{"style":203},[2704],{"type":38,"value":363},{"type":28,"tag":162,"props":2706,"children":2707},{"class":164,"line":218},[2708],{"type":28,"tag":162,"props":2709,"children":2710},{"style":169},[2711],{"type":38,"value":2712},"        \u002F\u002F Crée une commande\n",{"type":28,"tag":162,"props":2714,"children":2715},{"class":164,"line":227},[2716],{"type":28,"tag":162,"props":2717,"children":2718},{"style":203},[2719],{"type":38,"value":628},{"type":28,"tag":162,"props":2721,"children":2722},{"class":164,"line":418},[2723],{"type":28,"tag":162,"props":2724,"children":2725},{"style":185},[2726],{"type":38,"value":1883},{"type":28,"tag":162,"props":2728,"children":2729},{"class":164,"line":477},[2730,2734,2738,2743,2747],{"type":28,"tag":162,"props":2731,"children":2732},{"style":179},[2733],{"type":38,"value":2687},{"type":28,"tag":162,"props":2735,"children":2736},{"style":179},[2737],{"type":38,"value":331},{"type":28,"tag":162,"props":2739,"children":2740},{"style":334},[2741],{"type":38,"value":2742}," calculerRemises",{"type":28,"tag":162,"props":2744,"children":2745},{"style":203},[2746],{"type":38,"value":451},{"type":28,"tag":162,"props":2748,"children":2749},{"style":203},[2750],{"type":38,"value":363},{"type":28,"tag":162,"props":2752,"children":2753},{"class":164,"line":485},[2754],{"type":28,"tag":162,"props":2755,"children":2756},{"style":169},[2757],{"type":38,"value":2758},"        \u002F\u002F Calcule les remises\n",{"type":28,"tag":162,"props":2760,"children":2761},{"class":164,"line":494},[2762],{"type":28,"tag":162,"props":2763,"children":2764},{"style":203},[2765],{"type":38,"value":628},{"type":28,"tag":162,"props":2767,"children":2768},{"class":164,"line":525},[2769],{"type":28,"tag":162,"props":2770,"children":2771},{"emptyLinePlaceholder":13},[2772],{"type":38,"value":215},{"type":28,"tag":162,"props":2774,"children":2775},{"class":164,"line":533},[2776,2780,2784,2789,2793],{"type":28,"tag":162,"props":2777,"children":2778},{"style":179},[2779],{"type":38,"value":2687},{"type":28,"tag":162,"props":2781,"children":2782},{"style":179},[2783],{"type":38,"value":331},{"type":28,"tag":162,"props":2785,"children":2786},{"style":334},[2787],{"type":38,"value":2788}," envoyerEmailConfirmation",{"type":28,"tag":162,"props":2790,"children":2791},{"style":203},[2792],{"type":38,"value":451},{"type":28,"tag":162,"props":2794,"children":2795},{"style":203},[2796],{"type":38,"value":363},{"type":28,"tag":162,"props":2798,"children":2799},{"class":164,"line":542},[2800],{"type":28,"tag":162,"props":2801,"children":2802},{"style":169},[2803],{"type":38,"value":2804},"        \u002F\u002F Envoie un email de confirmation\n",{"type":28,"tag":162,"props":2806,"children":2807},{"class":164,"line":563},[2808],{"type":28,"tag":162,"props":2809,"children":2810},{"style":203},[2811],{"type":38,"value":628},{"type":28,"tag":162,"props":2813,"children":2814},{"class":164,"line":581},[2815],{"type":28,"tag":162,"props":2816,"children":2817},{"style":203},[2818],{"type":38,"value":637},{"type":28,"tag":162,"props":2820,"children":2821},{"class":164,"line":622},[2822],{"type":28,"tag":162,"props":2823,"children":2824},{"emptyLinePlaceholder":13},[2825],{"type":38,"value":215},{"type":28,"tag":162,"props":2827,"children":2828},{"class":164,"line":631},[2829],{"type":28,"tag":162,"props":2830,"children":2831},{"style":169},[2832],{"type":38,"value":2833},"\u002F\u002F Meilleur exemple - Responsabilités divisées en plusieurs classes\n",{"type":28,"tag":162,"props":2835,"children":2836},{"class":164,"line":640},[2837,2841,2845,2850],{"type":28,"tag":162,"props":2838,"children":2839},{"style":179},[2840],{"type":38,"value":326},{"type":28,"tag":162,"props":2842,"children":2843},{"style":179},[2844],{"type":38,"value":2669},{"type":28,"tag":162,"props":2846,"children":2847},{"style":2672},[2848],{"type":38,"value":2849}," CommandeService",{"type":28,"tag":162,"props":2851,"children":2852},{"style":203},[2853],{"type":38,"value":363},{"type":28,"tag":162,"props":2855,"children":2856},{"class":164,"line":648},[2857,2861,2865,2869,2873],{"type":28,"tag":162,"props":2858,"children":2859},{"style":179},[2860],{"type":38,"value":2687},{"type":28,"tag":162,"props":2862,"children":2863},{"style":179},[2864],{"type":38,"value":331},{"type":28,"tag":162,"props":2866,"children":2867},{"style":334},[2868],{"type":38,"value":2696},{"type":28,"tag":162,"props":2870,"children":2871},{"style":203},[2872],{"type":38,"value":451},{"type":28,"tag":162,"props":2874,"children":2875},{"style":203},[2876],{"type":38,"value":363},{"type":28,"tag":162,"props":2878,"children":2879},{"class":164,"line":657},[2880],{"type":28,"tag":162,"props":2881,"children":2882},{"style":169},[2883],{"type":38,"value":2712},{"type":28,"tag":162,"props":2885,"children":2886},{"class":164,"line":693},[2887],{"type":28,"tag":162,"props":2888,"children":2889},{"style":203},[2890],{"type":38,"value":628},{"type":28,"tag":162,"props":2892,"children":2893},{"class":164,"line":725},[2894],{"type":28,"tag":162,"props":2895,"children":2896},{"style":203},[2897],{"type":38,"value":637},{"type":28,"tag":162,"props":2899,"children":2900},{"class":164,"line":758},[2901],{"type":28,"tag":162,"props":2902,"children":2903},{"emptyLinePlaceholder":13},[2904],{"type":38,"value":215},{"type":28,"tag":162,"props":2906,"children":2907},{"class":164,"line":786},[2908,2912,2916,2921],{"type":28,"tag":162,"props":2909,"children":2910},{"style":179},[2911],{"type":38,"value":326},{"type":28,"tag":162,"props":2913,"children":2914},{"style":179},[2915],{"type":38,"value":2669},{"type":28,"tag":162,"props":2917,"children":2918},{"style":2672},[2919],{"type":38,"value":2920}," RemiseService",{"type":28,"tag":162,"props":2922,"children":2923},{"style":203},[2924],{"type":38,"value":363},{"type":28,"tag":162,"props":2926,"children":2927},{"class":164,"line":807},[2928,2932,2936,2940,2944],{"type":28,"tag":162,"props":2929,"children":2930},{"style":179},[2931],{"type":38,"value":2687},{"type":28,"tag":162,"props":2933,"children":2934},{"style":179},[2935],{"type":38,"value":331},{"type":28,"tag":162,"props":2937,"children":2938},{"style":334},[2939],{"type":38,"value":2742},{"type":28,"tag":162,"props":2941,"children":2942},{"style":203},[2943],{"type":38,"value":451},{"type":28,"tag":162,"props":2945,"children":2946},{"style":203},[2947],{"type":38,"value":363},{"type":28,"tag":162,"props":2949,"children":2950},{"class":164,"line":823},[2951],{"type":28,"tag":162,"props":2952,"children":2953},{"style":169},[2954],{"type":38,"value":2758},{"type":28,"tag":162,"props":2956,"children":2957},{"class":164,"line":837},[2958],{"type":28,"tag":162,"props":2959,"children":2960},{"style":203},[2961],{"type":38,"value":628},{"type":28,"tag":162,"props":2963,"children":2964},{"class":164,"line":845},[2965],{"type":28,"tag":162,"props":2966,"children":2967},{"style":203},[2968],{"type":38,"value":637},{"type":28,"tag":162,"props":2970,"children":2971},{"class":164,"line":853},[2972],{"type":28,"tag":162,"props":2973,"children":2974},{"emptyLinePlaceholder":13},[2975],{"type":38,"value":215},{"type":28,"tag":162,"props":2977,"children":2978},{"class":164,"line":861},[2979,2983,2987,2992],{"type":28,"tag":162,"props":2980,"children":2981},{"style":179},[2982],{"type":38,"value":326},{"type":28,"tag":162,"props":2984,"children":2985},{"style":179},[2986],{"type":38,"value":2669},{"type":28,"tag":162,"props":2988,"children":2989},{"style":2672},[2990],{"type":38,"value":2991}," NotificationService",{"type":28,"tag":162,"props":2993,"children":2994},{"style":203},[2995],{"type":38,"value":363},{"type":28,"tag":162,"props":2997,"children":2998},{"class":164,"line":899},[2999,3003,3007,3011,3015],{"type":28,"tag":162,"props":3000,"children":3001},{"style":179},[3002],{"type":38,"value":2687},{"type":28,"tag":162,"props":3004,"children":3005},{"style":179},[3006],{"type":38,"value":331},{"type":28,"tag":162,"props":3008,"children":3009},{"style":334},[3010],{"type":38,"value":2788},{"type":28,"tag":162,"props":3012,"children":3013},{"style":203},[3014],{"type":38,"value":451},{"type":28,"tag":162,"props":3016,"children":3017},{"style":203},[3018],{"type":38,"value":363},{"type":28,"tag":162,"props":3020,"children":3021},{"class":164,"line":944},[3022],{"type":28,"tag":162,"props":3023,"children":3024},{"style":169},[3025],{"type":38,"value":2804},{"type":28,"tag":162,"props":3027,"children":3028},{"class":164,"line":952},[3029],{"type":28,"tag":162,"props":3030,"children":3031},{"style":203},[3032],{"type":38,"value":628},{"type":28,"tag":162,"props":3034,"children":3035},{"class":164,"line":960},[3036],{"type":28,"tag":162,"props":3037,"children":3038},{"style":203},[3039],{"type":38,"value":637},{"type":28,"tag":51,"props":3041,"children":3042},{},[3043],{"type":38,"value":3044},"Chaque classe a maintenant une responsabilité unique : les classes restent légères, les modifications restent localisées, et l'impact d'un changement ne se propage pas en cascade.",{"type":28,"tag":29,"props":3046,"children":3048},{"id":3047},"test-pratique-si-lexplication-de-ce-que-fait-une-classe-nécessite-un-et-elle-fait-x-et-y-il-y-a-une-responsabilité-de-trop",[3049],{"type":38,"value":3050},"Test pratique : si l'explication de ce que fait une classe nécessite un \"et\" (\"elle fait X et Y\"), il y a une responsabilité de trop.",{"type":28,"tag":41,"props":3052,"children":3054},{"id":3053},"_2-éviter-les-duplications-de-code",[3055],{"type":28,"tag":34,"props":3056,"children":3057},{},[3058],{"type":38,"value":3059},"2. Éviter les duplications de code",{"type":28,"tag":51,"props":3061,"children":3062},{},[3063],{"type":38,"value":3064},"Le code dupliqué est un piège fréquent qui complique la maintenance. En éliminant les duplications, vous vous assurez qu'un changement à un endroit du code n'entraîne pas une cascade de modifications à différents endroits.",{"type":28,"tag":51,"props":3066,"children":3067},{},[3068],{"type":28,"tag":34,"props":3069,"children":3070},{},[3071],{"type":38,"value":150},{"type":28,"tag":152,"props":3073,"children":3075},{"className":154,"code":3074,"language":156,"meta":8,"style":8},"\u002F\u002F Mauvais exemple - Duplication de logique\ndouble calculerRemiseClient(double montant) {\n    double remise = 0;\n    if (montant > 1000) {\n        remise = montant * 0.1;\n    }\n    return remise;\n}\n\ndouble calculerRemisePartenaire(double montant) {\n    double remise = 0;\n    if (montant > 1000) {\n        remise = montant * 0.1;\n    }\n    return remise;\n}\n\n\u002F\u002F Meilleur exemple - Refactorisation pour éviter la duplication\ndouble calculerRemise(double montant) {\n    double remise = 0;\n    if (montant > 1000) {\n        remise = montant * 0.1;\n    }\n    return remise;\n}\n",[3076],{"type":28,"tag":57,"props":3077,"children":3078},{"__ignoreMap":8},[3079,3087,3120,3145,3179,3209,3216,3232,3239,3246,3278,3301,3332,3359,3366,3381,3388,3395,3403,3435,3458,3489,3516,3523,3538],{"type":28,"tag":162,"props":3080,"children":3081},{"class":164,"line":165},[3082],{"type":28,"tag":162,"props":3083,"children":3084},{"style":169},[3085],{"type":38,"value":3086},"\u002F\u002F Mauvais exemple - Duplication de logique\n",{"type":28,"tag":162,"props":3088,"children":3089},{"class":164,"line":175},[3090,3094,3099,3103,3107,3112,3116],{"type":28,"tag":162,"props":3091,"children":3092},{"style":179},[3093],{"type":38,"value":1615},{"type":28,"tag":162,"props":3095,"children":3096},{"style":334},[3097],{"type":38,"value":3098}," calculerRemiseClient",{"type":28,"tag":162,"props":3100,"children":3101},{"style":203},[3102],{"type":38,"value":342},{"type":28,"tag":162,"props":3104,"children":3105},{"style":179},[3106],{"type":38,"value":1615},{"type":28,"tag":162,"props":3108,"children":3109},{"style":185},[3110],{"type":38,"value":3111}," montant",{"type":28,"tag":162,"props":3113,"children":3114},{"style":203},[3115],{"type":38,"value":358},{"type":28,"tag":162,"props":3117,"children":3118},{"style":203},[3119],{"type":38,"value":363},{"type":28,"tag":162,"props":3121,"children":3122},{"class":164,"line":209},[3123,3127,3132,3136,3141],{"type":28,"tag":162,"props":3124,"children":3125},{"style":179},[3126],{"type":38,"value":1781},{"type":28,"tag":162,"props":3128,"children":3129},{"style":185},[3130],{"type":38,"value":3131}," remise ",{"type":28,"tag":162,"props":3133,"children":3134},{"style":191},[3135],{"type":38,"value":194},{"type":28,"tag":162,"props":3137,"children":3138},{"style":197},[3139],{"type":38,"value":3140}," 0",{"type":28,"tag":162,"props":3142,"children":3143},{"style":203},[3144],{"type":38,"value":206},{"type":28,"tag":162,"props":3146,"children":3147},{"class":164,"line":218},[3148,3152,3156,3161,3166,3171,3175],{"type":28,"tag":162,"props":3149,"children":3150},{"style":179},[3151],{"type":38,"value":379},{"type":28,"tag":162,"props":3153,"children":3154},{"style":203},[3155],{"type":38,"value":384},{"type":28,"tag":162,"props":3157,"children":3158},{"style":185},[3159],{"type":38,"value":3160},"montant ",{"type":28,"tag":162,"props":3162,"children":3163},{"style":191},[3164],{"type":38,"value":3165},">",{"type":28,"tag":162,"props":3167,"children":3168},{"style":197},[3169],{"type":38,"value":3170}," 1000",{"type":28,"tag":162,"props":3172,"children":3173},{"style":203},[3174],{"type":38,"value":358},{"type":28,"tag":162,"props":3176,"children":3177},{"style":203},[3178],{"type":38,"value":363},{"type":28,"tag":162,"props":3180,"children":3181},{"class":164,"line":227},[3182,3187,3191,3196,3200,3205],{"type":28,"tag":162,"props":3183,"children":3184},{"style":185},[3185],{"type":38,"value":3186},"        remise ",{"type":28,"tag":162,"props":3188,"children":3189},{"style":191},[3190],{"type":38,"value":194},{"type":28,"tag":162,"props":3192,"children":3193},{"style":185},[3194],{"type":38,"value":3195}," montant ",{"type":28,"tag":162,"props":3197,"children":3198},{"style":191},[3199],{"type":38,"value":1832},{"type":28,"tag":162,"props":3201,"children":3202},{"style":197},[3203],{"type":38,"value":3204}," 0.1",{"type":28,"tag":162,"props":3206,"children":3207},{"style":203},[3208],{"type":38,"value":206},{"type":28,"tag":162,"props":3210,"children":3211},{"class":164,"line":418},[3212],{"type":28,"tag":162,"props":3213,"children":3214},{"style":203},[3215],{"type":38,"value":628},{"type":28,"tag":162,"props":3217,"children":3218},{"class":164,"line":477},[3219,3223,3228],{"type":28,"tag":162,"props":3220,"children":3221},{"style":179},[3222],{"type":38,"value":905},{"type":28,"tag":162,"props":3224,"children":3225},{"style":185},[3226],{"type":38,"value":3227}," remise",{"type":28,"tag":162,"props":3229,"children":3230},{"style":203},[3231],{"type":38,"value":206},{"type":28,"tag":162,"props":3233,"children":3234},{"class":164,"line":485},[3235],{"type":28,"tag":162,"props":3236,"children":3237},{"style":203},[3238],{"type":38,"value":637},{"type":28,"tag":162,"props":3240,"children":3241},{"class":164,"line":494},[3242],{"type":28,"tag":162,"props":3243,"children":3244},{"emptyLinePlaceholder":13},[3245],{"type":38,"value":215},{"type":28,"tag":162,"props":3247,"children":3248},{"class":164,"line":525},[3249,3253,3258,3262,3266,3270,3274],{"type":28,"tag":162,"props":3250,"children":3251},{"style":179},[3252],{"type":38,"value":1615},{"type":28,"tag":162,"props":3254,"children":3255},{"style":334},[3256],{"type":38,"value":3257}," calculerRemisePartenaire",{"type":28,"tag":162,"props":3259,"children":3260},{"style":203},[3261],{"type":38,"value":342},{"type":28,"tag":162,"props":3263,"children":3264},{"style":179},[3265],{"type":38,"value":1615},{"type":28,"tag":162,"props":3267,"children":3268},{"style":185},[3269],{"type":38,"value":3111},{"type":28,"tag":162,"props":3271,"children":3272},{"style":203},[3273],{"type":38,"value":358},{"type":28,"tag":162,"props":3275,"children":3276},{"style":203},[3277],{"type":38,"value":363},{"type":28,"tag":162,"props":3279,"children":3280},{"class":164,"line":533},[3281,3285,3289,3293,3297],{"type":28,"tag":162,"props":3282,"children":3283},{"style":179},[3284],{"type":38,"value":1781},{"type":28,"tag":162,"props":3286,"children":3287},{"style":185},[3288],{"type":38,"value":3131},{"type":28,"tag":162,"props":3290,"children":3291},{"style":191},[3292],{"type":38,"value":194},{"type":28,"tag":162,"props":3294,"children":3295},{"style":197},[3296],{"type":38,"value":3140},{"type":28,"tag":162,"props":3298,"children":3299},{"style":203},[3300],{"type":38,"value":206},{"type":28,"tag":162,"props":3302,"children":3303},{"class":164,"line":542},[3304,3308,3312,3316,3320,3324,3328],{"type":28,"tag":162,"props":3305,"children":3306},{"style":179},[3307],{"type":38,"value":379},{"type":28,"tag":162,"props":3309,"children":3310},{"style":203},[3311],{"type":38,"value":384},{"type":28,"tag":162,"props":3313,"children":3314},{"style":185},[3315],{"type":38,"value":3160},{"type":28,"tag":162,"props":3317,"children":3318},{"style":191},[3319],{"type":38,"value":3165},{"type":28,"tag":162,"props":3321,"children":3322},{"style":197},[3323],{"type":38,"value":3170},{"type":28,"tag":162,"props":3325,"children":3326},{"style":203},[3327],{"type":38,"value":358},{"type":28,"tag":162,"props":3329,"children":3330},{"style":203},[3331],{"type":38,"value":363},{"type":28,"tag":162,"props":3333,"children":3334},{"class":164,"line":563},[3335,3339,3343,3347,3351,3355],{"type":28,"tag":162,"props":3336,"children":3337},{"style":185},[3338],{"type":38,"value":3186},{"type":28,"tag":162,"props":3340,"children":3341},{"style":191},[3342],{"type":38,"value":194},{"type":28,"tag":162,"props":3344,"children":3345},{"style":185},[3346],{"type":38,"value":3195},{"type":28,"tag":162,"props":3348,"children":3349},{"style":191},[3350],{"type":38,"value":1832},{"type":28,"tag":162,"props":3352,"children":3353},{"style":197},[3354],{"type":38,"value":3204},{"type":28,"tag":162,"props":3356,"children":3357},{"style":203},[3358],{"type":38,"value":206},{"type":28,"tag":162,"props":3360,"children":3361},{"class":164,"line":581},[3362],{"type":28,"tag":162,"props":3363,"children":3364},{"style":203},[3365],{"type":38,"value":628},{"type":28,"tag":162,"props":3367,"children":3368},{"class":164,"line":622},[3369,3373,3377],{"type":28,"tag":162,"props":3370,"children":3371},{"style":179},[3372],{"type":38,"value":905},{"type":28,"tag":162,"props":3374,"children":3375},{"style":185},[3376],{"type":38,"value":3227},{"type":28,"tag":162,"props":3378,"children":3379},{"style":203},[3380],{"type":38,"value":206},{"type":28,"tag":162,"props":3382,"children":3383},{"class":164,"line":631},[3384],{"type":28,"tag":162,"props":3385,"children":3386},{"style":203},[3387],{"type":38,"value":637},{"type":28,"tag":162,"props":3389,"children":3390},{"class":164,"line":640},[3391],{"type":28,"tag":162,"props":3392,"children":3393},{"emptyLinePlaceholder":13},[3394],{"type":38,"value":215},{"type":28,"tag":162,"props":3396,"children":3397},{"class":164,"line":648},[3398],{"type":28,"tag":162,"props":3399,"children":3400},{"style":169},[3401],{"type":38,"value":3402},"\u002F\u002F Meilleur exemple - Refactorisation pour éviter la duplication\n",{"type":28,"tag":162,"props":3404,"children":3405},{"class":164,"line":657},[3406,3410,3415,3419,3423,3427,3431],{"type":28,"tag":162,"props":3407,"children":3408},{"style":179},[3409],{"type":38,"value":1615},{"type":28,"tag":162,"props":3411,"children":3412},{"style":334},[3413],{"type":38,"value":3414}," calculerRemise",{"type":28,"tag":162,"props":3416,"children":3417},{"style":203},[3418],{"type":38,"value":342},{"type":28,"tag":162,"props":3420,"children":3421},{"style":179},[3422],{"type":38,"value":1615},{"type":28,"tag":162,"props":3424,"children":3425},{"style":185},[3426],{"type":38,"value":3111},{"type":28,"tag":162,"props":3428,"children":3429},{"style":203},[3430],{"type":38,"value":358},{"type":28,"tag":162,"props":3432,"children":3433},{"style":203},[3434],{"type":38,"value":363},{"type":28,"tag":162,"props":3436,"children":3437},{"class":164,"line":693},[3438,3442,3446,3450,3454],{"type":28,"tag":162,"props":3439,"children":3440},{"style":179},[3441],{"type":38,"value":1781},{"type":28,"tag":162,"props":3443,"children":3444},{"style":185},[3445],{"type":38,"value":3131},{"type":28,"tag":162,"props":3447,"children":3448},{"style":191},[3449],{"type":38,"value":194},{"type":28,"tag":162,"props":3451,"children":3452},{"style":197},[3453],{"type":38,"value":3140},{"type":28,"tag":162,"props":3455,"children":3456},{"style":203},[3457],{"type":38,"value":206},{"type":28,"tag":162,"props":3459,"children":3460},{"class":164,"line":725},[3461,3465,3469,3473,3477,3481,3485],{"type":28,"tag":162,"props":3462,"children":3463},{"style":179},[3464],{"type":38,"value":379},{"type":28,"tag":162,"props":3466,"children":3467},{"style":203},[3468],{"type":38,"value":384},{"type":28,"tag":162,"props":3470,"children":3471},{"style":185},[3472],{"type":38,"value":3160},{"type":28,"tag":162,"props":3474,"children":3475},{"style":191},[3476],{"type":38,"value":3165},{"type":28,"tag":162,"props":3478,"children":3479},{"style":197},[3480],{"type":38,"value":3170},{"type":28,"tag":162,"props":3482,"children":3483},{"style":203},[3484],{"type":38,"value":358},{"type":28,"tag":162,"props":3486,"children":3487},{"style":203},[3488],{"type":38,"value":363},{"type":28,"tag":162,"props":3490,"children":3491},{"class":164,"line":758},[3492,3496,3500,3504,3508,3512],{"type":28,"tag":162,"props":3493,"children":3494},{"style":185},[3495],{"type":38,"value":3186},{"type":28,"tag":162,"props":3497,"children":3498},{"style":191},[3499],{"type":38,"value":194},{"type":28,"tag":162,"props":3501,"children":3502},{"style":185},[3503],{"type":38,"value":3195},{"type":28,"tag":162,"props":3505,"children":3506},{"style":191},[3507],{"type":38,"value":1832},{"type":28,"tag":162,"props":3509,"children":3510},{"style":197},[3511],{"type":38,"value":3204},{"type":28,"tag":162,"props":3513,"children":3514},{"style":203},[3515],{"type":38,"value":206},{"type":28,"tag":162,"props":3517,"children":3518},{"class":164,"line":786},[3519],{"type":28,"tag":162,"props":3520,"children":3521},{"style":203},[3522],{"type":38,"value":628},{"type":28,"tag":162,"props":3524,"children":3525},{"class":164,"line":807},[3526,3530,3534],{"type":28,"tag":162,"props":3527,"children":3528},{"style":179},[3529],{"type":38,"value":905},{"type":28,"tag":162,"props":3531,"children":3532},{"style":185},[3533],{"type":38,"value":3227},{"type":28,"tag":162,"props":3535,"children":3536},{"style":203},[3537],{"type":38,"value":206},{"type":28,"tag":162,"props":3539,"children":3540},{"class":164,"line":823},[3541],{"type":28,"tag":162,"props":3542,"children":3543},{"style":203},[3544],{"type":38,"value":637},{"type":28,"tag":51,"props":3546,"children":3547},{},[3548],{"type":38,"value":3549},"En unifiant la logique de calcul de la remise dans une seule fonction, vous éliminez la duplication et simplifiez la maintenance. Si la logique doit changer (par exemple, le seuil de 1000), vous n'aurez à modifier qu'une seule fonction.",{"type":28,"tag":29,"props":3551,"children":3553},{"id":3552},"deux-occurrences-de-la-même-logique-à-surveiller-trois-occurrences-refactoring-obligatoire-la-troisième-est-presque-toujours-celle-quon-oublie-de-mettre-à-jour",[3554],{"type":38,"value":3555},"Deux occurrences de la même logique = à surveiller. Trois occurrences = refactoring obligatoire : la troisième est presque toujours celle qu'on oublie de mettre à jour.",{"type":28,"tag":41,"props":3557,"children":3559},{"id":3558},"_3-faciliter-les-tests-unitaires",[3560],{"type":28,"tag":34,"props":3561,"children":3562},{},[3563],{"type":38,"value":3564},"3. Faciliter les tests unitaires",{"type":28,"tag":51,"props":3566,"children":3567},{},[3568,3570,3580],{"type":38,"value":3569},"Un code propre est un code testable. Concrètement : des fonctions courtes, des classes cohérentes, aucune dépendance cachée. Les ",{"type":28,"tag":34,"props":3571,"children":3572},{},[3573],{"type":28,"tag":3574,"props":3575,"children":3577},"a",{"href":3576},"\u002Ffr\u002Fdette-technique\u002Ftests-integration-legacy-pieges",[3578],{"type":38,"value":3579},"tests unitaires",{"type":38,"value":3581}," restent alors simples et rapides à écrire.",{"type":28,"tag":51,"props":3583,"children":3584},{},[3585],{"type":28,"tag":34,"props":3586,"children":3587},{},[3588],{"type":38,"value":150},{"type":28,"tag":152,"props":3590,"children":3592},{"className":154,"code":3591,"language":156,"meta":8,"style":8},"\u002F\u002F Mauvais exemple - Difficulté à tester en raison des dépendances internes\npublic class CommandeService {\n    public void creerCommande() {\n        Database db = new Database();\n        db.save();\n    }\n}\n\n\u002F\u002F Meilleur exemple - Injection de dépendance pour faciliter les tests\npublic class CommandeService {\n    private Database database;\n\n    public CommandeService(Database database) {\n        this.database = database;\n    }\n\n    public void creerCommande() {\n        database.save();\n    }\n}\n",[3593],{"type":28,"tag":57,"props":3594,"children":3595},{"__ignoreMap":8},[3596,3604,3623,3646,3677,3698,3705,3712,3719,3727,3746,3767,3774,3806,3836,3843,3850,3873,3893,3900],{"type":28,"tag":162,"props":3597,"children":3598},{"class":164,"line":165},[3599],{"type":28,"tag":162,"props":3600,"children":3601},{"style":169},[3602],{"type":38,"value":3603},"\u002F\u002F Mauvais exemple - Difficulté à tester en raison des dépendances internes\n",{"type":28,"tag":162,"props":3605,"children":3606},{"class":164,"line":175},[3607,3611,3615,3619],{"type":28,"tag":162,"props":3608,"children":3609},{"style":179},[3610],{"type":38,"value":326},{"type":28,"tag":162,"props":3612,"children":3613},{"style":179},[3614],{"type":38,"value":2669},{"type":28,"tag":162,"props":3616,"children":3617},{"style":2672},[3618],{"type":38,"value":2849},{"type":28,"tag":162,"props":3620,"children":3621},{"style":203},[3622],{"type":38,"value":363},{"type":28,"tag":162,"props":3624,"children":3625},{"class":164,"line":209},[3626,3630,3634,3638,3642],{"type":28,"tag":162,"props":3627,"children":3628},{"style":179},[3629],{"type":38,"value":2687},{"type":28,"tag":162,"props":3631,"children":3632},{"style":179},[3633],{"type":38,"value":331},{"type":28,"tag":162,"props":3635,"children":3636},{"style":334},[3637],{"type":38,"value":2696},{"type":28,"tag":162,"props":3639,"children":3640},{"style":203},[3641],{"type":38,"value":451},{"type":28,"tag":162,"props":3643,"children":3644},{"style":203},[3645],{"type":38,"value":363},{"type":28,"tag":162,"props":3647,"children":3648},{"class":164,"line":218},[3649,3654,3659,3663,3668,3673],{"type":28,"tag":162,"props":3650,"children":3651},{"style":345},[3652],{"type":38,"value":3653},"        Database",{"type":28,"tag":162,"props":3655,"children":3656},{"style":185},[3657],{"type":38,"value":3658}," db ",{"type":28,"tag":162,"props":3660,"children":3661},{"style":191},[3662],{"type":38,"value":194},{"type":28,"tag":162,"props":3664,"children":3665},{"style":179},[3666],{"type":38,"value":3667}," new",{"type":28,"tag":162,"props":3669,"children":3670},{"style":334},[3671],{"type":38,"value":3672}," Database",{"type":28,"tag":162,"props":3674,"children":3675},{"style":203},[3676],{"type":38,"value":834},{"type":28,"tag":162,"props":3678,"children":3679},{"class":164,"line":227},[3680,3685,3689,3694],{"type":28,"tag":162,"props":3681,"children":3682},{"style":185},[3683],{"type":38,"value":3684},"        db",{"type":28,"tag":162,"props":3686,"children":3687},{"style":203},[3688],{"type":38,"value":79},{"type":28,"tag":162,"props":3690,"children":3691},{"style":334},[3692],{"type":38,"value":3693},"save",{"type":28,"tag":162,"props":3695,"children":3696},{"style":203},[3697],{"type":38,"value":834},{"type":28,"tag":162,"props":3699,"children":3700},{"class":164,"line":418},[3701],{"type":28,"tag":162,"props":3702,"children":3703},{"style":203},[3704],{"type":38,"value":628},{"type":28,"tag":162,"props":3706,"children":3707},{"class":164,"line":477},[3708],{"type":28,"tag":162,"props":3709,"children":3710},{"style":203},[3711],{"type":38,"value":637},{"type":28,"tag":162,"props":3713,"children":3714},{"class":164,"line":485},[3715],{"type":28,"tag":162,"props":3716,"children":3717},{"emptyLinePlaceholder":13},[3718],{"type":38,"value":215},{"type":28,"tag":162,"props":3720,"children":3721},{"class":164,"line":494},[3722],{"type":28,"tag":162,"props":3723,"children":3724},{"style":169},[3725],{"type":38,"value":3726},"\u002F\u002F Meilleur exemple - Injection de dépendance pour faciliter les tests\n",{"type":28,"tag":162,"props":3728,"children":3729},{"class":164,"line":525},[3730,3734,3738,3742],{"type":28,"tag":162,"props":3731,"children":3732},{"style":179},[3733],{"type":38,"value":326},{"type":28,"tag":162,"props":3735,"children":3736},{"style":179},[3737],{"type":38,"value":2669},{"type":28,"tag":162,"props":3739,"children":3740},{"style":2672},[3741],{"type":38,"value":2849},{"type":28,"tag":162,"props":3743,"children":3744},{"style":203},[3745],{"type":38,"value":363},{"type":28,"tag":162,"props":3747,"children":3748},{"class":164,"line":533},[3749,3754,3758,3763],{"type":28,"tag":162,"props":3750,"children":3751},{"style":179},[3752],{"type":38,"value":3753},"    private",{"type":28,"tag":162,"props":3755,"children":3756},{"style":345},[3757],{"type":38,"value":3672},{"type":28,"tag":162,"props":3759,"children":3760},{"style":185},[3761],{"type":38,"value":3762}," database",{"type":28,"tag":162,"props":3764,"children":3765},{"style":203},[3766],{"type":38,"value":206},{"type":28,"tag":162,"props":3768,"children":3769},{"class":164,"line":542},[3770],{"type":28,"tag":162,"props":3771,"children":3772},{"emptyLinePlaceholder":13},[3773],{"type":38,"value":215},{"type":28,"tag":162,"props":3775,"children":3776},{"class":164,"line":563},[3777,3781,3785,3789,3794,3798,3802],{"type":28,"tag":162,"props":3778,"children":3779},{"style":179},[3780],{"type":38,"value":2687},{"type":28,"tag":162,"props":3782,"children":3783},{"style":334},[3784],{"type":38,"value":2849},{"type":28,"tag":162,"props":3786,"children":3787},{"style":203},[3788],{"type":38,"value":342},{"type":28,"tag":162,"props":3790,"children":3791},{"style":345},[3792],{"type":38,"value":3793},"Database",{"type":28,"tag":162,"props":3795,"children":3796},{"style":2295},[3797],{"type":38,"value":3762},{"type":28,"tag":162,"props":3799,"children":3800},{"style":203},[3801],{"type":38,"value":358},{"type":28,"tag":162,"props":3803,"children":3804},{"style":203},[3805],{"type":38,"value":363},{"type":28,"tag":162,"props":3807,"children":3808},{"class":164,"line":581},[3809,3815,3819,3824,3828,3832],{"type":28,"tag":162,"props":3810,"children":3812},{"style":3811},"--shiki-default:#E78284;--shiki-dark:#79B8FF",[3813],{"type":38,"value":3814},"        this",{"type":28,"tag":162,"props":3816,"children":3817},{"style":203},[3818],{"type":38,"value":79},{"type":28,"tag":162,"props":3820,"children":3821},{"style":185},[3822],{"type":38,"value":3823},"database ",{"type":28,"tag":162,"props":3825,"children":3826},{"style":191},[3827],{"type":38,"value":194},{"type":28,"tag":162,"props":3829,"children":3830},{"style":185},[3831],{"type":38,"value":3762},{"type":28,"tag":162,"props":3833,"children":3834},{"style":203},[3835],{"type":38,"value":206},{"type":28,"tag":162,"props":3837,"children":3838},{"class":164,"line":622},[3839],{"type":28,"tag":162,"props":3840,"children":3841},{"style":203},[3842],{"type":38,"value":628},{"type":28,"tag":162,"props":3844,"children":3845},{"class":164,"line":631},[3846],{"type":28,"tag":162,"props":3847,"children":3848},{"emptyLinePlaceholder":13},[3849],{"type":38,"value":215},{"type":28,"tag":162,"props":3851,"children":3852},{"class":164,"line":640},[3853,3857,3861,3865,3869],{"type":28,"tag":162,"props":3854,"children":3855},{"style":179},[3856],{"type":38,"value":2687},{"type":28,"tag":162,"props":3858,"children":3859},{"style":179},[3860],{"type":38,"value":331},{"type":28,"tag":162,"props":3862,"children":3863},{"style":334},[3864],{"type":38,"value":2696},{"type":28,"tag":162,"props":3866,"children":3867},{"style":203},[3868],{"type":38,"value":451},{"type":28,"tag":162,"props":3870,"children":3871},{"style":203},[3872],{"type":38,"value":363},{"type":28,"tag":162,"props":3874,"children":3875},{"class":164,"line":648},[3876,3881,3885,3889],{"type":28,"tag":162,"props":3877,"children":3878},{"style":185},[3879],{"type":38,"value":3880},"        database",{"type":28,"tag":162,"props":3882,"children":3883},{"style":203},[3884],{"type":38,"value":79},{"type":28,"tag":162,"props":3886,"children":3887},{"style":334},[3888],{"type":38,"value":3693},{"type":28,"tag":162,"props":3890,"children":3891},{"style":203},[3892],{"type":38,"value":834},{"type":28,"tag":162,"props":3894,"children":3895},{"class":164,"line":657},[3896],{"type":28,"tag":162,"props":3897,"children":3898},{"style":203},[3899],{"type":38,"value":628},{"type":28,"tag":162,"props":3901,"children":3902},{"class":164,"line":693},[3903],{"type":28,"tag":162,"props":3904,"children":3905},{"style":203},[3906],{"type":38,"value":637},{"type":28,"tag":51,"props":3908,"children":3909},{},[3910,3912,3917],{"type":38,"value":3911},"Dans le second exemple, l'injection de dépendance rend la classe plus testable. Au lieu de créer une instance de ",{"type":28,"tag":57,"props":3913,"children":3915},{"className":3914},[],[3916],{"type":38,"value":3793},{"type":38,"value":3918}," en interne, vous pouvez passer une base de données fictive (mock) lors de vos tests unitaires.",{"type":28,"tag":29,"props":3920,"children":3922},{"id":3921},"linjection-de-dépendances-nest-pas-quun-pattern-de-framework-cest-ce-qui-rend-une-classe-testable-en-isolation-sans-avoir-à-monter-une-base-ou-un-service-externe-pour-la-moindre-vérification",[3923],{"type":38,"value":3924},"L'injection de dépendances n'est pas qu'un pattern de framework : c'est ce qui rend une classe testable en isolation, sans avoir à monter une base ou un service externe pour la moindre vérification.",{"type":28,"tag":29,"props":3926,"children":3928},{"id":3927},"conseils-et-astuces-pour-appliquer-le-clean-code-au-quotidien",[3929],{"type":28,"tag":34,"props":3930,"children":3931},{},[3932],{"type":38,"value":3933},"Conseils et astuces pour appliquer le Clean Code au quotidien",{"type":28,"tag":51,"props":3935,"children":3936},{},[3937,3939,3943],{"type":38,"value":3938},"Maintenant que vous connaissez les bases du ",{"type":28,"tag":34,"props":3940,"children":3941},{},[3942],{"type":38,"value":89},{"type":38,"value":3944},", voyons comment intégrer ces bonnes pratiques dans votre travail quotidien, même lorsque vous êtes sous pression ou que vous devez travailler sur du code existant. Voici quelques astuces simples mais efficaces pour garder votre code propre, maintenable et lisible à long terme.",{"type":28,"tag":41,"props":3946,"children":3948},{"id":3947},"_1-réécrire-du-code-existant-le-refactoring-progressif",[3949],{"type":28,"tag":34,"props":3950,"children":3951},{},[3952],{"type":38,"value":3953},"1. Réécrire du code existant : le refactoring progressif",{"type":28,"tag":51,"props":3955,"children":3956},{},[3957,3959,3965,3967,3972],{"type":38,"value":3958},"Quand vous héritez d'un ",{"type":28,"tag":3574,"props":3960,"children":3962},{"href":3961},"\u002Ffr\u002Fdette-technique\u002Flegacy-code-evaluer-risque",[3963],{"type":38,"value":3964},"code legacy",{"type":38,"value":3966}," mal structuré ou difficile à comprendre, il peut être tentant de tout réécrire. Cependant, ce n'est pas toujours réaliste ou nécessaire. La meilleure approche est souvent le ",{"type":28,"tag":34,"props":3968,"children":3969},{},[3970],{"type":38,"value":3971},"refactoring progressif",{"type":38,"value":3973}," : au lieu de tout changer d'un coup, vous améliorez petit à petit le code à chaque modification ou ajout de fonctionnalité.",{"type":28,"tag":51,"props":3975,"children":3976},{},[3977],{"type":28,"tag":34,"props":3978,"children":3979},{},[3980],{"type":38,"value":150},{"type":28,"tag":152,"props":3982,"children":3984},{"className":154,"code":3983,"language":156,"meta":8,"style":8},"\u002F\u002F Code hérité difficile à comprendre\npublic void traitementCommande(Commande commande) {\n    if (commande.isUrgent() && !commande.isValide()) {\n        System.out.println(\"Erreur\");\n    }\n    \u002F\u002F Autres opérations\n}\n\n\u002F\u002F Refactorisation progressive\npublic void verifierCommandeValide(Commande commande) {\n    if (!commande.isValide()) {\n        throw new IllegalArgumentException(\"Commande invalide\");\n    }\n}\n",[3985],{"type":28,"tag":57,"props":3986,"children":3987},{"__ignoreMap":8},[3988,3996,4034,4094,4130,4137,4145,4152,4159,4167,4203,4238,4267,4274],{"type":28,"tag":162,"props":3989,"children":3990},{"class":164,"line":165},[3991],{"type":28,"tag":162,"props":3992,"children":3993},{"style":169},[3994],{"type":38,"value":3995},"\u002F\u002F Code hérité difficile à comprendre\n",{"type":28,"tag":162,"props":3997,"children":3998},{"class":164,"line":175},[3999,4003,4007,4012,4016,4021,4026,4030],{"type":28,"tag":162,"props":4000,"children":4001},{"style":179},[4002],{"type":38,"value":326},{"type":28,"tag":162,"props":4004,"children":4005},{"style":179},[4006],{"type":38,"value":331},{"type":28,"tag":162,"props":4008,"children":4009},{"style":334},[4010],{"type":38,"value":4011}," traitementCommande",{"type":28,"tag":162,"props":4013,"children":4014},{"style":203},[4015],{"type":38,"value":342},{"type":28,"tag":162,"props":4017,"children":4018},{"style":345},[4019],{"type":38,"value":4020},"Commande",{"type":28,"tag":162,"props":4022,"children":4023},{"style":185},[4024],{"type":38,"value":4025}," commande",{"type":28,"tag":162,"props":4027,"children":4028},{"style":203},[4029],{"type":38,"value":358},{"type":28,"tag":162,"props":4031,"children":4032},{"style":203},[4033],{"type":38,"value":363},{"type":28,"tag":162,"props":4035,"children":4036},{"class":164,"line":209},[4037,4041,4045,4050,4054,4059,4063,4068,4073,4077,4081,4086,4090],{"type":28,"tag":162,"props":4038,"children":4039},{"style":179},[4040],{"type":38,"value":379},{"type":28,"tag":162,"props":4042,"children":4043},{"style":203},[4044],{"type":38,"value":384},{"type":28,"tag":162,"props":4046,"children":4047},{"style":185},[4048],{"type":38,"value":4049},"commande",{"type":28,"tag":162,"props":4051,"children":4052},{"style":203},[4053],{"type":38,"value":79},{"type":28,"tag":162,"props":4055,"children":4056},{"style":334},[4057],{"type":38,"value":4058},"isUrgent",{"type":28,"tag":162,"props":4060,"children":4061},{"style":203},[4062],{"type":38,"value":451},{"type":28,"tag":162,"props":4064,"children":4065},{"style":191},[4066],{"type":38,"value":4067}," &&",{"type":28,"tag":162,"props":4069,"children":4070},{"style":191},[4071],{"type":38,"value":4072}," !",{"type":28,"tag":162,"props":4074,"children":4075},{"style":185},[4076],{"type":38,"value":4049},{"type":28,"tag":162,"props":4078,"children":4079},{"style":203},[4080],{"type":38,"value":79},{"type":28,"tag":162,"props":4082,"children":4083},{"style":334},[4084],{"type":38,"value":4085},"isValide",{"type":28,"tag":162,"props":4087,"children":4088},{"style":203},[4089],{"type":38,"value":403},{"type":28,"tag":162,"props":4091,"children":4092},{"style":203},[4093],{"type":38,"value":363},{"type":28,"tag":162,"props":4095,"children":4096},{"class":164,"line":218},[4097,4101,4105,4109,4113,4117,4121,4126],{"type":28,"tag":162,"props":4098,"children":4099},{"style":185},[4100],{"type":38,"value":587},{"type":28,"tag":162,"props":4102,"children":4103},{"style":203},[4104],{"type":38,"value":79},{"type":28,"tag":162,"props":4106,"children":4107},{"style":185},[4108],{"type":38,"value":596},{"type":28,"tag":162,"props":4110,"children":4111},{"style":203},[4112],{"type":38,"value":79},{"type":28,"tag":162,"props":4114,"children":4115},{"style":334},[4116],{"type":38,"value":605},{"type":28,"tag":162,"props":4118,"children":4119},{"style":203},[4120],{"type":38,"value":342},{"type":28,"tag":162,"props":4122,"children":4123},{"style":612},[4124],{"type":38,"value":4125},"\"Erreur\"",{"type":28,"tag":162,"props":4127,"children":4128},{"style":203},[4129],{"type":38,"value":474},{"type":28,"tag":162,"props":4131,"children":4132},{"class":164,"line":227},[4133],{"type":28,"tag":162,"props":4134,"children":4135},{"style":203},[4136],{"type":38,"value":628},{"type":28,"tag":162,"props":4138,"children":4139},{"class":164,"line":418},[4140],{"type":28,"tag":162,"props":4141,"children":4142},{"style":169},[4143],{"type":38,"value":4144},"    \u002F\u002F Autres opérations\n",{"type":28,"tag":162,"props":4146,"children":4147},{"class":164,"line":477},[4148],{"type":28,"tag":162,"props":4149,"children":4150},{"style":203},[4151],{"type":38,"value":637},{"type":28,"tag":162,"props":4153,"children":4154},{"class":164,"line":485},[4155],{"type":28,"tag":162,"props":4156,"children":4157},{"emptyLinePlaceholder":13},[4158],{"type":38,"value":215},{"type":28,"tag":162,"props":4160,"children":4161},{"class":164,"line":494},[4162],{"type":28,"tag":162,"props":4163,"children":4164},{"style":169},[4165],{"type":38,"value":4166},"\u002F\u002F Refactorisation progressive\n",{"type":28,"tag":162,"props":4168,"children":4169},{"class":164,"line":525},[4170,4174,4178,4183,4187,4191,4195,4199],{"type":28,"tag":162,"props":4171,"children":4172},{"style":179},[4173],{"type":38,"value":326},{"type":28,"tag":162,"props":4175,"children":4176},{"style":179},[4177],{"type":38,"value":331},{"type":28,"tag":162,"props":4179,"children":4180},{"style":334},[4181],{"type":38,"value":4182}," verifierCommandeValide",{"type":28,"tag":162,"props":4184,"children":4185},{"style":203},[4186],{"type":38,"value":342},{"type":28,"tag":162,"props":4188,"children":4189},{"style":345},[4190],{"type":38,"value":4020},{"type":28,"tag":162,"props":4192,"children":4193},{"style":185},[4194],{"type":38,"value":4025},{"type":28,"tag":162,"props":4196,"children":4197},{"style":203},[4198],{"type":38,"value":358},{"type":28,"tag":162,"props":4200,"children":4201},{"style":203},[4202],{"type":38,"value":363},{"type":28,"tag":162,"props":4204,"children":4205},{"class":164,"line":533},[4206,4210,4214,4218,4222,4226,4230,4234],{"type":28,"tag":162,"props":4207,"children":4208},{"style":179},[4209],{"type":38,"value":379},{"type":28,"tag":162,"props":4211,"children":4212},{"style":203},[4213],{"type":38,"value":384},{"type":28,"tag":162,"props":4215,"children":4216},{"style":191},[4217],{"type":38,"value":1414},{"type":28,"tag":162,"props":4219,"children":4220},{"style":185},[4221],{"type":38,"value":4049},{"type":28,"tag":162,"props":4223,"children":4224},{"style":203},[4225],{"type":38,"value":79},{"type":28,"tag":162,"props":4227,"children":4228},{"style":334},[4229],{"type":38,"value":4085},{"type":28,"tag":162,"props":4231,"children":4232},{"style":203},[4233],{"type":38,"value":403},{"type":28,"tag":162,"props":4235,"children":4236},{"style":203},[4237],{"type":38,"value":363},{"type":28,"tag":162,"props":4239,"children":4240},{"class":164,"line":542},[4241,4246,4250,4255,4259,4263],{"type":28,"tag":162,"props":4242,"children":4243},{"style":179},[4244],{"type":38,"value":4245},"        throw",{"type":28,"tag":162,"props":4247,"children":4248},{"style":179},[4249],{"type":38,"value":3667},{"type":28,"tag":162,"props":4251,"children":4252},{"style":334},[4253],{"type":38,"value":4254}," IllegalArgumentException",{"type":28,"tag":162,"props":4256,"children":4257},{"style":203},[4258],{"type":38,"value":342},{"type":28,"tag":162,"props":4260,"children":4261},{"style":612},[4262],{"type":38,"value":615},{"type":28,"tag":162,"props":4264,"children":4265},{"style":203},[4266],{"type":38,"value":474},{"type":28,"tag":162,"props":4268,"children":4269},{"class":164,"line":563},[4270],{"type":28,"tag":162,"props":4271,"children":4272},{"style":203},[4273],{"type":38,"value":628},{"type":28,"tag":162,"props":4275,"children":4276},{"class":164,"line":581},[4277],{"type":28,"tag":162,"props":4278,"children":4279},{"style":203},[4280],{"type":38,"value":637},{"type":28,"tag":51,"props":4282,"children":4283},{},[4284,4286,4292],{"type":38,"value":4285},"Dans cet exemple, au lieu de réécrire toute la méthode ",{"type":28,"tag":57,"props":4287,"children":4289},{"className":4288},[],[4290],{"type":38,"value":4291},"traitementCommande",{"type":38,"value":4293},", j’ai simplement extrait une partie du code dans une fonction dédiée, ce qui clarifie une portion du processus sans tout chambouler. Ce type de petit refactoring est une manière efficace de rendre le code plus propre à mesure que vous y travaillez.",{"type":28,"tag":29,"props":4295,"children":4297},{"id":4296},"pas-de-grand-refactoring-planifié-sur-trois-sprints-cest-le-scénario-qui-échoue-le-plus-souvent-le-scout-rule-laisser-le-code-un-peu-plus-propre-quon-la-trouvé-marche-lui-sur-la-durée",[4298],{"type":38,"value":4299},"Pas de \"grand refactoring\" planifié sur trois sprints : c'est le scénario qui échoue le plus souvent. Le scout rule (laisser le code un peu plus propre qu'on l'a trouvé) marche, lui, sur la durée.",{"type":28,"tag":41,"props":4301,"children":4303},{"id":4302},"_2-prioriser-le-clean-code-sous-pression",[4304],{"type":28,"tag":34,"props":4305,"children":4306},{},[4307],{"type":38,"value":4308},"2. Prioriser le Clean Code sous pression",{"type":28,"tag":51,"props":4310,"children":4311},{},[4312],{"type":38,"value":4313},"La tentation est forte de sacrifier la qualité quand les délais se resserrent. C'est un mauvais calcul : un code lisible reste plus rapide à modifier, à déboguer et à étendre, y compris dans le sprint en cours, dès qu'il faut revenir sur une fonctionnalité écrite la veille.",{"type":28,"tag":51,"props":4315,"children":4316},{},[4317,4319,4324],{"type":38,"value":4318},"Voici quelques astuces pour ",{"type":28,"tag":34,"props":4320,"children":4321},{},[4322],{"type":38,"value":4323},"garder votre code propre même sous pression",{"type":38,"value":4325}," :",{"type":28,"tag":4327,"props":4328,"children":4329},"ul",{},[4330,4341,4351],{"type":28,"tag":4331,"props":4332,"children":4333},"li",{},[4334,4339],{"type":28,"tag":34,"props":4335,"children":4336},{},[4337],{"type":38,"value":4338},"Utilisez des fonctions courtes et bien nommées.",{"type":38,"value":4340}," Même en mode rush, séparer les responsabilités limite les erreurs et accélère le débogage.",{"type":28,"tag":4331,"props":4342,"children":4343},{},[4344,4349],{"type":28,"tag":34,"props":4345,"children":4346},{},[4347],{"type":38,"value":4348},"Nommez les variables clairement.",{"type":38,"value":4350}," Prendre quelques secondes pour choisir un nom explicite peut vous faire gagner des heures plus tard en maintenance.",{"type":28,"tag":4331,"props":4352,"children":4353},{},[4354,4359],{"type":28,"tag":34,"props":4355,"children":4356},{},[4357],{"type":38,"value":4358},"Évitez les solutions \"hacky\".",{"type":38,"value":4360}," Même si une solution rapide semble tentante, elle peut introduire des bugs difficiles à repérer plus tard.",{"type":28,"tag":29,"props":4362,"children":4364},{"id":4363},"test-du-vous-dans-trois-mois-si-la-solution-hacky-ne-sera-plus-comprise-par-vous-même-dans-douze-semaines-cest-quelle-ne-mérite-pas-dêtre-commitée",[4365],{"type":38,"value":4366},"Test du \"vous dans trois mois\" : si la solution hacky ne sera plus comprise par vous-même dans douze semaines, c'est qu'elle ne mérite pas d'être commitée.",{"type":28,"tag":41,"props":4368,"children":4370},{"id":4369},"_3-collaborer-avec-dautres-développeurs-pour-améliorer-le-code",[4371],{"type":28,"tag":34,"props":4372,"children":4373},{},[4374],{"type":38,"value":4375},"3. Collaborer avec d’autres développeurs pour améliorer le code",{"type":28,"tag":51,"props":4377,"children":4378},{},[4379,4380,4384,4386,4391],{"type":38,"value":2581},{"type":28,"tag":34,"props":4381,"children":4382},{},[4383],{"type":38,"value":89},{"type":38,"value":4385}," n’est pas seulement une affaire personnelle. Il est aussi essentiel d’inciter vos collègues à adopter ces bonnes pratiques. Une ",{"type":28,"tag":34,"props":4387,"children":4388},{},[4389],{"type":38,"value":4390},"revue de code",{"type":38,"value":4392}," régulière est un excellent moyen d’encourager une culture du Clean Code au sein de votre équipe. Chacun peut ainsi apprendre des autres et partager des conseils sur la façon d’améliorer la qualité du code.",{"type":28,"tag":51,"props":4394,"children":4395},{},[4396],{"type":28,"tag":34,"props":4397,"children":4398},{},[4399],{"type":38,"value":4400},"Quelques conseils pour une bonne collaboration :",{"type":28,"tag":4327,"props":4402,"children":4403},{},[4404,4414,4424],{"type":28,"tag":4331,"props":4405,"children":4406},{},[4407,4412],{"type":28,"tag":34,"props":4408,"children":4409},{},[4410],{"type":38,"value":4411},"Soyez constructif lors des revues de code.",{"type":38,"value":4413}," Au lieu de pointer du doigt les erreurs, proposez des solutions et expliquez pourquoi une modification rendrait le code plus clair.",{"type":28,"tag":4331,"props":4415,"children":4416},{},[4417,4422],{"type":28,"tag":34,"props":4418,"children":4419},{},[4420],{"type":38,"value":4421},"Favorisez la documentation du code.",{"type":38,"value":4423}," Encouragez vos collègues à écrire des noms explicites, à bien structurer les fonctions, et à éviter les duplications.",{"type":28,"tag":4331,"props":4425,"children":4426},{},[4427,4432],{"type":28,"tag":34,"props":4428,"children":4429},{},[4430],{"type":38,"value":4431},"Partagez les succès.",{"type":38,"value":4433}," Quand un bon refactoring ou une amélioration de la lisibilité est fait, mettez-le en avant lors de vos réunions d’équipe.",{"type":28,"tag":51,"props":4435,"children":4436},{},[4437],{"type":38,"value":4438},"Un guide interne avec des exemples concrets tirés de votre propre code vaut mille fois mieux qu'une référence générique copiée d'un blog : il parle le langage du domaine et anticipe les pièges réels du projet.",{"type":28,"tag":1186,"props":4440,"children":4445},{"cta":4441,"href":4442,"title":4443,"type":4444},"Les 100 pratiques que l'IA n'enseigne pas →","https:\u002F\u002Fkamanga.fr\u002Freferentiel-craft","Le Clean Code, c'est une pratique parmi cent","product",[4446],{"type":28,"tag":51,"props":4447,"children":4448},{},[4449],{"type":38,"value":4450},"Cet article détaille une poignée de réflexes : nommer juste, des fonctions courtes, des responsabilités séparées. Ce ne sont que quelques pièces d'un ensemble bien plus large. Le Craft Bundle réunit les 100 pratiques que j'applique pour produire du code propre et maintenable, celles que l'IA ne vous apprendra jamais parce qu'elle ne les a jamais vues tenir trois ans en production.",{"type":28,"tag":98,"props":4452,"children":4453},{},[],{"type":28,"tag":29,"props":4455,"children":4457},{"id":4456},"questions-fréquentes",[4458],{"type":28,"tag":34,"props":4459,"children":4460},{},[4461],{"type":38,"value":4462},"Questions fréquentes",{"type":28,"tag":4464,"props":4465,"children":4466},"details",{},[4467,4473],{"type":28,"tag":4468,"props":4469,"children":4470},"summary",{},[4471],{"type":38,"value":4472},"Clean Code = juste du code joliment formaté ?",{"type":28,"tag":51,"props":4474,"children":4475},{},[4476],{"type":38,"value":4477},"Non. Le formatage en fait partie, mais c'est le degré le moins important. Le cœur du Clean Code, c'est la lisibilité structurelle : nommage, taille des fonctions, séparation des responsabilités, gestion claire des erreurs. Une base parfaitement formatée mais aux méthodes de 300 lignes reste un code sale.",{"type":28,"tag":4464,"props":4479,"children":4480},{},[4481,4486],{"type":28,"tag":4468,"props":4482,"children":4483},{},[4484],{"type":38,"value":4485},"Comment appliquer sur du legacy déjà chargé ?",{"type":28,"tag":51,"props":4487,"children":4488},{},[4489],{"type":38,"value":4490},"Pas de big bang. À chaque passage sur une zone (bug fix, ajout de feature, exploration), laisser le code un peu plus propre qu'on l'a trouvé. Un nom de variable, une méthode extraite, un test ajouté. Sur six mois, l'effet cumulé est considérable. Sur trois ans, la base est transformée.",{"type":28,"tag":4464,"props":4492,"children":4493},{},[4494,4499],{"type":28,"tag":4468,"props":4495,"children":4496},{},[4497],{"type":38,"value":4498},"Clean Code et délais serrés sont-ils incompatibles ?",{"type":28,"tag":51,"props":4500,"children":4501},{},[4502],{"type":38,"value":4503},"Non, c'est même l'inverse au-delà de quelques jours. Le code sale livré sous pression devient le code qui ralentit le sprint suivant. Trois pratiques minimales restent toujours rentables, même en mode rush : nommer correctement, garder les méthodes courtes, refuser les \"hacks\" qu'on aura honte de relire.",{"type":28,"tag":4464,"props":4505,"children":4506},{},[4507,4512],{"type":28,"tag":4468,"props":4508,"children":4509},{},[4510],{"type":38,"value":4511},"Comment embarquer une équipe résistante ?",{"type":28,"tag":51,"props":4513,"children":4514},{},[4515],{"type":38,"value":4516},"Les arguments théoriques ne marchent pas. Ce qui marche : prendre un module particulièrement douloureux, le nettoyer avec un binôme volontaire, mesurer le temps de relecture et le nombre de bugs sur six semaines. Ensuite, introduire les revues de code et le scout rule. La culture s'installe par l'exemple, jamais par décret.",{"type":28,"tag":98,"props":4518,"children":4519},{},[],{"type":28,"tag":41,"props":4521,"children":4523},{"id":4522},"conclusion",[4524],{"type":28,"tag":34,"props":4525,"children":4526},{},[4527],{"type":38,"value":4528},"Conclusion",{"type":28,"tag":51,"props":4530,"children":4531},{},[4532],{"type":38,"value":4533},"Le Clean Code n'est pas une posture esthétique : c'est ce qui rend une base maintenable à dix-huit mois plutôt qu'illisible à six. La discipline tient en quelques gestes répétés : nommer pour révéler l'intention, garder les méthodes courtes, séparer les responsabilités, écrire du code qu'on relira sans grimacer. Ces gestes paraissent insignifiants à l'unité ; cumulés sur la durée d'un projet, ils font la différence entre une équipe qui livre et une équipe qui s'enlise.",{"type":28,"tag":1186,"props":4535,"children":4540},{"cta":4536,"href":4537,"title":4538,"type":4539},"Télécharger le diagnostic gratuit →","\u002Fmes-ressources","Ressource gratuite : 10 signaux que votre équipe tech est en danger","resource",[4541],{"type":28,"tag":51,"props":4542,"children":4543},{},[4544],{"type":38,"value":4545},"10 signaux d'alarme pour identifier les problèmes systémiques cachés dans votre équipe avant qu'ils deviennent critiques. Auto-diagnostic inclus : 5 minutes pour savoir où vous en êtes.",{"type":28,"tag":4547,"props":4548,"children":4549},"style",{},[4550],{"type":38,"value":4551},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":8,"searchDepth":175,"depth":175,"links":4553},[4554,4557,4562,4567,4569,4572,4575,4578,4579,4582,4585,4588],{"id":31,"depth":175,"text":39,"children":4555},[4556],{"id":43,"depth":209,"text":49},{"id":103,"depth":175,"text":109,"children":4558},[4559,4560,4561],{"id":117,"depth":209,"text":123},{"id":278,"depth":209,"text":284},{"id":1200,"depth":209,"text":1206},{"id":1542,"depth":175,"text":1548,"children":4563},[4564,4565,4566],{"id":1569,"depth":209,"text":1575},{"id":1695,"depth":209,"text":1701},{"id":2207,"depth":209,"text":2213},{"id":2578,"depth":175,"text":4568},"Le catch (Exception e) générique est un anti-pattern classique : il masque les vraies causes et complique le débogage en production.",{"id":2592,"depth":175,"text":2598,"children":4570},[4571],{"id":2611,"depth":209,"text":2617},{"id":3047,"depth":175,"text":3050,"children":4573},[4574],{"id":3053,"depth":209,"text":3059},{"id":3552,"depth":175,"text":3555,"children":4576},[4577],{"id":3558,"depth":209,"text":3564},{"id":3921,"depth":175,"text":3924},{"id":3927,"depth":175,"text":3933,"children":4580},[4581],{"id":3947,"depth":209,"text":3953},{"id":4296,"depth":175,"text":4299,"children":4583},[4584],{"id":4302,"depth":209,"text":4308},{"id":4363,"depth":175,"text":4366,"children":4586},[4587],{"id":4369,"depth":209,"text":4375},{"id":4456,"depth":175,"text":4462,"children":4589},[4590],{"id":4522,"depth":209,"text":4528},"markdown","content:fr:dette-technique:clean-code-software-craftsmanship-principes-java.md","content","fr\u002Fdette-technique\u002Fclean-code-software-craftsmanship-principes-java.md","fr\u002Fdette-technique\u002Fclean-code-software-craftsmanship-principes-java","md",{"_path":4598,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":4599,"description":4600,"id":1096,"date":4601,"listed":13,"nocomments":7,"hidden":7,"categories":4602,"tags":4603,"cover":4604,"readingTime":4605,"body":4610,"_type":4591,"_id":5962,"_source":4593,"_file":5963,"_stem":5964,"_extension":4596},"\u002Ffr\u002Fdette-technique\u002Fyagni-ecrire-code-qualite-sans-fonctionnalites-inutiles","Principe YAGNI, Comment écrire du code de qualité en évitant les fonctionnalités inutiles","Découvrez le principe YAGNI en software craftsmanship et apprenez à simplifier votre code en évitant d'anticiper des besoins futurs. Exemples concrets en Java inclus.","2024-06-18",[6],[16,17],"covers\u002Farticles\u002Fprincipe-yagni.jpg",{"text":4606,"minutes":4607,"time":4608,"words":4609},"8 min read",7.79,467400,1558,{"type":25,"children":4611,"toc":5951},[4612,4618,4624,4629,4655,4660,4663,4669,4674,4686,4691,4694,4703,4709,4714,4732,4737,4744,4749,5103,5116,5119,5125,5130,5141,5161,5168,5343,5362,5373,5378,5386,5635,5647,5757,5768,5780,5791,5796,5799,5805,5810,5815,5827,5836,5839,5845,5865,5878,5891,5911,5914,5918,5937,5947],{"type":28,"tag":29,"props":4613,"children":4615},{"id":4614},"yagni-comment-écrire-du-code-de-qualité-en-évitant-les-fonctionnalités-inutiles",[4616],{"type":38,"value":4617},"YAGNI : Comment écrire du code de qualité en évitant les fonctionnalités inutiles",{"type":28,"tag":41,"props":4619,"children":4621},{"id":4620},"introduction-quest-ce-que-yagni",[4622],{"type":38,"value":4623},"Introduction : Qu’est-ce que YAGNI ?",{"type":28,"tag":51,"props":4625,"children":4626},{},[4627],{"type":38,"value":4628},"Audit d’une plateforme bancaire l’an dernier. Trois jours pour cartographier le code mort : près de 30 % de la base ne répondait à aucun besoin actif. Des modules de conversion multi-devises ajoutés \"au cas où\" cinq ans plus tôt, jamais activés. Une couche d’abstraction sur la persistence prête à supporter trois bases différentes (une seule en production). Chaque livraison ralentie par ce poids mort, chaque onboarding rallongé d’une semaine pour expliquer à quoi servaient des classes que personne n’avait touchées depuis 2019.",{"type":28,"tag":51,"props":4630,"children":4631},{},[4632,4634,4639,4641,4646,4648,4653],{"type":38,"value":4633},"Ce gaspillage a un nom et un antidote : YAGNI (You Aren’t Gonna Need It). Formulé par Kent Beck dans le cadre de l’Extreme Programming, c’est l’un des piliers du ",{"type":28,"tag":34,"props":4635,"children":4636},{},[4637],{"type":38,"value":4638},"software craftsmanship",{"type":38,"value":4640},". La règle tient en une ligne : n’écrivez pas le code dont vous ",{"type":28,"tag":2630,"props":4642,"children":4643},{},[4644],{"type":38,"value":4645},"pensez",{"type":38,"value":4647}," avoir besoin demain, écrivez celui dont vous ",{"type":28,"tag":2630,"props":4649,"children":4650},{},[4651],{"type":38,"value":4652},"avez",{"type":38,"value":4654}," besoin aujourd’hui.",{"type":28,"tag":51,"props":4656,"children":4657},{},[4658],{"type":38,"value":4659},"Cet article montre comment l’appliquer concrètement en Java, où repérer les ajouts superflus, et comment résister à la tentation d’anticiper.",{"type":28,"tag":98,"props":4661,"children":4662},{},[],{"type":28,"tag":41,"props":4664,"children":4666},{"id":4665},"ce-que-yagni-vous-évite-vraiment",[4667],{"type":38,"value":4668},"Ce que YAGNI vous évite vraiment",{"type":28,"tag":51,"props":4670,"children":4671},{},[4672],{"type":38,"value":4673},"Trois conséquences directes, observées sur le terrain.",{"type":28,"tag":51,"props":4675,"children":4676},{},[4677,4679,4684],{"type":38,"value":4678},"Chaque fonctionnalité prématurée alourdit la base : plus de classes à lire, plus de chemins à tester, plus de surfaces où loger des bugs. Multipliez par cinq ans d’accumulation et vous obtenez la situation décrite plus haut : 30 % de code qui ne sert à rien mais que tout le monde doit comprendre. C’est de la ",{"type":28,"tag":3574,"props":4680,"children":4681},{"href":3961},[4682],{"type":38,"value":4683},"dette technique",{"type":38,"value":4685}," pure, contractée pour rembourser un emprunt qui n’a jamais été demandé.",{"type":28,"tag":51,"props":4687,"children":4688},{},[4689],{"type":38,"value":4690},"Inversement, moins de code écrit, c’est moins de tests à maintenir, moins de revues à instruire, moins de couplage à gérer le jour où le vrai besoin émerge. Un module minimal s’adapte. Un module sur-conçu pour un futur fantasmé doit d’abord être démêlé avant d’être modifié, et personne n’ose y toucher.",{"type":28,"tag":98,"props":4692,"children":4693},{},[],{"type":28,"tag":1186,"props":4695,"children":4697},{"cta":1188,"href":1189,"title":4696,"type":1191},"Vous voulez savoir, avant d'écrire une ligne, si elle est vraiment nécessaire ?",[4698],{"type":28,"tag":51,"props":4699,"children":4700},{},[4701],{"type":38,"value":4702},"Résister à l'envie d'anticiper un besoin, ça ne se décrète pas en lisant un article : ça se travaille sur votre propre code. En mentoring 1:1, je relis vos PR avec vous et on traque ensemble chaque abstraction prématurée, chaque paramètre \"au cas où\". Vous développez le réflexe d'écrire juste ce qu'il faut, et rien de plus.",{"type":28,"tag":41,"props":4704,"children":4706},{"id":4705},"comment-repérer-une-fonctionnalité-superflue",[4707],{"type":38,"value":4708},"Comment repérer une fonctionnalité superflue",{"type":28,"tag":51,"props":4710,"children":4711},{},[4712],{"type":38,"value":4713},"Trois questions suffisent en général. Si vous répondez \"non\" à la première et \"oui\" aux deux autres, vous tenez un candidat à supprimer ou à ne pas écrire.",{"type":28,"tag":4327,"props":4715,"children":4716},{},[4717,4722,4727],{"type":28,"tag":4331,"props":4718,"children":4719},{},[4720],{"type":38,"value":4721},"Existe-t-il aujourd’hui un cas d’usage concret, validé, qui exige cette fonctionnalité ? Pas un cas hypothétique évoqué en réunion il y a six mois, mais un besoin actif, daté, avec un utilisateur ou un client identifié.",{"type":28,"tag":4331,"props":4723,"children":4724},{},[4725],{"type":38,"value":4726},"L’application fonctionnerait-elle correctement sans cette fonctionnalité ? Si oui, c’est qu’elle n’en a pas besoin maintenant.",{"type":28,"tag":4331,"props":4728,"children":4729},{},[4730],{"type":38,"value":4731},"Cet ajout complique-t-il la lecture, les tests ou la maintenance du code existant ? Une option supplémentaire, un paramètre \"au cas où\", une couche d’abstraction préventive : chacun de ces choix a un coût immédiat pour un bénéfice incertain.",{"type":28,"tag":51,"props":4733,"children":4734},{},[4735],{"type":38,"value":4736},"Quand la pression vient d’un client ou d’un manager qui demande une fonctionnalité \"pour plus tard\", la conversation à avoir est simple : qui en a besoin, à quelle date, et que coûte-t-il d’attendre que ce besoin soit confirmé ? Dans neuf cas sur dix, la demande s’évapore.",{"type":28,"tag":4738,"props":4739,"children":4741},"h4",{"id":4740},"exemples-concrets-en-java",[4742],{"type":38,"value":4743},"Exemples concrets en Java",{"type":28,"tag":51,"props":4745,"children":4746},{},[4747],{"type":38,"value":4748},"Prenons un exemple simple en Java où vous pourriez être tenté d’ajouter une fonctionnalité inutile :",{"type":28,"tag":152,"props":4750,"children":4752},{"className":154,"code":4751,"language":156,"meta":8,"style":8},"\u002F\u002F Exemple où une fonctionnalité inutile est ajoutée\npublic class User {\n    private String name;\n    private int age;\n    private String address; \u002F\u002F Cette information n'est pas encore utilisée\n\n    public User(String name, int age) {\n        this.name = name;\n        this.age = age;\n        \u002F\u002F On pourrait être tenté d'ajouter l'adresse dès maintenant, mais YAGNI !\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public int getAge() {\n        return age;\n    }\n    \n    \u002F\u002F On pourrait ajouter un getter pour l'adresse ici, mais ça serait prématuré.\n}\n",[4753],{"type":28,"tag":57,"props":4754,"children":4755},{"__ignoreMap":8},[4756,4764,4784,4805,4826,4852,4859,4903,4931,4959,4967,4974,4981,5005,5021,5028,5035,5059,5074,5081,5088,5096],{"type":28,"tag":162,"props":4757,"children":4758},{"class":164,"line":165},[4759],{"type":28,"tag":162,"props":4760,"children":4761},{"style":169},[4762],{"type":38,"value":4763},"\u002F\u002F Exemple où une fonctionnalité inutile est ajoutée\n",{"type":28,"tag":162,"props":4765,"children":4766},{"class":164,"line":175},[4767,4771,4775,4780],{"type":28,"tag":162,"props":4768,"children":4769},{"style":179},[4770],{"type":38,"value":326},{"type":28,"tag":162,"props":4772,"children":4773},{"style":179},[4774],{"type":38,"value":2669},{"type":28,"tag":162,"props":4776,"children":4777},{"style":2672},[4778],{"type":38,"value":4779}," User",{"type":28,"tag":162,"props":4781,"children":4782},{"style":203},[4783],{"type":38,"value":363},{"type":28,"tag":162,"props":4785,"children":4786},{"class":164,"line":209},[4787,4791,4796,4801],{"type":28,"tag":162,"props":4788,"children":4789},{"style":179},[4790],{"type":38,"value":3753},{"type":28,"tag":162,"props":4792,"children":4793},{"style":345},[4794],{"type":38,"value":4795}," String",{"type":28,"tag":162,"props":4797,"children":4798},{"style":185},[4799],{"type":38,"value":4800}," name",{"type":28,"tag":162,"props":4802,"children":4803},{"style":203},[4804],{"type":38,"value":206},{"type":28,"tag":162,"props":4806,"children":4807},{"class":164,"line":218},[4808,4812,4817,4822],{"type":28,"tag":162,"props":4809,"children":4810},{"style":179},[4811],{"type":38,"value":3753},{"type":28,"tag":162,"props":4813,"children":4814},{"style":179},[4815],{"type":38,"value":4816}," int",{"type":28,"tag":162,"props":4818,"children":4819},{"style":185},[4820],{"type":38,"value":4821}," age",{"type":28,"tag":162,"props":4823,"children":4824},{"style":203},[4825],{"type":38,"value":206},{"type":28,"tag":162,"props":4827,"children":4828},{"class":164,"line":227},[4829,4833,4837,4842,4847],{"type":28,"tag":162,"props":4830,"children":4831},{"style":179},[4832],{"type":38,"value":3753},{"type":28,"tag":162,"props":4834,"children":4835},{"style":345},[4836],{"type":38,"value":4795},{"type":28,"tag":162,"props":4838,"children":4839},{"style":185},[4840],{"type":38,"value":4841}," address",{"type":28,"tag":162,"props":4843,"children":4844},{"style":203},[4845],{"type":38,"value":4846},";",{"type":28,"tag":162,"props":4848,"children":4849},{"style":169},[4850],{"type":38,"value":4851}," \u002F\u002F Cette information n'est pas encore utilisée\n",{"type":28,"tag":162,"props":4853,"children":4854},{"class":164,"line":418},[4855],{"type":28,"tag":162,"props":4856,"children":4857},{"emptyLinePlaceholder":13},[4858],{"type":38,"value":215},{"type":28,"tag":162,"props":4860,"children":4861},{"class":164,"line":477},[4862,4866,4870,4874,4879,4883,4887,4891,4895,4899],{"type":28,"tag":162,"props":4863,"children":4864},{"style":179},[4865],{"type":38,"value":2687},{"type":28,"tag":162,"props":4867,"children":4868},{"style":334},[4869],{"type":38,"value":4779},{"type":28,"tag":162,"props":4871,"children":4872},{"style":203},[4873],{"type":38,"value":342},{"type":28,"tag":162,"props":4875,"children":4876},{"style":345},[4877],{"type":38,"value":4878},"String",{"type":28,"tag":162,"props":4880,"children":4881},{"style":2295},[4882],{"type":38,"value":4800},{"type":28,"tag":162,"props":4884,"children":4885},{"style":203},[4886],{"type":38,"value":513},{"type":28,"tag":162,"props":4888,"children":4889},{"style":179},[4890],{"type":38,"value":4816},{"type":28,"tag":162,"props":4892,"children":4893},{"style":2295},[4894],{"type":38,"value":4821},{"type":28,"tag":162,"props":4896,"children":4897},{"style":203},[4898],{"type":38,"value":358},{"type":28,"tag":162,"props":4900,"children":4901},{"style":203},[4902],{"type":38,"value":363},{"type":28,"tag":162,"props":4904,"children":4905},{"class":164,"line":485},[4906,4910,4914,4919,4923,4927],{"type":28,"tag":162,"props":4907,"children":4908},{"style":3811},[4909],{"type":38,"value":3814},{"type":28,"tag":162,"props":4911,"children":4912},{"style":203},[4913],{"type":38,"value":79},{"type":28,"tag":162,"props":4915,"children":4916},{"style":185},[4917],{"type":38,"value":4918},"name ",{"type":28,"tag":162,"props":4920,"children":4921},{"style":191},[4922],{"type":38,"value":194},{"type":28,"tag":162,"props":4924,"children":4925},{"style":185},[4926],{"type":38,"value":4800},{"type":28,"tag":162,"props":4928,"children":4929},{"style":203},[4930],{"type":38,"value":206},{"type":28,"tag":162,"props":4932,"children":4933},{"class":164,"line":494},[4934,4938,4942,4947,4951,4955],{"type":28,"tag":162,"props":4935,"children":4936},{"style":3811},[4937],{"type":38,"value":3814},{"type":28,"tag":162,"props":4939,"children":4940},{"style":203},[4941],{"type":38,"value":79},{"type":28,"tag":162,"props":4943,"children":4944},{"style":185},[4945],{"type":38,"value":4946},"age ",{"type":28,"tag":162,"props":4948,"children":4949},{"style":191},[4950],{"type":38,"value":194},{"type":28,"tag":162,"props":4952,"children":4953},{"style":185},[4954],{"type":38,"value":4821},{"type":28,"tag":162,"props":4956,"children":4957},{"style":203},[4958],{"type":38,"value":206},{"type":28,"tag":162,"props":4960,"children":4961},{"class":164,"line":525},[4962],{"type":28,"tag":162,"props":4963,"children":4964},{"style":169},[4965],{"type":38,"value":4966},"        \u002F\u002F On pourrait être tenté d'ajouter l'adresse dès maintenant, mais YAGNI !\n",{"type":28,"tag":162,"props":4968,"children":4969},{"class":164,"line":533},[4970],{"type":28,"tag":162,"props":4971,"children":4972},{"style":203},[4973],{"type":38,"value":628},{"type":28,"tag":162,"props":4975,"children":4976},{"class":164,"line":542},[4977],{"type":28,"tag":162,"props":4978,"children":4979},{"emptyLinePlaceholder":13},[4980],{"type":38,"value":215},{"type":28,"tag":162,"props":4982,"children":4983},{"class":164,"line":563},[4984,4988,4992,4997,5001],{"type":28,"tag":162,"props":4985,"children":4986},{"style":179},[4987],{"type":38,"value":2687},{"type":28,"tag":162,"props":4989,"children":4990},{"style":345},[4991],{"type":38,"value":4795},{"type":28,"tag":162,"props":4993,"children":4994},{"style":334},[4995],{"type":38,"value":4996}," getName",{"type":28,"tag":162,"props":4998,"children":4999},{"style":203},[5000],{"type":38,"value":451},{"type":28,"tag":162,"props":5002,"children":5003},{"style":203},[5004],{"type":38,"value":363},{"type":28,"tag":162,"props":5006,"children":5007},{"class":164,"line":581},[5008,5013,5017],{"type":28,"tag":162,"props":5009,"children":5010},{"style":179},[5011],{"type":38,"value":5012},"        return",{"type":28,"tag":162,"props":5014,"children":5015},{"style":185},[5016],{"type":38,"value":4800},{"type":28,"tag":162,"props":5018,"children":5019},{"style":203},[5020],{"type":38,"value":206},{"type":28,"tag":162,"props":5022,"children":5023},{"class":164,"line":622},[5024],{"type":28,"tag":162,"props":5025,"children":5026},{"style":203},[5027],{"type":38,"value":628},{"type":28,"tag":162,"props":5029,"children":5030},{"class":164,"line":631},[5031],{"type":28,"tag":162,"props":5032,"children":5033},{"emptyLinePlaceholder":13},[5034],{"type":38,"value":215},{"type":28,"tag":162,"props":5036,"children":5037},{"class":164,"line":640},[5038,5042,5046,5051,5055],{"type":28,"tag":162,"props":5039,"children":5040},{"style":179},[5041],{"type":38,"value":2687},{"type":28,"tag":162,"props":5043,"children":5044},{"style":179},[5045],{"type":38,"value":4816},{"type":28,"tag":162,"props":5047,"children":5048},{"style":334},[5049],{"type":38,"value":5050}," getAge",{"type":28,"tag":162,"props":5052,"children":5053},{"style":203},[5054],{"type":38,"value":451},{"type":28,"tag":162,"props":5056,"children":5057},{"style":203},[5058],{"type":38,"value":363},{"type":28,"tag":162,"props":5060,"children":5061},{"class":164,"line":648},[5062,5066,5070],{"type":28,"tag":162,"props":5063,"children":5064},{"style":179},[5065],{"type":38,"value":5012},{"type":28,"tag":162,"props":5067,"children":5068},{"style":185},[5069],{"type":38,"value":4821},{"type":28,"tag":162,"props":5071,"children":5072},{"style":203},[5073],{"type":38,"value":206},{"type":28,"tag":162,"props":5075,"children":5076},{"class":164,"line":657},[5077],{"type":28,"tag":162,"props":5078,"children":5079},{"style":203},[5080],{"type":38,"value":628},{"type":28,"tag":162,"props":5082,"children":5083},{"class":164,"line":693},[5084],{"type":28,"tag":162,"props":5085,"children":5086},{"style":185},[5087],{"type":38,"value":1883},{"type":28,"tag":162,"props":5089,"children":5090},{"class":164,"line":725},[5091],{"type":28,"tag":162,"props":5092,"children":5093},{"style":169},[5094],{"type":38,"value":5095},"    \u002F\u002F On pourrait ajouter un getter pour l'adresse ici, mais ça serait prématuré.\n",{"type":28,"tag":162,"props":5097,"children":5098},{"class":164,"line":758},[5099],{"type":28,"tag":162,"props":5100,"children":5101},{"style":203},[5102],{"type":38,"value":637},{"type":28,"tag":51,"props":5104,"children":5105},{},[5106,5108,5114],{"type":38,"value":5107},"Dans cet exemple, l’attribut ",{"type":28,"tag":57,"props":5109,"children":5111},{"className":5110},[],[5112],{"type":38,"value":5113},"address",{"type":38,"value":5115}," est inutile tant que le programme n’en a pas besoin. Selon YAGNI, ne l’ajoutez pas avant d’avoir une demande précise pour cette fonctionnalité.",{"type":28,"tag":98,"props":5117,"children":5118},{},[],{"type":28,"tag":41,"props":5120,"children":5122},{"id":5121},"mettre-yagni-en-pratique-au-quotidien",[5123],{"type":38,"value":5124},"Mettre YAGNI en pratique au quotidien",{"type":28,"tag":51,"props":5126,"children":5127},{},[5128],{"type":38,"value":5129},"Appliquer YAGNI demande de la discipline et un cadre. Voici les leviers qui fonctionnent dans les équipes que j’accompagne.",{"type":28,"tag":4738,"props":5131,"children":5133},{"id":5132},"_1-laisser-les-tests-piloter-le-code",[5134,5136],{"type":38,"value":5135},"1. ",{"type":28,"tag":34,"props":5137,"children":5138},{},[5139],{"type":38,"value":5140},"Laisser les tests piloter le code",{"type":28,"tag":51,"props":5142,"children":5143},{},[5144,5146,5151,5153,5159],{"type":38,"value":5145},"L’approche la plus efficace pour ne pas écrire de code spéculatif reste le ",{"type":28,"tag":34,"props":5147,"children":5148},{},[5149],{"type":38,"value":5150},"Test-Driven Development (TDD)",{"type":38,"value":5152},". Un ",{"type":28,"tag":3574,"props":5154,"children":5156},{"href":5155},"\u002Ffr\u002Fdette-technique\u002Fdecouvrir-frameworks-tests-java",[5157],{"type":38,"value":5158},"test",{"type":38,"value":5160}," d’abord, puis juste assez de code pour le faire passer. Le mécanisme oblige à rester sur le besoin réel : si aucun test ne le justifie, le code n’existe pas.",{"type":28,"tag":51,"props":5162,"children":5163},{},[5164],{"type":28,"tag":34,"props":5165,"children":5166},{},[5167],{"type":38,"value":150},{"type":28,"tag":152,"props":5169,"children":5171},{"className":154,"code":5170,"language":156,"meta":8,"style":8},"@Test\npublic void testAddUser() {\n    User user = new User(\"Alice\", 30);\n    assertEquals(\"Alice\", user.getName());\n    assertEquals(30, user.getAge());\n}\n",[5172],{"type":28,"tag":57,"props":5173,"children":5174},{"__ignoreMap":8},[5175,5190,5214,5261,5299,5336],{"type":28,"tag":162,"props":5176,"children":5177},{"class":164,"line":165},[5178,5184],{"type":28,"tag":162,"props":5179,"children":5181},{"style":5180},"--shiki-default:#EF9F76;--shiki-dark:#E1E4E8",[5182],{"type":38,"value":5183},"@",{"type":28,"tag":162,"props":5185,"children":5187},{"style":5186},"--shiki-default:#EF9F76;--shiki-dark:#F97583",[5188],{"type":38,"value":5189},"Test\n",{"type":28,"tag":162,"props":5191,"children":5192},{"class":164,"line":175},[5193,5197,5201,5206,5210],{"type":28,"tag":162,"props":5194,"children":5195},{"style":179},[5196],{"type":38,"value":326},{"type":28,"tag":162,"props":5198,"children":5199},{"style":179},[5200],{"type":38,"value":331},{"type":28,"tag":162,"props":5202,"children":5203},{"style":334},[5204],{"type":38,"value":5205}," testAddUser",{"type":28,"tag":162,"props":5207,"children":5208},{"style":203},[5209],{"type":38,"value":451},{"type":28,"tag":162,"props":5211,"children":5212},{"style":203},[5213],{"type":38,"value":363},{"type":28,"tag":162,"props":5215,"children":5216},{"class":164,"line":209},[5217,5222,5227,5231,5235,5239,5243,5248,5252,5257],{"type":28,"tag":162,"props":5218,"children":5219},{"style":345},[5220],{"type":38,"value":5221},"    User",{"type":28,"tag":162,"props":5223,"children":5224},{"style":185},[5225],{"type":38,"value":5226}," user ",{"type":28,"tag":162,"props":5228,"children":5229},{"style":191},[5230],{"type":38,"value":194},{"type":28,"tag":162,"props":5232,"children":5233},{"style":179},[5234],{"type":38,"value":3667},{"type":28,"tag":162,"props":5236,"children":5237},{"style":334},[5238],{"type":38,"value":4779},{"type":28,"tag":162,"props":5240,"children":5241},{"style":203},[5242],{"type":38,"value":342},{"type":28,"tag":162,"props":5244,"children":5245},{"style":612},[5246],{"type":38,"value":5247},"\"Alice\"",{"type":28,"tag":162,"props":5249,"children":5250},{"style":203},[5251],{"type":38,"value":513},{"type":28,"tag":162,"props":5253,"children":5254},{"style":197},[5255],{"type":38,"value":5256}," 30",{"type":28,"tag":162,"props":5258,"children":5259},{"style":203},[5260],{"type":38,"value":474},{"type":28,"tag":162,"props":5262,"children":5263},{"class":164,"line":218},[5264,5269,5273,5277,5281,5286,5290,5295],{"type":28,"tag":162,"props":5265,"children":5266},{"style":334},[5267],{"type":38,"value":5268},"    assertEquals",{"type":28,"tag":162,"props":5270,"children":5271},{"style":203},[5272],{"type":38,"value":342},{"type":28,"tag":162,"props":5274,"children":5275},{"style":612},[5276],{"type":38,"value":5247},{"type":28,"tag":162,"props":5278,"children":5279},{"style":203},[5280],{"type":38,"value":513},{"type":28,"tag":162,"props":5282,"children":5283},{"style":185},[5284],{"type":38,"value":5285}," user",{"type":28,"tag":162,"props":5287,"children":5288},{"style":203},[5289],{"type":38,"value":79},{"type":28,"tag":162,"props":5291,"children":5292},{"style":334},[5293],{"type":38,"value":5294},"getName",{"type":28,"tag":162,"props":5296,"children":5297},{"style":203},[5298],{"type":38,"value":2479},{"type":28,"tag":162,"props":5300,"children":5301},{"class":164,"line":227},[5302,5306,5310,5315,5319,5323,5327,5332],{"type":28,"tag":162,"props":5303,"children":5304},{"style":334},[5305],{"type":38,"value":5268},{"type":28,"tag":162,"props":5307,"children":5308},{"style":203},[5309],{"type":38,"value":342},{"type":28,"tag":162,"props":5311,"children":5312},{"style":197},[5313],{"type":38,"value":5314},"30",{"type":28,"tag":162,"props":5316,"children":5317},{"style":203},[5318],{"type":38,"value":513},{"type":28,"tag":162,"props":5320,"children":5321},{"style":185},[5322],{"type":38,"value":5285},{"type":28,"tag":162,"props":5324,"children":5325},{"style":203},[5326],{"type":38,"value":79},{"type":28,"tag":162,"props":5328,"children":5329},{"style":334},[5330],{"type":38,"value":5331},"getAge",{"type":28,"tag":162,"props":5333,"children":5334},{"style":203},[5335],{"type":38,"value":2479},{"type":28,"tag":162,"props":5337,"children":5338},{"class":164,"line":418},[5339],{"type":28,"tag":162,"props":5340,"children":5341},{"style":203},[5342],{"type":38,"value":637},{"type":28,"tag":51,"props":5344,"children":5345},{},[5346,5348,5353,5355,5361],{"type":38,"value":5347},"Avec ce test, vous vous concentrez uniquement sur l’ajout de l’utilisateur avec un nom et un âge. Tant qu’il n’existe pas de test nécessitant l’adresse, n’ajoutez pas d’attribut ",{"type":28,"tag":57,"props":5349,"children":5351},{"className":5350},[],[5352],{"type":38,"value":5113},{"type":38,"value":5354}," à la classe ",{"type":28,"tag":57,"props":5356,"children":5358},{"className":5357},[],[5359],{"type":38,"value":5360},"User",{"type":38,"value":79},{"type":28,"tag":4738,"props":5363,"children":5365},{"id":5364},"_2-évitez-de-généraliser-trop-tôt",[5366,5368],{"type":38,"value":5367},"2. ",{"type":28,"tag":34,"props":5369,"children":5370},{},[5371],{"type":38,"value":5372},"Évitez de généraliser trop tôt",{"type":28,"tag":51,"props":5374,"children":5375},{},[5376],{"type":38,"value":5377},"Un autre piège commun est de vouloir tout de suite rendre votre code trop générique ou flexible. Par exemple, vous pourriez penser qu’une méthode pourrait être réutilisée plus tard et vouloir la rendre paramétrable. Mais en réalité, si cette flexibilité n’est pas nécessaire maintenant, elle pourrait ne jamais l’être.",{"type":28,"tag":51,"props":5379,"children":5380},{},[5381],{"type":28,"tag":34,"props":5382,"children":5383},{},[5384],{"type":38,"value":5385},"Exemple à éviter :",{"type":28,"tag":152,"props":5387,"children":5389},{"className":154,"code":5388,"language":156,"meta":8,"style":8},"public class MathOperations {\n    \u002F\u002F On pourrait être tenté de rendre cette méthode très générique\n    public int multiply(int a, int b, boolean absoluteValues) {\n        if (absoluteValues) {\n            return Math.abs(a) * Math.abs(b);\n        } else {\n            return a * b;\n        }\n    }\n}\n",[5390],{"type":28,"tag":57,"props":5391,"children":5392},{"__ignoreMap":8},[5393,5413,5421,5485,5510,5574,5590,5613,5621,5628],{"type":28,"tag":162,"props":5394,"children":5395},{"class":164,"line":165},[5396,5400,5404,5409],{"type":28,"tag":162,"props":5397,"children":5398},{"style":179},[5399],{"type":38,"value":326},{"type":28,"tag":162,"props":5401,"children":5402},{"style":179},[5403],{"type":38,"value":2669},{"type":28,"tag":162,"props":5405,"children":5406},{"style":2672},[5407],{"type":38,"value":5408}," MathOperations",{"type":28,"tag":162,"props":5410,"children":5411},{"style":203},[5412],{"type":38,"value":363},{"type":28,"tag":162,"props":5414,"children":5415},{"class":164,"line":175},[5416],{"type":28,"tag":162,"props":5417,"children":5418},{"style":169},[5419],{"type":38,"value":5420},"    \u002F\u002F On pourrait être tenté de rendre cette méthode très générique\n",{"type":28,"tag":162,"props":5422,"children":5423},{"class":164,"line":209},[5424,5428,5432,5437,5441,5445,5450,5454,5458,5463,5467,5472,5477,5481],{"type":28,"tag":162,"props":5425,"children":5426},{"style":179},[5427],{"type":38,"value":2687},{"type":28,"tag":162,"props":5429,"children":5430},{"style":179},[5431],{"type":38,"value":4816},{"type":28,"tag":162,"props":5433,"children":5434},{"style":334},[5435],{"type":38,"value":5436}," multiply",{"type":28,"tag":162,"props":5438,"children":5439},{"style":203},[5440],{"type":38,"value":342},{"type":28,"tag":162,"props":5442,"children":5443},{"style":179},[5444],{"type":38,"value":182},{"type":28,"tag":162,"props":5446,"children":5447},{"style":2295},[5448],{"type":38,"value":5449}," a",{"type":28,"tag":162,"props":5451,"children":5452},{"style":203},[5453],{"type":38,"value":513},{"type":28,"tag":162,"props":5455,"children":5456},{"style":179},[5457],{"type":38,"value":4816},{"type":28,"tag":162,"props":5459,"children":5460},{"style":2295},[5461],{"type":38,"value":5462}," b",{"type":28,"tag":162,"props":5464,"children":5465},{"style":203},[5466],{"type":38,"value":513},{"type":28,"tag":162,"props":5468,"children":5469},{"style":179},[5470],{"type":38,"value":5471}," boolean",{"type":28,"tag":162,"props":5473,"children":5474},{"style":2295},[5475],{"type":38,"value":5476}," absoluteValues",{"type":28,"tag":162,"props":5478,"children":5479},{"style":203},[5480],{"type":38,"value":358},{"type":28,"tag":162,"props":5482,"children":5483},{"style":203},[5484],{"type":38,"value":363},{"type":28,"tag":162,"props":5486,"children":5487},{"class":164,"line":218},[5488,5493,5497,5502,5506],{"type":28,"tag":162,"props":5489,"children":5490},{"style":179},[5491],{"type":38,"value":5492},"        if",{"type":28,"tag":162,"props":5494,"children":5495},{"style":203},[5496],{"type":38,"value":384},{"type":28,"tag":162,"props":5498,"children":5499},{"style":185},[5500],{"type":38,"value":5501},"absoluteValues",{"type":28,"tag":162,"props":5503,"children":5504},{"style":203},[5505],{"type":38,"value":358},{"type":28,"tag":162,"props":5507,"children":5508},{"style":203},[5509],{"type":38,"value":363},{"type":28,"tag":162,"props":5511,"children":5512},{"class":164,"line":227},[5513,5518,5523,5527,5532,5536,5540,5544,5549,5553,5557,5561,5565,5570],{"type":28,"tag":162,"props":5514,"children":5515},{"style":179},[5516],{"type":38,"value":5517},"            return",{"type":28,"tag":162,"props":5519,"children":5520},{"style":185},[5521],{"type":38,"value":5522}," Math",{"type":28,"tag":162,"props":5524,"children":5525},{"style":203},[5526],{"type":38,"value":79},{"type":28,"tag":162,"props":5528,"children":5529},{"style":334},[5530],{"type":38,"value":5531},"abs",{"type":28,"tag":162,"props":5533,"children":5534},{"style":203},[5535],{"type":38,"value":342},{"type":28,"tag":162,"props":5537,"children":5538},{"style":185},[5539],{"type":38,"value":3574},{"type":28,"tag":162,"props":5541,"children":5542},{"style":203},[5543],{"type":38,"value":358},{"type":28,"tag":162,"props":5545,"children":5546},{"style":191},[5547],{"type":38,"value":5548}," *",{"type":28,"tag":162,"props":5550,"children":5551},{"style":185},[5552],{"type":38,"value":5522},{"type":28,"tag":162,"props":5554,"children":5555},{"style":203},[5556],{"type":38,"value":79},{"type":28,"tag":162,"props":5558,"children":5559},{"style":334},[5560],{"type":38,"value":5531},{"type":28,"tag":162,"props":5562,"children":5563},{"style":203},[5564],{"type":38,"value":342},{"type":28,"tag":162,"props":5566,"children":5567},{"style":185},[5568],{"type":38,"value":5569},"b",{"type":28,"tag":162,"props":5571,"children":5572},{"style":203},[5573],{"type":38,"value":474},{"type":28,"tag":162,"props":5575,"children":5576},{"class":164,"line":418},[5577,5582,5586],{"type":28,"tag":162,"props":5578,"children":5579},{"style":203},[5580],{"type":38,"value":5581},"        }",{"type":28,"tag":162,"props":5583,"children":5584},{"style":179},[5585],{"type":38,"value":574},{"type":28,"tag":162,"props":5587,"children":5588},{"style":203},[5589],{"type":38,"value":363},{"type":28,"tag":162,"props":5591,"children":5592},{"class":164,"line":477},[5593,5597,5601,5605,5609],{"type":28,"tag":162,"props":5594,"children":5595},{"style":179},[5596],{"type":38,"value":5517},{"type":28,"tag":162,"props":5598,"children":5599},{"style":185},[5600],{"type":38,"value":188},{"type":28,"tag":162,"props":5602,"children":5603},{"style":191},[5604],{"type":38,"value":1832},{"type":28,"tag":162,"props":5606,"children":5607},{"style":185},[5608],{"type":38,"value":5462},{"type":28,"tag":162,"props":5610,"children":5611},{"style":203},[5612],{"type":38,"value":206},{"type":28,"tag":162,"props":5614,"children":5615},{"class":164,"line":485},[5616],{"type":28,"tag":162,"props":5617,"children":5618},{"style":203},[5619],{"type":38,"value":5620},"        }\n",{"type":28,"tag":162,"props":5622,"children":5623},{"class":164,"line":494},[5624],{"type":28,"tag":162,"props":5625,"children":5626},{"style":203},[5627],{"type":38,"value":628},{"type":28,"tag":162,"props":5629,"children":5630},{"class":164,"line":525},[5631],{"type":28,"tag":162,"props":5632,"children":5633},{"style":203},[5634],{"type":38,"value":637},{"type":28,"tag":51,"props":5636,"children":5637},{},[5638,5640,5645],{"type":38,"value":5639},"Cette méthode introduit de la complexité inutile (avec le paramètre ",{"type":28,"tag":57,"props":5641,"children":5643},{"className":5642},[],[5644],{"type":38,"value":5501},{"type":38,"value":5646},") si votre programme n'a besoin que de multiplier des nombres sans se préoccuper de leur signe. La solution YAGNI serait de garder la méthode simple :",{"type":28,"tag":152,"props":5648,"children":5650},{"className":154,"code":5649,"language":156,"meta":8,"style":8},"public class MathOperations {\n    public int multiply(int a, int b) {\n        return a * b;\n    }\n}\n",[5651],{"type":28,"tag":57,"props":5652,"children":5653},{"__ignoreMap":8},[5654,5673,5720,5743,5750],{"type":28,"tag":162,"props":5655,"children":5656},{"class":164,"line":165},[5657,5661,5665,5669],{"type":28,"tag":162,"props":5658,"children":5659},{"style":179},[5660],{"type":38,"value":326},{"type":28,"tag":162,"props":5662,"children":5663},{"style":179},[5664],{"type":38,"value":2669},{"type":28,"tag":162,"props":5666,"children":5667},{"style":2672},[5668],{"type":38,"value":5408},{"type":28,"tag":162,"props":5670,"children":5671},{"style":203},[5672],{"type":38,"value":363},{"type":28,"tag":162,"props":5674,"children":5675},{"class":164,"line":175},[5676,5680,5684,5688,5692,5696,5700,5704,5708,5712,5716],{"type":28,"tag":162,"props":5677,"children":5678},{"style":179},[5679],{"type":38,"value":2687},{"type":28,"tag":162,"props":5681,"children":5682},{"style":179},[5683],{"type":38,"value":4816},{"type":28,"tag":162,"props":5685,"children":5686},{"style":334},[5687],{"type":38,"value":5436},{"type":28,"tag":162,"props":5689,"children":5690},{"style":203},[5691],{"type":38,"value":342},{"type":28,"tag":162,"props":5693,"children":5694},{"style":179},[5695],{"type":38,"value":182},{"type":28,"tag":162,"props":5697,"children":5698},{"style":2295},[5699],{"type":38,"value":5449},{"type":28,"tag":162,"props":5701,"children":5702},{"style":203},[5703],{"type":38,"value":513},{"type":28,"tag":162,"props":5705,"children":5706},{"style":179},[5707],{"type":38,"value":4816},{"type":28,"tag":162,"props":5709,"children":5710},{"style":2295},[5711],{"type":38,"value":5462},{"type":28,"tag":162,"props":5713,"children":5714},{"style":203},[5715],{"type":38,"value":358},{"type":28,"tag":162,"props":5717,"children":5718},{"style":203},[5719],{"type":38,"value":363},{"type":28,"tag":162,"props":5721,"children":5722},{"class":164,"line":209},[5723,5727,5731,5735,5739],{"type":28,"tag":162,"props":5724,"children":5725},{"style":179},[5726],{"type":38,"value":5012},{"type":28,"tag":162,"props":5728,"children":5729},{"style":185},[5730],{"type":38,"value":188},{"type":28,"tag":162,"props":5732,"children":5733},{"style":191},[5734],{"type":38,"value":1832},{"type":28,"tag":162,"props":5736,"children":5737},{"style":185},[5738],{"type":38,"value":5462},{"type":28,"tag":162,"props":5740,"children":5741},{"style":203},[5742],{"type":38,"value":206},{"type":28,"tag":162,"props":5744,"children":5745},{"class":164,"line":218},[5746],{"type":28,"tag":162,"props":5747,"children":5748},{"style":203},[5749],{"type":38,"value":628},{"type":28,"tag":162,"props":5751,"children":5752},{"class":164,"line":227},[5753],{"type":28,"tag":162,"props":5754,"children":5755},{"style":203},[5756],{"type":38,"value":637},{"type":28,"tag":4738,"props":5758,"children":5760},{"id":5759},"_3-refactoriser-pour-supprimer-pas-seulement-pour-ajouter",[5761,5763],{"type":38,"value":5762},"3. ",{"type":28,"tag":34,"props":5764,"children":5765},{},[5766],{"type":38,"value":5767},"Refactoriser pour supprimer, pas seulement pour ajouter",{"type":28,"tag":51,"props":5769,"children":5770},{},[5771,5773,5778],{"type":38,"value":5772},"Le refactoring sert aussi à ",{"type":28,"tag":2630,"props":5774,"children":5775},{},[5776],{"type":38,"value":5777},"retirer",{"type":38,"value":5779}," ce qui n’a jamais servi. Un projet évolue, certaines parties ajoutées dans l’anticipation ne sont jamais activées. Une revue trimestrielle suffit pour identifier les classes orphelines, les méthodes jamais appelées, les options jamais cochées, et les supprimer sans cérémonie.",{"type":28,"tag":4738,"props":5781,"children":5783},{"id":5782},"_4-trancher-en-équipe-sur-le-besoin-réel",[5784,5786],{"type":38,"value":5785},"4. ",{"type":28,"tag":34,"props":5787,"children":5788},{},[5789],{"type":38,"value":5790},"Trancher en équipe sur le besoin réel",{"type":28,"tag":51,"props":5792,"children":5793},{},[5794],{"type":38,"value":5795},"Quand une nouvelle fonctionnalité est proposée, une seule question à poser en stand-up : qui en a besoin maintenant ? Si la réponse est \"personne, mais ça pourrait servir\", la fonctionnalité retourne dans le backlog. Pas de débat, pas de compromis. Le backlog est fait pour ça.",{"type":28,"tag":98,"props":5797,"children":5798},{},[],{"type":28,"tag":41,"props":5800,"children":5802},{"id":5801},"les-deux-pièges-classiques",[5803],{"type":38,"value":5804},"Les deux pièges classiques",{"type":28,"tag":51,"props":5806,"children":5807},{},[5808],{"type":38,"value":5809},"Sur le terrain, deux dérives reviennent constamment.",{"type":28,"tag":51,"props":5811,"children":5812},{},[5813],{"type":38,"value":5814},"La première est le \"juste au cas où\" déguisé en bonne pratique. Un développeur ajoute une couche de gestion multi-devises dans une application qui ne traite que des euros, parce qu’\"on ne sait jamais\". Trois ans plus tard, l’app traite toujours des euros, mais chaque modification du module de paiement doit composer avec une abstraction qui n’a jamais servi. La majorité des scénarios anticipés ne se présentent pas, et ceux qui se présentent ressemblent rarement à ce qu’on avait imaginé.",{"type":28,"tag":51,"props":5816,"children":5817},{},[5818,5820,5825],{"type":38,"value":5819},"La deuxième dérive est l’inverse : confondre YAGNI avec un refus d’anticiper. YAGNI n’interdit pas d’adapter le code quand un besoin réel émerge. Si un client demande une fonctionnalité confirmée et planifiée, on l’implémente. La discipline porte sur les besoins ",{"type":28,"tag":2630,"props":5821,"children":5822},{},[5823],{"type":38,"value":5824},"spéculatifs",{"type":38,"value":5826},", pas sur l’évolution légitime du produit. Le critère est simple : un besoin formulé, daté, attribué à un utilisateur identifié, pas un \"ce serait bien si\" entendu en couloir.",{"type":28,"tag":1186,"props":5828,"children":5830},{"cta":4441,"href":4442,"title":5829,"type":4444},"YAGNI n'est qu'une pratique parmi les 100 qui font un code propre",[5831],{"type":28,"tag":51,"props":5832,"children":5833},{},[5834],{"type":38,"value":5835},"Cet article décortique une discipline : ne pas écrire le code dont vous n'avez pas besoin aujourd'hui. Le Craft Bundle réunit les 100 pratiques que j'applique au quotidien pour coder propre, savoir quand simplifier, quand refactoriser, quand s'arrêter. Ce sont celles que l'IA ne vous apprendra jamais, parce qu'elle ne les a jamais vues tenir sur cinq ans de production.",{"type":28,"tag":98,"props":5837,"children":5838},{},[],{"type":28,"tag":41,"props":5840,"children":5842},{"id":5841},"questions-fréquentes-sur-yagni",[5843],{"type":38,"value":5844},"Questions fréquentes sur YAGNI",{"type":28,"tag":4464,"props":5846,"children":5847},{},[5848,5853],{"type":28,"tag":4468,"props":5849,"children":5850},{},[5851],{"type":38,"value":5852},"YAGNI veut-il dire \"ne jamais anticiper\" ?",{"type":28,"tag":51,"props":5854,"children":5855},{},[5856,5858,5863],{"type":38,"value":5857},"Non. YAGNI cible le code écrit pour des besoins ",{"type":28,"tag":2630,"props":5859,"children":5860},{},[5861],{"type":38,"value":5862},"non confirmés",{"type":38,"value":5864},". Si vous savez avec certitude qu’une fonctionnalité sera livrée dans deux semaines parce qu’elle est validée et planifiée, l’ignorer serait absurde. La règle s’applique aux \"au cas où\", pas aux engagements pris.",{"type":28,"tag":4464,"props":5866,"children":5867},{},[5868,5873],{"type":28,"tag":4468,"props":5869,"children":5870},{},[5871],{"type":38,"value":5872},"Comment l’expliquer à un client qui demande des fonctionnalités \"pour plus tard\" ?",{"type":28,"tag":51,"props":5874,"children":5875},{},[5876],{"type":38,"value":5877},"Sortez les chiffres. Une fonctionnalité ajoutée prématurément coûte trois fois : à l’écriture, à la maintenance, et au moment où il faudra la retirer ou la modifier parce que le besoin réel ne correspond pas à ce qui a été imaginé. Proposez plutôt de garder le besoin dans le backlog et de l’implémenter quand il sera confirmé, avec une meilleure compréhension du contexte réel.",{"type":28,"tag":4464,"props":5879,"children":5880},{},[5881,5886],{"type":28,"tag":4468,"props":5882,"children":5883},{},[5884],{"type":38,"value":5885},"\"Si je ne l’ajoute pas maintenant, je devrai tout refaire plus tard\", vraiment ?",{"type":28,"tag":51,"props":5887,"children":5888},{},[5889],{"type":38,"value":5890},"Cette peur est compréhensible mais le terrain la dément. Un code minimal est plus facile à étendre qu’un code sur-conçu. Quand le besoin réel arrive, il diffère presque toujours de ce qui avait été anticipé : l’abstraction préventive devient un obstacle, pas un raccourci.",{"type":28,"tag":4464,"props":5892,"children":5893},{},[5894,5899],{"type":28,"tag":4468,"props":5895,"children":5896},{},[5897],{"type":38,"value":5898},"YAGNI et architectures évolutives : compatibles ?",{"type":28,"tag":51,"props":5900,"children":5901},{},[5902,5904,5909],{"type":38,"value":5903},"Oui. YAGNI ne s’oppose pas à la qualité ni au design : il s’oppose à la spéculation. Vous pouvez parfaitement appliquer SOLID, écrire des interfaces propres et concevoir des modules cohérents ",{"type":28,"tag":2630,"props":5905,"children":5906},{},[5907],{"type":38,"value":5908},"sur le code que vous avez besoin d’écrire aujourd’hui",{"type":38,"value":5910},". La différence est qu’on n’invente pas de points d’extension pour des extensions qui n’existent pas encore.",{"type":28,"tag":98,"props":5912,"children":5913},{},[],{"type":28,"tag":41,"props":5915,"children":5916},{"id":4522},[5917],{"type":38,"value":4528},{"type":28,"tag":51,"props":5919,"children":5920},{},[5921,5923,5928,5930,5935],{"type":38,"value":5922},"YAGNI ne rend pas votre code meilleur : il vous évite simplement de l’aggraver avec des fonctionnalités que personne n’a demandées. La discipline est moins intuitive qu’il n’y paraît, parce qu’elle suppose d’accepter une forme d’inconfort : ne pas écrire le code qu’on aurait ",{"type":28,"tag":2630,"props":5924,"children":5925},{},[5926],{"type":38,"value":5927},"envie",{"type":38,"value":5929}," d’écrire, ne pas anticiper ce qu’on ",{"type":28,"tag":2630,"props":5931,"children":5932},{},[5933],{"type":38,"value":5934},"imagine",{"type":38,"value":5936}," utile, faire confiance au backlog pour rattraper le besoin quand il sera réel. C’est cette retenue qui distingue les bases de code qui vieillissent bien des autres.",{"type":28,"tag":1186,"props":5938,"children":5941},{"cta":5939,"href":4537,"title":5940,"type":4539},"Accéder à l'assessment gratuit →","Ressource gratuite : Votre équipe livre-t-elle aussi vite qu'elle le pourrait ?",[5942],{"type":28,"tag":51,"props":5943,"children":5944},{},[5945],{"type":38,"value":5946},"30 questions, 5 dimensions, score sur 100. Mesurez la maturité engineering de votre équipe avec le benchmark utilisé dans des DSI de 50 à 800+ développeurs, et identifiez vos 3 chantiers prioritaires.",{"type":28,"tag":4547,"props":5948,"children":5949},{},[5950],{"type":38,"value":4551},{"title":8,"searchDepth":175,"depth":175,"links":5952},[5953],{"id":4614,"depth":175,"text":4617,"children":5954},[5955,5956,5957,5958,5959,5960,5961],{"id":4620,"depth":209,"text":4623},{"id":4665,"depth":209,"text":4668},{"id":4705,"depth":209,"text":4708},{"id":5121,"depth":209,"text":5124},{"id":5801,"depth":209,"text":5804},{"id":5841,"depth":209,"text":5844},{"id":4522,"depth":209,"text":4528},"content:fr:dette-technique:yagni-ecrire-code-qualite-sans-fonctionnalites-inutiles.md","fr\u002Fdette-technique\u002Fyagni-ecrire-code-qualite-sans-fonctionnalites-inutiles.md","fr\u002Fdette-technique\u002Fyagni-ecrire-code-qualite-sans-fonctionnalites-inutiles",{"_path":5155,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":5966,"description":5967,"id":5968,"date":5969,"listed":13,"hidden":7,"nocomments":7,"categories":5970,"tags":5971,"cover":5973,"readingTime":5974,"body":5978,"_type":4591,"_id":9962,"_source":4593,"_file":9963,"_stem":9964,"_extension":4596},"Découvrir les frameworks de tests en Java, Types, exemples et guide complet","Découvrez pourquoi les frameworks de tests sont indispensables pour les développeurs Java. Explorez les types de tests, des exemples concrets avec...",44,"2024-03-14",[6],[5972,17],"tests","covers\u002Farticles\u002Fframeworks-de-tests.jpg",{"text":4606,"minutes":5975,"time":5976,"words":5977},7.945,476700,1589,{"type":25,"children":5979,"toc":9954},[5980,5989,5994,6006,6018,6021,6030,6035,6047,6057,6062,6076,6086,6091,6101,6121,6140,6143,6152,6157,6167,6185,6192,6520,6533,6543,6568,6574,7007,7017,7029,7035,7804,7829,7832,7841,7846,7856,7865,7871,8180,8190,8199,8205,8492,8502,8512,8518,9075,9084,9094,9103,9109,9609,9612,9621,9626,9636,9681,9691,9747,9757,9787,9799,9809,9837,9848,9870,9879,9882,9891,9914,9927,9940,9950],{"type":28,"tag":41,"props":5981,"children":5983},{"id":5982},"découvrir-limportance-et-les-différents-types-de-frameworks-de-tests-pour-les-développeurs-de-logiciels",[5984],{"type":28,"tag":34,"props":5985,"children":5986},{},[5987],{"type":38,"value":5988},"Découvrir l'importance et les différents types de frameworks de tests pour les développeurs de logiciels",{"type":28,"tag":51,"props":5990,"children":5991},{},[5992],{"type":38,"value":5993},"Scénario familier : tout fonctionne, vous livrez, un bug inattendu surgit en prod. Frustrant, et évitable avec de meilleurs tests. Tester manuellement reste tenable sur un POC. Pas sur un projet qui grandit.",{"type":28,"tag":51,"props":5995,"children":5996},{},[5997,5999,6004],{"type":38,"value":5998},"D'où l'intérêt des ",{"type":28,"tag":34,"props":6000,"children":6001},{},[6002],{"type":38,"value":6003},"frameworks de tests",{"type":38,"value":6005},". Ils automatisent, réduisent les erreurs humaines, fluidifient le développement. En Java, l'écosystème est riche : unitaires, intégration, fonctionnels. Reste à choisir le bon outil et à l'utiliser correctement.",{"type":28,"tag":51,"props":6007,"children":6008},{},[6009,6011,6016],{"type":38,"value":6010},"L'article passe en revue ",{"type":28,"tag":34,"props":6012,"children":6013},{},[6014],{"type":38,"value":6015},"pourquoi",{"type":38,"value":6017}," les frameworks de tests sont indispensables, les principaux types de tests, et des exemples concrets en Java.",{"type":28,"tag":98,"props":6019,"children":6020},{},[],{"type":28,"tag":41,"props":6022,"children":6024},{"id":6023},"frameworks-de-tests-pourquoi-en-utiliser-un",[6025],{"type":28,"tag":34,"props":6026,"children":6027},{},[6028],{"type":38,"value":6029},"Frameworks de tests : Pourquoi en utiliser un ?",{"type":28,"tag":51,"props":6031,"children":6032},{},[6033],{"type":38,"value":6034},"Sans tests automatisés, chaque nouvelle fonctionnalité ou correction de bug doit être vérifiée à la main. Inefficace à petite échelle, ingérable dès que le projet se complexifie.",{"type":28,"tag":51,"props":6036,"children":6037},{},[6038,6040,6045],{"type":38,"value":6039},"Voici ",{"type":28,"tag":34,"props":6041,"children":6042},{},[6043],{"type":38,"value":6044},"trois raisons principales",{"type":38,"value":6046}," pour lesquelles l'utilisation d'un framework de tests est essentielle :",{"type":28,"tag":4738,"props":6048,"children":6050},{"id":6049},"_1-automatisation-des-tests",[6051,6052],{"type":38,"value":5135},{"type":28,"tag":34,"props":6053,"children":6054},{},[6055],{"type":38,"value":6056},"Automatisation des tests",{"type":28,"tag":51,"props":6058,"children":6059},{},[6060],{"type":38,"value":6061},"Un framework exécute automatiquement des dizaines voire des centaines de tests en quelques secondes. Fini le lancement manuel de l'application, les vérifications une par une, la prise de notes. Vous récupérez du temps pour écrire des fonctionnalités, et le code reste stable.",{"type":28,"tag":6063,"props":6064,"children":6065},"blockquote",{},[6066],{"type":28,"tag":51,"props":6067,"children":6068},{},[6069,6074],{"type":28,"tag":34,"props":6070,"children":6071},{},[6072],{"type":38,"value":6073},"TIP",{"type":38,"value":6075}," : Intégrez les tests dans votre workflow de développement dès le début. Plus tôt vous automatisez les tests, plus vous réduisez les risques de bugs en production.",{"type":28,"tag":4738,"props":6077,"children":6079},{"id":6078},"_2-détection-rapide-des-bugs",[6080,6081],{"type":38,"value":5367},{"type":28,"tag":34,"props":6082,"children":6083},{},[6084],{"type":38,"value":6085},"Détection rapide des bugs",{"type":28,"tag":51,"props":6087,"children":6088},{},[6089],{"type":38,"value":6090},"Les tests automatisés attrapent les régressions au moment où elles apparaissent. Chaque modification risque de casser quelque chose ailleurs. Avec une suite de tests, vous le savez immédiatement, pas en prod trois semaines plus tard. Dans les DSI bancaires et assurance que j'ai accompagnées, l'absence de tests automatisés allonge le time-to-market de 30 à 50 %. Les équipes passent une part croissante de leur capacité à gérer des régressions au lieu de livrer.",{"type":28,"tag":4738,"props":6092,"children":6094},{"id":6093},"_3-amélioration-de-la-qualité-du-code",[6095,6096],{"type":38,"value":5762},{"type":28,"tag":34,"props":6097,"children":6098},{},[6099],{"type":38,"value":6100},"Amélioration de la qualité du code",{"type":28,"tag":51,"props":6102,"children":6103},{},[6104,6106,6111,6113,6119],{"type":38,"value":6105},"Le fait d’écrire des tests pousse à mieux structurer et modulariser votre code. Un code facilement testable est souvent plus propre, plus clair et mieux organisé. Les frameworks de tests favorisent ainsi des pratiques de développement comme le ",{"type":28,"tag":34,"props":6107,"children":6108},{},[6109],{"type":38,"value":6110},"TDD (Test Driven Development)",{"type":38,"value":6112},", popularisé par Kent Beck dans son ouvrage \"Test-Driven Development by Example\", où vous écrivez d’abord vos tests avant d’implémenter la fonctionnalité. Pour aller plus loin sur la qualité, une ",{"type":28,"tag":3574,"props":6114,"children":6116},{"href":6115},"\u002Ffr\u002Fdette-technique\u002Fdefinition-of-done-qualite",[6117],{"type":38,"value":6118},"Definition of Done",{"type":38,"value":6120}," solide exige des tests automatisés comme critère non-négociable.",{"type":28,"tag":6063,"props":6122,"children":6123},{},[6124],{"type":28,"tag":51,"props":6125,"children":6126},{},[6127,6131,6133,6138],{"type":28,"tag":34,"props":6128,"children":6129},{},[6130],{"type":38,"value":6073},{"type":38,"value":6132}," : Le ",{"type":28,"tag":34,"props":6134,"children":6135},{},[6136],{"type":38,"value":6137},"TDD",{"type":38,"value":6139}," peut sembler contre-intuitif au début, mais il est très efficace à long terme. Essayez d’écrire un petit test avant d’écrire la fonctionnalité : vous verrez que ça force à réfléchir en profondeur sur le comportement attendu.",{"type":28,"tag":98,"props":6141,"children":6142},{},[],{"type":28,"tag":41,"props":6144,"children":6146},{"id":6145},"les-différents-types-de-frameworks-de-tests",[6147],{"type":28,"tag":34,"props":6148,"children":6149},{},[6150],{"type":38,"value":6151},"Les différents types de frameworks de tests",{"type":28,"tag":51,"props":6153,"children":6154},{},[6155],{"type":38,"value":6156},"Il existe plusieurs types de tests, chacun ayant un rôle spécifique dans le développement logiciel. En fonction de ce que vous souhaitez tester (une petite portion de code ou tout un système), vous choisirez un type de test particulier. Voici les principaux types de tests utilisés par les développeurs, ainsi que les frameworks correspondants pour chaque type.",{"type":28,"tag":4738,"props":6158,"children":6160},{"id":6159},"_1-tests-unitaires",[6161,6162],{"type":38,"value":5135},{"type":28,"tag":34,"props":6163,"children":6164},{},[6165],{"type":38,"value":6166},"Tests unitaires",{"type":28,"tag":51,"props":6168,"children":6169},{},[6170,6172,6177,6178,6183],{"type":38,"value":6171},"Les tests unitaires se concentrent sur de petites portions de votre code, généralement des fonctions ou des méthodes individuelles. L'idée est de s'assurer que chaque unité fonctionne correctement de manière isolée. En Java, ",{"type":28,"tag":34,"props":6173,"children":6174},{},[6175],{"type":38,"value":6176},"JUnit",{"type":38,"value":135},{"type":28,"tag":34,"props":6179,"children":6180},{},[6181],{"type":38,"value":6182},"TestNG",{"type":38,"value":6184}," sont deux des frameworks les plus populaires pour effectuer des tests unitaires.",{"type":28,"tag":6186,"props":6187,"children":6189},"h5",{"id":6188},"exemple-de-test-unitaire-avec-junit",[6190],{"type":38,"value":6191},"Exemple de test unitaire avec JUnit :",{"type":28,"tag":152,"props":6193,"children":6195},{"className":154,"code":6194,"language":156,"meta":8,"style":8},"import org.junit.jupiter.api.Test;\nimport static org.junit.jupiter.api.Assertions.assertEquals;\n\npublic class CalculatriceTest {\n\n    @Test\n    public void testAddition() {\n        Calculatrice calc = new Calculatrice();\n        int resultat = calc.addition(2, 3);\n        assertEquals(5, resultat, \"L'addition de 2 et 3 devrait être 5\");\n    }\n}\n",[6196],{"type":28,"tag":57,"props":6197,"children":6198},{"__ignoreMap":8},[6199,6252,6314,6321,6341,6348,6360,6384,6414,6467,6506,6513],{"type":28,"tag":162,"props":6200,"children":6201},{"class":164,"line":165},[6202,6207,6212,6216,6221,6225,6230,6234,6239,6243,6248],{"type":28,"tag":162,"props":6203,"children":6204},{"style":179},[6205],{"type":38,"value":6206},"import",{"type":28,"tag":162,"props":6208,"children":6209},{"style":185},[6210],{"type":38,"value":6211}," org",{"type":28,"tag":162,"props":6213,"children":6214},{"style":203},[6215],{"type":38,"value":79},{"type":28,"tag":162,"props":6217,"children":6218},{"style":185},[6219],{"type":38,"value":6220},"junit",{"type":28,"tag":162,"props":6222,"children":6223},{"style":203},[6224],{"type":38,"value":79},{"type":28,"tag":162,"props":6226,"children":6227},{"style":185},[6228],{"type":38,"value":6229},"jupiter",{"type":28,"tag":162,"props":6231,"children":6232},{"style":203},[6233],{"type":38,"value":79},{"type":28,"tag":162,"props":6235,"children":6236},{"style":185},[6237],{"type":38,"value":6238},"api",{"type":28,"tag":162,"props":6240,"children":6241},{"style":203},[6242],{"type":38,"value":79},{"type":28,"tag":162,"props":6244,"children":6245},{"style":185},[6246],{"type":38,"value":6247},"Test",{"type":28,"tag":162,"props":6249,"children":6250},{"style":203},[6251],{"type":38,"value":206},{"type":28,"tag":162,"props":6253,"children":6254},{"class":164,"line":175},[6255,6259,6264,6268,6272,6276,6280,6284,6288,6292,6296,6301,6305,6310],{"type":28,"tag":162,"props":6256,"children":6257},{"style":179},[6258],{"type":38,"value":6206},{"type":28,"tag":162,"props":6260,"children":6261},{"style":179},[6262],{"type":38,"value":6263}," static",{"type":28,"tag":162,"props":6265,"children":6266},{"style":185},[6267],{"type":38,"value":6211},{"type":28,"tag":162,"props":6269,"children":6270},{"style":203},[6271],{"type":38,"value":79},{"type":28,"tag":162,"props":6273,"children":6274},{"style":185},[6275],{"type":38,"value":6220},{"type":28,"tag":162,"props":6277,"children":6278},{"style":203},[6279],{"type":38,"value":79},{"type":28,"tag":162,"props":6281,"children":6282},{"style":185},[6283],{"type":38,"value":6229},{"type":28,"tag":162,"props":6285,"children":6286},{"style":203},[6287],{"type":38,"value":79},{"type":28,"tag":162,"props":6289,"children":6290},{"style":185},[6291],{"type":38,"value":6238},{"type":28,"tag":162,"props":6293,"children":6294},{"style":203},[6295],{"type":38,"value":79},{"type":28,"tag":162,"props":6297,"children":6298},{"style":185},[6299],{"type":38,"value":6300},"Assertions",{"type":28,"tag":162,"props":6302,"children":6303},{"style":203},[6304],{"type":38,"value":79},{"type":28,"tag":162,"props":6306,"children":6307},{"style":185},[6308],{"type":38,"value":6309},"assertEquals",{"type":28,"tag":162,"props":6311,"children":6312},{"style":203},[6313],{"type":38,"value":206},{"type":28,"tag":162,"props":6315,"children":6316},{"class":164,"line":209},[6317],{"type":28,"tag":162,"props":6318,"children":6319},{"emptyLinePlaceholder":13},[6320],{"type":38,"value":215},{"type":28,"tag":162,"props":6322,"children":6323},{"class":164,"line":218},[6324,6328,6332,6337],{"type":28,"tag":162,"props":6325,"children":6326},{"style":179},[6327],{"type":38,"value":326},{"type":28,"tag":162,"props":6329,"children":6330},{"style":179},[6331],{"type":38,"value":2669},{"type":28,"tag":162,"props":6333,"children":6334},{"style":2672},[6335],{"type":38,"value":6336}," CalculatriceTest",{"type":28,"tag":162,"props":6338,"children":6339},{"style":203},[6340],{"type":38,"value":363},{"type":28,"tag":162,"props":6342,"children":6343},{"class":164,"line":227},[6344],{"type":28,"tag":162,"props":6345,"children":6346},{"emptyLinePlaceholder":13},[6347],{"type":38,"value":215},{"type":28,"tag":162,"props":6349,"children":6350},{"class":164,"line":418},[6351,6356],{"type":28,"tag":162,"props":6352,"children":6353},{"style":5180},[6354],{"type":38,"value":6355},"    @",{"type":28,"tag":162,"props":6357,"children":6358},{"style":5186},[6359],{"type":38,"value":5189},{"type":28,"tag":162,"props":6361,"children":6362},{"class":164,"line":477},[6363,6367,6371,6376,6380],{"type":28,"tag":162,"props":6364,"children":6365},{"style":179},[6366],{"type":38,"value":2687},{"type":28,"tag":162,"props":6368,"children":6369},{"style":179},[6370],{"type":38,"value":331},{"type":28,"tag":162,"props":6372,"children":6373},{"style":334},[6374],{"type":38,"value":6375}," testAddition",{"type":28,"tag":162,"props":6377,"children":6378},{"style":203},[6379],{"type":38,"value":451},{"type":28,"tag":162,"props":6381,"children":6382},{"style":203},[6383],{"type":38,"value":363},{"type":28,"tag":162,"props":6385,"children":6386},{"class":164,"line":485},[6387,6392,6397,6401,6405,6410],{"type":28,"tag":162,"props":6388,"children":6389},{"style":345},[6390],{"type":38,"value":6391},"        Calculatrice",{"type":28,"tag":162,"props":6393,"children":6394},{"style":185},[6395],{"type":38,"value":6396}," calc ",{"type":28,"tag":162,"props":6398,"children":6399},{"style":191},[6400],{"type":38,"value":194},{"type":28,"tag":162,"props":6402,"children":6403},{"style":179},[6404],{"type":38,"value":3667},{"type":28,"tag":162,"props":6406,"children":6407},{"style":334},[6408],{"type":38,"value":6409}," Calculatrice",{"type":28,"tag":162,"props":6411,"children":6412},{"style":203},[6413],{"type":38,"value":834},{"type":28,"tag":162,"props":6415,"children":6416},{"class":164,"line":494},[6417,6422,6427,6431,6436,6440,6445,6449,6454,6458,6463],{"type":28,"tag":162,"props":6418,"children":6419},{"style":179},[6420],{"type":38,"value":6421},"        int",{"type":28,"tag":162,"props":6423,"children":6424},{"style":185},[6425],{"type":38,"value":6426}," resultat ",{"type":28,"tag":162,"props":6428,"children":6429},{"style":191},[6430],{"type":38,"value":194},{"type":28,"tag":162,"props":6432,"children":6433},{"style":185},[6434],{"type":38,"value":6435}," calc",{"type":28,"tag":162,"props":6437,"children":6438},{"style":203},[6439],{"type":38,"value":79},{"type":28,"tag":162,"props":6441,"children":6442},{"style":334},[6443],{"type":38,"value":6444},"addition",{"type":28,"tag":162,"props":6446,"children":6447},{"style":203},[6448],{"type":38,"value":342},{"type":28,"tag":162,"props":6450,"children":6451},{"style":197},[6452],{"type":38,"value":6453},"2",{"type":28,"tag":162,"props":6455,"children":6456},{"style":203},[6457],{"type":38,"value":513},{"type":28,"tag":162,"props":6459,"children":6460},{"style":197},[6461],{"type":38,"value":6462}," 3",{"type":28,"tag":162,"props":6464,"children":6465},{"style":203},[6466],{"type":38,"value":474},{"type":28,"tag":162,"props":6468,"children":6469},{"class":164,"line":525},[6470,6475,6479,6484,6488,6493,6497,6502],{"type":28,"tag":162,"props":6471,"children":6472},{"style":334},[6473],{"type":38,"value":6474},"        assertEquals",{"type":28,"tag":162,"props":6476,"children":6477},{"style":203},[6478],{"type":38,"value":342},{"type":28,"tag":162,"props":6480,"children":6481},{"style":197},[6482],{"type":38,"value":6483},"5",{"type":28,"tag":162,"props":6485,"children":6486},{"style":203},[6487],{"type":38,"value":513},{"type":28,"tag":162,"props":6489,"children":6490},{"style":185},[6491],{"type":38,"value":6492}," resultat",{"type":28,"tag":162,"props":6494,"children":6495},{"style":203},[6496],{"type":38,"value":513},{"type":28,"tag":162,"props":6498,"children":6499},{"style":612},[6500],{"type":38,"value":6501}," \"L'addition de 2 et 3 devrait être 5\"",{"type":28,"tag":162,"props":6503,"children":6504},{"style":203},[6505],{"type":38,"value":474},{"type":28,"tag":162,"props":6507,"children":6508},{"class":164,"line":533},[6509],{"type":28,"tag":162,"props":6510,"children":6511},{"style":203},[6512],{"type":38,"value":628},{"type":28,"tag":162,"props":6514,"children":6515},{"class":164,"line":542},[6516],{"type":28,"tag":162,"props":6517,"children":6518},{"style":203},[6519],{"type":38,"value":637},{"type":28,"tag":6063,"props":6521,"children":6522},{},[6523],{"type":28,"tag":51,"props":6524,"children":6525},{},[6526,6531],{"type":28,"tag":34,"props":6527,"children":6528},{},[6529],{"type":38,"value":6530},"ALERT",{"type":38,"value":6532}," : Il est crucial de tester toutes les branches de votre code, même celles qui semblent rarement utilisées. Par exemple, n'oubliez pas de tester les exceptions et les cas limites.",{"type":28,"tag":4738,"props":6534,"children":6536},{"id":6535},"_2-tests-dintégration",[6537,6538],{"type":38,"value":5367},{"type":28,"tag":34,"props":6539,"children":6540},{},[6541],{"type":38,"value":6542},"Tests d'intégration",{"type":28,"tag":51,"props":6544,"children":6545},{},[6546,6548,6553,6555,6560,6562,6567],{"type":38,"value":6547},"Les ",{"type":28,"tag":3574,"props":6549,"children":6550},{"href":3576},[6551],{"type":38,"value":6552},"tests d'intégration",{"type":38,"value":6554}," vérifient que différentes parties de votre application fonctionnent bien ensemble. Contrairement aux tests unitaires, qui se concentrent sur des morceaux isolés, les tests d'intégration s'assurent que les interactions entre modules sont correctes. Pour ce type de tests, vous pouvez utiliser des outils comme ",{"type":28,"tag":34,"props":6556,"children":6557},{},[6558],{"type":38,"value":6559},"Spring Test",{"type":38,"value":6561}," ou ",{"type":28,"tag":34,"props":6563,"children":6564},{},[6565],{"type":38,"value":6566},"Arquillian",{"type":38,"value":79},{"type":28,"tag":6186,"props":6569,"children":6571},{"id":6570},"exemple-de-test-dintégration-avec-spring",[6572],{"type":38,"value":6573},"Exemple de test d'intégration avec Spring :",{"type":28,"tag":152,"props":6575,"children":6577},{"className":154,"code":6576,"language":156,"meta":8,"style":8},"import org.junit.jupiter.api.Test;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBootTest\npublic class ApplicationIntegrationTest {\n\n    @Autowired\n    private UserService userService;\n\n    @Test\n    public void testCreerUtilisateur() {\n        User user = new User(\"John\", \"Doe\");\n        User savedUser = userService.creerUtilisateur(user);\n        assertNotNull(savedUser.getId(), \"L'utilisateur devrait avoir un ID après l'enregistrement\");\n    }\n}\n",[6578],{"type":28,"tag":57,"props":6579,"children":6580},{"__ignoreMap":8},[6581,6628,6688,6746,6753,6765,6785,6792,6804,6825,6832,6843,6867,6913,6954,6993,7000],{"type":28,"tag":162,"props":6582,"children":6583},{"class":164,"line":165},[6584,6588,6592,6596,6600,6604,6608,6612,6616,6620,6624],{"type":28,"tag":162,"props":6585,"children":6586},{"style":179},[6587],{"type":38,"value":6206},{"type":28,"tag":162,"props":6589,"children":6590},{"style":185},[6591],{"type":38,"value":6211},{"type":28,"tag":162,"props":6593,"children":6594},{"style":203},[6595],{"type":38,"value":79},{"type":28,"tag":162,"props":6597,"children":6598},{"style":185},[6599],{"type":38,"value":6220},{"type":28,"tag":162,"props":6601,"children":6602},{"style":203},[6603],{"type":38,"value":79},{"type":28,"tag":162,"props":6605,"children":6606},{"style":185},[6607],{"type":38,"value":6229},{"type":28,"tag":162,"props":6609,"children":6610},{"style":203},[6611],{"type":38,"value":79},{"type":28,"tag":162,"props":6613,"children":6614},{"style":185},[6615],{"type":38,"value":6238},{"type":28,"tag":162,"props":6617,"children":6618},{"style":203},[6619],{"type":38,"value":79},{"type":28,"tag":162,"props":6621,"children":6622},{"style":185},[6623],{"type":38,"value":6247},{"type":28,"tag":162,"props":6625,"children":6626},{"style":203},[6627],{"type":38,"value":206},{"type":28,"tag":162,"props":6629,"children":6630},{"class":164,"line":175},[6631,6635,6639,6643,6648,6652,6657,6661,6666,6670,6675,6679,6684],{"type":28,"tag":162,"props":6632,"children":6633},{"style":179},[6634],{"type":38,"value":6206},{"type":28,"tag":162,"props":6636,"children":6637},{"style":185},[6638],{"type":38,"value":6211},{"type":28,"tag":162,"props":6640,"children":6641},{"style":203},[6642],{"type":38,"value":79},{"type":28,"tag":162,"props":6644,"children":6645},{"style":185},[6646],{"type":38,"value":6647},"springframework",{"type":28,"tag":162,"props":6649,"children":6650},{"style":203},[6651],{"type":38,"value":79},{"type":28,"tag":162,"props":6653,"children":6654},{"style":185},[6655],{"type":38,"value":6656},"beans",{"type":28,"tag":162,"props":6658,"children":6659},{"style":203},[6660],{"type":38,"value":79},{"type":28,"tag":162,"props":6662,"children":6663},{"style":185},[6664],{"type":38,"value":6665},"factory",{"type":28,"tag":162,"props":6667,"children":6668},{"style":203},[6669],{"type":38,"value":79},{"type":28,"tag":162,"props":6671,"children":6672},{"style":185},[6673],{"type":38,"value":6674},"annotation",{"type":28,"tag":162,"props":6676,"children":6677},{"style":203},[6678],{"type":38,"value":79},{"type":28,"tag":162,"props":6680,"children":6681},{"style":185},[6682],{"type":38,"value":6683},"Autowired",{"type":28,"tag":162,"props":6685,"children":6686},{"style":203},[6687],{"type":38,"value":206},{"type":28,"tag":162,"props":6689,"children":6690},{"class":164,"line":209},[6691,6695,6699,6703,6707,6711,6716,6720,6724,6728,6733,6737,6742],{"type":28,"tag":162,"props":6692,"children":6693},{"style":179},[6694],{"type":38,"value":6206},{"type":28,"tag":162,"props":6696,"children":6697},{"style":185},[6698],{"type":38,"value":6211},{"type":28,"tag":162,"props":6700,"children":6701},{"style":203},[6702],{"type":38,"value":79},{"type":28,"tag":162,"props":6704,"children":6705},{"style":185},[6706],{"type":38,"value":6647},{"type":28,"tag":162,"props":6708,"children":6709},{"style":203},[6710],{"type":38,"value":79},{"type":28,"tag":162,"props":6712,"children":6713},{"style":185},[6714],{"type":38,"value":6715},"boot",{"type":28,"tag":162,"props":6717,"children":6718},{"style":203},[6719],{"type":38,"value":79},{"type":28,"tag":162,"props":6721,"children":6722},{"style":185},[6723],{"type":38,"value":5158},{"type":28,"tag":162,"props":6725,"children":6726},{"style":203},[6727],{"type":38,"value":79},{"type":28,"tag":162,"props":6729,"children":6730},{"style":185},[6731],{"type":38,"value":6732},"context",{"type":28,"tag":162,"props":6734,"children":6735},{"style":203},[6736],{"type":38,"value":79},{"type":28,"tag":162,"props":6738,"children":6739},{"style":185},[6740],{"type":38,"value":6741},"SpringBootTest",{"type":28,"tag":162,"props":6743,"children":6744},{"style":203},[6745],{"type":38,"value":206},{"type":28,"tag":162,"props":6747,"children":6748},{"class":164,"line":218},[6749],{"type":28,"tag":162,"props":6750,"children":6751},{"emptyLinePlaceholder":13},[6752],{"type":38,"value":215},{"type":28,"tag":162,"props":6754,"children":6755},{"class":164,"line":227},[6756,6760],{"type":28,"tag":162,"props":6757,"children":6758},{"style":5180},[6759],{"type":38,"value":5183},{"type":28,"tag":162,"props":6761,"children":6762},{"style":5186},[6763],{"type":38,"value":6764},"SpringBootTest\n",{"type":28,"tag":162,"props":6766,"children":6767},{"class":164,"line":418},[6768,6772,6776,6781],{"type":28,"tag":162,"props":6769,"children":6770},{"style":179},[6771],{"type":38,"value":326},{"type":28,"tag":162,"props":6773,"children":6774},{"style":179},[6775],{"type":38,"value":2669},{"type":28,"tag":162,"props":6777,"children":6778},{"style":2672},[6779],{"type":38,"value":6780}," ApplicationIntegrationTest",{"type":28,"tag":162,"props":6782,"children":6783},{"style":203},[6784],{"type":38,"value":363},{"type":28,"tag":162,"props":6786,"children":6787},{"class":164,"line":477},[6788],{"type":28,"tag":162,"props":6789,"children":6790},{"emptyLinePlaceholder":13},[6791],{"type":38,"value":215},{"type":28,"tag":162,"props":6793,"children":6794},{"class":164,"line":485},[6795,6799],{"type":28,"tag":162,"props":6796,"children":6797},{"style":5180},[6798],{"type":38,"value":6355},{"type":28,"tag":162,"props":6800,"children":6801},{"style":5186},[6802],{"type":38,"value":6803},"Autowired\n",{"type":28,"tag":162,"props":6805,"children":6806},{"class":164,"line":494},[6807,6811,6816,6821],{"type":28,"tag":162,"props":6808,"children":6809},{"style":179},[6810],{"type":38,"value":3753},{"type":28,"tag":162,"props":6812,"children":6813},{"style":345},[6814],{"type":38,"value":6815}," UserService",{"type":28,"tag":162,"props":6817,"children":6818},{"style":185},[6819],{"type":38,"value":6820}," userService",{"type":28,"tag":162,"props":6822,"children":6823},{"style":203},[6824],{"type":38,"value":206},{"type":28,"tag":162,"props":6826,"children":6827},{"class":164,"line":525},[6828],{"type":28,"tag":162,"props":6829,"children":6830},{"emptyLinePlaceholder":13},[6831],{"type":38,"value":215},{"type":28,"tag":162,"props":6833,"children":6834},{"class":164,"line":533},[6835,6839],{"type":28,"tag":162,"props":6836,"children":6837},{"style":5180},[6838],{"type":38,"value":6355},{"type":28,"tag":162,"props":6840,"children":6841},{"style":5186},[6842],{"type":38,"value":5189},{"type":28,"tag":162,"props":6844,"children":6845},{"class":164,"line":542},[6846,6850,6854,6859,6863],{"type":28,"tag":162,"props":6847,"children":6848},{"style":179},[6849],{"type":38,"value":2687},{"type":28,"tag":162,"props":6851,"children":6852},{"style":179},[6853],{"type":38,"value":331},{"type":28,"tag":162,"props":6855,"children":6856},{"style":334},[6857],{"type":38,"value":6858}," testCreerUtilisateur",{"type":28,"tag":162,"props":6860,"children":6861},{"style":203},[6862],{"type":38,"value":451},{"type":28,"tag":162,"props":6864,"children":6865},{"style":203},[6866],{"type":38,"value":363},{"type":28,"tag":162,"props":6868,"children":6869},{"class":164,"line":563},[6870,6875,6879,6883,6887,6891,6895,6900,6904,6909],{"type":28,"tag":162,"props":6871,"children":6872},{"style":345},[6873],{"type":38,"value":6874},"        User",{"type":28,"tag":162,"props":6876,"children":6877},{"style":185},[6878],{"type":38,"value":5226},{"type":28,"tag":162,"props":6880,"children":6881},{"style":191},[6882],{"type":38,"value":194},{"type":28,"tag":162,"props":6884,"children":6885},{"style":179},[6886],{"type":38,"value":3667},{"type":28,"tag":162,"props":6888,"children":6889},{"style":334},[6890],{"type":38,"value":4779},{"type":28,"tag":162,"props":6892,"children":6893},{"style":203},[6894],{"type":38,"value":342},{"type":28,"tag":162,"props":6896,"children":6897},{"style":612},[6898],{"type":38,"value":6899},"\"John\"",{"type":28,"tag":162,"props":6901,"children":6902},{"style":203},[6903],{"type":38,"value":513},{"type":28,"tag":162,"props":6905,"children":6906},{"style":612},[6907],{"type":38,"value":6908}," \"Doe\"",{"type":28,"tag":162,"props":6910,"children":6911},{"style":203},[6912],{"type":38,"value":474},{"type":28,"tag":162,"props":6914,"children":6915},{"class":164,"line":581},[6916,6920,6925,6929,6933,6937,6942,6946,6950],{"type":28,"tag":162,"props":6917,"children":6918},{"style":345},[6919],{"type":38,"value":6874},{"type":28,"tag":162,"props":6921,"children":6922},{"style":185},[6923],{"type":38,"value":6924}," savedUser ",{"type":28,"tag":162,"props":6926,"children":6927},{"style":191},[6928],{"type":38,"value":194},{"type":28,"tag":162,"props":6930,"children":6931},{"style":185},[6932],{"type":38,"value":6820},{"type":28,"tag":162,"props":6934,"children":6935},{"style":203},[6936],{"type":38,"value":79},{"type":28,"tag":162,"props":6938,"children":6939},{"style":334},[6940],{"type":38,"value":6941},"creerUtilisateur",{"type":28,"tag":162,"props":6943,"children":6944},{"style":203},[6945],{"type":38,"value":342},{"type":28,"tag":162,"props":6947,"children":6948},{"style":185},[6949],{"type":38,"value":1271},{"type":28,"tag":162,"props":6951,"children":6952},{"style":203},[6953],{"type":38,"value":474},{"type":28,"tag":162,"props":6955,"children":6956},{"class":164,"line":622},[6957,6962,6966,6971,6975,6980,6984,6989],{"type":28,"tag":162,"props":6958,"children":6959},{"style":334},[6960],{"type":38,"value":6961},"        assertNotNull",{"type":28,"tag":162,"props":6963,"children":6964},{"style":203},[6965],{"type":38,"value":342},{"type":28,"tag":162,"props":6967,"children":6968},{"style":185},[6969],{"type":38,"value":6970},"savedUser",{"type":28,"tag":162,"props":6972,"children":6973},{"style":203},[6974],{"type":38,"value":79},{"type":28,"tag":162,"props":6976,"children":6977},{"style":334},[6978],{"type":38,"value":6979},"getId",{"type":28,"tag":162,"props":6981,"children":6982},{"style":203},[6983],{"type":38,"value":1948},{"type":28,"tag":162,"props":6985,"children":6986},{"style":612},[6987],{"type":38,"value":6988}," \"L'utilisateur devrait avoir un ID après l'enregistrement\"",{"type":28,"tag":162,"props":6990,"children":6991},{"style":203},[6992],{"type":38,"value":474},{"type":28,"tag":162,"props":6994,"children":6995},{"class":164,"line":631},[6996],{"type":28,"tag":162,"props":6997,"children":6998},{"style":203},[6999],{"type":38,"value":628},{"type":28,"tag":162,"props":7001,"children":7002},{"class":164,"line":640},[7003],{"type":28,"tag":162,"props":7004,"children":7005},{"style":203},[7006],{"type":38,"value":637},{"type":28,"tag":4738,"props":7008,"children":7010},{"id":7009},"_3-tests-fonctionnels-ou-end-to-end",[7011,7012],{"type":38,"value":5762},{"type":28,"tag":34,"props":7013,"children":7014},{},[7015],{"type":38,"value":7016},"Tests fonctionnels (ou end-to-end)",{"type":28,"tag":51,"props":7018,"children":7019},{},[7020,7022,7027],{"type":38,"value":7021},"Les tests fonctionnels, ou tests end-to-end, vérifient l'ensemble du système du point de vue de l'utilisateur. Ils simulent des scénarios d'utilisation complets pour s'assurer que l'application fonctionne comme prévu du début à la fin. ",{"type":28,"tag":34,"props":7023,"children":7024},{},[7025],{"type":38,"value":7026},"Selenium",{"type":38,"value":7028}," est souvent utilisé pour automatiser les tests fonctionnels des applications web.",{"type":28,"tag":6186,"props":7030,"children":7032},{"id":7031},"exemple-de-test-fonctionnel-avec-selenium",[7033],{"type":38,"value":7034},"Exemple de test fonctionnel avec Selenium :",{"type":28,"tag":152,"props":7036,"children":7038},{"className":154,"code":7037,"language":156,"meta":8,"style":8},"import org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\nimport org.openqa.selenium.By;\n\npublic class LoginTest {\n\n    public static void main(String[] args) {\n        \u002F\u002F Configurer le WebDriver pour Chrome\n        System.setProperty(\"webdriver.chrome.driver\", \"path_to_chromedriver\");\n        WebDriver driver = new ChromeDriver();\n\n        \u002F\u002F Ouvrir la page de login\n        driver.get(\"http:\u002F\u002Fmonapplication.com\u002Flogin\");\n\n        \u002F\u002F Entrer les informations d'identification et se connecter\n        driver.findElement(By.id(\"username\")).sendKeys(\"monNomUtilisateur\");\n        driver.findElement(By.id(\"password\")).sendKeys(\"monMotDePasse\");\n        driver.findElement(By.id(\"loginButton\")).click();\n\n        \u002F\u002F Vérifier que la connexion a réussi\n        String pageTitre = driver.getTitle();\n        if(pageTitre.equals(\"Tableau de bord\")) {\n            System.out.println(\"Connexion réussie !\");\n        } else {\n            System.out.println(\"Échec de la connexion.\");\n        }\n\n        \u002F\u002F Fermer le navigateur\n        driver.quit();\n    }\n}\n",[7039],{"type":28,"tag":57,"props":7040,"children":7041},{"__ignoreMap":8},[7042,7084,7133,7173,7180,7200,7207,7253,7261,7299,7329,7336,7344,7374,7381,7389,7454,7515,7568,7575,7583,7618,7660,7697,7712,7748,7755,7762,7770,7790,7797],{"type":28,"tag":162,"props":7043,"children":7044},{"class":164,"line":165},[7045,7049,7053,7057,7062,7066,7071,7075,7080],{"type":28,"tag":162,"props":7046,"children":7047},{"style":179},[7048],{"type":38,"value":6206},{"type":28,"tag":162,"props":7050,"children":7051},{"style":185},[7052],{"type":38,"value":6211},{"type":28,"tag":162,"props":7054,"children":7055},{"style":203},[7056],{"type":38,"value":79},{"type":28,"tag":162,"props":7058,"children":7059},{"style":185},[7060],{"type":38,"value":7061},"openqa",{"type":28,"tag":162,"props":7063,"children":7064},{"style":203},[7065],{"type":38,"value":79},{"type":28,"tag":162,"props":7067,"children":7068},{"style":185},[7069],{"type":38,"value":7070},"selenium",{"type":28,"tag":162,"props":7072,"children":7073},{"style":203},[7074],{"type":38,"value":79},{"type":28,"tag":162,"props":7076,"children":7077},{"style":185},[7078],{"type":38,"value":7079},"WebDriver",{"type":28,"tag":162,"props":7081,"children":7082},{"style":203},[7083],{"type":38,"value":206},{"type":28,"tag":162,"props":7085,"children":7086},{"class":164,"line":175},[7087,7091,7095,7099,7103,7107,7111,7115,7120,7124,7129],{"type":28,"tag":162,"props":7088,"children":7089},{"style":179},[7090],{"type":38,"value":6206},{"type":28,"tag":162,"props":7092,"children":7093},{"style":185},[7094],{"type":38,"value":6211},{"type":28,"tag":162,"props":7096,"children":7097},{"style":203},[7098],{"type":38,"value":79},{"type":28,"tag":162,"props":7100,"children":7101},{"style":185},[7102],{"type":38,"value":7061},{"type":28,"tag":162,"props":7104,"children":7105},{"style":203},[7106],{"type":38,"value":79},{"type":28,"tag":162,"props":7108,"children":7109},{"style":185},[7110],{"type":38,"value":7070},{"type":28,"tag":162,"props":7112,"children":7113},{"style":203},[7114],{"type":38,"value":79},{"type":28,"tag":162,"props":7116,"children":7117},{"style":185},[7118],{"type":38,"value":7119},"chrome",{"type":28,"tag":162,"props":7121,"children":7122},{"style":203},[7123],{"type":38,"value":79},{"type":28,"tag":162,"props":7125,"children":7126},{"style":185},[7127],{"type":38,"value":7128},"ChromeDriver",{"type":28,"tag":162,"props":7130,"children":7131},{"style":203},[7132],{"type":38,"value":206},{"type":28,"tag":162,"props":7134,"children":7135},{"class":164,"line":209},[7136,7140,7144,7148,7152,7156,7160,7164,7169],{"type":28,"tag":162,"props":7137,"children":7138},{"style":179},[7139],{"type":38,"value":6206},{"type":28,"tag":162,"props":7141,"children":7142},{"style":185},[7143],{"type":38,"value":6211},{"type":28,"tag":162,"props":7145,"children":7146},{"style":203},[7147],{"type":38,"value":79},{"type":28,"tag":162,"props":7149,"children":7150},{"style":185},[7151],{"type":38,"value":7061},{"type":28,"tag":162,"props":7153,"children":7154},{"style":203},[7155],{"type":38,"value":79},{"type":28,"tag":162,"props":7157,"children":7158},{"style":185},[7159],{"type":38,"value":7070},{"type":28,"tag":162,"props":7161,"children":7162},{"style":203},[7163],{"type":38,"value":79},{"type":28,"tag":162,"props":7165,"children":7166},{"style":185},[7167],{"type":38,"value":7168},"By",{"type":28,"tag":162,"props":7170,"children":7171},{"style":203},[7172],{"type":38,"value":206},{"type":28,"tag":162,"props":7174,"children":7175},{"class":164,"line":218},[7176],{"type":28,"tag":162,"props":7177,"children":7178},{"emptyLinePlaceholder":13},[7179],{"type":38,"value":215},{"type":28,"tag":162,"props":7181,"children":7182},{"class":164,"line":227},[7183,7187,7191,7196],{"type":28,"tag":162,"props":7184,"children":7185},{"style":179},[7186],{"type":38,"value":326},{"type":28,"tag":162,"props":7188,"children":7189},{"style":179},[7190],{"type":38,"value":2669},{"type":28,"tag":162,"props":7192,"children":7193},{"style":2672},[7194],{"type":38,"value":7195}," LoginTest",{"type":28,"tag":162,"props":7197,"children":7198},{"style":203},[7199],{"type":38,"value":363},{"type":28,"tag":162,"props":7201,"children":7202},{"class":164,"line":418},[7203],{"type":28,"tag":162,"props":7204,"children":7205},{"emptyLinePlaceholder":13},[7206],{"type":38,"value":215},{"type":28,"tag":162,"props":7208,"children":7209},{"class":164,"line":477},[7210,7214,7218,7222,7227,7231,7235,7240,7245,7249],{"type":28,"tag":162,"props":7211,"children":7212},{"style":179},[7213],{"type":38,"value":2687},{"type":28,"tag":162,"props":7215,"children":7216},{"style":179},[7217],{"type":38,"value":6263},{"type":28,"tag":162,"props":7219,"children":7220},{"style":179},[7221],{"type":38,"value":331},{"type":28,"tag":162,"props":7223,"children":7224},{"style":334},[7225],{"type":38,"value":7226}," main",{"type":28,"tag":162,"props":7228,"children":7229},{"style":203},[7230],{"type":38,"value":342},{"type":28,"tag":162,"props":7232,"children":7233},{"style":179},[7234],{"type":38,"value":4878},{"type":28,"tag":162,"props":7236,"children":7237},{"style":203},[7238],{"type":38,"value":7239},"[]",{"type":28,"tag":162,"props":7241,"children":7242},{"style":2295},[7243],{"type":38,"value":7244}," args",{"type":28,"tag":162,"props":7246,"children":7247},{"style":203},[7248],{"type":38,"value":358},{"type":28,"tag":162,"props":7250,"children":7251},{"style":203},[7252],{"type":38,"value":363},{"type":28,"tag":162,"props":7254,"children":7255},{"class":164,"line":485},[7256],{"type":28,"tag":162,"props":7257,"children":7258},{"style":169},[7259],{"type":38,"value":7260},"        \u002F\u002F Configurer le WebDriver pour Chrome\n",{"type":28,"tag":162,"props":7262,"children":7263},{"class":164,"line":494},[7264,7268,7272,7277,7281,7286,7290,7295],{"type":28,"tag":162,"props":7265,"children":7266},{"style":185},[7267],{"type":38,"value":587},{"type":28,"tag":162,"props":7269,"children":7270},{"style":203},[7271],{"type":38,"value":79},{"type":28,"tag":162,"props":7273,"children":7274},{"style":334},[7275],{"type":38,"value":7276},"setProperty",{"type":28,"tag":162,"props":7278,"children":7279},{"style":203},[7280],{"type":38,"value":342},{"type":28,"tag":162,"props":7282,"children":7283},{"style":612},[7284],{"type":38,"value":7285},"\"webdriver.chrome.driver\"",{"type":28,"tag":162,"props":7287,"children":7288},{"style":203},[7289],{"type":38,"value":513},{"type":28,"tag":162,"props":7291,"children":7292},{"style":612},[7293],{"type":38,"value":7294}," \"path_to_chromedriver\"",{"type":28,"tag":162,"props":7296,"children":7297},{"style":203},[7298],{"type":38,"value":474},{"type":28,"tag":162,"props":7300,"children":7301},{"class":164,"line":525},[7302,7307,7312,7316,7320,7325],{"type":28,"tag":162,"props":7303,"children":7304},{"style":345},[7305],{"type":38,"value":7306},"        WebDriver",{"type":28,"tag":162,"props":7308,"children":7309},{"style":185},[7310],{"type":38,"value":7311}," driver ",{"type":28,"tag":162,"props":7313,"children":7314},{"style":191},[7315],{"type":38,"value":194},{"type":28,"tag":162,"props":7317,"children":7318},{"style":179},[7319],{"type":38,"value":3667},{"type":28,"tag":162,"props":7321,"children":7322},{"style":334},[7323],{"type":38,"value":7324}," ChromeDriver",{"type":28,"tag":162,"props":7326,"children":7327},{"style":203},[7328],{"type":38,"value":834},{"type":28,"tag":162,"props":7330,"children":7331},{"class":164,"line":533},[7332],{"type":28,"tag":162,"props":7333,"children":7334},{"emptyLinePlaceholder":13},[7335],{"type":38,"value":215},{"type":28,"tag":162,"props":7337,"children":7338},{"class":164,"line":542},[7339],{"type":28,"tag":162,"props":7340,"children":7341},{"style":169},[7342],{"type":38,"value":7343},"        \u002F\u002F Ouvrir la page de login\n",{"type":28,"tag":162,"props":7345,"children":7346},{"class":164,"line":563},[7347,7352,7356,7361,7365,7370],{"type":28,"tag":162,"props":7348,"children":7349},{"style":185},[7350],{"type":38,"value":7351},"        driver",{"type":28,"tag":162,"props":7353,"children":7354},{"style":203},[7355],{"type":38,"value":79},{"type":28,"tag":162,"props":7357,"children":7358},{"style":334},[7359],{"type":38,"value":7360},"get",{"type":28,"tag":162,"props":7362,"children":7363},{"style":203},[7364],{"type":38,"value":342},{"type":28,"tag":162,"props":7366,"children":7367},{"style":612},[7368],{"type":38,"value":7369},"\"http:\u002F\u002Fmonapplication.com\u002Flogin\"",{"type":28,"tag":162,"props":7371,"children":7372},{"style":203},[7373],{"type":38,"value":474},{"type":28,"tag":162,"props":7375,"children":7376},{"class":164,"line":581},[7377],{"type":28,"tag":162,"props":7378,"children":7379},{"emptyLinePlaceholder":13},[7380],{"type":38,"value":215},{"type":28,"tag":162,"props":7382,"children":7383},{"class":164,"line":622},[7384],{"type":28,"tag":162,"props":7385,"children":7386},{"style":169},[7387],{"type":38,"value":7388},"        \u002F\u002F Entrer les informations d'identification et se connecter\n",{"type":28,"tag":162,"props":7390,"children":7391},{"class":164,"line":631},[7392,7396,7400,7405,7409,7413,7417,7422,7426,7431,7436,7441,7445,7450],{"type":28,"tag":162,"props":7393,"children":7394},{"style":185},[7395],{"type":38,"value":7351},{"type":28,"tag":162,"props":7397,"children":7398},{"style":203},[7399],{"type":38,"value":79},{"type":28,"tag":162,"props":7401,"children":7402},{"style":334},[7403],{"type":38,"value":7404},"findElement",{"type":28,"tag":162,"props":7406,"children":7407},{"style":203},[7408],{"type":38,"value":342},{"type":28,"tag":162,"props":7410,"children":7411},{"style":185},[7412],{"type":38,"value":7168},{"type":28,"tag":162,"props":7414,"children":7415},{"style":203},[7416],{"type":38,"value":79},{"type":28,"tag":162,"props":7418,"children":7419},{"style":334},[7420],{"type":38,"value":7421},"id",{"type":28,"tag":162,"props":7423,"children":7424},{"style":203},[7425],{"type":38,"value":342},{"type":28,"tag":162,"props":7427,"children":7428},{"style":612},[7429],{"type":38,"value":7430},"\"username\"",{"type":28,"tag":162,"props":7432,"children":7433},{"style":203},[7434],{"type":38,"value":7435},")).",{"type":28,"tag":162,"props":7437,"children":7438},{"style":334},[7439],{"type":38,"value":7440},"sendKeys",{"type":28,"tag":162,"props":7442,"children":7443},{"style":203},[7444],{"type":38,"value":342},{"type":28,"tag":162,"props":7446,"children":7447},{"style":612},[7448],{"type":38,"value":7449},"\"monNomUtilisateur\"",{"type":28,"tag":162,"props":7451,"children":7452},{"style":203},[7453],{"type":38,"value":474},{"type":28,"tag":162,"props":7455,"children":7456},{"class":164,"line":640},[7457,7461,7465,7469,7473,7477,7481,7485,7489,7494,7498,7502,7506,7511],{"type":28,"tag":162,"props":7458,"children":7459},{"style":185},[7460],{"type":38,"value":7351},{"type":28,"tag":162,"props":7462,"children":7463},{"style":203},[7464],{"type":38,"value":79},{"type":28,"tag":162,"props":7466,"children":7467},{"style":334},[7468],{"type":38,"value":7404},{"type":28,"tag":162,"props":7470,"children":7471},{"style":203},[7472],{"type":38,"value":342},{"type":28,"tag":162,"props":7474,"children":7475},{"style":185},[7476],{"type":38,"value":7168},{"type":28,"tag":162,"props":7478,"children":7479},{"style":203},[7480],{"type":38,"value":79},{"type":28,"tag":162,"props":7482,"children":7483},{"style":334},[7484],{"type":38,"value":7421},{"type":28,"tag":162,"props":7486,"children":7487},{"style":203},[7488],{"type":38,"value":342},{"type":28,"tag":162,"props":7490,"children":7491},{"style":612},[7492],{"type":38,"value":7493},"\"password\"",{"type":28,"tag":162,"props":7495,"children":7496},{"style":203},[7497],{"type":38,"value":7435},{"type":28,"tag":162,"props":7499,"children":7500},{"style":334},[7501],{"type":38,"value":7440},{"type":28,"tag":162,"props":7503,"children":7504},{"style":203},[7505],{"type":38,"value":342},{"type":28,"tag":162,"props":7507,"children":7508},{"style":612},[7509],{"type":38,"value":7510},"\"monMotDePasse\"",{"type":28,"tag":162,"props":7512,"children":7513},{"style":203},[7514],{"type":38,"value":474},{"type":28,"tag":162,"props":7516,"children":7517},{"class":164,"line":648},[7518,7522,7526,7530,7534,7538,7542,7546,7550,7555,7559,7564],{"type":28,"tag":162,"props":7519,"children":7520},{"style":185},[7521],{"type":38,"value":7351},{"type":28,"tag":162,"props":7523,"children":7524},{"style":203},[7525],{"type":38,"value":79},{"type":28,"tag":162,"props":7527,"children":7528},{"style":334},[7529],{"type":38,"value":7404},{"type":28,"tag":162,"props":7531,"children":7532},{"style":203},[7533],{"type":38,"value":342},{"type":28,"tag":162,"props":7535,"children":7536},{"style":185},[7537],{"type":38,"value":7168},{"type":28,"tag":162,"props":7539,"children":7540},{"style":203},[7541],{"type":38,"value":79},{"type":28,"tag":162,"props":7543,"children":7544},{"style":334},[7545],{"type":38,"value":7421},{"type":28,"tag":162,"props":7547,"children":7548},{"style":203},[7549],{"type":38,"value":342},{"type":28,"tag":162,"props":7551,"children":7552},{"style":612},[7553],{"type":38,"value":7554},"\"loginButton\"",{"type":28,"tag":162,"props":7556,"children":7557},{"style":203},[7558],{"type":38,"value":7435},{"type":28,"tag":162,"props":7560,"children":7561},{"style":334},[7562],{"type":38,"value":7563},"click",{"type":28,"tag":162,"props":7565,"children":7566},{"style":203},[7567],{"type":38,"value":834},{"type":28,"tag":162,"props":7569,"children":7570},{"class":164,"line":657},[7571],{"type":28,"tag":162,"props":7572,"children":7573},{"emptyLinePlaceholder":13},[7574],{"type":38,"value":215},{"type":28,"tag":162,"props":7576,"children":7577},{"class":164,"line":693},[7578],{"type":28,"tag":162,"props":7579,"children":7580},{"style":169},[7581],{"type":38,"value":7582},"        \u002F\u002F Vérifier que la connexion a réussi\n",{"type":28,"tag":162,"props":7584,"children":7585},{"class":164,"line":725},[7586,7591,7596,7600,7605,7609,7614],{"type":28,"tag":162,"props":7587,"children":7588},{"style":345},[7589],{"type":38,"value":7590},"        String",{"type":28,"tag":162,"props":7592,"children":7593},{"style":185},[7594],{"type":38,"value":7595}," pageTitre ",{"type":28,"tag":162,"props":7597,"children":7598},{"style":191},[7599],{"type":38,"value":194},{"type":28,"tag":162,"props":7601,"children":7602},{"style":185},[7603],{"type":38,"value":7604}," driver",{"type":28,"tag":162,"props":7606,"children":7607},{"style":203},[7608],{"type":38,"value":79},{"type":28,"tag":162,"props":7610,"children":7611},{"style":334},[7612],{"type":38,"value":7613},"getTitle",{"type":28,"tag":162,"props":7615,"children":7616},{"style":203},[7617],{"type":38,"value":834},{"type":28,"tag":162,"props":7619,"children":7620},{"class":164,"line":758},[7621,7625,7629,7634,7638,7643,7647,7652,7656],{"type":28,"tag":162,"props":7622,"children":7623},{"style":179},[7624],{"type":38,"value":5492},{"type":28,"tag":162,"props":7626,"children":7627},{"style":203},[7628],{"type":38,"value":342},{"type":28,"tag":162,"props":7630,"children":7631},{"style":185},[7632],{"type":38,"value":7633},"pageTitre",{"type":28,"tag":162,"props":7635,"children":7636},{"style":203},[7637],{"type":38,"value":79},{"type":28,"tag":162,"props":7639,"children":7640},{"style":334},[7641],{"type":38,"value":7642},"equals",{"type":28,"tag":162,"props":7644,"children":7645},{"style":203},[7646],{"type":38,"value":342},{"type":28,"tag":162,"props":7648,"children":7649},{"style":612},[7650],{"type":38,"value":7651},"\"Tableau de bord\"",{"type":28,"tag":162,"props":7653,"children":7654},{"style":203},[7655],{"type":38,"value":1276},{"type":28,"tag":162,"props":7657,"children":7658},{"style":203},[7659],{"type":38,"value":363},{"type":28,"tag":162,"props":7661,"children":7662},{"class":164,"line":786},[7663,7668,7672,7676,7680,7684,7688,7693],{"type":28,"tag":162,"props":7664,"children":7665},{"style":185},[7666],{"type":38,"value":7667},"            System",{"type":28,"tag":162,"props":7669,"children":7670},{"style":203},[7671],{"type":38,"value":79},{"type":28,"tag":162,"props":7673,"children":7674},{"style":185},[7675],{"type":38,"value":596},{"type":28,"tag":162,"props":7677,"children":7678},{"style":203},[7679],{"type":38,"value":79},{"type":28,"tag":162,"props":7681,"children":7682},{"style":334},[7683],{"type":38,"value":605},{"type":28,"tag":162,"props":7685,"children":7686},{"style":203},[7687],{"type":38,"value":342},{"type":28,"tag":162,"props":7689,"children":7690},{"style":612},[7691],{"type":38,"value":7692},"\"Connexion réussie !\"",{"type":28,"tag":162,"props":7694,"children":7695},{"style":203},[7696],{"type":38,"value":474},{"type":28,"tag":162,"props":7698,"children":7699},{"class":164,"line":807},[7700,7704,7708],{"type":28,"tag":162,"props":7701,"children":7702},{"style":203},[7703],{"type":38,"value":5581},{"type":28,"tag":162,"props":7705,"children":7706},{"style":179},[7707],{"type":38,"value":574},{"type":28,"tag":162,"props":7709,"children":7710},{"style":203},[7711],{"type":38,"value":363},{"type":28,"tag":162,"props":7713,"children":7714},{"class":164,"line":823},[7715,7719,7723,7727,7731,7735,7739,7744],{"type":28,"tag":162,"props":7716,"children":7717},{"style":185},[7718],{"type":38,"value":7667},{"type":28,"tag":162,"props":7720,"children":7721},{"style":203},[7722],{"type":38,"value":79},{"type":28,"tag":162,"props":7724,"children":7725},{"style":185},[7726],{"type":38,"value":596},{"type":28,"tag":162,"props":7728,"children":7729},{"style":203},[7730],{"type":38,"value":79},{"type":28,"tag":162,"props":7732,"children":7733},{"style":334},[7734],{"type":38,"value":605},{"type":28,"tag":162,"props":7736,"children":7737},{"style":203},[7738],{"type":38,"value":342},{"type":28,"tag":162,"props":7740,"children":7741},{"style":612},[7742],{"type":38,"value":7743},"\"Échec de la connexion.\"",{"type":28,"tag":162,"props":7745,"children":7746},{"style":203},[7747],{"type":38,"value":474},{"type":28,"tag":162,"props":7749,"children":7750},{"class":164,"line":837},[7751],{"type":28,"tag":162,"props":7752,"children":7753},{"style":203},[7754],{"type":38,"value":5620},{"type":28,"tag":162,"props":7756,"children":7757},{"class":164,"line":845},[7758],{"type":28,"tag":162,"props":7759,"children":7760},{"emptyLinePlaceholder":13},[7761],{"type":38,"value":215},{"type":28,"tag":162,"props":7763,"children":7764},{"class":164,"line":853},[7765],{"type":28,"tag":162,"props":7766,"children":7767},{"style":169},[7768],{"type":38,"value":7769},"        \u002F\u002F Fermer le navigateur\n",{"type":28,"tag":162,"props":7771,"children":7772},{"class":164,"line":861},[7773,7777,7781,7786],{"type":28,"tag":162,"props":7774,"children":7775},{"style":185},[7776],{"type":38,"value":7351},{"type":28,"tag":162,"props":7778,"children":7779},{"style":203},[7780],{"type":38,"value":79},{"type":28,"tag":162,"props":7782,"children":7783},{"style":334},[7784],{"type":38,"value":7785},"quit",{"type":28,"tag":162,"props":7787,"children":7788},{"style":203},[7789],{"type":38,"value":834},{"type":28,"tag":162,"props":7791,"children":7792},{"class":164,"line":899},[7793],{"type":28,"tag":162,"props":7794,"children":7795},{"style":203},[7796],{"type":38,"value":628},{"type":28,"tag":162,"props":7798,"children":7799},{"class":164,"line":944},[7800],{"type":28,"tag":162,"props":7801,"children":7802},{"style":203},[7803],{"type":38,"value":637},{"type":28,"tag":6063,"props":7805,"children":7806},{},[7807],{"type":28,"tag":51,"props":7808,"children":7809},{},[7810,7814,7816,7820,7822,7827],{"type":28,"tag":34,"props":7811,"children":7812},{},[7813],{"type":38,"value":6073},{"type":38,"value":7815}," : Lorsque vous utilisez ",{"type":28,"tag":34,"props":7817,"children":7818},{},[7819],{"type":38,"value":7026},{"type":38,"value":7821},", essayez d'exécuter vos tests sur plusieurs navigateurs pour vous assurer de la compatibilité de votre application. Utilisez des outils comme ",{"type":28,"tag":34,"props":7823,"children":7824},{},[7825],{"type":38,"value":7826},"BrowserStack",{"type":38,"value":7828}," pour tester sur différents environnements.",{"type":28,"tag":98,"props":7830,"children":7831},{},[],{"type":28,"tag":41,"props":7833,"children":7835},{"id":7834},"présentation-de-quelques-frameworks-populaires-en-java",[7836],{"type":28,"tag":34,"props":7837,"children":7838},{},[7839],{"type":38,"value":7840},"Présentation de quelques frameworks populaires en Java",{"type":28,"tag":51,"props":7842,"children":7843},{},[7844],{"type":38,"value":7845},"Voici une sélection de frameworks populaires que vous pouvez utiliser dans vos projets Java.",{"type":28,"tag":4738,"props":7847,"children":7849},{"id":7848},"_1-junit-le-pilier-des-tests-unitaires",[7850,7851],{"type":38,"value":5135},{"type":28,"tag":34,"props":7852,"children":7853},{},[7854],{"type":38,"value":7855},"JUnit : Le pilier des tests unitaires",{"type":28,"tag":51,"props":7857,"children":7858},{},[7859,7863],{"type":28,"tag":34,"props":7860,"children":7861},{},[7862],{"type":38,"value":6176},{"type":38,"value":7864}," est sans doute le framework de tests unitaires le plus populaire en Java. Il est léger, facile à utiliser et largement adopté dans l'industrie.",{"type":28,"tag":6186,"props":7866,"children":7868},{"id":7867},"exemple-simple-avec-junit-5",[7869],{"type":38,"value":7870},"Exemple simple avec JUnit 5 :",{"type":28,"tag":152,"props":7872,"children":7874},{"className":154,"code":7873,"language":156,"meta":8,"style":8},"import org.junit.jupiter.api.Test;\nimport static org.junit.jupiter.api.Assertions.*;\n\npublic class CalculatriceTest {\n\n    @Test\n    public void testMultiplication() {\n        Calculatrice calc = new Calculatrice();\n        int resultat = calc.multiplication(4, 5);\n        assertEquals(20, resultat, \"La multiplication de 4 par 5 devrait être 20\");\n    }\n}\n",[7875],{"type":28,"tag":57,"props":7876,"children":7877},{"__ignoreMap":8},[7878,7925,7985,7992,8011,8018,8029,8053,8080,8129,8166,8173],{"type":28,"tag":162,"props":7879,"children":7880},{"class":164,"line":165},[7881,7885,7889,7893,7897,7901,7905,7909,7913,7917,7921],{"type":28,"tag":162,"props":7882,"children":7883},{"style":179},[7884],{"type":38,"value":6206},{"type":28,"tag":162,"props":7886,"children":7887},{"style":185},[7888],{"type":38,"value":6211},{"type":28,"tag":162,"props":7890,"children":7891},{"style":203},[7892],{"type":38,"value":79},{"type":28,"tag":162,"props":7894,"children":7895},{"style":185},[7896],{"type":38,"value":6220},{"type":28,"tag":162,"props":7898,"children":7899},{"style":203},[7900],{"type":38,"value":79},{"type":28,"tag":162,"props":7902,"children":7903},{"style":185},[7904],{"type":38,"value":6229},{"type":28,"tag":162,"props":7906,"children":7907},{"style":203},[7908],{"type":38,"value":79},{"type":28,"tag":162,"props":7910,"children":7911},{"style":185},[7912],{"type":38,"value":6238},{"type":28,"tag":162,"props":7914,"children":7915},{"style":203},[7916],{"type":38,"value":79},{"type":28,"tag":162,"props":7918,"children":7919},{"style":185},[7920],{"type":38,"value":6247},{"type":28,"tag":162,"props":7922,"children":7923},{"style":203},[7924],{"type":38,"value":206},{"type":28,"tag":162,"props":7926,"children":7927},{"class":164,"line":175},[7928,7932,7936,7940,7944,7948,7952,7956,7960,7964,7968,7972,7976,7981],{"type":28,"tag":162,"props":7929,"children":7930},{"style":179},[7931],{"type":38,"value":6206},{"type":28,"tag":162,"props":7933,"children":7934},{"style":179},[7935],{"type":38,"value":6263},{"type":28,"tag":162,"props":7937,"children":7938},{"style":185},[7939],{"type":38,"value":6211},{"type":28,"tag":162,"props":7941,"children":7942},{"style":203},[7943],{"type":38,"value":79},{"type":28,"tag":162,"props":7945,"children":7946},{"style":185},[7947],{"type":38,"value":6220},{"type":28,"tag":162,"props":7949,"children":7950},{"style":203},[7951],{"type":38,"value":79},{"type":28,"tag":162,"props":7953,"children":7954},{"style":185},[7955],{"type":38,"value":6229},{"type":28,"tag":162,"props":7957,"children":7958},{"style":203},[7959],{"type":38,"value":79},{"type":28,"tag":162,"props":7961,"children":7962},{"style":185},[7963],{"type":38,"value":6238},{"type":28,"tag":162,"props":7965,"children":7966},{"style":203},[7967],{"type":38,"value":79},{"type":28,"tag":162,"props":7969,"children":7970},{"style":185},[7971],{"type":38,"value":6300},{"type":28,"tag":162,"props":7973,"children":7974},{"style":203},[7975],{"type":38,"value":79},{"type":28,"tag":162,"props":7977,"children":7979},{"style":7978},"--shiki-default:#C6D0F5;--shiki-dark:#79B8FF",[7980],{"type":38,"value":1832},{"type":28,"tag":162,"props":7982,"children":7983},{"style":203},[7984],{"type":38,"value":206},{"type":28,"tag":162,"props":7986,"children":7987},{"class":164,"line":209},[7988],{"type":28,"tag":162,"props":7989,"children":7990},{"emptyLinePlaceholder":13},[7991],{"type":38,"value":215},{"type":28,"tag":162,"props":7993,"children":7994},{"class":164,"line":218},[7995,7999,8003,8007],{"type":28,"tag":162,"props":7996,"children":7997},{"style":179},[7998],{"type":38,"value":326},{"type":28,"tag":162,"props":8000,"children":8001},{"style":179},[8002],{"type":38,"value":2669},{"type":28,"tag":162,"props":8004,"children":8005},{"style":2672},[8006],{"type":38,"value":6336},{"type":28,"tag":162,"props":8008,"children":8009},{"style":203},[8010],{"type":38,"value":363},{"type":28,"tag":162,"props":8012,"children":8013},{"class":164,"line":227},[8014],{"type":28,"tag":162,"props":8015,"children":8016},{"emptyLinePlaceholder":13},[8017],{"type":38,"value":215},{"type":28,"tag":162,"props":8019,"children":8020},{"class":164,"line":418},[8021,8025],{"type":28,"tag":162,"props":8022,"children":8023},{"style":5180},[8024],{"type":38,"value":6355},{"type":28,"tag":162,"props":8026,"children":8027},{"style":5186},[8028],{"type":38,"value":5189},{"type":28,"tag":162,"props":8030,"children":8031},{"class":164,"line":477},[8032,8036,8040,8045,8049],{"type":28,"tag":162,"props":8033,"children":8034},{"style":179},[8035],{"type":38,"value":2687},{"type":28,"tag":162,"props":8037,"children":8038},{"style":179},[8039],{"type":38,"value":331},{"type":28,"tag":162,"props":8041,"children":8042},{"style":334},[8043],{"type":38,"value":8044}," testMultiplication",{"type":28,"tag":162,"props":8046,"children":8047},{"style":203},[8048],{"type":38,"value":451},{"type":28,"tag":162,"props":8050,"children":8051},{"style":203},[8052],{"type":38,"value":363},{"type":28,"tag":162,"props":8054,"children":8055},{"class":164,"line":485},[8056,8060,8064,8068,8072,8076],{"type":28,"tag":162,"props":8057,"children":8058},{"style":345},[8059],{"type":38,"value":6391},{"type":28,"tag":162,"props":8061,"children":8062},{"style":185},[8063],{"type":38,"value":6396},{"type":28,"tag":162,"props":8065,"children":8066},{"style":191},[8067],{"type":38,"value":194},{"type":28,"tag":162,"props":8069,"children":8070},{"style":179},[8071],{"type":38,"value":3667},{"type":28,"tag":162,"props":8073,"children":8074},{"style":334},[8075],{"type":38,"value":6409},{"type":28,"tag":162,"props":8077,"children":8078},{"style":203},[8079],{"type":38,"value":834},{"type":28,"tag":162,"props":8081,"children":8082},{"class":164,"line":494},[8083,8087,8091,8095,8099,8103,8108,8112,8117,8121,8125],{"type":28,"tag":162,"props":8084,"children":8085},{"style":179},[8086],{"type":38,"value":6421},{"type":28,"tag":162,"props":8088,"children":8089},{"style":185},[8090],{"type":38,"value":6426},{"type":28,"tag":162,"props":8092,"children":8093},{"style":191},[8094],{"type":38,"value":194},{"type":28,"tag":162,"props":8096,"children":8097},{"style":185},[8098],{"type":38,"value":6435},{"type":28,"tag":162,"props":8100,"children":8101},{"style":203},[8102],{"type":38,"value":79},{"type":28,"tag":162,"props":8104,"children":8105},{"style":334},[8106],{"type":38,"value":8107},"multiplication",{"type":28,"tag":162,"props":8109,"children":8110},{"style":203},[8111],{"type":38,"value":342},{"type":28,"tag":162,"props":8113,"children":8114},{"style":197},[8115],{"type":38,"value":8116},"4",{"type":28,"tag":162,"props":8118,"children":8119},{"style":203},[8120],{"type":38,"value":513},{"type":28,"tag":162,"props":8122,"children":8123},{"style":197},[8124],{"type":38,"value":200},{"type":28,"tag":162,"props":8126,"children":8127},{"style":203},[8128],{"type":38,"value":474},{"type":28,"tag":162,"props":8130,"children":8131},{"class":164,"line":525},[8132,8136,8140,8145,8149,8153,8157,8162],{"type":28,"tag":162,"props":8133,"children":8134},{"style":334},[8135],{"type":38,"value":6474},{"type":28,"tag":162,"props":8137,"children":8138},{"style":203},[8139],{"type":38,"value":342},{"type":28,"tag":162,"props":8141,"children":8142},{"style":197},[8143],{"type":38,"value":8144},"20",{"type":28,"tag":162,"props":8146,"children":8147},{"style":203},[8148],{"type":38,"value":513},{"type":28,"tag":162,"props":8150,"children":8151},{"style":185},[8152],{"type":38,"value":6492},{"type":28,"tag":162,"props":8154,"children":8155},{"style":203},[8156],{"type":38,"value":513},{"type":28,"tag":162,"props":8158,"children":8159},{"style":612},[8160],{"type":38,"value":8161}," \"La multiplication de 4 par 5 devrait être 20\"",{"type":28,"tag":162,"props":8163,"children":8164},{"style":203},[8165],{"type":38,"value":474},{"type":28,"tag":162,"props":8167,"children":8168},{"class":164,"line":533},[8169],{"type":28,"tag":162,"props":8170,"children":8171},{"style":203},[8172],{"type":38,"value":628},{"type":28,"tag":162,"props":8174,"children":8175},{"class":164,"line":542},[8176],{"type":28,"tag":162,"props":8177,"children":8178},{"style":203},[8179],{"type":38,"value":637},{"type":28,"tag":4738,"props":8181,"children":8183},{"id":8182},"_2-testng-flexibilité-et-fonctionnalités-avancées",[8184,8185],{"type":38,"value":5367},{"type":28,"tag":34,"props":8186,"children":8187},{},[8188],{"type":38,"value":8189},"TestNG : Flexibilité et fonctionnalités avancées",{"type":28,"tag":51,"props":8191,"children":8192},{},[8193,8197],{"type":28,"tag":34,"props":8194,"children":8195},{},[8196],{"type":38,"value":6182},{"type":38,"value":8198}," est un autre framework de tests unitaires, mais il offre des fonctionnalités supplémentaires par rapport à JUnit.",{"type":28,"tag":6186,"props":8200,"children":8202},{"id":8201},"exemple-de-test-avec-testng",[8203],{"type":38,"value":8204},"Exemple de test avec TestNG :",{"type":28,"tag":152,"props":8206,"children":8208},{"className":154,"code":8207,"language":156,"meta":8,"style":8},"import org.testng.annotations.Test;\nimport static org.testng.Assert.assertEquals;\n\npublic class CalculatriceTest {\n\n    @Test\n    public void testSoustraction() {\n        Calculatrice calc = new Calculatrice();\n        int resultat = calc.soustraction(10, 3);\n        assertEquals(7, resultat, \"La soustraction de 10 et 3 devrait être 7\");\n    }\n}\n",[8209],{"type":28,"tag":57,"props":8210,"children":8211},{"__ignoreMap":8},[8212,8253,8297,8304,8323,8330,8341,8365,8392,8441,8478,8485],{"type":28,"tag":162,"props":8213,"children":8214},{"class":164,"line":165},[8215,8219,8223,8227,8232,8236,8241,8245,8249],{"type":28,"tag":162,"props":8216,"children":8217},{"style":179},[8218],{"type":38,"value":6206},{"type":28,"tag":162,"props":8220,"children":8221},{"style":185},[8222],{"type":38,"value":6211},{"type":28,"tag":162,"props":8224,"children":8225},{"style":203},[8226],{"type":38,"value":79},{"type":28,"tag":162,"props":8228,"children":8229},{"style":185},[8230],{"type":38,"value":8231},"testng",{"type":28,"tag":162,"props":8233,"children":8234},{"style":203},[8235],{"type":38,"value":79},{"type":28,"tag":162,"props":8237,"children":8238},{"style":185},[8239],{"type":38,"value":8240},"annotations",{"type":28,"tag":162,"props":8242,"children":8243},{"style":203},[8244],{"type":38,"value":79},{"type":28,"tag":162,"props":8246,"children":8247},{"style":185},[8248],{"type":38,"value":6247},{"type":28,"tag":162,"props":8250,"children":8251},{"style":203},[8252],{"type":38,"value":206},{"type":28,"tag":162,"props":8254,"children":8255},{"class":164,"line":175},[8256,8260,8264,8268,8272,8276,8280,8285,8289,8293],{"type":28,"tag":162,"props":8257,"children":8258},{"style":179},[8259],{"type":38,"value":6206},{"type":28,"tag":162,"props":8261,"children":8262},{"style":179},[8263],{"type":38,"value":6263},{"type":28,"tag":162,"props":8265,"children":8266},{"style":185},[8267],{"type":38,"value":6211},{"type":28,"tag":162,"props":8269,"children":8270},{"style":203},[8271],{"type":38,"value":79},{"type":28,"tag":162,"props":8273,"children":8274},{"style":185},[8275],{"type":38,"value":8231},{"type":28,"tag":162,"props":8277,"children":8278},{"style":203},[8279],{"type":38,"value":79},{"type":28,"tag":162,"props":8281,"children":8282},{"style":185},[8283],{"type":38,"value":8284},"Assert",{"type":28,"tag":162,"props":8286,"children":8287},{"style":203},[8288],{"type":38,"value":79},{"type":28,"tag":162,"props":8290,"children":8291},{"style":185},[8292],{"type":38,"value":6309},{"type":28,"tag":162,"props":8294,"children":8295},{"style":203},[8296],{"type":38,"value":206},{"type":28,"tag":162,"props":8298,"children":8299},{"class":164,"line":209},[8300],{"type":28,"tag":162,"props":8301,"children":8302},{"emptyLinePlaceholder":13},[8303],{"type":38,"value":215},{"type":28,"tag":162,"props":8305,"children":8306},{"class":164,"line":218},[8307,8311,8315,8319],{"type":28,"tag":162,"props":8308,"children":8309},{"style":179},[8310],{"type":38,"value":326},{"type":28,"tag":162,"props":8312,"children":8313},{"style":179},[8314],{"type":38,"value":2669},{"type":28,"tag":162,"props":8316,"children":8317},{"style":2672},[8318],{"type":38,"value":6336},{"type":28,"tag":162,"props":8320,"children":8321},{"style":203},[8322],{"type":38,"value":363},{"type":28,"tag":162,"props":8324,"children":8325},{"class":164,"line":227},[8326],{"type":28,"tag":162,"props":8327,"children":8328},{"emptyLinePlaceholder":13},[8329],{"type":38,"value":215},{"type":28,"tag":162,"props":8331,"children":8332},{"class":164,"line":418},[8333,8337],{"type":28,"tag":162,"props":8334,"children":8335},{"style":5180},[8336],{"type":38,"value":6355},{"type":28,"tag":162,"props":8338,"children":8339},{"style":5186},[8340],{"type":38,"value":5189},{"type":28,"tag":162,"props":8342,"children":8343},{"class":164,"line":477},[8344,8348,8352,8357,8361],{"type":28,"tag":162,"props":8345,"children":8346},{"style":179},[8347],{"type":38,"value":2687},{"type":28,"tag":162,"props":8349,"children":8350},{"style":179},[8351],{"type":38,"value":331},{"type":28,"tag":162,"props":8353,"children":8354},{"style":334},[8355],{"type":38,"value":8356}," testSoustraction",{"type":28,"tag":162,"props":8358,"children":8359},{"style":203},[8360],{"type":38,"value":451},{"type":28,"tag":162,"props":8362,"children":8363},{"style":203},[8364],{"type":38,"value":363},{"type":28,"tag":162,"props":8366,"children":8367},{"class":164,"line":485},[8368,8372,8376,8380,8384,8388],{"type":28,"tag":162,"props":8369,"children":8370},{"style":345},[8371],{"type":38,"value":6391},{"type":28,"tag":162,"props":8373,"children":8374},{"style":185},[8375],{"type":38,"value":6396},{"type":28,"tag":162,"props":8377,"children":8378},{"style":191},[8379],{"type":38,"value":194},{"type":28,"tag":162,"props":8381,"children":8382},{"style":179},[8383],{"type":38,"value":3667},{"type":28,"tag":162,"props":8385,"children":8386},{"style":334},[8387],{"type":38,"value":6409},{"type":28,"tag":162,"props":8389,"children":8390},{"style":203},[8391],{"type":38,"value":834},{"type":28,"tag":162,"props":8393,"children":8394},{"class":164,"line":494},[8395,8399,8403,8407,8411,8415,8420,8424,8429,8433,8437],{"type":28,"tag":162,"props":8396,"children":8397},{"style":179},[8398],{"type":38,"value":6421},{"type":28,"tag":162,"props":8400,"children":8401},{"style":185},[8402],{"type":38,"value":6426},{"type":28,"tag":162,"props":8404,"children":8405},{"style":191},[8406],{"type":38,"value":194},{"type":28,"tag":162,"props":8408,"children":8409},{"style":185},[8410],{"type":38,"value":6435},{"type":28,"tag":162,"props":8412,"children":8413},{"style":203},[8414],{"type":38,"value":79},{"type":28,"tag":162,"props":8416,"children":8417},{"style":334},[8418],{"type":38,"value":8419},"soustraction",{"type":28,"tag":162,"props":8421,"children":8422},{"style":203},[8423],{"type":38,"value":342},{"type":28,"tag":162,"props":8425,"children":8426},{"style":197},[8427],{"type":38,"value":8428},"10",{"type":28,"tag":162,"props":8430,"children":8431},{"style":203},[8432],{"type":38,"value":513},{"type":28,"tag":162,"props":8434,"children":8435},{"style":197},[8436],{"type":38,"value":6462},{"type":28,"tag":162,"props":8438,"children":8439},{"style":203},[8440],{"type":38,"value":474},{"type":28,"tag":162,"props":8442,"children":8443},{"class":164,"line":525},[8444,8448,8452,8457,8461,8465,8469,8474],{"type":28,"tag":162,"props":8445,"children":8446},{"style":334},[8447],{"type":38,"value":6474},{"type":28,"tag":162,"props":8449,"children":8450},{"style":203},[8451],{"type":38,"value":342},{"type":28,"tag":162,"props":8453,"children":8454},{"style":197},[8455],{"type":38,"value":8456},"7",{"type":28,"tag":162,"props":8458,"children":8459},{"style":203},[8460],{"type":38,"value":513},{"type":28,"tag":162,"props":8462,"children":8463},{"style":185},[8464],{"type":38,"value":6492},{"type":28,"tag":162,"props":8466,"children":8467},{"style":203},[8468],{"type":38,"value":513},{"type":28,"tag":162,"props":8470,"children":8471},{"style":612},[8472],{"type":38,"value":8473}," \"La soustraction de 10 et 3 devrait être 7\"",{"type":28,"tag":162,"props":8475,"children":8476},{"style":203},[8477],{"type":38,"value":474},{"type":28,"tag":162,"props":8479,"children":8480},{"class":164,"line":533},[8481],{"type":28,"tag":162,"props":8482,"children":8483},{"style":203},[8484],{"type":38,"value":628},{"type":28,"tag":162,"props":8486,"children":8487},{"class":164,"line":542},[8488],{"type":28,"tag":162,"props":8489,"children":8490},{"style":203},[8491],{"type":38,"value":637},{"type":28,"tag":4738,"props":8493,"children":8495},{"id":8494},"_3-mockito-pour-des-tests-unitaires-et-dintégration-avec-des-mocks",[8496,8497],{"type":38,"value":5762},{"type":28,"tag":34,"props":8498,"children":8499},{},[8500],{"type":38,"value":8501},"Mockito : Pour des tests unitaires et d'intégration avec des mocks",{"type":28,"tag":51,"props":8503,"children":8504},{},[8505,8510],{"type":28,"tag":34,"props":8506,"children":8507},{},[8508],{"type":38,"value":8509},"Mockito",{"type":38,"value":8511}," est un framework spécialisé dans les tests unitaires qui nécessitent de simuler le comportement de certains objets.",{"type":28,"tag":6186,"props":8513,"children":8515},{"id":8514},"exemple-de-test-avec-mockito",[8516],{"type":38,"value":8517},"Exemple de test avec Mockito :",{"type":28,"tag":152,"props":8519,"children":8521},{"className":154,"code":8520,"language":156,"meta":8,"style":8},"import org.junit.jupiter.api.Test;\nimport static org.mockito.Mockito.*;\nimport static org.junit.jupiter.api.Assertions.*;\n\npublic class ServiceTest {\n    \n    @Test\n    public void testServiceAvecMock() {\n        \u002F\u002F Mock d'une dépendance\n        UserRepository userRepository = mock(UserRepository.class);\n        when(userRepository.findUserById(1)).thenReturn(new User(\"John\", \"Doe\"));\n\n        UserService userService = new UserService(userRepository);\n        User user = userService.getUser(1);\n\n        \u002F\u002F Vérification\n        assertEquals(\"John\", user.getFirstName(), \"Le prénom devrait être John\");\n        verify(userRepository).findUserById(1);  \u002F\u002F Vérifie que la méthode a bien été appelée\n    }\n}\n",[8522],{"type":28,"tag":57,"props":8523,"children":8524},{"__ignoreMap":8},[8525,8572,8616,8675,8682,8702,8709,8720,8744,8752,8796,8874,8881,8918,8958,8965,8973,9018,9061,9068],{"type":28,"tag":162,"props":8526,"children":8527},{"class":164,"line":165},[8528,8532,8536,8540,8544,8548,8552,8556,8560,8564,8568],{"type":28,"tag":162,"props":8529,"children":8530},{"style":179},[8531],{"type":38,"value":6206},{"type":28,"tag":162,"props":8533,"children":8534},{"style":185},[8535],{"type":38,"value":6211},{"type":28,"tag":162,"props":8537,"children":8538},{"style":203},[8539],{"type":38,"value":79},{"type":28,"tag":162,"props":8541,"children":8542},{"style":185},[8543],{"type":38,"value":6220},{"type":28,"tag":162,"props":8545,"children":8546},{"style":203},[8547],{"type":38,"value":79},{"type":28,"tag":162,"props":8549,"children":8550},{"style":185},[8551],{"type":38,"value":6229},{"type":28,"tag":162,"props":8553,"children":8554},{"style":203},[8555],{"type":38,"value":79},{"type":28,"tag":162,"props":8557,"children":8558},{"style":185},[8559],{"type":38,"value":6238},{"type":28,"tag":162,"props":8561,"children":8562},{"style":203},[8563],{"type":38,"value":79},{"type":28,"tag":162,"props":8565,"children":8566},{"style":185},[8567],{"type":38,"value":6247},{"type":28,"tag":162,"props":8569,"children":8570},{"style":203},[8571],{"type":38,"value":206},{"type":28,"tag":162,"props":8573,"children":8574},{"class":164,"line":175},[8575,8579,8583,8587,8591,8596,8600,8604,8608,8612],{"type":28,"tag":162,"props":8576,"children":8577},{"style":179},[8578],{"type":38,"value":6206},{"type":28,"tag":162,"props":8580,"children":8581},{"style":179},[8582],{"type":38,"value":6263},{"type":28,"tag":162,"props":8584,"children":8585},{"style":185},[8586],{"type":38,"value":6211},{"type":28,"tag":162,"props":8588,"children":8589},{"style":203},[8590],{"type":38,"value":79},{"type":28,"tag":162,"props":8592,"children":8593},{"style":185},[8594],{"type":38,"value":8595},"mockito",{"type":28,"tag":162,"props":8597,"children":8598},{"style":203},[8599],{"type":38,"value":79},{"type":28,"tag":162,"props":8601,"children":8602},{"style":185},[8603],{"type":38,"value":8509},{"type":28,"tag":162,"props":8605,"children":8606},{"style":203},[8607],{"type":38,"value":79},{"type":28,"tag":162,"props":8609,"children":8610},{"style":7978},[8611],{"type":38,"value":1832},{"type":28,"tag":162,"props":8613,"children":8614},{"style":203},[8615],{"type":38,"value":206},{"type":28,"tag":162,"props":8617,"children":8618},{"class":164,"line":209},[8619,8623,8627,8631,8635,8639,8643,8647,8651,8655,8659,8663,8667,8671],{"type":28,"tag":162,"props":8620,"children":8621},{"style":179},[8622],{"type":38,"value":6206},{"type":28,"tag":162,"props":8624,"children":8625},{"style":179},[8626],{"type":38,"value":6263},{"type":28,"tag":162,"props":8628,"children":8629},{"style":185},[8630],{"type":38,"value":6211},{"type":28,"tag":162,"props":8632,"children":8633},{"style":203},[8634],{"type":38,"value":79},{"type":28,"tag":162,"props":8636,"children":8637},{"style":185},[8638],{"type":38,"value":6220},{"type":28,"tag":162,"props":8640,"children":8641},{"style":203},[8642],{"type":38,"value":79},{"type":28,"tag":162,"props":8644,"children":8645},{"style":185},[8646],{"type":38,"value":6229},{"type":28,"tag":162,"props":8648,"children":8649},{"style":203},[8650],{"type":38,"value":79},{"type":28,"tag":162,"props":8652,"children":8653},{"style":185},[8654],{"type":38,"value":6238},{"type":28,"tag":162,"props":8656,"children":8657},{"style":203},[8658],{"type":38,"value":79},{"type":28,"tag":162,"props":8660,"children":8661},{"style":185},[8662],{"type":38,"value":6300},{"type":28,"tag":162,"props":8664,"children":8665},{"style":203},[8666],{"type":38,"value":79},{"type":28,"tag":162,"props":8668,"children":8669},{"style":7978},[8670],{"type":38,"value":1832},{"type":28,"tag":162,"props":8672,"children":8673},{"style":203},[8674],{"type":38,"value":206},{"type":28,"tag":162,"props":8676,"children":8677},{"class":164,"line":218},[8678],{"type":28,"tag":162,"props":8679,"children":8680},{"emptyLinePlaceholder":13},[8681],{"type":38,"value":215},{"type":28,"tag":162,"props":8683,"children":8684},{"class":164,"line":227},[8685,8689,8693,8698],{"type":28,"tag":162,"props":8686,"children":8687},{"style":179},[8688],{"type":38,"value":326},{"type":28,"tag":162,"props":8690,"children":8691},{"style":179},[8692],{"type":38,"value":2669},{"type":28,"tag":162,"props":8694,"children":8695},{"style":2672},[8696],{"type":38,"value":8697}," ServiceTest",{"type":28,"tag":162,"props":8699,"children":8700},{"style":203},[8701],{"type":38,"value":363},{"type":28,"tag":162,"props":8703,"children":8704},{"class":164,"line":418},[8705],{"type":28,"tag":162,"props":8706,"children":8707},{"style":185},[8708],{"type":38,"value":1883},{"type":28,"tag":162,"props":8710,"children":8711},{"class":164,"line":477},[8712,8716],{"type":28,"tag":162,"props":8713,"children":8714},{"style":5180},[8715],{"type":38,"value":6355},{"type":28,"tag":162,"props":8717,"children":8718},{"style":5186},[8719],{"type":38,"value":5189},{"type":28,"tag":162,"props":8721,"children":8722},{"class":164,"line":485},[8723,8727,8731,8736,8740],{"type":28,"tag":162,"props":8724,"children":8725},{"style":179},[8726],{"type":38,"value":2687},{"type":28,"tag":162,"props":8728,"children":8729},{"style":179},[8730],{"type":38,"value":331},{"type":28,"tag":162,"props":8732,"children":8733},{"style":334},[8734],{"type":38,"value":8735}," testServiceAvecMock",{"type":28,"tag":162,"props":8737,"children":8738},{"style":203},[8739],{"type":38,"value":451},{"type":28,"tag":162,"props":8741,"children":8742},{"style":203},[8743],{"type":38,"value":363},{"type":28,"tag":162,"props":8745,"children":8746},{"class":164,"line":494},[8747],{"type":28,"tag":162,"props":8748,"children":8749},{"style":169},[8750],{"type":38,"value":8751},"        \u002F\u002F Mock d'une dépendance\n",{"type":28,"tag":162,"props":8753,"children":8754},{"class":164,"line":525},[8755,8760,8765,8769,8774,8778,8783,8787,8792],{"type":28,"tag":162,"props":8756,"children":8757},{"style":345},[8758],{"type":38,"value":8759},"        UserRepository",{"type":28,"tag":162,"props":8761,"children":8762},{"style":185},[8763],{"type":38,"value":8764}," userRepository ",{"type":28,"tag":162,"props":8766,"children":8767},{"style":191},[8768],{"type":38,"value":194},{"type":28,"tag":162,"props":8770,"children":8771},{"style":334},[8772],{"type":38,"value":8773}," mock",{"type":28,"tag":162,"props":8775,"children":8776},{"style":203},[8777],{"type":38,"value":342},{"type":28,"tag":162,"props":8779,"children":8780},{"style":185},[8781],{"type":38,"value":8782},"UserRepository",{"type":28,"tag":162,"props":8784,"children":8785},{"style":203},[8786],{"type":38,"value":79},{"type":28,"tag":162,"props":8788,"children":8789},{"style":185},[8790],{"type":38,"value":8791},"class",{"type":28,"tag":162,"props":8793,"children":8794},{"style":203},[8795],{"type":38,"value":474},{"type":28,"tag":162,"props":8797,"children":8798},{"class":164,"line":533},[8799,8804,8808,8813,8817,8822,8826,8831,8835,8840,8844,8849,8853,8857,8861,8865,8869],{"type":28,"tag":162,"props":8800,"children":8801},{"style":334},[8802],{"type":38,"value":8803},"        when",{"type":28,"tag":162,"props":8805,"children":8806},{"style":203},[8807],{"type":38,"value":342},{"type":28,"tag":162,"props":8809,"children":8810},{"style":185},[8811],{"type":38,"value":8812},"userRepository",{"type":28,"tag":162,"props":8814,"children":8815},{"style":203},[8816],{"type":38,"value":79},{"type":28,"tag":162,"props":8818,"children":8819},{"style":334},[8820],{"type":38,"value":8821},"findUserById",{"type":28,"tag":162,"props":8823,"children":8824},{"style":203},[8825],{"type":38,"value":342},{"type":28,"tag":162,"props":8827,"children":8828},{"style":197},[8829],{"type":38,"value":8830},"1",{"type":28,"tag":162,"props":8832,"children":8833},{"style":203},[8834],{"type":38,"value":7435},{"type":28,"tag":162,"props":8836,"children":8837},{"style":334},[8838],{"type":38,"value":8839},"thenReturn",{"type":28,"tag":162,"props":8841,"children":8842},{"style":203},[8843],{"type":38,"value":342},{"type":28,"tag":162,"props":8845,"children":8846},{"style":179},[8847],{"type":38,"value":8848},"new",{"type":28,"tag":162,"props":8850,"children":8851},{"style":334},[8852],{"type":38,"value":4779},{"type":28,"tag":162,"props":8854,"children":8855},{"style":203},[8856],{"type":38,"value":342},{"type":28,"tag":162,"props":8858,"children":8859},{"style":612},[8860],{"type":38,"value":6899},{"type":28,"tag":162,"props":8862,"children":8863},{"style":203},[8864],{"type":38,"value":513},{"type":28,"tag":162,"props":8866,"children":8867},{"style":612},[8868],{"type":38,"value":6908},{"type":28,"tag":162,"props":8870,"children":8871},{"style":203},[8872],{"type":38,"value":8873},"));\n",{"type":28,"tag":162,"props":8875,"children":8876},{"class":164,"line":542},[8877],{"type":28,"tag":162,"props":8878,"children":8879},{"emptyLinePlaceholder":13},[8880],{"type":38,"value":215},{"type":28,"tag":162,"props":8882,"children":8883},{"class":164,"line":563},[8884,8889,8894,8898,8902,8906,8910,8914],{"type":28,"tag":162,"props":8885,"children":8886},{"style":345},[8887],{"type":38,"value":8888},"        UserService",{"type":28,"tag":162,"props":8890,"children":8891},{"style":185},[8892],{"type":38,"value":8893}," userService ",{"type":28,"tag":162,"props":8895,"children":8896},{"style":191},[8897],{"type":38,"value":194},{"type":28,"tag":162,"props":8899,"children":8900},{"style":179},[8901],{"type":38,"value":3667},{"type":28,"tag":162,"props":8903,"children":8904},{"style":334},[8905],{"type":38,"value":6815},{"type":28,"tag":162,"props":8907,"children":8908},{"style":203},[8909],{"type":38,"value":342},{"type":28,"tag":162,"props":8911,"children":8912},{"style":185},[8913],{"type":38,"value":8812},{"type":28,"tag":162,"props":8915,"children":8916},{"style":203},[8917],{"type":38,"value":474},{"type":28,"tag":162,"props":8919,"children":8920},{"class":164,"line":581},[8921,8925,8929,8933,8937,8941,8946,8950,8954],{"type":28,"tag":162,"props":8922,"children":8923},{"style":345},[8924],{"type":38,"value":6874},{"type":28,"tag":162,"props":8926,"children":8927},{"style":185},[8928],{"type":38,"value":5226},{"type":28,"tag":162,"props":8930,"children":8931},{"style":191},[8932],{"type":38,"value":194},{"type":28,"tag":162,"props":8934,"children":8935},{"style":185},[8936],{"type":38,"value":6820},{"type":28,"tag":162,"props":8938,"children":8939},{"style":203},[8940],{"type":38,"value":79},{"type":28,"tag":162,"props":8942,"children":8943},{"style":334},[8944],{"type":38,"value":8945},"getUser",{"type":28,"tag":162,"props":8947,"children":8948},{"style":203},[8949],{"type":38,"value":342},{"type":28,"tag":162,"props":8951,"children":8952},{"style":197},[8953],{"type":38,"value":8830},{"type":28,"tag":162,"props":8955,"children":8956},{"style":203},[8957],{"type":38,"value":474},{"type":28,"tag":162,"props":8959,"children":8960},{"class":164,"line":622},[8961],{"type":28,"tag":162,"props":8962,"children":8963},{"emptyLinePlaceholder":13},[8964],{"type":38,"value":215},{"type":28,"tag":162,"props":8966,"children":8967},{"class":164,"line":631},[8968],{"type":28,"tag":162,"props":8969,"children":8970},{"style":169},[8971],{"type":38,"value":8972},"        \u002F\u002F Vérification\n",{"type":28,"tag":162,"props":8974,"children":8975},{"class":164,"line":640},[8976,8980,8984,8988,8992,8996,9000,9005,9009,9014],{"type":28,"tag":162,"props":8977,"children":8978},{"style":334},[8979],{"type":38,"value":6474},{"type":28,"tag":162,"props":8981,"children":8982},{"style":203},[8983],{"type":38,"value":342},{"type":28,"tag":162,"props":8985,"children":8986},{"style":612},[8987],{"type":38,"value":6899},{"type":28,"tag":162,"props":8989,"children":8990},{"style":203},[8991],{"type":38,"value":513},{"type":28,"tag":162,"props":8993,"children":8994},{"style":185},[8995],{"type":38,"value":5285},{"type":28,"tag":162,"props":8997,"children":8998},{"style":203},[8999],{"type":38,"value":79},{"type":28,"tag":162,"props":9001,"children":9002},{"style":334},[9003],{"type":38,"value":9004},"getFirstName",{"type":28,"tag":162,"props":9006,"children":9007},{"style":203},[9008],{"type":38,"value":1948},{"type":28,"tag":162,"props":9010,"children":9011},{"style":612},[9012],{"type":38,"value":9013}," \"Le prénom devrait être John\"",{"type":28,"tag":162,"props":9015,"children":9016},{"style":203},[9017],{"type":38,"value":474},{"type":28,"tag":162,"props":9019,"children":9020},{"class":164,"line":648},[9021,9026,9030,9034,9039,9043,9047,9051,9056],{"type":28,"tag":162,"props":9022,"children":9023},{"style":334},[9024],{"type":38,"value":9025},"        verify",{"type":28,"tag":162,"props":9027,"children":9028},{"style":203},[9029],{"type":38,"value":342},{"type":28,"tag":162,"props":9031,"children":9032},{"style":185},[9033],{"type":38,"value":8812},{"type":28,"tag":162,"props":9035,"children":9036},{"style":203},[9037],{"type":38,"value":9038},").",{"type":28,"tag":162,"props":9040,"children":9041},{"style":334},[9042],{"type":38,"value":8821},{"type":28,"tag":162,"props":9044,"children":9045},{"style":203},[9046],{"type":38,"value":342},{"type":28,"tag":162,"props":9048,"children":9049},{"style":197},[9050],{"type":38,"value":8830},{"type":28,"tag":162,"props":9052,"children":9053},{"style":203},[9054],{"type":38,"value":9055},");",{"type":28,"tag":162,"props":9057,"children":9058},{"style":169},[9059],{"type":38,"value":9060},"  \u002F\u002F Vérifie que la méthode a bien été appelée\n",{"type":28,"tag":162,"props":9062,"children":9063},{"class":164,"line":657},[9064],{"type":28,"tag":162,"props":9065,"children":9066},{"style":203},[9067],{"type":38,"value":628},{"type":28,"tag":162,"props":9069,"children":9070},{"class":164,"line":693},[9071],{"type":28,"tag":162,"props":9072,"children":9073},{"style":203},[9074],{"type":38,"value":637},{"type":28,"tag":1186,"props":9076,"children":9078},{"cta":1188,"href":1189,"title":9077,"type":1191},"Vous voulez écrire des tests qui attrapent vraiment les régressions ?",[9079],{"type":28,"tag":51,"props":9080,"children":9081},{},[9082],{"type":38,"value":9083},"Choisir JUnit ou Mockito, c'est une chose. Écrire des tests qui documentent l'intention, isolent les bonnes dépendances et restent lisibles dans six mois, ça se travaille. En mentoring 1:1, on relit votre code de test ensemble, je vous montre comment structurer vos suites pour qu'elles vous protègent au lieu de vous freiner. Vous gagnez le réflexe de tester juste, pas plus.",{"type":28,"tag":4738,"props":9085,"children":9087},{"id":9086},"_4-selenium-automatisation-des-tests-fonctionnels",[9088,9089],{"type":38,"value":5785},{"type":28,"tag":34,"props":9090,"children":9091},{},[9092],{"type":38,"value":9093},"Selenium : Automatisation des tests fonctionnels",{"type":28,"tag":51,"props":9095,"children":9096},{},[9097,9101],{"type":28,"tag":34,"props":9098,"children":9099},{},[9100],{"type":38,"value":7026},{"type":38,"value":9102}," est le framework de référence pour les tests fonctionnels, spécialement pour les applications web.",{"type":28,"tag":6186,"props":9104,"children":9106},{"id":9105},"exemple-de-test-fonctionnel-avec-selenium-java",[9107],{"type":38,"value":9108},"Exemple de test fonctionnel avec Selenium (Java) :",{"type":28,"tag":152,"props":9110,"children":9112},{"className":154,"code":9111,"language":156,"meta":8,"style":8},"import org.openqa.selenium.By;\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\n\npublic class TestFonctionnel {\n\n    public static void main(String[] args) {\n        \u002F\u002F Configuration du WebDriver pour Chrome\n        System.setProperty(\"webdriver.chrome.driver\", \"path_to_chromedriver\");\n        WebDriver driver = new ChromeDriver();\n\n        \u002F\u002F Ouvrir la page d'accueil\n        driver.get(\"http:\u002F\u002Fmonapplication.com\");\n\n        \u002F\u002F Vérification du titre de la page\n        String titre = driver.getTitle();\n        if(titre.equals(\"Accueil - Mon Application\")) {\n            System.out.println(\"Page d'accueil chargée correctement !\");\n        }\n\n        \u002F\u002F Fermer le navigateur\n        driver.quit();\n    }\n}\n",[9113],{"type":28,"tag":57,"props":9114,"children":9115},{"__ignoreMap":8},[9116,9155,9194,9241,9248,9268,9275,9318,9326,9361,9388,9395,9403,9431,9438,9446,9478,9519,9555,9562,9569,9576,9595,9602],{"type":28,"tag":162,"props":9117,"children":9118},{"class":164,"line":165},[9119,9123,9127,9131,9135,9139,9143,9147,9151],{"type":28,"tag":162,"props":9120,"children":9121},{"style":179},[9122],{"type":38,"value":6206},{"type":28,"tag":162,"props":9124,"children":9125},{"style":185},[9126],{"type":38,"value":6211},{"type":28,"tag":162,"props":9128,"children":9129},{"style":203},[9130],{"type":38,"value":79},{"type":28,"tag":162,"props":9132,"children":9133},{"style":185},[9134],{"type":38,"value":7061},{"type":28,"tag":162,"props":9136,"children":9137},{"style":203},[9138],{"type":38,"value":79},{"type":28,"tag":162,"props":9140,"children":9141},{"style":185},[9142],{"type":38,"value":7070},{"type":28,"tag":162,"props":9144,"children":9145},{"style":203},[9146],{"type":38,"value":79},{"type":28,"tag":162,"props":9148,"children":9149},{"style":185},[9150],{"type":38,"value":7168},{"type":28,"tag":162,"props":9152,"children":9153},{"style":203},[9154],{"type":38,"value":206},{"type":28,"tag":162,"props":9156,"children":9157},{"class":164,"line":175},[9158,9162,9166,9170,9174,9178,9182,9186,9190],{"type":28,"tag":162,"props":9159,"children":9160},{"style":179},[9161],{"type":38,"value":6206},{"type":28,"tag":162,"props":9163,"children":9164},{"style":185},[9165],{"type":38,"value":6211},{"type":28,"tag":162,"props":9167,"children":9168},{"style":203},[9169],{"type":38,"value":79},{"type":28,"tag":162,"props":9171,"children":9172},{"style":185},[9173],{"type":38,"value":7061},{"type":28,"tag":162,"props":9175,"children":9176},{"style":203},[9177],{"type":38,"value":79},{"type":28,"tag":162,"props":9179,"children":9180},{"style":185},[9181],{"type":38,"value":7070},{"type":28,"tag":162,"props":9183,"children":9184},{"style":203},[9185],{"type":38,"value":79},{"type":28,"tag":162,"props":9187,"children":9188},{"style":185},[9189],{"type":38,"value":7079},{"type":28,"tag":162,"props":9191,"children":9192},{"style":203},[9193],{"type":38,"value":206},{"type":28,"tag":162,"props":9195,"children":9196},{"class":164,"line":209},[9197,9201,9205,9209,9213,9217,9221,9225,9229,9233,9237],{"type":28,"tag":162,"props":9198,"children":9199},{"style":179},[9200],{"type":38,"value":6206},{"type":28,"tag":162,"props":9202,"children":9203},{"style":185},[9204],{"type":38,"value":6211},{"type":28,"tag":162,"props":9206,"children":9207},{"style":203},[9208],{"type":38,"value":79},{"type":28,"tag":162,"props":9210,"children":9211},{"style":185},[9212],{"type":38,"value":7061},{"type":28,"tag":162,"props":9214,"children":9215},{"style":203},[9216],{"type":38,"value":79},{"type":28,"tag":162,"props":9218,"children":9219},{"style":185},[9220],{"type":38,"value":7070},{"type":28,"tag":162,"props":9222,"children":9223},{"style":203},[9224],{"type":38,"value":79},{"type":28,"tag":162,"props":9226,"children":9227},{"style":185},[9228],{"type":38,"value":7119},{"type":28,"tag":162,"props":9230,"children":9231},{"style":203},[9232],{"type":38,"value":79},{"type":28,"tag":162,"props":9234,"children":9235},{"style":185},[9236],{"type":38,"value":7128},{"type":28,"tag":162,"props":9238,"children":9239},{"style":203},[9240],{"type":38,"value":206},{"type":28,"tag":162,"props":9242,"children":9243},{"class":164,"line":218},[9244],{"type":28,"tag":162,"props":9245,"children":9246},{"emptyLinePlaceholder":13},[9247],{"type":38,"value":215},{"type":28,"tag":162,"props":9249,"children":9250},{"class":164,"line":227},[9251,9255,9259,9264],{"type":28,"tag":162,"props":9252,"children":9253},{"style":179},[9254],{"type":38,"value":326},{"type":28,"tag":162,"props":9256,"children":9257},{"style":179},[9258],{"type":38,"value":2669},{"type":28,"tag":162,"props":9260,"children":9261},{"style":2672},[9262],{"type":38,"value":9263}," TestFonctionnel",{"type":28,"tag":162,"props":9265,"children":9266},{"style":203},[9267],{"type":38,"value":363},{"type":28,"tag":162,"props":9269,"children":9270},{"class":164,"line":418},[9271],{"type":28,"tag":162,"props":9272,"children":9273},{"emptyLinePlaceholder":13},[9274],{"type":38,"value":215},{"type":28,"tag":162,"props":9276,"children":9277},{"class":164,"line":477},[9278,9282,9286,9290,9294,9298,9302,9306,9310,9314],{"type":28,"tag":162,"props":9279,"children":9280},{"style":179},[9281],{"type":38,"value":2687},{"type":28,"tag":162,"props":9283,"children":9284},{"style":179},[9285],{"type":38,"value":6263},{"type":28,"tag":162,"props":9287,"children":9288},{"style":179},[9289],{"type":38,"value":331},{"type":28,"tag":162,"props":9291,"children":9292},{"style":334},[9293],{"type":38,"value":7226},{"type":28,"tag":162,"props":9295,"children":9296},{"style":203},[9297],{"type":38,"value":342},{"type":28,"tag":162,"props":9299,"children":9300},{"style":179},[9301],{"type":38,"value":4878},{"type":28,"tag":162,"props":9303,"children":9304},{"style":203},[9305],{"type":38,"value":7239},{"type":28,"tag":162,"props":9307,"children":9308},{"style":2295},[9309],{"type":38,"value":7244},{"type":28,"tag":162,"props":9311,"children":9312},{"style":203},[9313],{"type":38,"value":358},{"type":28,"tag":162,"props":9315,"children":9316},{"style":203},[9317],{"type":38,"value":363},{"type":28,"tag":162,"props":9319,"children":9320},{"class":164,"line":485},[9321],{"type":28,"tag":162,"props":9322,"children":9323},{"style":169},[9324],{"type":38,"value":9325},"        \u002F\u002F Configuration du WebDriver pour Chrome\n",{"type":28,"tag":162,"props":9327,"children":9328},{"class":164,"line":494},[9329,9333,9337,9341,9345,9349,9353,9357],{"type":28,"tag":162,"props":9330,"children":9331},{"style":185},[9332],{"type":38,"value":587},{"type":28,"tag":162,"props":9334,"children":9335},{"style":203},[9336],{"type":38,"value":79},{"type":28,"tag":162,"props":9338,"children":9339},{"style":334},[9340],{"type":38,"value":7276},{"type":28,"tag":162,"props":9342,"children":9343},{"style":203},[9344],{"type":38,"value":342},{"type":28,"tag":162,"props":9346,"children":9347},{"style":612},[9348],{"type":38,"value":7285},{"type":28,"tag":162,"props":9350,"children":9351},{"style":203},[9352],{"type":38,"value":513},{"type":28,"tag":162,"props":9354,"children":9355},{"style":612},[9356],{"type":38,"value":7294},{"type":28,"tag":162,"props":9358,"children":9359},{"style":203},[9360],{"type":38,"value":474},{"type":28,"tag":162,"props":9362,"children":9363},{"class":164,"line":525},[9364,9368,9372,9376,9380,9384],{"type":28,"tag":162,"props":9365,"children":9366},{"style":345},[9367],{"type":38,"value":7306},{"type":28,"tag":162,"props":9369,"children":9370},{"style":185},[9371],{"type":38,"value":7311},{"type":28,"tag":162,"props":9373,"children":9374},{"style":191},[9375],{"type":38,"value":194},{"type":28,"tag":162,"props":9377,"children":9378},{"style":179},[9379],{"type":38,"value":3667},{"type":28,"tag":162,"props":9381,"children":9382},{"style":334},[9383],{"type":38,"value":7324},{"type":28,"tag":162,"props":9385,"children":9386},{"style":203},[9387],{"type":38,"value":834},{"type":28,"tag":162,"props":9389,"children":9390},{"class":164,"line":533},[9391],{"type":28,"tag":162,"props":9392,"children":9393},{"emptyLinePlaceholder":13},[9394],{"type":38,"value":215},{"type":28,"tag":162,"props":9396,"children":9397},{"class":164,"line":542},[9398],{"type":28,"tag":162,"props":9399,"children":9400},{"style":169},[9401],{"type":38,"value":9402},"        \u002F\u002F Ouvrir la page d'accueil\n",{"type":28,"tag":162,"props":9404,"children":9405},{"class":164,"line":563},[9406,9410,9414,9418,9422,9427],{"type":28,"tag":162,"props":9407,"children":9408},{"style":185},[9409],{"type":38,"value":7351},{"type":28,"tag":162,"props":9411,"children":9412},{"style":203},[9413],{"type":38,"value":79},{"type":28,"tag":162,"props":9415,"children":9416},{"style":334},[9417],{"type":38,"value":7360},{"type":28,"tag":162,"props":9419,"children":9420},{"style":203},[9421],{"type":38,"value":342},{"type":28,"tag":162,"props":9423,"children":9424},{"style":612},[9425],{"type":38,"value":9426},"\"http:\u002F\u002Fmonapplication.com\"",{"type":28,"tag":162,"props":9428,"children":9429},{"style":203},[9430],{"type":38,"value":474},{"type":28,"tag":162,"props":9432,"children":9433},{"class":164,"line":581},[9434],{"type":28,"tag":162,"props":9435,"children":9436},{"emptyLinePlaceholder":13},[9437],{"type":38,"value":215},{"type":28,"tag":162,"props":9439,"children":9440},{"class":164,"line":622},[9441],{"type":28,"tag":162,"props":9442,"children":9443},{"style":169},[9444],{"type":38,"value":9445},"        \u002F\u002F Vérification du titre de la page\n",{"type":28,"tag":162,"props":9447,"children":9448},{"class":164,"line":631},[9449,9453,9458,9462,9466,9470,9474],{"type":28,"tag":162,"props":9450,"children":9451},{"style":345},[9452],{"type":38,"value":7590},{"type":28,"tag":162,"props":9454,"children":9455},{"style":185},[9456],{"type":38,"value":9457}," titre ",{"type":28,"tag":162,"props":9459,"children":9460},{"style":191},[9461],{"type":38,"value":194},{"type":28,"tag":162,"props":9463,"children":9464},{"style":185},[9465],{"type":38,"value":7604},{"type":28,"tag":162,"props":9467,"children":9468},{"style":203},[9469],{"type":38,"value":79},{"type":28,"tag":162,"props":9471,"children":9472},{"style":334},[9473],{"type":38,"value":7613},{"type":28,"tag":162,"props":9475,"children":9476},{"style":203},[9477],{"type":38,"value":834},{"type":28,"tag":162,"props":9479,"children":9480},{"class":164,"line":640},[9481,9485,9489,9494,9498,9502,9506,9511,9515],{"type":28,"tag":162,"props":9482,"children":9483},{"style":179},[9484],{"type":38,"value":5492},{"type":28,"tag":162,"props":9486,"children":9487},{"style":203},[9488],{"type":38,"value":342},{"type":28,"tag":162,"props":9490,"children":9491},{"style":185},[9492],{"type":38,"value":9493},"titre",{"type":28,"tag":162,"props":9495,"children":9496},{"style":203},[9497],{"type":38,"value":79},{"type":28,"tag":162,"props":9499,"children":9500},{"style":334},[9501],{"type":38,"value":7642},{"type":28,"tag":162,"props":9503,"children":9504},{"style":203},[9505],{"type":38,"value":342},{"type":28,"tag":162,"props":9507,"children":9508},{"style":612},[9509],{"type":38,"value":9510},"\"Accueil - Mon Application\"",{"type":28,"tag":162,"props":9512,"children":9513},{"style":203},[9514],{"type":38,"value":1276},{"type":28,"tag":162,"props":9516,"children":9517},{"style":203},[9518],{"type":38,"value":363},{"type":28,"tag":162,"props":9520,"children":9521},{"class":164,"line":648},[9522,9526,9530,9534,9538,9542,9546,9551],{"type":28,"tag":162,"props":9523,"children":9524},{"style":185},[9525],{"type":38,"value":7667},{"type":28,"tag":162,"props":9527,"children":9528},{"style":203},[9529],{"type":38,"value":79},{"type":28,"tag":162,"props":9531,"children":9532},{"style":185},[9533],{"type":38,"value":596},{"type":28,"tag":162,"props":9535,"children":9536},{"style":203},[9537],{"type":38,"value":79},{"type":28,"tag":162,"props":9539,"children":9540},{"style":334},[9541],{"type":38,"value":605},{"type":28,"tag":162,"props":9543,"children":9544},{"style":203},[9545],{"type":38,"value":342},{"type":28,"tag":162,"props":9547,"children":9548},{"style":612},[9549],{"type":38,"value":9550},"\"Page d'accueil chargée correctement !\"",{"type":28,"tag":162,"props":9552,"children":9553},{"style":203},[9554],{"type":38,"value":474},{"type":28,"tag":162,"props":9556,"children":9557},{"class":164,"line":657},[9558],{"type":28,"tag":162,"props":9559,"children":9560},{"style":203},[9561],{"type":38,"value":5620},{"type":28,"tag":162,"props":9563,"children":9564},{"class":164,"line":693},[9565],{"type":28,"tag":162,"props":9566,"children":9567},{"emptyLinePlaceholder":13},[9568],{"type":38,"value":215},{"type":28,"tag":162,"props":9570,"children":9571},{"class":164,"line":725},[9572],{"type":28,"tag":162,"props":9573,"children":9574},{"style":169},[9575],{"type":38,"value":7769},{"type":28,"tag":162,"props":9577,"children":9578},{"class":164,"line":758},[9579,9583,9587,9591],{"type":28,"tag":162,"props":9580,"children":9581},{"style":185},[9582],{"type":38,"value":7351},{"type":28,"tag":162,"props":9584,"children":9585},{"style":203},[9586],{"type":38,"value":79},{"type":28,"tag":162,"props":9588,"children":9589},{"style":334},[9590],{"type":38,"value":7785},{"type":28,"tag":162,"props":9592,"children":9593},{"style":203},[9594],{"type":38,"value":834},{"type":28,"tag":162,"props":9596,"children":9597},{"class":164,"line":786},[9598],{"type":28,"tag":162,"props":9599,"children":9600},{"style":203},[9601],{"type":38,"value":628},{"type":28,"tag":162,"props":9603,"children":9604},{"class":164,"line":807},[9605],{"type":28,"tag":162,"props":9606,"children":9607},{"style":203},[9608],{"type":38,"value":637},{"type":28,"tag":98,"props":9610,"children":9611},{},[],{"type":28,"tag":41,"props":9613,"children":9615},{"id":9614},"comment-choisir-le-bon-framework-pour-votre-projet",[9616],{"type":28,"tag":34,"props":9617,"children":9618},{},[9619],{"type":38,"value":9620},"Comment choisir le bon framework pour votre projet ?",{"type":28,"tag":51,"props":9622,"children":9623},{},[9624],{"type":38,"value":9625},"Le choix du framework dépend de plusieurs facteurs :",{"type":28,"tag":4738,"props":9627,"children":9629},{"id":9628},"_1-type-de-projet-et-complexité",[9630,9631],{"type":38,"value":5135},{"type":28,"tag":34,"props":9632,"children":9633},{},[9634],{"type":38,"value":9635},"Type de projet et complexité",{"type":28,"tag":4327,"props":9637,"children":9638},{},[9639,9660],{"type":28,"tag":4331,"props":9640,"children":9641},{},[9642,9647,9649,9653,9654,9658],{"type":28,"tag":34,"props":9643,"children":9644},{},[9645],{"type":38,"value":9646},"Projets simples ou modérés",{"type":38,"value":9648}," : ",{"type":28,"tag":34,"props":9650,"children":9651},{},[9652],{"type":38,"value":6176},{"type":38,"value":6561},{"type":28,"tag":34,"props":9655,"children":9656},{},[9657],{"type":38,"value":6182},{"type":38,"value":9659}," pour des tests unitaires.",{"type":28,"tag":4331,"props":9661,"children":9662},{},[9663,9668,9669,9673,9675,9679],{"type":28,"tag":34,"props":9664,"children":9665},{},[9666],{"type":38,"value":9667},"Projets complexes",{"type":38,"value":9648},{"type":28,"tag":34,"props":9670,"children":9671},{},[9672],{"type":38,"value":8509},{"type":38,"value":9674}," pour tester des interactions complexes, ",{"type":28,"tag":34,"props":9676,"children":9677},{},[9678],{"type":38,"value":6559},{"type":38,"value":9680}," pour des tests d'intégration.",{"type":28,"tag":4738,"props":9682,"children":9684},{"id":9683},"_2-nature-des-tests",[9685,9686],{"type":38,"value":5367},{"type":28,"tag":34,"props":9687,"children":9688},{},[9689],{"type":38,"value":9690},"Nature des tests",{"type":28,"tag":4327,"props":9692,"children":9693},{},[9694,9713,9732],{"type":28,"tag":4331,"props":9695,"children":9696},{},[9697,9702,9703,9707,9708,9712],{"type":28,"tag":34,"props":9698,"children":9699},{},[9700],{"type":38,"value":9701},"Unitaires",{"type":38,"value":9648},{"type":28,"tag":34,"props":9704,"children":9705},{},[9706],{"type":38,"value":6176},{"type":38,"value":6561},{"type":28,"tag":34,"props":9709,"children":9710},{},[9711],{"type":38,"value":6182},{"type":38,"value":79},{"type":28,"tag":4331,"props":9714,"children":9715},{},[9716,9721,9722,9726,9727,9731],{"type":28,"tag":34,"props":9717,"children":9718},{},[9719],{"type":38,"value":9720},"Intégration",{"type":38,"value":9648},{"type":28,"tag":34,"props":9723,"children":9724},{},[9725],{"type":38,"value":6559},{"type":38,"value":6561},{"type":28,"tag":34,"props":9728,"children":9729},{},[9730],{"type":38,"value":6566},{"type":38,"value":79},{"type":28,"tag":4331,"props":9733,"children":9734},{},[9735,9740,9741,9745],{"type":28,"tag":34,"props":9736,"children":9737},{},[9738],{"type":38,"value":9739},"End-to-end",{"type":38,"value":9648},{"type":28,"tag":34,"props":9742,"children":9743},{},[9744],{"type":38,"value":7026},{"type":38,"value":9746}," pour automatiser les tests fonctionnels.",{"type":28,"tag":4738,"props":9748,"children":9750},{"id":9749},"_3-facilité-dutilisation-et-dapprentissage",[9751,9752],{"type":38,"value":5762},{"type":28,"tag":34,"props":9753,"children":9754},{},[9755],{"type":38,"value":9756},"Facilité d'utilisation et d'apprentissage",{"type":28,"tag":4327,"props":9758,"children":9759},{},[9760,9769,9778],{"type":28,"tag":4331,"props":9761,"children":9762},{},[9763,9767],{"type":28,"tag":34,"props":9764,"children":9765},{},[9766],{"type":38,"value":6176},{"type":38,"value":9768}," pour la simplicité.",{"type":28,"tag":4331,"props":9770,"children":9771},{},[9772,9776],{"type":28,"tag":34,"props":9773,"children":9774},{},[9775],{"type":38,"value":6182},{"type":38,"value":9777}," pour des besoins plus avancés.",{"type":28,"tag":4331,"props":9779,"children":9780},{},[9781,9785],{"type":28,"tag":34,"props":9782,"children":9783},{},[9784],{"type":38,"value":8509},{"type":38,"value":9786}," pour simuler des dépendances.",{"type":28,"tag":6063,"props":9788,"children":9789},{},[9790],{"type":28,"tag":51,"props":9791,"children":9792},{},[9793,9797],{"type":28,"tag":34,"props":9794,"children":9795},{},[9796],{"type":38,"value":6073},{"type":38,"value":9798}," : Choisissez un framework que vous et votre équipe êtes prêts à apprendre et à maintenir. Il vaut mieux maîtriser un framework simple que d'utiliser un outil avancé de manière incorrecte.",{"type":28,"tag":4738,"props":9800,"children":9802},{"id":9801},"_4-compatibilité-avec-votre-environnement",[9803,9804],{"type":38,"value":5785},{"type":28,"tag":34,"props":9805,"children":9806},{},[9807],{"type":38,"value":9808},"Compatibilité avec votre environnement",{"type":28,"tag":4327,"props":9810,"children":9811},{},[9812,9828],{"type":28,"tag":4331,"props":9813,"children":9814},{},[9815,9820,9821,9826],{"type":28,"tag":34,"props":9816,"children":9817},{},[9818],{"type":38,"value":9819},"Maven",{"type":38,"value":6561},{"type":28,"tag":34,"props":9822,"children":9823},{},[9824],{"type":38,"value":9825},"Gradle",{"type":38,"value":9827}," fonctionnent bien avec JUnit, TestNG et Mockito.",{"type":28,"tag":4331,"props":9829,"children":9830},{},[9831,9835],{"type":28,"tag":34,"props":9832,"children":9833},{},[9834],{"type":38,"value":7026},{"type":38,"value":9836}," pour des tests multiplateformes.",{"type":28,"tag":4738,"props":9838,"children":9840},{"id":9839},"_5-écosystème-et-support-communautaire",[9841,9843],{"type":38,"value":9842},"5. ",{"type":28,"tag":34,"props":9844,"children":9845},{},[9846],{"type":38,"value":9847},"Écosystème et support communautaire",{"type":28,"tag":4327,"props":9849,"children":9850},{},[9851],{"type":28,"tag":4331,"props":9852,"children":9853},{},[9854,9858,9860,9864,9865,9869],{"type":28,"tag":34,"props":9855,"children":9856},{},[9857],{"type":38,"value":6176},{"type":38,"value":9859}," bénéficie d'une large communauté, tout comme ",{"type":28,"tag":34,"props":9861,"children":9862},{},[9863],{"type":38,"value":8509},{"type":38,"value":135},{"type":28,"tag":34,"props":9866,"children":9867},{},[9868],{"type":38,"value":7026},{"type":38,"value":79},{"type":28,"tag":1186,"props":9871,"children":9873},{"cta":4441,"href":4442,"title":9872,"type":4444},"Bien tester n'est qu'une des 100 pratiques qui font le code propre",[9874],{"type":28,"tag":51,"props":9875,"children":9876},{},[9877],{"type":38,"value":9878},"Cet article vous montre comment choisir et utiliser un framework de tests. Mais bien tester n'est qu'un maillon : le Craft Bundle réunit les 100 pratiques craft que j'applique pour coder propre, de la conception des tests au découpage des modules. Ce sont les pratiques que l'IA ne vous apprendra jamais, parce qu'elle ne les a jamais vues tenir un projet sur la durée.",{"type":28,"tag":98,"props":9880,"children":9881},{},[],{"type":28,"tag":41,"props":9883,"children":9885},{"id":9884},"faq",[9886],{"type":28,"tag":34,"props":9887,"children":9888},{},[9889],{"type":38,"value":9890},"FAQ",{"type":28,"tag":4464,"props":9892,"children":9893},{},[9894,9899],{"type":28,"tag":4468,"props":9895,"children":9896},{},[9897],{"type":38,"value":9898},"1. Quelle est la différence entre JUnit et TestNG ?",{"type":28,"tag":51,"props":9900,"children":9901},{},[9902,9906,9908,9912],{"type":28,"tag":34,"props":9903,"children":9904},{},[9905],{"type":38,"value":6176},{"type":38,"value":9907}," est plus basique et plus largement adopté. ",{"type":28,"tag":34,"props":9909,"children":9910},{},[9911],{"type":38,"value":6182},{"type":38,"value":9913}," offre des fonctionnalités avancées : tests parallèles, groupes de tests, dépendances entre tests. Si vous démarrez sur un projet standard, JUnit suffit. TestNG devient pertinent quand vous avez besoin de parallélisation fine ou de scénarios de tests complexes.",{"type":28,"tag":4464,"props":9915,"children":9916},{},[9917,9922],{"type":28,"tag":4468,"props":9918,"children":9919},{},[9920],{"type":38,"value":9921},"2. Quand utiliser Mockito ?",{"type":28,"tag":51,"props":9923,"children":9924},{},[9925],{"type":38,"value":9926},"Quand vous voulez tester une unité en isolation alors qu'elle dépend d'objets coûteux ou non déterministes (DB, services externes, horloge système). Mockito vous permet de simuler ces dépendances et de contrôler leur comportement.",{"type":28,"tag":4464,"props":9928,"children":9929},{},[9930,9935],{"type":28,"tag":4468,"props":9931,"children":9932},{},[9933],{"type":38,"value":9934},"3. Selenium fonctionne-t-il uniquement sur des applications web ?",{"type":28,"tag":51,"props":9936,"children":9937},{},[9938],{"type":38,"value":9939},"Oui. Selenium pilote un navigateur via WebDriver. Pour des applications desktop ou mobiles, regardez plutôt Appium (mobile) ou TestFX\u002FSikuli (desktop).",{"type":28,"tag":1186,"props":9941,"children":9944},{"cta":9942,"href":4537,"title":9943,"type":4539},"Télécharger le guide gratuit →","Ressource gratuite : De 6 semaines à 8 jours de lead time en 90 jours",[9945],{"type":28,"tag":51,"props":9946,"children":9947},{},[9948],{"type":38,"value":9949},"Le framework 4 phases appliqué dans 12 équipes engineering. Une bonne couverture de tests est la fondation d'un lead time court : découvrez comment réduire le vôtre de 50%.",{"type":28,"tag":4547,"props":9951,"children":9952},{},[9953],{"type":38,"value":4551},{"title":8,"searchDepth":175,"depth":175,"links":9955},[9956,9957,9958,9959,9960,9961],{"id":5982,"depth":209,"text":5988},{"id":6023,"depth":209,"text":6029},{"id":6145,"depth":209,"text":6151},{"id":7834,"depth":209,"text":7840},{"id":9614,"depth":209,"text":9620},{"id":9884,"depth":209,"text":9890},"content:fr:dette-technique:decouvrir-frameworks-tests-java.md","fr\u002Fdette-technique\u002Fdecouvrir-frameworks-tests-java.md","fr\u002Fdette-technique\u002Fdecouvrir-frameworks-tests-java",1784113932212]