Vous êtes sur la page 1sur 84

\\

É__
E_\//
J_%Î
W
V “__
\I
fI *IlII'I'_lIlÎIl___'l_|
__

_ _ _I
'| ____|__________
í I\____|__|__
| Il'III
\_/__!
K
_
/I
_ _\
\_
I _I/§
: /FW//ÿ
/JJ /Î
fl/
\
_a Kî Ã//
/Z
\
L
fl_ _H__///__, I__'Ê
_£ _V/
_\
! _ _`
*_\\
Im
m
_H___H_;
3
fr _I¿ _ /
_%
_/
y%
_'
_____
Il

H_\__ V _\
LI
\'lili'
-___"
rf_ _ _ _ _ _ _ _ _
\
Ø
___
/_
:\
///_\IØ/
V\
VI Êÿ Il _ lhvll_IIJ||

_ _;1//
\_ïf
\__\_
5_________`
'I'_II'
_ III'_ _ _

/
îV/
XK HV ___;T
I___

______

/
H ï_\
\\\_/
____
__

____2
H__ __

À*
\I
\Q
Ã
JI? _

I1I
III
Decouvrez les meilleurs outils et composants logiciels

š|)|TE| 3 <0 |=Eu|LLEs DE c LcuL


G -| “FOR EsšAGER|E
BtR
_-| ' JUR l-l
JSON l.|.l C0 VERSION
| st LL no
nf: GRAPH|ouEs _
CJ

QUERY Z *Iv
CD

5'|2 l 347 50 379 'I 679 25


Produits Fonctionnalités Points oe clonnees Heures cle Ànnees
commerciaux comperees collectes recherche c:l'e:-tperien DE

Wwwcomponentsourcecom/fr/compare
Les breves ECl*i/lAScript partie 1
Louis Adam {ZDnet) JavaScript s appuie sur les standards ECMr5.Scnpt pour definir
le langage Dans ce grand dossier, Svlvain nous plonge dans
Agenda les entrailles de JS et les nombreuses evolutions
Redacfion Sylvain Cuenca

Une bonne annee 'F' Crattsmanship


Le recrutement report Quelles tendances pour 2022 i REX autour du Craftsmanship et du Clean Code
François Tonic Jean Paul Gollant

Projet li/longoDB
Decouvrez Coding Journev, une plateforme ludique de Petite ei-tplication de securite au coeur de MongoDB
programmation developpee par des etudiants d Epitech Technology avec le client de field level encrvptian
Jeremy Brugrere Si Leo Lhuile Maxime Beugnet

Un peu de Sorum '? Carvel


Scrum Master oui, non, peut etre Î' Tu ne connais pas Carvel 5' Si tu ne fois pas de Kubernetes, c'est
Cornprenons son role et les competences necessaires un peu normal Carvel est une boite a outils pour les apps Kubernetes
Fanny Klauli .alexandre Caussignac Bi Elise Savornin

Art Classe a ui peut


Tu connais ies NFT 5*' Non, une occasion pour savoir de quoi on Pourquoi |e n'ai plus de classes abstraites da ns mon code il
parle et comment les creer Toi aussi, tu te poses la meme question 5' Dorra nous explique pourquoi
Julien Leborgne Dorra Bartagui:

Opera Tester ses composants


Paitons o. la decouverte d un nouveau langage Opera Les tests et les developpeurs, une longue histoire
Pierre Germain Lacour Michelle explore le dom testing library
Michelle Àvomo
Webíšü
Comment comprendre le web 3 ii De quoi parle-t-on 3° Bonnes pratiques l\locle l
Exemple concret ll est temps d'utiliser les bonnä pratiques avec Node is
Thierry Fonclrat Matthieu Àilbert

.Net 6 Ouantique
Depuis -fi mois, Net <5 est le quotidien des developpeurs Net Petite decouverte de mvQLN'i et du langage AQÀSM
Revenons sur les principales evolutions et nouveautes Benoit Prieur
Gagoba Koffi Narcisse
ri p
.Net MAUI Le Commitstrip du mois
Microsoft livre le proiet I*-let MAUI qui est une refonte totale
de ){amarin Forms Àrrive-t-il troll tard 7*
À-t-il de bons arguments techniques 5*
Gaëtan Viola Nguyen & Christophe Heral
Edito
Jarristack partie 1 `“v"ers des terres inconnues
Jamstack est discret et pourtant il definit une nouvelle tendance
du developpement iveb Cvnthia nous eiiiplique tout
'Cynthia Henaff
Abonnement & Boutique

Abonnement numerique Labonnement o Programmes' est


(format PDF) de 55 E pour l an, 90 ê pour 2 ans
directement sur iiiiww μragrsmmst sam Abonnements et boutiques en pages 42 43

[EW Cl «vsfi
Programmez' est une publication bimestrielle de Nefer-IT
adresse 5? rue de Gisors 95300 Pontoise - France Pour nous contacter reilai:tii:in@μriiç_|aitimia aim

progrommeacom TAB LE DES MATIERES


PROGR/5iMNlEZ!252

Vers des terres inconnues


t si on parlait de Web 3 Ê* Faut-il utiliser le Connaissez-vous vraiment JavaScript et donc Dans ce numéro, nous sommes ravis de partager
terme Web 3.lÎl, Web3, Web 3 E' Personne ECliJlAScript qui est le standard officiel du l'expérience du projet Coding Journev développé
n'est vraiment d'accord. Le Web 3.0, tel langage É* L'aventure débute en juin l'§-"PT" avec par des étudiants d'Epitech. ljidée est ii simple ii :
qu'il avait été évoqué il v a plusieurs anriées, le standard ECiWî'i-2r52. Depuis, les évolutions se faire découvrir la programmation de maniére
était une évolution du Web 2.0 avec la succédent régulierement. i-tctuellement, nous ludique et progressive. Franchement, les dévs ont
multiplication des réseaux sociaux et sommes iii la ille édition soit ECt*JlAScript 202l . fourni un super travail sur le fonctionnement et
|'interconnexion toujours plus grandes. Le Web3 Sylvain, nous prépare toutes les évolutions et les l'ergonomie. Bravo l
serait alors un internet toujours plus nouveautés jusqu'é aujourd"l*iui. Un passionnant
interconnecté et décentralisation. Par voyage. Nous vous réservons de nombreux autres sujets :
décentralisation, on entend que le navigateur ne craftmanship, les tests automatisés, Mongoü B,
soit plus au cceur de la navigation de i'utilisateur. Nous repartons aussi pour le merveilleux monde Carvel, de l'informatique quantique avec Aqasm,
Certaines définitions v voient un internet oiÎ.i nous de .Net o et notamment autour du projet MÀUI, un peu de NFT et Scrum Master l Et nous vous
serions en mesure de mieux controler nos reboot de ){amorin i' Xamarin Forms. Cette proposons aussi de découvrir un nouveau
données notamment avec la généralisation de la fonctionnalité fut retirée ci la derniére minute langage : Cipera o ne pas confondre avec le
blockchain. ll s'agit aussi d'en finir avec suite ifi un important retard de développement- géteau et le navigateur.
l'impoitance des fournisseurs technologiques et Les previeiivs se sont succédées depuis
des récoltes de données. [Tautres ir voient le septembre 2U2l. La GA est toujours attendue Bonne lecture l
Web sémantique ou un Web immersit. Bref, on pour le 2e trimestre, et par défaut dans .Net Ê.
peut ji mettre un peu ce que l'on veut. Concernant .Net Î, le développement avance. François Tonic
L .il

La phase previevv a débuté mi-février. Coté Java, Buildeur en chef et


Tliierrv nous plonge dans ce nouveau Web et ClpenJDl< lP a lui aussi débuté son superviseur CHCD
nous explique ce que nous pourrions v trouver. développement. Au moment d'écrire cet édito,
Une lecture passionnante. seul le portable sur Linu><ilF¿l5C-\il 64 bits était
référencé dans les JEP

..-*"""'-

Il-""

PROCHAIN U ÉRo
Regardez
notre nouvelle émission

Disponible
dès le 25 mcii
https:i'/www.j.fnutuhe.cam/channel/UiliBl]jwLjVilk9an92i_LGgμg

ÉIÎHTCJ programmeacom
li
ll lo/
TEEHHUSHUPEÊ TEgHHa5aURE§

-Î1-I*
Î

_.'Il

Ji- -_ .I
.J

¢§L.r

'- . '*"1ii-ir
ii-r.-.'i',-*_ :__ _ - "
§5@ä¿fi£M¿gfl nl

.».i.io*?ÊeL fififfrä
I -_ -F _Ii.f:¿.:L

24 MACHINES QUI ONT FAIT UHISTOIRE


Apple I, Apple ll, Spartacus, Cube, Lisa, PowerBook, Macintosh RISC, etc.

150 PAGES
(numéro double + numero bonus)
*(2655 e + 6,35 de frais cle port)

programmeacom
par la rédaction de
et.fr

Il ci-ei-ri-iilisi--iii.›«ii France Transfert :


i¿i_i¿'i'i i=5'-i 'i i iÿ France transfert Frs'-ssi* ' tîi- eo El s.-:ao-a is. ai-uzriorsria
une alternative française
silk tir WeTronsfer
France transfert permet i:l'envci-jrer cles fichiers volumineux non sensibles cle maniere securise-e a un agent cle l'Etat ou entre agents.
Pour transférer des fichiers volumineux, les
administrations françaises se heurtaient a
une problématique épineuse : difficile de
Courflel Uen C)
5 -Î|'|"'FI5 |T--J|-ïI|- 'f"!i 'J 'II' - IÎI-Èll li!_-I'-lI'-'.'-II|'l'I"i-
passer par des senrices comme WeTronsfer
li_l {î:I
ou Google Drive et d'expédier sur un cloud
américain ou étranger des données parfois
-'lÎl|;ri G)
potentiellement sensibles. Pour pallier le
probléme, le gouvernement a dégainé son
.si {_I'l_:-| i_'l

_ J' nouvel outil France Transfert. Destiné en


to'-1
'*~. ,"'Ii premier lieu aux agents de i'État, le service
permet de transférer des fichiers allant
jusqu'o 2Go pour un total de 20go. Le tout
J accepte les ;fi_I.¢ et je n envoie pas de donnees ii
Ajouter vos fichiers et dossiers
II='.- IIlIÎ'£!iIIi'E-IL'i'“- :Its HII
l:l caractere personnel ou sensibles non chiffrées au en avant Fassurance que les données restent
préalable
hébergées sur un cloud sécurisé approuvé
par i'Anssi. Que demander de plus.

Fuite de données de spécialisée da ns le déploiement des Starlink perd ses parleurs services. Une flopée de
santé : une amende technologies loT (notamment des fréq ue n ces nouvelles obligations qui va trés
de 1,5 million d'euros technologies développées par Suite o un recours devant le Conseil probablement tuer l'innovation dans
iii la clef Sigfox] et fondée par un ancien de d'État d'associations écologistes peu le secteur du point de vue des
La '-Îl'\llL a épingle la societe Sigfox. Le nouveau propriétaire enthousiasmées par la 5G et son détracteurs de cette nouvelle loi, qui
Dedalus Biologie pour ses nombreux s'engage rfi reprendre l l0 des l80' monde, Starlinl-L se trouve dépourvu ont notamment signé une lettre
manquements au RGPD, et a infligé salariés de la société et le choix du de ses fréquences en France. Le ouverte appelant les instances
une amende de l,5 million d'euros tribunal s'accorde avec la volonté Conseil d'Êtat a en effet estimé que européennes iii alléger leurs projets
a la société. Vous trouvez ça élevé ? des représentants du personnel de l'entreprise américaine d'lnternet par en la matiére.
La sanction s'explique dans les la société, qui avaient également satellite avait manqué iii ses
détails livrés parla Commission : recommandé de retenir le projet obligations avant de déplover son Compléments
elle explique dans sa délibération d'Unabi.t. Une transition en terrain réseau, notamment lo nécessité de de la rédaction
que les erreurs de la société ont connu en somme. procéder o une consultation du public
conduit a la diffusion contenant les avant d'ouvrir rfi cet acteur américain Les NFT ne
données de santé de 500 000 Note cle la rédaction t Unoibiz a l'accés aux fréquences. l.'attribution réussissent pas é tout
citovens français au mois de février annoncé le versement al'environ 3,3 avant été cassée, la société -:i'Elon le monde i
2021. Le fichier avait été laissé sur millions d'E pour les actifs. Musk pourra donc avoir le plaisir de Le NFF du ler tvveet a été acheté
un serveur FTP non sécurisé et recommencer l'ensemble du pour 3 millions de $ par Sina Estavi.
librement accessible sur Internet, et Raidforums tire sa processus et redemander o l'Arcep de Aprés un an, l'heureux propriétaire
ce malgré les alertes de l'Anssi. révérence lui réattribuer ses fréquences... Sauf décide d'en séparer pour
I_"affaire avait fait grand bruit, et la Le forum Raidforums s'était taillé si Elan préfére décider d'arréter les l'astronomique sommaire de 49
sentence est en conséquence. une réputation sur le vveb en frais. millions de $. Il promet de verser la
devenant au fil des années une des mafié de la somme iii des reuvres de
Sigfox : la pépite principales plateformes cl'échange UEurope veut pouvoir charité. Les premieres encheres sont un
toulousaine finalement de données volées. Un exemple F' Le ernpécher les peu décevantes 1 rîi peine l0 000 Eli !
reprise par Unabiz fichier contenant les données de transferts anonymes Ainsi va le marché de l'art et des NFT.
santé de 500 000 citavens français de cryptomonnaie
avait notamment été distribué via l_'écosvstéme de la crvptomonnaie A quoi ressemblera
sigfox des annonces publiées sur ce forum.
Actif depuis 2015, celuiici avait
est vent debout contre ie nouveau
projet de régulation européenne
Windows l2 ?
Depuis quelques semaines, lo
attiré au cours des derniéres années voté jeudi 3l mars par le parlement question agite une partie des
Placée en redressement judiciaire lin l'altention des autorités, i:`i tel point européen. Le projet, connu sous communautés : o quoi pourrait
janvier, la société Sigfox spécialisée que celui-ci a finalement été mis l'acronvme de MiCa, prévoit en effet ressembler le prochain Windows il
da ns les réseaux d'objets connectés hors ligne et son administrateur de durcir les obligations qui pésent Dans la continuité de Winl l F' Un
a enfin un repreneur. Le tribunal arrété par la police. Bien sur les plateformes du secteur et OS tout cloud ii Un Chrome G5
judiciaire de Toulouse a opté pour le évidemment, la reléve se prépare plus particuliérement en les killer i' Peut étre un début de
projet de reprise présenté par la déja. obligeant o fournir des informations réponse durant la conférence
société Unabiz. Cette société basée concernant les sources et les BU l LD.
a Singapour estelle aussi bénéficiaires des transferts passants

progrommeacom
l'l

_...-

.Il
tpeüfifiüm

Niveau maitre Jedi


in-III""""'r

'LE'-'l"'il
\gaE-lili*
soft<'luei'rt it È rr ii-
'r-''I-li F
" F 'ill' ":.-r
-- ".i'~-”""'--IJ.--.--_
Iii-.i-_-í_|_1-. ;_I| . -
IT.

21'": l."i Ir
Jil' l'

Dipati fififfc . ,..~*"l,


*'.: .
'i ii. " .".f
etll- -* . . *riïii
-i_g¿g'l;l'li'llE;lM t
il"-ÿ i'i-l"l'|"'i'müI“-

tr'*- *5muFü_,;,,:mr,H... ."'I?


U
-"-:___ “srl¢'|-_1,Ii-
..I.-,nm

The cloud that rnakes sense i«~~*,-;**yx.,i est it' åâ


fl
ir-lit' -/`

Niveau padawon
-~ 1* 1'.
aeflflifififiii'=' *
isfit“*'”“""T.`Îi
riiiriH'"`“'“m ,rail i -'_
vils P'

Il

io.
Q;~.nCI!

È «E
.ill
É-
*ssf~“'*“.i«““ll”

J ._...as=E _

Vous voulez soutenir activement Programmez! ?


Devenir partenaires de nos dossiers en ligne et de nos événements ?

Contactez-nous dès maintenant


lttinic@|irrigrammez.ciim

pragrammexcom
Les événements Proorammez!
eetups Programmez! 0
Les dates du ler semestre: Devcon /0
10 mei : Gitüps sur Kubernetes avec Carvel 19 mai
23 juin t Ecriture d'un systéme bancaire simple Où : Campus de l'écoIe ESGI
et distribué en utilisant Axon 242 rue du Faubourg Saint-Antoine, Paris
Dir : Devoteam 43 bd Barbés, Paris TI'HI'ISlJOI'Î I NHÎÎDH (RER Ai MÉÎFO li 2. 6. 9)
lviétros : Château Rouge (ligne 4) A partir cIe13h30
A partir de 18h30
ll'lF0l'lTlöTl0l"IS Sr ll'lSCl'lPTl0I"I I Pl'0Gl'âml'flÊZ.COl'fl
mal JUIfl
Lun. Mar. Mer. jeu. Ven. Sam. Dim. Lun. Mar. Mer. jeu. Ven. Sam. Dim.

'l'r'el:i2Drrjrsl' Nantes
Le tremplin
dei EPPP' Alpesflroft i Grenoble
liers i ' Tours ,
Le camping iles speakers
Bretagne
l*l@2i“P Devfest
Pfrrnrriie! Lriir
50CRiiiTE5i [lriirne J|r|'|_ ji paris
ri-ivcriii rirurpryi
#14 uiir F'"“'°fP'
. Seriierless
l*iloilT f Lyon Day I, Hm

W
Hack in Paris il Paris
Sunnvïech il Montpellier

AVENIR
- .IUG SummerCamp :
9 septembre / La Rochelle
- Cloud Nord :
29 septembre / Lille
-i Paris Web :
6 8i 7 octobre / Paris
- Volcamp :
l3-14 octobre / Clermont
Ferrand
- DevFest Nantes :
20-21 octobre/ Nantes
- Codeurs en Seine :
l7 novembre /' Rouen
-i SnavrCamp :
25-28 janvier 2023 /'
Grenoble

Merci iii Aurélie Vache pour la liste 2022, consultable sur son GitHul:r : httμs:lfgitliiih.camistraljriirlrrvslrijiirrs-rttintiirritnires-rrirjerirlriihlritiiimrristirr.*'liEiliDllllírrii:l

AGEN DA programmeacom
2022 : une bonne année ?
Comme chaque annee, les etudes se multiplient sur les competences, les carrières et
les profils. Nous vous proposons un aperçu sur les derniers rapports de CodinGame,
0'reilly et Yerbo. Spoilers : peu de surprises pour 2022, du JS comme on laime.
CodinGame a publié son dernier rap- explique la demande pour les frame-
Developers' preferred irvork situation
port pour les profils recherchés. Nous vvorks JS. Nous retrouvons les clas-
sommes sur les tendances des années siques : React, Node, Angular; Vue.
1iÎ.`liÎ.l'f'r”ri remotely 33%
précédentes : fuilstack, backend, .Net représente un quart des frame-
Devlffips, développeur d'appiication et vvorks recherchés. Spring ne doit pas Ftemotelv a fevv davs
38%
bien entendu frontend. Pour 2022, les surprendre par le poids de Java. per vveel-r
trois principales compétences que les lviainlv at the office,
recruteurs cherchent rîi recruter cette Un constat semble siimposer : on 22%
vvith the ability to...
année sont le développement vreb, le manque de développeurs. Les forma-
Devüps et l'|A il Machine Learning. tions se multiplient, notamment en filié- ilÎiD'ïiii at the office 4%
re courte. De plus en plus d'entreprises
Le développement 'iveb reste une ne misent plus sur le CV ou le dipléme, I don't I-:novv '39-ti
valeur süre du marché pour les recru- mais plus sur les compétences réelles
tements. Les compétences DevCips des candidats. Ce discours est svmpa-
explosent aussi. Par contre, le dévelop- thique, mais il a des limites. il ne faut
pement mobile, l'UliU)( sont en retrait. pas croire que l'entreprise recrute o
Étonnement, tout ce qui est lol: jeux, l'aveugie.
robatotique, programmation fonction-
nelle attirent moins, tout comme la Nous avons discuté avec plusieurs ESN,
sécurité. pure plover ou non. La réalité est por-
fois sévére : 8 candidats sur l0 sont
Le top des langages rejetés. Les raisons sont multiples : pro-
recherchés fil non adapté, compétences annoncées
Pour la quatriéme année consécutive, mal maitrisées, salaire demandé trop
JavaScript est le langage de program- élevé. Oui certains profils sont difficiles
mation le plus demandé en 2022. Prés ci trouver, mais la difficulté de recrute-
de la moitié (48%) des recruteurs du ment n'est pas uniforme. Si le télétravail
secteur tech interrogés recherche des s'est brutalement imposé, il ne faut pas
développeurs maitrisant JavaScript. pour autant exiger du l00 "iii télétravail.
Java et Python suivent en deuxiéme et Dans nos métiers ce n'est pas possible.
troisiéme positions, comme en 2021. Rien ne remplace la rencontre avec les
Java continue d'étre trés demandé é équipes, pour s'intégrer réellement a
cause du patrimoine existant et de la lientreprise ou encore quand vous étes
partie mobile. 59% des développeurs en mission. un moment donné, il faut
interrogés par Codinlåame ont déclaré voir le client...
savoir coder en Python et un peu plus
de la moitié (55%) maitrisent Java. Quelles tendances pour
TvpeScript ne doit pas étonner. ll arrive Fannée? profils : lle de France, Auvergne -
cinquiénie et il est le langage par défaut Nous ne vovons pas de grands change- Rhéine-Al pes, Occitanie.
d'Angular. ments pour 2022. JavaScript, Angular,
Java, Crit, mobile resteront des valeurs Yerba : une étude
Si les développeurs déclarent connaitre süres. PHP est un peu en perte de vites- montre-t-elle
C++, PHP C, les entreprises embau- se, sauf sur les solutions de tvpe CMS. Fépuisement des
chent beaucoup moins de compétences Pvttion confirmera sa bonne forme. équipes ?
sur ces langages. Kotlin reste trés en Cété salaire, nous ne vovons pas beau- Êpuisements, tensions, charges de tra-
retrait dans l'étude. coup de changements. vaii, télétravail, turn-over; burn-out, etc.
Si on lit l'étude de Yerba, il v a de quoi
Sur les framevrorks, nous ne vovons Les freelances peuvent profiter de la étre pessimiste et changer immédiate-
pas de réelles surprises pour les pro- demande soutenue de développement. ment de métier. Cette étude porte sur
chains mois et sur les compétences Un verra une fois de plus les métropoles 36 200 salariés du monde lo tech répar-
recherchées. La popularité de JS et régions les plus attractives attirer les tis dans 33 pavs.

program merccam
Selon cette étude, 42 “iii des salariés
veulent il envisagent de changer de Aux ÉTATS-UNis
société dans les six mois. C'est le pour-
centage clé iii retenir. Pour la plateforme
LES SALAIRES S'ALlGNENT
Yerba, il s'agit de la preuve d'un SUR LES LANGAGES si RARES si
accroissement du burn out. Comment
serait-on arrivé o cet extréme il Les La comparaison avec les États-Unis est toujours délicate a cause d'une
explications avancées sont multiples : fiscalité trés différente. D' Reilly a publié en septembre dernier son 2021 Data l'
multiplication des heures de travail, Al Solory Survey. Ce qui peut étonner est une valorisation forte de langages
stress lié au projet, tensions dans les que l'on voit asser: peu en France :
équipes, délais de plus en plus courts, + l?0 000 S i' an : Scala, Go, Rust
effets néfastes du télétravail, équilibre + l50 000 S : Ubjective-C, Erlang, Julia, Swift, F#, Clojare, Lua, Groovy,
vie pro et vie perso difficile o trouver. Ruby, .lava

L'explosion des demandes en services Par contre des langages tels que PHP C#, Java se situent entre l35 et
numériques liés au Covid a nécessité 149 000 S l' an, ce qui est déja un excellent salaire. Une partie de cette
une nouvelle charge de travail et une dynamique peut s'expliquer parla dynamique autour de l'lA, du machine
adaptation rîi marche forcée des équipes learning.
o cause des confinements. Le téiétravail
imposé a un double effet que l'on oublie Pour CodinGame, le salaire moyen en France pour un développeur sera de
beaucoup trop souvent : le télétravail est 47 600 S. Les Etats-Unis, la Suisse et le Canada sont en téte. La Belgique est
une bonne chose pour limiter le temps devant la France au salaire moyen.
de tmnsport et le stress des transports,
mais l'effet inverse est la difficulté pour
des personnes a siorganiser et a télétra- dans les équipes rfi cause des problémes dientreprise et comment on valorise les
vailler avec rigueur. Et c'est l'un des tra- de recrutements, pésent forcément sur équipes.
vers du télétravail : se laisser submerger. les développeurs et les équipes tech-
Un cadre strict est nécessaire pour éviter niques. C'est un réel probléme : des Une des difficultés pour les équipes RI-i
les dérives. Mais surtout, nous sommes délais toujours plus courts, des spécifi- et les entreprises est que la motivation
isolés. L'Homme, par définition, est cations nébuleuses, manque de cohé- varie selon chaque personne.
sociable et a besoin de son environne- rence des équipes, un tech lead ou un Basiquement, vous avez deux grands
ment. Et le télétravail o l00 iii niest pas CTD dépassé ou ayant du mal o struc- profils :
une bonne chose pour les personnes et turer son action, etc. Quand une entre- I le développeur passionné qui aime la
Quelques les entreprises. prise n'a pas les effectifs nécessaires, le techno et le code,
annonces de risque est compensé avec les équipes il le développeur qui voit le job plutot
recrutements l.'étude met en avant la confusion vie existantes. Mais cela démontre aussi comme un job alimentaire : il fait le
privée et vie professionnelle et que nous des problémes d'organisation. travail uniquement pour le salaire, le
Groupe SII : l 950 ne prenons pas asset de temps pour reste ne l'intéresse pas.
postes dont lr'3 Paris et nous. Cet argument n'est pas nouveau. L'autre stress vient aussi de la technolo-
2f3 en province. Profils Cela fait 20 ans que nous entendons la gie elle-méme. Un développeur peut Le turn-over est une question récurrente
trés variés l.Net, PHP méme chose 1 comment couper de son étre démotivé par des projets peu inté- notamment en ESN : la concurrence est
Devûps, Big Data, etc.) activité pro. lnsidieusement, on répond ressants, des projets routines, sans forte pour trouver les boris profils. Le
rfi des mails, on termine un petit déve- technologies innovantes. Ce désintérét turn-over a toujours existé et existera
Sopra Steria : 3 B00 loppement, et on se retrouve rfi travailler peut aussi venir par le manque de cohé- toujours. Cin estime que la rotation des
postes dont B0 iii jeunes le soir, et le week-end. Le télétravail n'a sion des équipes, le manque de stimula- développeurs et des équipes techniques
diplomés. 20 it-Îi sur fait qu'accen1iuer le phénoméne. tion entre développeurs, le manque de varie entre 20 et 30 ii, ce qui est énor-
Paris, B0 *iii en province participation rfi des meetups, confé- me. Plus le pourcentage est élevé, plus
Du stress, des tensions il L'occélération rences, é des projets open source ou il y a un probléme structurel dans l'en-
Blue Soft : l30 postes du numérique dans les entreprises, la encore pour écrire des contributions o treprise. Ce turn-over ne concerne pas
multiplication des projets, la tension Programmecl. Sans ouiîilier, la culture tous ies profils.

progrommeacom

Coding
COCIIIÎQ iJOUl'llGy Jourrieu
Dans le cadre d'un projet de lin detude chez Epltech Technology - ecole deirpertise
informatique et dinnovation - nous avons monte une equipe de 9 etudiants dévelop-
peurs aiin de creer un jeu video qui permet de s'initier à a programmation des le co e-
ge : Coding Journey. Apres plus de deux annees de reflexions et de developpement, le
jeu est aujourdhui accessible en ligne gratuitement pour toute personne souhaitant
entrer dans iunivers du code. Figure 'I

Coding Journey, Par la suite, il va découvrir progressive- re. Notre idée, qui a été pensée entre
c"est quoi ? ment les variables, les boucles, les septembre et novembre 20l P, a donc
Coding Journey est un jeu PC (dispo- conditions et bien dfautres notions. été de diffuser nos compétences par
nible sous Windows, macCÎiS et Linuxi Via l'interface principale du jeu, il aura une solution ludique accessible o tous,
qui permet d'apprendre o coder dans méme la possibilité de personnaliser y compris aux plus jeunes. lfidée est de
différents langages de programmation son environnernent, en achetant des faire comprendre la logique et les
(C, PHP et Python sont disponibles éléments, et équipant ses personnages, notions fondamentales pour que cha-
actuellement) ou travers de différentes en installant des langages de program- cun puisse avoir les bases en program-
aventures. Chaque aventure se focalise mation, en changeant dfunivers de mation, sans avoir lfimpression de tra-
autour d'un théme fun langage au un jeu--- vailler pour les acquérir.
ensemble de notions spécifiques] et se En jouant rfi un jeu d'aventure dans Certes, des solutions similaires existent
divise en plusieurs niveaux dans les- lequel il réalise des quétes (affronter (Scratch, CodinGame, Human
quels le joueur apprend o controler son des ennemis, collecter des objets...j, le Resource Machine, ou plus récemment
personnage via du code. joueur assimilera des notions de code Swift Playground et Twilio Quest), mais
Concrétement, un niveau a pour but tout en s'amusant, c'est lo tout l'intérét notre ambition a été de créer une solu-
d'enseigner une notion de code, en de Coding Journey. Figure I tion qui soit avant tout un jeu et dans
commençant par lfexpliquer au joueur lequel les joueurs ont la possibilité
puis en lui demandant de la coder Quelles ont été les dfapprendre des langages utilisés par-
dans un éditeur dédié. Groce rfi diffé- motivations du projet' Ê tout en entreprise.
rentes aides et documentations, le En tant que développeurs, nous nous
joueur doit coder les actions de son rendons compte aujourd'hui que la Comment le projet a-t-il
personnage pour atteindre des objec- programmation est une compétence été développé ?
tifs. Par exemple, dans les premiers nécessaire dans tous les domaines. Dans un premier temps, nous avons
niveo ux du jeu, le joueur découvre Dfa prés notre propre expérience, nous développé un prototype en décembre
comment déplacer son personnage o avons pu constater que les jeunes 2019, pour montrer la faisabilité du
une position donnée en utilisant une nfopprennent pas o coder assez tot, et projet, et pour pouvoir le faire tester o
fonction et des coordonnées X et `r'Î Fapprentissage est souvent trop scolai- quelques personnes. iiious avons alors

program me.1.cam
développé un mini-jeu 2D en C++ ce utilisateur. Nous avons passé les Le point le plus important pour la suite
avec les frameworks Qt et SFM L. Le mais suivants o améliorer le jeu selon réside en la refonte de plusieurs
joueur pouvait alors programmer les les demandes utilisateurs, afin de sortir aspects techniques du jeu. En effet,
actions de son personnage en pseudo- une version l.0 en novembre 202). nos connaissances sur Unity ont évolué
code ou avec des rr workflows ii dfac- et nous voyons maintenant que des
tions dans 5 niveaux. Quel a été le résultat aspects sont o améliorer par souci de
Nous avons pu le montrer; et méme de la premiére version performance. Nous pensons principa-
remporter 2 concours de pitch groce o du jeu ? lement rfi la gestion des données des
ce prototype. En tant que vainqueurs, La premiére version a pu étre publiée différents personnages, des univers ou
nous avons été soutenus pour repenser en novembre 202). Elle est disponible encore des niveaux en eux-mémes.
l'architecture du projet, son gameplay en ligne gratuitement sur notre site cela viennent s'ajouter quelques amé-
et son identité graphique. internet, nous prenons toujours en liorations coté Ul et UK pour une utili-
Le développement du jeu en lui-méme compte les retours depuis lors. sation plus simplifiée qui fournissent
s'est déroulé entre mars 2020 et mai Cette version a été trés bien reçue tout de méme les outils nécessaires
2021. Nous avons réparti notre équipe auprés d'Epitech Technology. En effet, pour progresser.
ou sein des différents modules o déve- nous avons remporté Epitech Nous prévoyons également des ajouts
lopper : le jeu (désormais en 30, en Expérience - concours final de tous les de contenu tels que de nouveaux lan-
C# et Unity), le site internet (dont la projets de fin d'étude Epitech gages ainsi qu'un langage visuel par
derniére version est en `v'ueJS et en Technology - au niveau local sur la "bloc" (similaire o Scratch), un mode
Python Flask), le serveur ld'abord en ville de Lyon. Nous faisions alors partie multijoueur; ou encore la possibilité de
PHP Symfony puis en C+ +) et enfin des l5 finalistes (sur un total de l09 jouer plusieurs personnages en méme
l'éditeur de niveaux llogiciel interne projets) o pouvoir participer au niveau temps. Nous envisageons aussi une
également en C# et Unity qui nous national. Coding Journey est le seul version mobile pour les joueurs qui
permet de construire le contenu du projet de la catégorie rr Games i - o souhaitent jouer réguliérement, afin
jeu). Pour étre le plus efficace possible, avoir accède rfi la finale d'Epitech dfapprendre en étant dans les tra ns-
nous avons travaillé sur des sprints de Expérience 2022. ports par exemple. De nouveaux
3 rfi 4 mois, en intégrant et en [vidéo Epitech Expérience] : niveaux vont voir le jour afin d'apporter
déployant les différentes parties au fur lrtt|is:l'r'tirvriv.yirirtirlri'r.i:rrmr'tvriti:h`i'ii=_|rW2i.lLsbj_1ris des approfondissements ou de nou-
et o mesure via de i'intégration canti- velles notions. Nous penchons aussi
nue avec lfoutii GitLab Cl. Qu'est-ce que le projet sur un nouveau "mode de jeu" qui ne
[vidéo Beta] : a apporté ? Et qu'est-ce nécessiterait pas dfécrire du code,
htt|rs:h'v.-.*rw.i_.rirutulirr.i:rrmi'wrrti:li`iv=Fltl-llil2j|-lil]l.l qui est envisagé pour mais se présenterait sous la forme d'un
la suite ? qui:-=: où chaque réponse déterminerait
Comment le projet a-t-il Si nous espérons que Coding Journey lfaction du héros dans son aventure.
été testé et amélioré ? apporte beaucoup aux joueurs en Concernant ie site internet, il va égale-
Afin de pouvoir tester le projet signifi- termes de connaissance, il nous a ment étre repensé, avec notamment
cativement, nous avons assuré une apporté encore plus rfi nous, étudiants l'ajout d'une documentation et d'un
communication autour de Coding meneurs du projet, sur de nombreux forum qui permettra aux joueurs de
Journey sur les réseaux sociaux, par aspects : nous avons pu progresser s'entraider en se donnant des astuces
email, sur notre site internet, et par le techniquement en apprenant de nou- de code par exemple.
biais d'Epitech qui nous a notamment velles technologies, mais nous avons Les mises o jour seront publiées et par-
permis de présenter le jeu sur des progresse aussi grandement sur des tagées sur nos réseaux pour continuer
salons et des journées portes ouvertes. aspects fonctionnels tels que la gestion de recenser des avis. Enfin, nous vou-
Nous avons ainsi publié une version globale d'un projet llfidéation, la prise drions aussi concrétiser quelques parte-
béta en juin 2021 et l'avons fait tester de besoin, la faisabilité, la communica- nariats afin de pouvoir développer
o une trentaine d'utilisateurs de tout tion, le financement...) et aussi la ges- d'autres aspects du projet final,
profil. Certains étaient des jeunes tion d'équipe ien sachant que nous comme le suivi des joueurs par des
débutants (notre cible principale), et avons passé une année de développe- professeurs. Une fois que cette dernié-
dfautres des développeurs plus expéri- ment en étant répartis dans o pays dif- re phose sera achevée, nous pourrions
mentés qui ont pu nous conseiller sur férents pour notre année dfétude rfi officiellement publier le jeu sur des pla-
la maniére dont le code est enseigné l'étranger). Ce sont des compétences teformes telles que Steam.
au sein du jeu. qui nous seront o tous trés utiles dans
Le jeu a été bien accueilli par les boto- nos métiers futurs. Contacts
testeurs, plus de ÎSÊÉ d'entre eux ont Maintenant que nous finissons nos Email : ei|r.iiirtling.jirirmey@i;|mriil.arm
trouvé cette solution pertinente pour études, une partie de l'équipe va se Site internet : irnvw.i:iiiiinjijtrumiry.fr
apprendre la programmation. En concentrer sur sa professionnalisation Facebook 1 wwiii.i*.irroriiiirilr.r:rrrii.i'jiirimi'ryi:rriiing
revanche, cette version o été critiquée en entreprise. Cependant, nous
pour des manquements en termes sommes tout de méme quelques-uns o
d'explications et en termes dfexpéifen- continuer dfavancer sur le projet.

progrommeacom
1, 2, 3, ce sera toi le Scrum Master l
Que nous soyons adeptes de lagilite sous chacune de ses formes, ou bien comp ete-
1 J" "Is

ment nevvbee, nous avons pu taire face à des pratiques bien étranges lors de la mise en
place d'equipes dites «=-= agiles Parce que les frameworks connus, ou bien les adapta-
tions que nous en faisons ne définissent pas une méthode à suivre a la lettre, mais plu-
tôt une proposition de bonnes pratiques, certaines organisations dequipes se
cherchent, tätonnent et parfois, se perdent.
L'identité d'équipe : pour quoi ? Ce sero toi Tech Leod !
Un exercice que Foifectionne quond je débute mon observo- Certoins retours d'expériences m'ont morrtré que ço morche :
tion dons une mission d'occompo-gnement ogile, que ce soit d'obord le mien. Dons les équipes qui se connoissent et qui
en tent que formotrice, scrum moster ou focilitotrice, c'est de fonctionnent bien ensemble depuis un certoin temps, le
me foire une idée de l'identité de |'équipe. Ctn se rend trés Tech Leod ioue ce role de focilitoteur o merveille : il est réfé-
vite compte de son existence ou non, en fonction de lo cohé- rent dons les bonnes protiques de développement, de tests, il
sion observée, de l'entroide et de lo légitimité qu'e|le se est souvent le peer-reviesver privilégié, il posse un certoin
donne oux veux des outres équipes : forme-t-elle une unité temps o prendre de l'informotion en dehors de l'équipe... ll
bien précise et visible Ê' o-t-eile des hobitudes qui lui sont o donc un role qui le prédestine o étre le liont de l'équipe ou
propres - un coté Teoms tous les lundis motin ou des sucre- besoin.
dises réguliéres (voir lo définition lotine de dulciolum, NDLR] F' Ensuite, outour de moi, i“'oi eu Io chonce de rencontrer et
Méme nouvellement formée, une équipe en est une lorsqu*'el- d'ossister oux conférences de Boptiste Lecocq - Scrum est
le portoge quelque chose de commun molgré les spéciolités une fenétre (ou bien un mur) - rÎ1 Tours JUG Èfll 9 et de Lise
de chocun et les désoccords constructifs que l'on peut ren- Quesnel - Leod Dev, 3 ons d'xp, et olors F' - cl lug
contrer. Summerfiomp 202l.
J'oi eu lo chonce, dons une expérience récente, de porticiper J'oi littérolement odoré lo foçon de toire de Boptiste dons son
o lo créotion d'une nouvelle équipe, et c'est donc por lo que équipe en tont que TechLeod : en mode routine, le role de
]'oi commencé notre oventure commune : nous créer une focilitoteur n'ovoit pos de gronde utilité, et il étoit donc
identité. On se donne un nom (qu'on ossumero !}, on pousse v obsorbé v por chocun des membres de l'équipe, hobitués
po rfois iusqu“`é se choisir une moscotte oo une identité visuel- oux process et interoctions hors équipe de réolisotion.
le, on explique nos préférences, nos différences, le "qui oime Cependont, il se ré-ottitroit ce role lors d'occosions bien pré-
foire E|uoi ii", mois surtout, on se définit des voleurs com- cises comme |'orrivée d'un nouveou développeur por
munes : lo quolité possero por les tests, on évitero d'uti|iser exemple. Tiens tiens... pour reconstruire l'identité diéquipe,
tel outil pour nous fociliter lo vie, on écou- ses voleurs, son "qui toit quoi et comment ?", ovont de reve-
tero cette chonson o choque bug en nir o lo v routine s.
n | recette... et untel sero notre focili- Un des points que ie me suis noté de lo conférence de Lise,
A I* toteur. c'est que sous l'étique1te de TechLeod pouvoir se cocher bien
VT des roles dont... celui de focilitoteor, de cooch et de formo-
Un focilitoteur ? teur. Mois ce qui me reste en téte, c'est que tout le temps
î pos besoin ! possé ovec ces cosquettes, rÎ1 gérer les problémotiques de
Le besoin d'un focilitoteur n'est l'équipe, -:Î1 mettre en relotion les bonnes personnes, -:Î1 (re-}
pos toujours évident, mois il v o des définir les bonnes protiques et les oxes d'oméliorotion, c'est
situotions qui porlent d'elles-mémes : outont de temps non possé sur le mointien de son exper-
s'il siogit d'une nouvelle équipe qui se ren- tise technique et de so prise de recul sur les décisions
contre pour lo premiére fois et qui n'o jomois trovoillé techniques o prendre. olsílm-'E111'
ensemble ; si l'équipe est composée de nouveo ux venus dons De ces retours, i'en tire un point de vigilonce vitol 1't5:.uuiiiHi-'
Finformotique, sons connoissonce de Fogilité, sons référence pour l'ovenir des équipes sous ce mode de fonc- HE ,_, CDHLH
o un Tech Leod possible pour les orienter dons les bonnes pro- tionnement : lo gestion du temps et des priori- ¿,.,1-¿;,;ç__,,,,,_
tiques de développement; si l'équipe en ploce depuis long- tés en est offectée. ll me semble qu'iI est donc Îa.s JE-J
temps et qui fonctionnoit trés bien jusque-lé, foit foce o des nécessoire d“'en ovoir une certoine expérience
problémotiques jomois rencontrées... Lo question d'ovoir un pour ne pos se noyer ni devoir foire un choix
focilitoteur ou non prend tout son sens. cornelien entre deux cosquettes differentes. ümwü Fμcicinvanc
Mois méme dons ces cos, j'oi vu le refus cotégorique. rr ll n'v
o pos besoin de scrum moster, un TechLeod et une équipe ço Un role tournont Ê
suffit s dixit le cooch. Alors d'occord, pourquoi pos, o condi- J'oi rencontré plusieurs sitootions différentes qui ont foit
tion que io situotion dons l'équipe et tout outour de l"équipe noitre le role tournont du focilitoteur ou sein d'une équipe.
le permette. Lo premiére situotion étoit que, foute de scrum moster dédié,

prog rommesccom
personne ne vouloit prendre ce role en chorge, tout le monde quond il est nécessoire de détendre les cordons de lo bourse
troinoit des pieds. Alors, un peu comme quond personne ne pour investir dons une solution ou une compétence, quond lo
veut prendre en chorge le support niveou 2 du suivi de pro- connoisso nce historique de l'équipe est un otout : le monoger
duction, on décide de foire tourner le role de Scrum fvtoster. est souvent lo personne clé sur qui compter. J'oi d'oilleurs
Spoiler olert : ço ne morche pos. Cest comme demonder o moi-méme un role de formotion et de cooching du monoger
un boulonger d'ossurer 2 jours sur 6 lo fobricotion des pétis- dons cette oide opportée oux équipes.
series de so boulongerie. Assurer une nouvelle spéciolité est Je nioi, en revonche, jomois croisé le cos où le monoger étoit
tout o foit possible, o condition d'étre volontoire et motivé. le scrum moster de Féquipe. Je seroi trés intéressée por des
Sinon, vous finisse: por vendre des pétisseries déjo toutes retours d'expériences dons cette situotion. Si le Scrum Guide
foites l ne mentionne pos le monoger, il ne l'effoce pos pour outont.
Lo seconde situotion foit opporoitre une réelle envie de Mois je connois un outre codre ogile qui, por so description
découvrir le ré-le pour plusieurs personnes de l'équipe. Lo, précise de toutes les rr coses v- de l'entreprise dons son pos-
c'est différent : il v o de l'intérét pour le role, et une envie soge é l'o-gilité é l'échelle, effoce littérolement le role de
d'opprendre. Celo peut morcher é condition de bien spécifier monoger. Vous vovex duquel je porle F* Clui : SAFe.
lo priorité des roles : si je suis o lo fois développeuse bocl-: et Je me souviens d*'ovoir lu dons un ropport du Cigref de 2018
Scrum Moster penclont mo semoine d"rtérotion, est-ce qu'on (*) que it Lo diffusion de l'ogilité o l'échelie de lientreprise est
est d'occord que je privilégie mo cosquette focilitonte ou ser- stimulée por [...] le chongement de positionnement du
vice cle l'équipe plutot que lo cor- monoger qui devient un leoder-serviteur v. Tiens, tiens, exoc-
rection d'un bug de lo semoi- tement le role ossocié ou scrum moster dons le Scrum Guide
ne derniére F' Cor oui, (rr The Scrum lvloster is o servont-leoderfor the Scrum Teom. vl.
cette situotion peut trés taguåmil Alors que penser d'un monoger qui devient Cooch fivgile d'un
souvent orriver et il fttrlfi troin 5›'~'~'tFe dons lequel se trouve l'équipe dont il reste mono-
tout ropidement sto- """ ger sur le popier ? Pour moi, celo cosse toute légitimité o le
tuer sur le comporte- -s former et coocher dons son role ouprés des équipes v. So
ment rfl suivre pour double cosquette monoger il cooch de troin, peut le position-
ne pos se perdre. J ner tontét comme oidont, focilitont, guidont les équipes pour
trouver leurs propres solutions, tontét comme commonditoire
Et le Product oujuge.
Owner ? il Alors si je pouvois foire un souhoit pour toutes les équipes de
connoït |'ogilité ! réolisotion (de développement ou non), c'est que le monoger
Gui, mois c'est une fousse bonne idée dons le temps. devroit oider le scrum moster de l'équipe,
Roppelex-vous le Scrum Guide : -v The Product Uvvner is mois il ne peut devenir l"unique réfé-
responsible for moximising the volue of the product resulting rent focilitoteur de l'équipe, ou
from vvork of the Development Teom. v versus v. The Scrum risque de foire preuve d'injonc- JIIÎ..

Moster is o servont-leoder for the Scrum Teom s. Quond le tions controdictoires.


_.

premier est focolisé sur l'oméliorotion continue de son pro-


duit, le second veille o l'oméliorotion continue de l'équipe et Alors, un scrum Hi
de ses bonnes protiques. Ce n'est pos toujours ontinomique, Moster dédié ?
mois lorsque lo décision de choisir entre donner rftu tout début de l'histoire
encore plus pour le produit et protéger d'une équipe, c'est préféroble.
l'équipe des clernondes inutilement Gn découvre les concepts, leurs inté-
pressontes, c'est toujours bien de réts, leur possible mise en ploce dons |'entre-
pouvoir compter sur deux per- prise où l'on se trouve, on est peut-étre mérne lo prerniére
sonnes différentes pour orriver ct équipe fonctionnent en mode ogile : il fout un ogile teom
:ej des compromis occeptobles et odvocote qui souro rossurer l'équipe, lui donner une légitimi-
pour l'équipe et pour le produit. té et lo foire noviguer ou sein de l'entreprise.
Por lo suite, si l'entreprise prend goût o l'ogilité, foire multi-
Quond le monoger s'en méle plier les équipes ogiies peut posser por le rr porroge v d'un
Dons les entreprises dons lesquelles Scrum Moster sur deux équipes, ou bien en foiso nt monter en
j'interviens et dons les formotions que compétence sur ce role un équipier de lo premiére heure,
je donne, j'oime présenter le monoger pour posser ct d'outres équipes it occompogner.
comme un focilitoteur. S'il est rorement LE Dons tous les cos, porler oux équipes et prendre en compte
focilitoteur interne o l'équipe, il est celui vers qui j"oime leurs retours sur ce réle est primordiol. Et je vous le donne en
me tourner quond les oxes d'oméliorotion identifiés priori- mille : il existe un moment porfoit pour échonger sur le sujet,
toires ne peuvent pos venir de l'équipe elle-méme (i'outo- qui o lieu régulierement et qui o pour but de foire grondir
orgonisotion c'est bien, mois tous les leviers ne se trouvent l'équipe ogile... `v'ous vovex ? lo rétrospective !
pos ou trovers des compétences de Féquipej. Quond les blo- *https:r'Jvrtvvr.cigret.irftvμl'tvμ-contentftrploadsfïlltiifl2r'[Iigrei-Agile-at-
cus se situent entre équipes qui ne se porlent pos ou plus, state-llllise-en-oeuvre-agilite-echelle-enoeprise-ElllH.pdl

|ÎII'CflQ|'1'.Îll"I"II"I"lE"I.r'Zl1Î.If'I"'t
Le monde de l'art et les NFT
ll y a peu de temps, un de mes amis, artiste -
touche atout, m'a fait part de son projet de
creation artistique, s'appuyant sur les NFT.
Chaque artiste est a a recherche de notoriete, de
"'h. .rf .rf

nouvelles experiences et d'inspiration.


CharlyHo* fait partie de ces artistes. ll me donne
aujourdhui lopportunite de l'aider dans son
l
l
projet,_ et jecris ces lignes, pour lui apporter mes
*Chorfy Ho : https:ffchorlyho.con*u' CU n se l l S -

Les NFT posse, et c'est fini. Personne ne pourro chonger ces informo-
Derriére cet ocronvme se coche un concept puissont, une révo- tions, et, si vous ne les communique: cr personne, personne ne
lution est o nos portes. Non Fungible Tokens : des jetons infor- pourro les trouver.
motiques infolsifiobles, qui s'oppuient sur une technologie crvp- Je conseille ces 2 Wollets vr Mobile v :
togrophique : Io Blockchcrin. *I https:.U'rrto'nv.cuinhase.rxrrnr'rrvallet
Lo blockchoin, en résumé, est une technologie informotique de I lrtttrs:r'r*'rtretsrnaslr.itrrf'
bose de données décentrolisée, dont choque tronsoction est tro-
cée, publique et info lsifioble. Les Blockchoirrs[l] les plus Le Courtier Crypto
connues sont octuellement le Hitcoin (BTC} et l'Ethereum Ce concept est bien connu des troders qui souhoitent investir en
[ETH]. Dons cet orticle, nous porlons des NFT odossés o bourse.
l'Ethereum. Lo premiére étope consiste cr trouver son v Broker xr, il vous per-
Un NFT généré depuis lo blockchoin Ethereum est un octif mettro de réoliser des tronsoctions sur Io ploce de morché de
numérique, ou un Àrtffoct numérique. Ce jeton est unique, il est votre choix : Vous lui donnez des ordres, povex des frois, échon-
enregistré sur une blockchoin et peut-étre échongé, comme gex des octions ou des devises.
n*importe quel jeton de lo blockchoin. Ce qui foit so voleur, c'est Les Broker Crypto fonctionnent sur le méme principe. Les plote-
son unicité : Lo blockchoin du foit de so noture permet de créer formes suivontes sont simple d'occés :
ce tvpe de jeton. *I irtt1rs:J'r'rrrrnrv.eturn.comr'tr.f'
Cest un peu comme les piéces de monnoie : certoines piéces I* irttps:Jr'vrrvvv.cuinhase.crrmffrr'
v porticuliéres v ovec un défout ou une erreur de froppe, s'orro- 1 httpstcfrrthintrortrt.r:ornrfusr'enishrruticrvptrrf devoteam
Creotioe Tech
chent cr prix d'or ouprés des collectionneurs.
Lo technologie NFT permet de créer des Àttention, 3 choses ršr retenir:
EI Àrtefocts uniques, d'identifier leurs outeurs, et I' Pensez o tronsférer vos crvptos régulierement sur votre porte-
de retrocer leurs histoires. feuille, sons celo vous ne pourrez pos créer de NFT. Le compte,
que votre broker met o votre disposition, est réservé ou troding.
Les étcrpes dons lo générotion de NFT I* Vos crvptos ne sont pos vr physiquement s sur votre portefeuille
Les NFT sont donc des jetons de lo Blocltchoin Ethereum. Et crvpto, ils sont sur lo blockchoin, votre portefeuille vous permet
comme toute créotion sur lo blockchoin, pour en créer ou en oche- d'v occéder (tout comme votre corte bleue : votre orgent n'est
ter; il for.rt étre copoble de réoliser des tronsoctions sur celle-ci. pos dessus, il ed o lo bonque...)
l Vos crvptos, sont votre motiére premiére pour les NFT : ils vous
Le Wcrllet Crypto permettent de -r pover v lo créotion ou l'ochot de NFT.
Un portefeuille de devises Blockchoin représente votre porte-
feuille numérique. ll vous permet de créer un compte sur lo Lo plcrteforme cle générotion du NFT
Etlockchoin choisie. Lo derniére étope dons lo générotion de NFT est le choix de lo
Ce compte, dés son enregistrement, peut recevoir des crypto- ploteforme.
monnoies. ll est trés difficile de retenir por cceur son numéro -:le Un I*-IFT est un jeton sur lo blockchoin. Mois créer un NFT est
compte, lo pluport des ploteformes sur internet vous focilitent so difficile. Les ortistes, les designers, les créoteurs de contenus et
gestion. méme les experts informotiques, dons leur écrosonte mojorité,
Le point essentiel o retenir, c“'est que vos identifionts ne doivent ne seront pos copobles de générer un NFT sur une blockchoin.
jomois étre perdus, sous peine de voir vos Crypto bloquées Er Des ploteformes ont vu le jour pour remplir ce role.
jomois sur lo blockchoin. Lorsque vous ovex créé votre projet, votre Artifoct, il vous foudro
Penser tft les gorder o l'obri des regords, et o ne pos les perdre. le v tokeniser sr, le tronsformer en un NFT, que vous pourrez
Lo blockchoin n'o pos de systéme de -s récupérotion des identi- ensuite enregistrer sur lo blockchoin.
fionts s. Vous crée:-: votre portefeuille, vous recevez un mot de Votre projet peut étre une invitotion o un événement, une expé-

prog ron*rn*rex.con*r
rience gustotive, un vovoge offert ou possesseur de votre NFT. I* Beeple"s Crossrood : 6,-Er millions USD.
Vous pouvez égolement créer des gifs onimés, des imoges 3D, I* Evervdovs : the First Sûüû Dovs - 69,3 millions USD.
ou de courtes vidéos...
En foit tout -x objet rr numérique peut étre tronsformé en NFT, et Sources :
tout objet phvsique peut étre ossocié cr un NFT. Le v controt rr httμs:r'r'vvvrrr.v.lrrser:hrrs.lrlindustrie-servir:esfservices-consoilsr'tjuatre-chiflres-
entre l'ocheteur d'un NFT et son créoteur; est enregistré sur lo pour-corrrprenrlre-corrtmerrt-les-nlt-tlrrμent-le-marche-rle-|trrt-r:orrtrrm|1ortrin-
blockchoin et ne peut étre folsifié. 135111111
Un exemple porlont est celui-ci : Lorsqu'un vendeur s'engoge o httμs;Htl1e|1ressfree.r':rrntr'les-ventes-de-nlt-pourraient-attrrinrlre-1?il-rtrillitrrrls-tle-
vous envover une montre Breitling[2] signée, cr l'ochot d'un NFT, dollars-rlisi-la-fin-de-21121!
il est rr controint rr de vous l'envover, sous peine de voir lo htt|rs:lltr.cnrptorrr.rrrrrs.r:onrr'nerrvsr'lrt.Lrrrerr:he-rles-jetrrrrs-non-turrgihles-nlt-a-triple-
confionce de ses futurs ocheteurs disporottre. en-21121]-etrrrl-B3tli'.lttrn
Les ploteformes NFT vous permettent de tokeniser votre créo-
tion : Conclusion
*I* Votre fichier est envové sur lo ploteforme de votre choix. Lo Les NFT sont é lo croisée de plusieurs mondes : Crvptogrophie,
pluport d'entre elles, vous permettent d'enregistrer des fichiers ortistique, expert informotique, geek, Stort-up, finonce...
de 10 lvto o 40* Mo. Pour les ortistes, cette technologie permet lo monétisotion des
'I Votre NFT posséde de nom breux ottri buts stondord : Nom de ceuvres d'ort numériques. Ils peuvent percevoir de meilleurs
l'outeurj. dote de créotion, emoil du créoteur; le type d'objet, et revenus : ils peuvent méme recevoir une redevonce, choque fois
du contenu fx unlockoble xr lentendex un contenu disponible qu'une de leur créotion est revendue lsur le morché secondoirel.
uniquement pour le possesseur du NFT). Lo ploteforme Dpenseo permet d'ocheter des collections de Gif,
Quelques ploteformes connues : de cortes o collectionner, de tobleoux virtuels, de peinture, de
*I* https:l'l'opensee.iul' lopins de terre virtuels, d'oppr;1rtements l
*I* https:llrarihle.comf Tout peut étre tronsformé en Token ; lo pierre onguloire de ce
*I httjtszfltrrurrrlatinn.-rrppl' morché est lo confionce : confionce dons lo robustesse de lo
I* https:Hsuperrars.r:r:rm.*' blockchoin, dons lo tronsporence des tronsoctions et des
-* ltttps:llv.r.vvr.veve.nrel' controts, confionce entre les ortistes et leurs nrécénes.
Pour conclure, les Nl-_l' présentent un double ovontoge : tirer un
Le morché des NFT profit, une reconnoissonce de son trovoil, mois égolement un
Quelques chiffres intérét spéculotif.
* En 2018 : Totol des ventes de NFT - 41 millions USD. Les tronsoctions sont réolisées en Ethereum, celo permet de
I* En 2019 : Totol des ventes cle l"~|l-TT - Î0 millions USD. voloriser son ir portefeuille de cnvptomonnoies x- et de revendre
*I* En 2020 : Totol des ventes de NFT - 340 rniliions USD. ses ETH ou meilleur cours.
*I* En 2021 : Totol des ventes de NFT - Plus de 9 milliords USD. Attention cependont : Les NFT doivent étre portés por un projet
*I 40 'lis des ventes mondioles sont réolisées en Chine en 2021. solide, dont l'objectif de rentobilité doit étre déconnecté de lo
I* Le morché des NFT représente 15,8 milliords de dollors, soit voleur du cours.
1,2 *fé de lo copitolisotion totole des crvptos (en 2021). l_'ospect spéculotif ne doit pos prendre le pos sur lo viobilité du
projet.
Sur le morché 10 “fé des troders octifs réolisent 85 'fis des tronsoc-
tions et concentrent 97' 'lé des octifs numériques. ll vout mieux
Total des ventes NFT(en Valeur) se renseigner ovont de se loncer !

Pour oller plus loin


rflfll Passons Er lu pratique 1
Por un oprés-midi de jonvier, Chorlv et moi créons le lei NFT de
so golerie.
Un cofé noir et sucré, un Wollet lfloinbose dons notre cos), et
nous nous connectons cr lo ploteforme Glpenseo -
lvl
onsrLIED httμs:Hoμertser1.iol_ Figure 1

' _ Î 1 lÎ '.I lí Î 1 r

Lo créotion d'un Token NFT n'est pos difficile :


lo ploteforme vous guide, les octions sont simples, 3 clics suffi-
-11 to 41:' sent pour occomplir notre but. Figure 2
2 È 21119 ÊUÊU ÊDÊÎ

Meilleures ventes de 2021 Pré pcr rer votre CEuvre


I* CrvptoPunlt #521? : 5,59 millions USD. Ce qui prend du temps c'est l'octe de créotion :
'F Sove Thousonds of Lives : 5,23 millions USD. Choisir i'c.euvre rfr tronsformer en Tol-ren. Aprés quelques débots,
'I' Stov Free ,rl Edvvord Snovvden : 5,-il millions USD. nous décidons que les tobleoux Goldorcrk, remplissent le mieux
'F Crvptopunk #521? : 5,59 millions USD. les critéres de son projet : des tobleoux encodrés de belles
I* Eleeple's Dceon Front : ét millions USD. dimensions (100 x 130), les certificots d'outhenticité sont préts,

progromme:-r.con*r
Frgure 1
H opensearcr lcrgrrr rr-terre - i-errrctrtt

-" `Il.J'| 1|"r'.| 1-F' l.I.=' l'|'|' PIII' 1.|I"LJ II. l' .-'r I.='| "I-|"-

Connect ro crypto apps


igq Explore Stcrts Ftesouroes vnth one rzlrcl-r
Try the Coinberse
Wellet extension *four pnvete I-rev rs
s ored sec-urelv
You need on Ethereum vvollet to use Dpenâecl
Works v.-rth Ethereum
Ccrrtmect rvr it crrtre r_1-fr:-r_rrc1*crrlfr|:::-l›_=* wcrllet pr" rclr-er cv crecrte cr ne ** crrte
Polvgon and more

HE-Iflfiflflgk l-*“n| ul'rr

Colnbulo Wullot
“Hs E
'F
.rr .I “ J. Il-JT'
*Fx 'rrlrtollolflorr noor Dr scan to connect r- r;Ft-
I"||'JF-
""r n
I.Îo:r't;*osc- l.*"v'c1. et
Fortm-otlr.:
_ I .ri-3:, 4%
shovv more optrons
Er 'tri-1 r'

express sens erssourees ensure Q


GGLDUHAH

II ' '

Create New ttern l `- '*-.*roI-r-o r-

Im-r:|g-o 'rr'nrlo1:r-,rlru-:I-o or3ül.rlo-|:l-ol

.v'*-*' Frl-co Hlltrcrqr*

5. /×
H*fi'|'|II'

*IÎ1-*üI. IÎiI*Dlïr.ù.1ri
I- Ll-inn-gs

Figure 2 = ““^“'P"'“*
Il CI*'l'l-lvl

lceuvre o un coroctere nostolgrque et un peu Geek


Les NFT portent de nombreuses rnformotrons que l outeur peut
fournrr L J _ 1 ,H '_ Figure 3
Ces ottnbuts ossocres o notre Tolren sont precreux, rls construr
sent un lren entre le collectronneur et l ortrste
Et vorlo opres ovorr posse les etopes, notre Tolten est drsponrble ' [1] http .*'r'rrrrvrv2 asserrrlrlee-nationale lrlstatrcf1filcumnrissionslllfinancesflrloclrcharn-svntlrese prit
F191-WE 3 [2] https llvrrvvv ltrertlrng com

Fuflehnnk Github : Uflmflfflflfifllfilüfllfi

Twmr @pmgmag DROGR(_1mm@ZI ses anim.-r = programme: com

friture nvrw- r*›vrvv ä ttt;îtttrtttttt:rate*r";tt;ttrri.,i.r,-...


|1ÎEGlÎAl1'[lMl *to "r
l'lr"IEI
DROGl3_mC2j
üünœrmμ rs--....
FIlEEr.urn:: "rv 'l""!l-tl*|'I'Lr:-*ro

l3:Ft I
'“'I"'fl-='-I-|r'rr|-rr
-l""'1""IlrtI-I*1-Ir*=r-|-||-r|
En
-,,._,_*|", est ,,:rr
.if
Ir """" HEIHIIÎEIIIEIII 1-131-
-fd Î' Î'
SAVD +5 mu Illll-rrsr
tnmμμnugnhufl l-
HI-d Het IE"| -[If
cr
üP*E'nShr l*II*l*.μ,"r:||-,-|¿

“"*i'*;I-=-'**"'r!'-I-=:-1μor
Opera : un langage et un
interpréteur pour effectuer
des opérations arithmétiques
mathématiquement exactes
Dans les applications informatiques habituelles, on utilise les nombres entiers et les
flottants natifs qui sont de tailles fixes. Pour cette raison, la precision des calculs est
limitee. En pratique, les approximations qui en resultent sont admises et suffisantes
pour des calculs ordinaires.

Pour effectuer des opérotions orithmétiques exoctes, les 'I Les bronchements et débronchements conditionnels sont
nombres utilisés por Dpero sont représentés et mémorisés en possibles.
tont que nombres rotionnels, en froctions réduites, ovec pour *I Les boucles itérotives sont possibles, une boucle peut en
numéroteurs et dénominoteurs des entiers de toilles oussi contenir d'outres.
grondes que nécessoires. Ce logiciel exécute les sept opéro- 'I' Dn peut lire dons un fichier une suite de voriobles. Un peut
tions suivontes cr deux opérondes : élever cr lo puissonce, oussi souvegorder toutes voriobles connues.
diviser, multiplier, soustroire, odditionner et comporer ovec I' Le coroctére # débute un commentoire dons les fichiers de
cet ordre spécifique de priorités. De plus, il reconnoit oussi commondes.
outomotiquement, d'o prés le contexte de son emploi, l'opé- I' Lo vorioble lost contient une copie du dernier résultot obte-
roteur "-” ovont un seul opéronde pour utiliser l'opposé du nu précédemment cr son utilisotion.
nombre désigné. Pour une expression orithmétique plus com- I Les fonctions reste, pgcd, ppcm, hosord, invmod, expmod,
plexe, l'emploi des porenthéses est reconnu et effectué. Les pnps, locteur et prem sont spécifiquement utilisobles ovec des
exponentiotions qui sont irrotionnelles sont détectées, op- voriobles ou des expressions ovont pour voleurs des entiers..
proximées et signolées et celles qui sont impossibles sont
signolées. Un premier exemple
Le nom Dpero o pour origine une obréviotion qui signifie : Voici un exemple simple dlutilisotion de l"interpréteur Dpero.
opérotions orithmétiques mothémotiquement exoctes. Soit le fichier verif.txt suivo nt.
Dpero o deux modes de fonctionnement : l'exécution d'un fi-
chier de commondes et le mode conversotionnel, ou n = 36648261il-i5ll3B[lI23s56s1'43s3t13EB5s33llEtlti'tlti'5s5riifilir5i3?tl13li.s943ñ44?3
interoctif. l_'interpréteurj, dons les deux modes d'utilisotion, ef- p = rllliillsstllls
fectue les colculs écrits en longoge Dpero. Il est disponible r:| = E931ri5-l531tlr5t]t1i'3.l1titl[l1Hrl12ti9513'i3tiB5[l1ris1li4B?951911523291'
pour Windows et Linux et fonctionne dons une fenétre en pemp
mode console, pemq
Les boses du longoge sont : r = rot
'I' Les constontes odmises du longoge qui sont soit des valeur n-v
nombres entiers soit des nombres décimoux.
I Choque vorioble représente un nombre rotionnel ovont
pour voleur une froction réduite ovec dénominoteur positif. Si on lonce Dpem en mode conversotionnel et si on écrit lo
Les nombres entiers positifs ou négotifs sont reconnus : commonde : exec verif.txt, on obtient un offichoge qui
leurs dénominoteurs sont égoux o 1. montre que les nombres p et q sont premiers et que n et v
I* Toutes les voriobles sont du méme tvpe. Elles sont toutes sont égoux. En chiffrement RSA si on connoit lo clef publique
locoles dons le fichier de commondes ou elles sont utili- d'un outeur pour découvrir so clef privée il fout trouver les
sées. ll n'existe pos de voriobles globoles, ce qui focilite deux focteurs premiers d'un nombre entier ovont plusieurs
l'emploi des fichiers de commondes. centoines de chiffres décimoux. 'Dpero n'o pos io possibilité
I' Les voriobles qui sont des données ou des résultots en de foire une telle décomposition, mois il peut trés focilement
orguments d'un fichier de commondes sont indiquées et en effectuer lo vérificotion, si on le souhoite, c'est ce que foit
utilisées pour celo. Lo tronsmission se foit por copie. cet exemple. En supplément, le fichier de commondes rso.txt
'I Un indice colculé ovec un entier; exemple x[nj, permet disponible dons lo publicotion de Dpero est un prototvpe de
d'utiliser un tobleou de voriobles. chiffrement RSA pour en montrer son utilisotion dons l"envoi
'I' Un fichier de commondes peut en oppeler un outre. d'un document chiffré.

progrcrmmex.con*r
Les instructions du lcrngcrge Opercr me Dpero. Quond un fichier de commondes en oppelle un
Les sept opéroteurs binoires ont pour svmboles : 2 r' 2 - + si outre, il fout conserver les voriobles du fichier oppelont pen-
3:- et ils ont cet ordre de priorités. Lo division por U est pos- dont l'exécution du fichier oppelé. Pour cette roison, le nom
sible. L'instruction i = lili' définit l'infini positif etj = -1 fil défi- des voriobles gérées por lo closse listero comporte un préfixe
nit l"infini négotif. Voici deux expressions volides : 1l2*3,"4 défini por le niveou dlexécution du fichier de commondes en
résultot : 318 et : 3'113-2] 2 2 résultot : 108. l_“'ordre des prio- cours, ce qui ossure l'utilisotion locole de ses voriobles
rités des opéroteurs est imponont pour écrire, et pour lire, les internes. Et lo closse Trons gere por copie lo tronsmission des
expressions orithmétiques. Si Ilexpression comporte plusieurs voriobles entre le fichier de commondes oppelont et le fichier
fois le méme opéroteur, le colcul est effectué de gouche vers de commondes oppelé. Quond le fichier oppelé est terminé,
I ' "
o drorte. trtre d -1' exemples, on peut noter que .. 1+3 'alt' -il _
- ses voriobles sont supprimées.
3*«=l+1 = 13 et : 32323 = 2223 =196B3 et non pos
3 2 2Î" = 2625597484982. l_'utilisotion des porenthéses per- Pour interpréter une expression orithmétique, il est hobituel
met de modifier l'ordre des colculs effectués : ll +31*-tl = 16 d'utiliser l'intermédioire de lo nototion polonoise inversée.
et: 321*-l+l) = 15. Dpeno ne l'utilise pos, il effectue directement le colcul du
résultot. Quond l'expression comporte des porenthéses, il en
Uexponentiotion, exemple : x = o2n, o un fonctionnement vérifie l'équiIibre et ensuite il remploce le contenu des poren-
porticulier. En effet, si n = plq est un nombre rotionnel ovec théses les plus internes por une vorioble temporoire colculée
q 1*- 1 il v o des cos ou le résultot x est un nombre rotionnel pour celo, Ceci permet, en utilisont lo récursivité du C++,
et dloutres cos où il est irrotionnel, exemples : (41912 (3112) = dlévoluer seulement des expressions sons porenthése : pour
812? et 2 2 (11121 est irrotionnel. Si le résultot est irrotionnel, 3*(8-212 2 on colcule o = B-2 puis 3*o 2 2. En foit, les noms
Dpero colcule une opproximotion du résultot et offiche une de ces voriobles intermédioires sont obtenus outomotique-
indicotion de cette exception. ll v o une fonction qui permet ment, exemples : drtl, 6-tt2..., et ne peuvent pos étre en
de choisir le niveou de précision de cette opproximotion. De conflit de nom ovec les voriobles de l'utilisoteur.
plus, quond le résultot n'est pos un nombre réel, exemple :
(-1 1 2 (112), un messoge signole ce cos éventuel. Enfin, l'uti- Pour évoluer lo voleur d'une expression sons porenthése, il fout
lisotion sons précoution de l'exponentiotion peut provoquer respecter lo priorité des opéroteurs utilisés. Pour l'opéroteur -
un encombrement de lo mémoire centrole quond n et o sont ovont un seul opéronde, il v o deux troitements différents selon
trés gronds, ce qu'il fout éviter. les cos d'utilisotion. Dons le premier cos, exemple : -123 ou -
v, on effectue le chongement : 'U-123 ou D-v. Dons le deuxié-
Le monuel de l'utilisoteur explique les 33 instructions du lon- me cos, exemple : 3*-v on effectue le chongement temporoi-
goge pormi lesquelles on trouve, por exemple, les quotre sui- re 3*{-v) qui deviendro ensuite 3*t en roison du troitement
vontes. Lo commonde "exec" lexemple : exec fichier.txt o, b, des porenthéses. Aprés celo, l"expression finole o seulement
c) pour indiquer en existence et voleur les données et en exis- des opéroteurs ovont deux opérondes. Si on o plusieurs fois
tence les résultots d'un fichier de commondes que l'on sou- le méme opéroteur dons une expression, le colcul est effectué
hoite foncer. Lo commonde "boucle" notifie l'instruction qui lo de gouche rîr droite.
précéde puis si lost est positif continue en séquence et si non
elle vo chercher l'instruction qui suit l'instrr.rction "retour" qui D'outres exemples du longoge Opercr
lui correspond. On peut imbriquer une "boucle" dons une Voici un progromme en longoge Dpero qui vérifie lo démons-
outre. Lo commonde "focteur" [exemple : focteur n) colcule trotion de Zogier qui prouve que le nombre 15? est congruent.
un focteur premier d'une vorioble ou d'une expression entiére
qui o 16 ou 1? chiffres décimoux ou moximum pour étre per- tt Ce fitltier de commandes montre que 151' est tongnrent.
formont. Lo commonde "copier" (exemple : copier n,r1 est li lln nombre entier n est tongnrent s'iI existe 1 nombres
nécessoirement lo premiére instruction effective d'un fichier lirationnels a, b et ttels que of + If = d et n = abll
de commondes. En complément de lo commonde "exec" elle ti Voir : ittlpsv1'ft.vrilripedia.orglrvilrilllombre__tongtuent
désigne les voriobles en données et les voriobles en résultots de ii Zagier a dérrrootre que 151' est tongrueot
son fichier de commondes et lo tronsmission se foit por copie. ti lloir : ttttp:llserge.mehl.free.frlthronolÎagiechtml
il Le triplet la, b, tl approprié pour n = 151 est :
Lo progrommotion en C+ + de l'inter- a = oBo32'1stlt1182o435ü5121 154014113«tl1íJ51'št.12111ñt-1931131113
préteur Opercr tr: rtl13-tll1519121'1'1ti1rl93332t13l21rîtirti555ti5l31'1416131196111
Le code source de Cipero est progrommé en C++ et n'o n = 22111113511'?[lrl3?›l5965l91*il55?513l1'š*"ûl51'*l=flli?l1 61194-3412041
qu'une seule dépendonce : lo bibliothèque GMP qui est dis- tl = 39123Èl22689238595E›B»t12553511119611153511111164-5121-1311
ponible ovec les outres fichiers "".cpp. Dpero ne met rien dons t=nM
le systéme d'exploitotion, il n“'o pos d'instolleur, il est portoble, al = a*a
on peut l'utiliser dons une clef USB. bl = b*b
Trois closses C++ porticuliéres sont importontes. Lo closse t1 = ttt
bigRo effectue le troitement orithmétique des nombres rl1={a2 +b1l-t2
rotionnels ovont lo toille oussi gronde que nécessoire. Lo n = lo*lrl.lIi
closse listero est une liste doublement choinée servont o il Comme prévu on obtient : dl = tl et n = 151'
gérer les voriobles utilisées pendont l"exécution du progrom-

prog rommesccom
Voici un progromme écrit en longoge 'Dpero qui colcule une
ropi = last
suite d'opproxirnotions du nombre pi ovec une formule due cr
garder rnpi-out.txt
Jeon-Henri Lombert jusqu'é obtenir n décimoles exoctes.

tite programme en langage flpeta taltule une suite dapptoximations de pi


ft jusqu'a telle ayant t detimales exactes aver la formule suivante. f[22j = 51359350521?413l2fl634813901904803? est
apr:-rrrr+r'rrs+rrrs+s'rrr+r'rrs+...r}r}r Fopproximotion finole du nombre pi obtenue ovec le pro-
ft Pour lutiliset, on peut ecrire : gromme mpitxt présenté ci-dessus. Pour 32 décimoles
tio = 16 exoctes on ouroit obtenu :
ft exet mpi.txt n f[»fl3] = 3220024011451*?604649'§l033?6'?2952593B913231"
ir Ensuite oo peut lire le fithier mpi-outtxt obtenu pour afficher 1 20005184001 5-*-198221265338382222S'20Î9lT5
il toutes les variables utilisées oit la derniere a la précision demandée.
illrlais on peut aussi ecrire seulement: Voici une imoge de lo console Windows ovec un petit
ft lite mpi-out.txl exemple d'utilisotion du longoge. Figure 1
ft raleut f[i]
fl Et on verifie que l'approximation finale a 16 décimales exactes. Utiliscttions du Icrngoge
ropiett Dpero est public et grotuit- Lo publicotion comporte lo docu-
f[1] =3 rnentotion ovec un rnonuel de l'utilisoteur, le code source
fl2l = lillo pour Windows et pour Linux, des commondes de compilotion
delta = 1121-flil du code source, Fexécutoble pour Windows et celui pour
ici Linux et de nombreux exemples d'utilisotion.
delta :r- flilllllcv:
boucle Dpero est disponible cr https:,"lgithub.comfpgl10fDpero. Son
i= i+1 exécutoble pour Windows est obtenu ovec Visuol Studio et
lr=i celui pour Linux est obtenu ovec gcc- Un peut oussi compiler
d =f1"lr-1l+lr"ill2"t+1l le code source ovec dloutres compiloteurs C+ +-
lr::*-1
boucle ll fout noter que les espoces dons les instructions Dpero ne
lr= lt-1 sont pos effectifs souf, bien sür, dons les commentoires. Ce
d = lltk-1l+tA2ld qui permetd'écrireoussi bien : n = 3 + 4*5 que : n=3+-fil“"5.
retour En effet, ou début de Finterprétotion de l'instruction les
l[i] = tlld espoces sont supprimés, souf dons les commentoires. Dons
delta = f[i]-fji-1] un fichier de commondes, l'indentotion des instructions n'est
si delta cil pos indispensoble, mois c'est une disposition commode. De
delta = -delta plus, pour lire et effectuer lo derniére ligne effective d'un
retour fichier de commondes il est nécessoire d'ojouter ensuite une
enti flil"'1t1i'r ligne vide. Les exemples ci-joints montrent cette nécessité.
Figure 1
E.. Dpero o trois instructions pour effectuer des entrées ou des
E1:'r.F'ierte*r,|*v1es Logicielstüpetaïbeckup'l.ess.ais`t,opeta.exe -
sorties. Lo commonde "noter" [exemple : noter fichier.txt1
11"'-.

permet de noter dons un fichier toutes les voriobles octuelles.


Si le fichier désigné existe déjé, llorchivoge est refusé. Lo
commonde “gorder” fexemple 1 gorderfichiertxt) permet de
gorder dons un fichier toutes les voriobles octuelles. Si le
fichier désigné existe déjé, il est remplocé. Lo commonde
“lire” [exemple : lire fichiectxtj permet de créer ou niveou
octuel les voriobles définies dons ce fichier, ce qui est trés
commode quond on souhoite foire divers essois ovec les
mémes nombres.

Dpero o divers concurrents- Le premier est le C+ + ovec lo


bibliothéque GMP où se trouvent les entités mpq_t. ll v o
oussi les divers longoges formels, exemples : lvtople, lVrotLob
ou Eigenmoth. Dpero est moins puissont, mois dons bien des
cos il est plus commode. Et le code source d'Dpero comporte
des éléments pouvont servir cr d'outres développements ono-
logues.

"H"

prog rommeacom
Louons en web 3.0
avec notre Dapp!
Les progres recents et rapides du langage Solidity associes a apparition d outils open-
sr. .r .rr '-. 1 1

source comme -=-= truffle ›› «=~= ganache ›› permettent de créer un nouveau type d'applica-
tion qui fonctionne sur un réseau distribué communément appelé «=< decentralized
application =›› ou dapp. Liapplication n'est plus hébergée sur un serveur centralisé, mais
sur un reseau décentralisé peer-to-peer.
Cet onicle vo présenter les étopes de développement d'une 0n pourroit se dire que donc, ovont de pouvoir utiliser une
opplicotion de iocotion d'opportements décentrolisée s'op- opplicotion, il foudroit téléchorger ilensemble de lo block-
puyont sur Ethereum. Bien sürg, il ne s'ogiro pos de véritobles choin. Celo présente l'ovontoge de ne pos s'oppuyer sur un
opportements, mois d'imoges de ces opportements l En l'oc- serveur centrol unique qui pourroit disporoitre d'un jour é
currence de jetons non fongibles (NFT. -x non-fungible lloutre. Por contre, celo nécessiteroit beoucoup de ressources
token rr 1. Cet orticle s'odresse é ceux qui ont des notions sur sur votre mochine from, disque dur).
les blockchoins et leurs opplicotions, mois voudroient en ovoir ll y o quelques moyens de gorder l'opplicotion décentrolisée
une opproche concréte. tout en rendont l'interoction ropide et focile, ovec rVretor`v1osk
por exemple, qui peut s'instoller en tont que plugin sur votre
1) En quoi une DAPP est-elle novigoteur. fhtl:rrs:r'fmetsmaslr.ior'1 |'r| E T pj |tr| ,rt 3 |(
différente d'une opplicotion web
clcrssiq ue? 2) Les outils :
Dons une orchitecture client-serveur web clossique, un novi- Le code de l'opplicotion permettont dlocheterj, vendre ou on-
goteur se connecte rîr un serveur, ossocié rîr une bose de don- nuler est oppelé v controt intelligents.
nées bien protégée cr |'o bri des intrusions. Les données sont ll s'écrit en longoge Solidity. Similoire é JovoScript, Solidity est
donc cochées chez l'hébergeur. Les tronsoctions qui se font typé stotiquement. ll prend en chorge l'héritoge, les biblio-
entre le client et le serveur sont donc cochées elles oussi. théques et les types complexes définis por l'utilisoteur, entre
Dons le réseou Ethereum, les tronsoctions qui se produisent omms
sont empoquetées dons des blocs et choque bloc est lié ou Le compiloteur de Solidity, oppelé solc, permet de générer de
bloc suivo nt. Cette série de blocs liés qui contient toutes les l'Ethereum Byte Code et ensuite de déployer du rr bytecode rr
données de tronsoction constitue lo blockchoin. dons lo blockchoin. ll y o d"outres olternotives cr Solidity mois
Ainsi, dons le cos d'une vente, d'un remboursement ou d'un Solidity est de loin le longoge le plus populoire pour le déve-
litige, choque tronsoction entre ocheteurs et vendeurs sero loppement de controts.
enregistrée sur lo blockchoin et est occessible é tous. Dons l_'imoge illustre un controt déployé dons l'EVr'v1 : Figure 2
une Dopp, lo bose de données devient occessible publique-
ment et en toute sécurité por tout le monde, ce qui permet Donc, en résumé, lo blockchoin stocke vos données, stocke
d'envisoger de posser toute sorte de controt sons ovoir besoin le code et exécute égolement le code dons l'EVM [Ethereum
d'intermédioire tout en ossuront lo fiobilité de lo tronsoction. Virtuel Mochinel.
Pour s'ossurer que tous les nceuds du réseou ont lo méme Pour construire des opplicotions web dopp, Ethereum est livré
copie des données et pour s'ossurer qu'oucune donnée invo- ovec une bibliothéque jovoscript protique oppelée web3.js
lide nlest écrite dons cette bose de données, Ethereum utilise Figure 1
un olgorithme oppelé rr Proof of Work xr (égolement connu
:Ê: 1 UIPPWIH Deppwee
sous le nom Ethereum Miningj. Cet ospect, qui est trés gour- .Browser Etterrreer
mond en ressources et donc cotostrophique pour l'environne-
ment, est destiné é disporoitre ovec lo future version 2 .......... '1-

d'Ethereum. Kintsugi, le premier testnet permettent é lo l'l2l-l'I*'1l-*"'5~'-551'-ll"*"i!*'îfÎ'l1"l I-l`l`l'rlLrlGE*r-'5.f..le've.'tt-r.':tipt


'r'r'*rI=s'tlI wrrests
communouté de tester Ethereum 2.0, est disponible depuis l"*"lI'-'li'-5-i""*"l'i" Ir'ir'ep-Seflfer
décembre 2021. Lo dote du 22 juin 2022 o été ovoncée por
@Superphi.t, le consultont en sonté communoutoire de lo
choine Beocon d'Ethereum.
Evtvl - Errrereurn vrrtoet rrtect-une j 2 E'-rrvr - Ethereum 'rrrnoet Mecrvne
Pour comprendre le fonctionnement, prenons por exemple le |
I
I
I
Il
I
I
-r
-r
' I
| II Il I -r

cos d'un client web. Choque novigoteur client communique erocxr-retordre-eeroexs-retours eroerr-lperoete-eeroexs;-ar›eroer4i
ovec so propre instonce de l'opplicotion. Quiconque qui veut r
I
I
l
-r
-r

interogir ovec un Dopp ouro besoin d"une copie compléte de EEl*cltBl"rE.'t1 Blcl*t.1I*usl'l-Ert'I
È Î Î _ _ I I I I Î _ _ _ È I I I _ _ _ È I I I _ _ _ È I I Î Î _ _ _ I I I Î _ _ _ È I I Î _ _ __ t _ _ _ _ I I I _ _ _ _ I I I I _ _ _ ÈI'

lo blockchoin en couts d'exécution sur son ordinoteur; télé- Ethereum Depp - lnetence 1 Ethereum Depp - Instance 2
phone, etc. Figure 1

prog rommesccom
Figure 2

conçue pour déployer des contrets, développer cles epplice-


tions et exécuter des tests.
Figure 3 I Compilateur etheneum N Vous pouvez télécherger Geneche en ellent sur httptffbttlllelra-
mewotlcoomfganaohe.
ll est oussi possible d'utiliser Truffle Develop, le blockchoin
personnelle intégrée de Trufile, ou lieu de Geneche, pour se
Eloclt 1 Block 2 Eilcclr. 3 posser de l"interfece grephique et oller plus vite. Vous devrez
dons ce ces modifier cetteins peremétres notemment le port
sur lequel fonctionne le choine de blocs pour edepter le tuto-
riel t`:r Truffle Develop.

Il-Jul-IJ
contr-acts
migrations ne-de_ src tfit box-img-lg.
_
box-irnr;|- bsconfig. LIIEEI-tsr. peclrege. package- truffle- 3) Créetion du projet Truffle ré l'eide
trne-r:lr.r1e-s. png s.tn.png json json loclcjson config js.
d'une Truffle Box:
Figure 4 ll fout tout d'obord créer votre répertoire de trevoil et se plo-
qui se connecte cr votre nceud blockchoin. Vous pouvez donc cer dedons 1
simplement inclure cette bibliothéque dens votre fre mework mkdir egenceLocetion
JS fovori (vue, express, reoctjs, engulerjs etc.) pour construire cd egenceLocetion
l'interfece de l'epplicetion. Pour le développement, en peut pertir de zéro , utiliser des ID
Une outre coroctéristique importonte est llespect finoncier de en ligne (https:rVtemitr.etheteu|tr.otg) ou utiliser des trufflebox. Les
le ploteforme. Dés que vous commencez é utiliser une depp, trufflebox sont des configuretions pré-éteblies permettent de
vo us utilisez un compte boncoire intégré, dons un portefeuille démerrer trés ropidement. Beeucoup sont proposées, ovec
orÎ.r vous stockez de l'orgent (en Ether - le monnoie utilisée différents fremeworks de front-end comme fluidity, reoct, vue,
dons Fécosvstéme Ethereum). express... Vous trouverez oinsi sûrement votre bonheur !
Les tronsoctions sont poyontes, en un sous muftiple trés foible Dons cet enicle, nous ellons nous contenter d'utiliser xpet-
de l'éther oppelé ges. shop rr et de |“'edepter e notre besoin.
Tout dlebord, il feut télécherger le boite:
Remorque : pour deventege de boses sur ethereum, vous truffle unbox pet-shop
pouvez lire le tutoriel sur trufflesuite. Figure 3
(httμs:lAvmv.ttotflesuite.oorafguidesfetlteteom-oveorievr) Remorque : Une outre commonde d'initielisetion utile est
rr truflle init rr, qui crée un projet Truffle vide sens exemple de
2) Cehier des cherges et instelletion controt inclus. Pour de plus emples renseignements, veuillez
des outils : consulter le documentotion sur le créotion d'un projet.
Votre ogence imrnebiiiére dispose de 16 opportements situés (hl111s:flvn'ev.trrrfllesuite.cortr."tlocsfttulllefgetting-statlerlfrzteating-a-project J
dens un immeuble nouvellement construit, que vous voulez
mettre en ligne, en utilisent une opplicotion décentrolisée. ll Cette boite comprend le structure de bese du projet oinsi que
ve folloir créer une depp qui essocie une edresse Ethereum le code pour l'interfece utiliseteur.
ovec cheque eppertement. Notre trevoil consiste é rédiger le Permi les fichiers de configumtion, on trouve truffle-config.js
controt intelligent et le logique initiole pour son utilisotion. Le qui permet de modifier les ports. bs-config.json sert pour le
structure et le style du site Web seront fournis. config urotion du serveur web de test.
ll fout tout dlobord instoller le fromework opensource truffle. Le contenu du dossier est olors le suivent (Figure 4) :
D'eprés ses outeurs, truffle est "un environnement de déve-
loppement, un codre de test et un pipeline dlectifs pour les gg_zr_tcq§1sl_; Contient les fichiers sources de Solídity pour nos
blockcheins utilisent le mechine virtuelle Ethereum lEVrVr], smert contrects. ll v e ici un controt importent oppelé
visent cr rendre le vie en tent que développeur plus fecile". lVligretions.sol, dent nous perlerons plus tord.
Truffle s'eppuyent sur node.js, il vous foudre instoller ou prée- migretionsj : Truffle utilise un systéme de migrotion pour
leble node.js et git: gérer les déploiements de contrets intelligents. Une migrotion
sudo opt-get instoll node.js f httpscffnodojs.otglttldownlosdt' ) est un controt intelligent spéciol supplémenteire qui suit les
sudo opt-get instoll git chengements.
Une fois ceci instollé, on peut instoller truffle 1 ät,'_: Contient des tests JevoScript et Solidity pour nos
npm instoll -g tn.rf-fle (l'option -g permet une instelletion glo- contrets intelligents.
bele sur votre systéme) fi,|l_: Contient le front-end du site.
Pour plus dlinformetions : l1l111s:r'r'tr'rt.'r."r'rf.1ttrlllrssuitt-'r.ct1n1 node modulesl : Contient les libreiries de node.js utilisées
Pour vérifier que É est bien instollé, tepez truffe sur un dens le projet.
terminel. En ces d'erreur, essurez-vous que vos modules npm
sont ejoutés é votre chemin. 4) Réduction et compilotion du
ll seroit possible de développer votre opplicotion directement controt intelligent
en réel ovec vos chers ethereum, meis il y o une eutre solu- Un controt est sembloble é une closse en longoge objet.
tion moins chére :). C'est ici qu'opperoit Ggggghe, une On définit donc ici le contrer rr Locetion rr dont lo donnée
blockchoin personnelle Pour le développement d'Ethereum principele est un tobleou d'edresses oppelé opportements.

progremmez.com
Comme indiqué précédemment, Selidity est un lengege typé 5) Migretion vers une blockchoin lecele :
stetiquement, ce qui signifie que les types de données des Nous sommes meintenent préts o créer notre propre script
contrets doivent étre définis, comme les cheines, les entiers de migrotion l Une migrotion est un script de dépleiemerrt
et les tebleeux. Les tebleeux contiennent un type de données destiné cr modifier l'étet des contrets de votre opplicotion, en
et peuvent evoir une longueur fixe ou vorioble. le déploçont d'un étet 6 l'outre.
De plus, Solidity o un type unique oppelé eddress. Les Pour le premiére migrotion, vous pouvez simplement
"address" sont des edresses Ethereum, stockées sous forme déployer du nouveou code, mois evec le temps, d'outres
de voleurs de 20 octets. Les edresses peuvent étre peyebles migretions peuvent déplocer des données ou remplecer un
(héritege dens le diegremme ci-dessous), ce qui ne sere pes controt per un nouveou.
utilisé ici. Cheque compte et controt intelligent sur le block-
Note : En sovoir plus sur les migretions dons lo documentotion 11uffle.
chein Ethereum e une edresse et peut envoyer et recevoir des
jhtttrs:r'r"rvvrr.v.trtrltlesuitaoonrfdoosfttrrtflefgettiog-startedlmnnintr-migrations)
ether vers et depuis cette edresse.
Le troitement des NFT n'étont pes le sujet ici, nous nous En plus du fichier 1__initiel__migretion.js, ejouter
contenterons ici pour nos opportements d'un tobleou de 16 2__deploy___contrects.js Figure 7.
edresses Ethereum. Figure 6 Avent de pouvoir migrer notre controt vers le blockchoin,
De plus, les voriobles publiques ont des méthodes getteur nous ovons besoin d'une blockchoin en cours d'exécutiorr.
eutometiques, un getteur ne semit donc pes nécessoire s'il Pour ce tutoriel, nous ellons utiliser Geneche, une blockchoin
n'y eveit qu'une seule edresse. Cependent, dens le ces d'un personnelle pour le développement d'Ethereum que vous
tebleeu, une seule clé est renvoyée vers une seule voleur. pouvez utiliser pour déployer des contrets, développer des
L'interfece utiliseteur doit mettre é jour tous les stetuts epplicetions et exécuter des tests. Figure B
Figure 5
d'edoption des onimeux. Cest pourquoi une fonction
getAppertements, qui renvoie le te bleeu entier, est présente. Les contrats sont similaires artx classes "“
Puisque les opportements sont déjé déclorés, nous pouvons dans les langages orientés objet. Chaque
rxcontraetxr contrat peut contenir des déclarations cle
simplement les retourner. Le type de retour est spécifié Location variables tl'état, de fonctions, cle
I l I 'II 1 I I I
metlilicateurs de fonctions. tl'évé-nements.
comme 16 edresses mémoire. Le mot clé rr memory s indique d'erreurs, cle types de structures. et de. types
+Ieue(apartltl urnt) urnt addressμñl
-I- -I-

llemplecement des données pour le vorioble. Wfimimempmemenmo


-I
II ll

I-I
Eåtrglrgrátàes contrats peuvent hérrter tl autres
Le met-clé rr view s dens le décleretion de fonction signifie
.F

que le fonction ne modifiem pes l'etet du controt.


Le diegremme de closse de le pertie beclz-end ressemble e *npm to Il-__.-Q.

celui de le Figure 5..

_ grations
Le fonction loue : +code. bytes memory
Premier errivé, premier servi l Elle permet e celui qui demende -r-codehash: bytes32 +last_completett_migration: uint
de louer un eppertement et renvoie l'epertld correspondent. +call{memory: bytes] . Eq- +resttictetI{)
+r:lelegatecall[memore3r bytes) +setCornpIeter:l(completetl: uint)
Dons Solidity, les types de peremétres de fonction et de sortie +staticcall(merrrory: bytes]
doivent étre spécifiés. Dons ce ces, nous ollons prendre un
opertld (entier) et renvoyer un entier. l_'instruction requirelj
permet de s'essurer que le peremétre opertld est bien cem- payable
pris entre 0 et 15. IIIIIIIIIIIIIIIIIIIIIIIIII
+transfer{amount: uint25t1}
Si l'lD est dons lo ploge, nous ojoutons olors l'odresse qui o +send[amount: uint25o)
foit l'eppel e notre tebleeu opportements.
I_"edresse de le personne ou du controt intelligent qui e eppe- Figure 6
lé cette fonction, est indiquée per msg.sender. Pour un 1' Locaticn.sel Ix: UU .

exemple plus évolué, il foudroit bien entendu ejouter un pragma soltdtty >=B-E.1ü;

tebleeu de loueurs eu centret et s'essurer que l'eppertement contract rorrtser {

n'est pes loué l rr Tableau de 16 adresses ethereun


addressjloj public appartements;
Une fois toutes ces considéretions prises en compte, il reste
tunctton iouelutnt vrrr!'*rf'“Id] public returns tutntl {
é créer le fichier Locetion.sol dons le dossier contrects et é le require{appartementIe›=e åfl appartemenlIe<=15 1;
appartementsjappartementloj = msg.sender;
compiler ovec : truffle compile Figure 6 return appartementio;
Cette compilotion génére du rr bytecode rr ljsonl destiné cr le Jifunction geteppartementsli public vieu returns l addressjiol memory] {
mechine virtuelle Ethereum (EVM). 1
function iibereluint nopn*tcrev'1d] public returns [uintl {
Deux fichiers jsen sont créés : l.ecetien.jsen et 1 f
function achetetuint nppa*terevî1d} public returns tuintl { -
r'l'ligretion.jsen. 1
function vendsfuint spporteccr'tel public returns luintl {
Meintenent que nous evens compilé ovec succés nes 1
1 jbash [El Ê ft-
contrets, il est temps de les migrer vers le blockchoin.
|-"' Fetching soic version list from seic-bin. Attempt #1
ZI* compiting .fcontractsrLecation.so1
'JP compiling .rcontractsrfligrations.sot
.`-“-* Artitacts written to rhomeftfondratfoureaurprjrdeppraeenceLocregenceLocrbuitdrcontracts
:tr- compileo successfully using:
solc: 0.5.1e+commit.fc410E3fl.Emscripten.ciang

progremmez.com
Figure T ,.,., , _¿,, .tc-trs .î_c`opl-:;›;.*_co:'*tr-2ctsjs EE! -:=.=.**:s:*ec-.*.*rr-- EE] experts 3:- gas price: 211 gwei
1 var Location = artifacts.requiref Location“1: 'H

:s value sent: ll ETH


2
ppdule.exports = function f oeoloyer 1 { :rr total cost: 11110569816 ETH
deployer.depleytLocation1;
LH-Je
lud } :rv Saving migration to chain.
Figure 0 1:- Saving anifatts

3:- Total cost: l1.lIlt1569Ei6 ETH

2_deploy_tontracts.js

Eleployiog 'Adoption'

Vous pouvez voir les migretions exécutées dons l'ordre, sui-


vies de quelques informetions liées e cheque migrotion.
Figure 10
Frgure 9
Dn peut remerquer que l'étet de le blockchoin e chengé
dons Geneche. Le blockchoin montre meintenent que le bloc
octuel, euperevent 0, est meintenent -tl. En outre, elors que
le solde é l'origine étoit de 100 ether; il est meintenent infé-
Irrnerrrerrrc Hli' F'rlrTH rieur, en roison des coiits de tronsoction de le migrotion évo-
wear curluss stlng dash duuelc advice hasard wealth gravity uhlμ mystery μrcblc"r mdf* 525 in FFÎPFSPPFÎ 1"dP^
qués précédemment.
6000555 0A1AHÊÎ fiEOLhl HEÉ
Vous evez meintenent écrit votre premier "smert contract" et
0tt0.30100lIlf*E0'0lI13C53EEE350-E2*l|20rlllr0-EI0501132000- 100.00 ETH E1 E1 fi-jp
déployé dens une blockchoin locole- Il est temps d'interegir
evec votre controt intelligent pour vous essurer qu'il fesse ce
qu'on lui demende.
ll est possible de tester votre controt de meniére interective,
ou en utilisent des libreiries spécielisées telles que
rr-rrrrer-rte-toc HH FI-TH
wear cartons sllne dumb eeubl c advice hasard xcallh gravity weso myslcrv preblc= 2600 f"2 52 füééïfühfli 'P021 https:ffwrvw.chaijs.conV ou mochejs.org, meis pour ne pes elour-
xcotttss EuIu_.I.'r'.'.E ts: rj.-:tlm: rl-|'¿rt;:r:
dir cet enicle, cette portie ne sero pes treitée ici.
0!03010'.i›'lZl'FE00lZl3C53›EEOi350C2*lr20AOEl05011Î2C'B'¿t 00.00 ETH li El Gi?

Figure 10 6) Crécttion d'une interfece utiliseteur


Si ce n'est pes déjé foit, téléchergez Geneche et double-cli- pour interogir ovec le smert controct:
quez sur l'icéne pour lencer l'epplicetion. Celo générere une ltleintenent, il est temps de créer une interfece grephique
blockchoin fonctionnent lecelement sur le pert 17545. pour l'epplicetion.
l_e structure d'une opplicotion front end est déje présente
Documentation sur gonoche : dens le boite truffle. Elle se trouve dens le répertoire sttf.
httμs:r'r"vr'.I.nrv.ttrrlllrasuite.t:ornr"doosfganachefusing
On ve s'occuper des fonctions spécifiques é Ethereum. De
Le ncer l'opplicotion, et I'interfoce suivente opporoit : cette feçon, vous pourrez comprendre et eppliquer ceci cr
Figure 9 votre propre développement de front-end.
Ne révez pes, vous n'evez pos gegné 100 éthereum l Ce Le schéme Figure 11 illustre le fonctionnement de l'epplice-
compte est virtuel... tion et peut étre focilement réutilisé pour toutes sortes d'e p-
De retour dens notre terminel, migrer le controt vers le block- plicetions. Le fichier html référence epp.js qui déclere un
choin en lençent le commonde suivente : truffle migrote; objet globel App.
Vous devriez voir une sortie simileire e ce qui suit : l_'objet globel ltpp implenté dens le fichier epp.js permet de
cherger les informetions concernent les opportements dens
l_initial_migration.js
le fonction initll. Cette fonction exécute ensuite de meniére
osynchrone l'oppel 6 le fonction inititllebilj.
l_'interoction ovec le blockchoin Ethereum se foit en utilisent
lleploying 'Migrations'
le libreirie jovoscript É. Celle-ci permet de récupérer des
comptes utiliseteurs, envoyer des tronsoctions, interogir ovec
s transaction hash: llx3b556e9tdf123ld6ffb34=i5tb2f9flsü1de6idO36
les smerts contrects...
3e[lb'.i11'a11'f9511'da316c2e5af
Pour qu'une opplicotion web utilisent Ethereum fonctionne, il
:*.=- Blocks: tl Seconds: tl
foudre:
::-contractaddress: 6x5ccb*tdctltl6l1tlclfA6a61'1s1d5b644ae?1656aEE4
I Détecter le fournisseur lwindow.ethereuml
:=- account: l1xtid96l]6F'5lüB6tIrir5[185E-rtr9ft]661'ati›1a6rt5e2[1fFf31'
I Détecter o quel réseou Ethereum l'utilisoteur est connecté.
2:- balance: 'šl'5l.!5".itl-3111011
I Récupérer le compte Ethereum de l'utiliseteur.
:=~ gas used: 2649116
Le fonction initWeb3 se cherge donc tout d'ebord de le

|Il|'l.ÎfI*QI'lÎIl"I"Il"l"lE'I.'lIl2Î.ll"l"l
Figure '11
recherche du fournisseur. En effet, dens un novigoteur
moderne depp ou pour une version récente de lVletelVlesl<, un
î
:Lr:r-r:li.Il=ie
1:or.rvre E
fournisseur Ethereum est injecté de ns l'objet window.
' z : rc-rorenosmrs-rr as epp.js srrunotronpr
Le code cle le fonction initWeb3 est le suivent : : sro-rrraoxs.rssermnarener

il Si un fournisseur ethereum est présent: rx'


if lrvindomethereumj {
llpp.r.veh3Pro'rider = svindovrcethereom; 4 APP Will

'Fil 5 ""'l"F"'“""""""""'lÎ il charge les oeecripit-ons eos


..|;_':. . . . . . . - . . . . . . ._._ . . . . - . . . . . . . . a_pμa_|1EmEr|'||_-5, flfinflgaîitfihggigf
ll Request account access ,_ apparts. son el dans
“- le page lnüi*x.html
avrait rrrrindorv.ethereum.requestl{ method: 'eth_rec|uestltccounts"11;;
II

} catch fenorl 1
lnltt-aise Lm fournis-seurweis
ff User denied account access... puts cree un webs avent
tfeppeler .rl'rpp.'I'Itl:oti'l1'ect[]-
console.errorl"liser denied account access") II

1
1
fl notre cas de figure: var locationinstance;
else if lvrindorv.vreh3l 1 App.conttacts.Location.deployed{)
llpp.rveb3f'rovider = rvindovr.vrel:r3.currentProvider: .thenllunctionlinstancel l
l loertionlnstance = instance.:
il Sinon, accés direct par le port TCP de Ganache il llppel ir la foneion getlrppartements. le résultat est envoyé sur la fonction suivante
else { return adoptionlnstance.getA|i|rartements.call{l;
r'rpp.vreb3Provider = nevr lr'leb3.providers.HttpProvider{'http:r'r'localhost:151151; ll
1 l_'eppel e ccrllll, lors du retour de cette fonction, nous permet
Le fonction se termine ovec l'eppel de le fonction initflontroct, de lire les données de le blockchoin sens ovoir besoin d'en-
qui se chorge de l'instencietion du smert contrect. voyer une tronsoction compléte, et donc de dépenser des
Truffle e une libreirie é cet effet oppelée @ttul'ller'conttact, permet- ethers. Aprés cet oppel, une boucle permet de vérifier pour
tent d'extroire les informetions é propos du controt situées cheque eppertement s'il est loué.
dens Locetion.json, généré lors de le compilotion, synchronisé
.thenlrlmctionlappartementsl f
ou cours des migmtions, ce qui feit que vous n'evez pes besoin
lPoutclraque appartement, on indique s'il est loué ou non:
de chonger monuellement l'edresse du controt déployé.
Lo fonction initContrect vo donc cherger un Artifoct é pertir .-II- I .--_-_.ÿ...-_.__ .-.-__.__.__.-_ .-._._.-__

de ce fichier. Les Artífects sont des informetions e propos de


S sc. .ec| find :.*=.'.î-.::': .text :'.=;:sc
notre controt, comme son edresse de déploiement et son
.attr 1-: : §-: -. true
Applicetion Binery lnterfece (A01). l_'ABl est un outre objet
.adclilass . .c 'r
JeveScript, qui définit comment interogir ovec le controt, en
incluent ses voriobles, fonctions et leurs peremétres.
Ce qui donne le code suivent :
ll
$.geti5l1lll'location.json', lunrtionldatal l .catcltlfunctionlerrl {
fr' Get tlre necessary contract artifact file and instantiate it with @tmfllelcontract coosole.log{err.messagej;
var locationllrlifact = data; ll:
rlrpp.contracts.Location = iruffterîontrartllocationltrtifactl:
Si c'est le ces, le bouton correspondent est désectivé, son
Une fois le controt instencié, nous indiquons le fournisseur en texte chengé pour -x Indisponible v et se couleur est chengée.
utilisent le voleur de lrpp.vreb3Provider stocl-:ée précédemment Les erreurs sont envoyées é le console.

rlrppcoooacts.Location.setProviderlrtpp.vreb3Prorriderl; Gestion cle le fonction l1oncl|eLocution() t

Et enfin, l'oppel o marlrlouell permet d'extroire et de morquer trandlelocation funeionleventl {


les opportements loués.
evetrt.preventllelaultl];
return llppmarlriouelj; var apartld = parselnt[$(event.target).datal'id'l);
Cette fonction merl<Loue est destinée e étre oppelée plu-
sieurs fois, cheque fois qu'un eppertement est loué. var lotationlnstatrce;
il web3.eth.getl1ccounts sert .ir récupérer les comptes de lutilisateur
Description de lo fonction inorl-:Loue qui se chorge de
Io récupération des opportements loués et de le mise ii vreb3.eth.getr'tccountslfuneionlerror, accorrotsl {
jour l'intertoce utiliseteur: if (error) {
Aprés ovoir occédé ou contretLoccttion, un oppel e lo fonc- coosoleloglenorl;
tion getltppattementsll est effectué : 1

progremmez.com
7) Interection ovec le depp dens un
novigoteur
Le moyen le plus simple pour interogir ovec notre opplicotion
depp dens un novigoteur est d'insteller rVletelv1osl<, une
extension de novigeteuc.
Si vous utilisez déjé lvletofvlesk, vous devrez chonger de
compte. Avent de foire celo, essurez-vous que votre phrose
secréte personnelle est souvegerdée, vous en eurez besoin
pour vous reconnecter é votre compte personnel (Cette phro-
se secréte devroit certeinement rester secréte et vous ne pou r-
rez pes occéder e votre compte sens elle l Pour plus d'infor-
Figure 12 motions, vérifiez sur https:l.fmetamaslr.rendeslr-oomlhor'ft-
cr r-rreereïo usfarticlesldfilllllfiildilfiél-Elasic-Safety-and-Secudty-Tips-lor-ltletalllaslrl
Aprés ovoir seuvegordé votre phrose secréte en toute sécuri-
té, vous pouvez posser ou compte test de Geneche. Pour ce
foire, vous pouvez cliquer sur le logo de votre compte, puis
Fredo Ebro › Demos
sur "Verrouiller". Aprés celo, vous pouvez importer en utili-
sent le phrose secréte de recouvrement pour insérer le mné-
' -'= Bienvenue ù monique Geneche.
nouveou!
.nlllir J------H-I----Q T" 'is jrs
_ " L-__
lnsteller lVreterVresk dens votre novigoteur-
Ty
F"rilrl 3
cost e cs,
Piili _'i
Lee 'I IÈ' ly FIE' 'We
" FI: n
F"i1:i Îi
-.6 E Une fois ceci instollé, un onglet s'ef'fiche
.Ill-on _: F LcIi':.i|li-rs-ri _-Jr " i r I. Lcr-r:.ali-on 'rr:r:r.rL::" .IL J
Iqμaaμaaμqpaqpa
Aprés Getting Storted, cliquer sur Import Wellet.
Dens le boite Weller Seed, entrer le mnémonique effi-
-.-1 .I
.._lIL'2|t'l l'l|'
lt...

Li-ÎIÎIE-l'lIÎl
I T l
ché dons Geneche.
"'*Avertissement"“" : Ne pos rdiliser ce mnémonique sur le réseou
Figure 13 princrpol Ethereum- Si vous envoyez des eth o nimporte quel cornpte
ll lin prend le premier compte:
généré cr pertir de ce mnémonique, vous perclrez tout .'
var account = accountsjllj; Entrez on rnot de posse et cliquez sur Oli.
lrpp.contracLs.location.deployedll ll reste o connecter fvletolvlosk é lo blockchoin créée
.thenlfunctionlinstancel { per Geneche, cliquer sur le menu "lvlein Networl<" et
locationlnstance = instance; choisir Custom RPC.
il ilppet a la fonction loue, en transmettant le compte associé: Dens le boite "New Netvvorl<" entrer httpilllli'-l1.[l.1:?5*15,
return adoptionlnstance.louelapartlrl, lfromc accountllr et dons "Chain ID" entrer 1331' (ID por défeut de
ll Geneche) et cliquer sur Seve-
.thenlfunctionlresoltl { Le nom du réseou en hout vo indiquer ltltp:.*'r"121'.l1.l].1:1'5›'-15.
return App.ntarlclouelj; Reteurner é le pege Accounts.
il Cheque compte créé per Geneche e per défeut 100 ether. Le
.catchlfuneionlenl {
premier compte e un peu moins de ges cer il e été consom-
console.loglerr.message1; mé eu déploiement du controt et lors des tests.
ll; Dn peut meintenent démerrer un serveur web locel et utiliser
I-1; le depp. Un utilise le libreirie lite-server fourni ovec le box truffle
pet-shop pour fournir nos fichiers stetiques. Éventuellement,
-'r
vous pouvez modifier le fichier de configurotion bs-
Dons le cellbeck eprés une vérificetion d'erreur, on sélection- config-json- Celui-ci indique e lite-serretquels fichiers inclure
ne ensuite le premier compte. dens notre répertoire de bose -lstc pour le site web et
A pertir de lé, on récupére le controt déployé comme précé- .llruildfconttacts pour les ertéfects de contrets.
demment et on stocke l'instence dens adoptionlnstance. Cette Une commonde de dev estaossi ajoutée dans paclragejson. Vous pou-
fois cependont, on ve envoyer une tronsoction o le ploce vez le lencer por npm run dev Figure 12
d'un oppel. Celo démorre eutometiquement un novigoteur oinsi qu'une
Les tronsoctions nécessitent une edresse "from" et ont un fenétre popup demendont l'eutorisetion de se connecter cr
ce üt ossocié- Ce coüt, peyé en ether; est oppelé ges- Le coüt votre wellet MeterVresk. Sons epprobetion explicite, vous ne
du ges est le commission pour réoliser le celcul etfou stocker pourrez pes interogir ovec le depp. Cliquer sur Déverrouiller.
des données dens un smert contrect- A titre d'illustretion, le site montre une présentetion
On envoie le tronsoction en exécutent le fonction louell ovec simple. Figure 13
l'lD et un objet contenent l'edresse stockée précédemment Le développement web n'étont pes le sujet de cet orticle, le
dens account. conception du site n'o pes été déroillée.
Le résultot de l'envoi d'une tronsoction est l'objettrensoction- Vous ovez meintenent les outils pour devenir un développeur
S'il n'y e pes d'erreurs, on effectue l'eppel e marlrlouell pour depp et commencer -:ir trovoiller sur des dopps plus ovoncées-
synchroniser l'Ul ovec notre donnée nouvellement stockée-

[Il|"l.Î1**QI"tCIl"I"Il"l"lE'I.'IZI*I2Î.'Il"l"l
.NET 6 quoi Cle neuf?
En novembre 2020, Microsoft annonçait la fusion du .NET Framework et .NET Core 3.x
pour créer .NET 5. Une plateforme unifiée pour les développeurs combinant dev .NET,
Cloud, gaming, lol, Web, et l'lA. Le premier objectif de cette fusion etait de permettre
aux développeurs (Microsoft et la communaute) de travailler et développer ensemble
en construisant des produits a partir d'une seule et unique base de code. Le second
étant de produire un environnement dexécution et une infrastructure .NET uniques qui
peuvent étre utilisés partout en ayant des comportements d'exécution et des expé-
riences de développeur uniformes. Apres ce premier pas dans lunivers de la plateforme
unifiée, Microsoft annonçait la création de .Net 6 (Figure 1) en novembre 2021.
Avec -Net 6, lvlicrosoft prévoit consolider son plen de créotion tepent dens notre invite de commonde dotnet -info. Elle
d'un univers unifié en cepitulent sur les trois principes sui- nous effichere toutes les versions de SDK instellées sur notre
vents : mechine (Figure 2). ll est importent de vérifier |'existence
'I Amélioretion de le productivité : .Net 6 couplé ovec Visuel d'une version 6.}'{.}{}{)'l dens le section "SDK .NET instellés".
Studio 2022 offrent un rechergement é cheud. lls mettent ll est é noter que le liste des moteurs d'exécution instellés est
e disposition de nouveoux outils git, une meilleure collebo- oussi disponible en résultot de le commonde.
rotion entre les équipes, une édition intelligente du code et
de nouveoux outils de diagnostic et de tests robustes. lnstellotion de Visuel Studio 2022
'I Simplificetion du développement : Avec le C# 10, le quen- En méme temps qu'evec le .Net 6, Visuel Studio 2022 e été
tité de code é écrire est considéreblement réduite per rep- lencé- Nous pouvons nous rendre cr l'edresse suivente
port eux versions entérieures ce qui focilite se prise en mein httpszlfvisualstudio.mictosoltcomflrfdownloadst' (Figure 31 où l'on
plus fecile. En mettent en ploce des fonctionnelités telles pourre foire le choix de l'édition epproprié e notre besoin et
clevoteam
I"“' _,- .-_ --. I , _._.-. _'-_.-._ _.--. '--,

ÎI'
que le minimel API que nous verrons plus loin dens ce dos- procéder ou téléchorgement-
sier, il devient plus simple et plus ropide de mettre en ploce Aprés téléchorgement, nous pouvons instoller en prenent
des microservices. soin de cocher pendent l'instellotion les composonts dont
'I Amélioretion de lo performonce : .Net 6 est le fromework
Figure 2
Web full stock le plus ropide du morché- Un ovontoge non
négligeable pour le réduction des coüts de colcul surtout
pour les opplicotions tournent dens le Cloud-

Comment donc ces trois principes ont été mis en ploce Ê'
Question e lequelle nous répondons dens le suite de ce dos-
sier. fvlois bien ovont celo, nous ollons préperer notre environ-
nement é l'exécution du code C# 10 sous .NET 6 dens l'édi-
teur Visuel Studio 2022. bleus reviendrons sur ces trois thé-
metiques un peu plus loin.

Prérequis Figure I
lnstellotion -NET 6
Reppelons qu'historiquement cheque version du fromework
se compose de deux composonts : le SDK et le moteur d'exé-
cution. Le SDK est utilisé pour créer des opplicotions et
bibliothéques .NET tondis que le moteur d'exécution lui pour
l'exécution des opplicotions .NET Le moteur d'exécution est
toujours instellé evec le SDK-
Pour obtenir le SDK, nous pouvons nous rendre e l'edresse
suivente https:ll'dotnet.microsolt-comlen-usr'downloadr'dotnetJ'l:1.[l ofin de
découvrir les différentes releeses du fromework et instoller le
version eppropriée e notre environnement ou en nous ren-
dont sur ltttps:.ffdotnetmicrosolt.comr'en-usfdownload pour obtenir lo
version recommendée du fromework. Aucune spécificité n'est
requise pendent les étopes d'inste1letion.
Une fois l'insteIletion terminée, nous pouvons vérifier celo en

progremmez.com
nous eurons besoin pour nas développements futurs (Figure 41. Ces décleretions peuvent étre plecées dans n'importe quel
Les wodcloeds de développement Web ASPNET et de déve- fichier .cs-
loppement desktop .NET sont suffisants pour les besoins des
Les espaces de noms ii I'echeIIe fichier
J'

programmes de ce document.
Les especes de nom di l'échelle fichier permettent de déclarer
Les nouveautés un espace de noms d'un fichier entier sans imbriquer le reste
C# 1 0 du contenu dans des accolodes { }. Vu que l'espace a une
.NET 6 embarque avec lui une nouvelle version de C#, le ver- portée globale sur le fichier entier; il est ci noter qu'un seul
sion 10. Avec cette nouvelle version, .Net 6 apporte de nom- espace de nom est autorisé et se déclaration doit étre placée
breuses nouvelles fonctionnalités qui aident rfi écrire du code avent toute décleretion de Type.
plus focilement-
namespace MonEspace[leNom:
Global Using
Dn a tous déjé senti le besoin d'avoir un fichier répertoriont class lvlafilasse { .. }
les espaces de noms auxquels on fait appel dans toutes nas
classes ou on s'est plaint de la redondance des imponations Les cérémonies en C#
d'espaces de noms répétitifs dans nos classes. Ce ne sera Notre premier programme C# contenait une classe embar-
plus le ces avec C#10- quée dans un espace de noms, une méthode principale et ses
Le global using nous permet de spécifier une directive using orguments, le tobleou de chaine de ceractéres string[j ergs-
une seule fois et de l'oppliquer iii tous les fichiers compilés de Avec le Cell' 10, toutes ces cérémonies deviennent faculta-
l'applicetion. tives. ll devient possible d'écrire directement du code dans un
fichier sans se soucier des différentes cérémonies visibles sur
globel using System; l'image en dessous (Avant .Net 6 : Figure 5, aprés -Net 6 :
globel using System.lC',: Figure 6). Un aspect qui permettra aux nouveaux appre-
globel using System.Text,' nants de baisser en entrée la courbe d'apprentissage-

Figure 3

vipμpl 5i;|_|¢;|ip. 2022 Communaute Professional Entreprise Preversion


Pur-ssanl 1DE gratuit pour les IDE Professional adapte aux Solution de bout en bout et Eenelirciec d -un acces ariticipe aux
I l Vlfiiüfl IT-2-l etudiants. les contributeurs pelttes equipes scal-able pour les equipes de _ iorrctionnalites les plus recerites qui
la-rites Iarll-es , ne sont pas encore drspoorlzrles
IDE complet ideal pour les drrtvatoppeurs :::2:rü'2222î::'“:'Ê mm
- clarrs la version pnricr|;ra1*e
.rret et c++ sur wirrasvrr- entierement "'22 '22
rempli d'un bon ensemble o'oatiIs et de '
fonctionnalités permettant d'eiever et En savoir plus Is
Hotes de publication Ir
d'a meliorer chaque etape du -
développement de logiciels.

blotes de publication Z* Comparaison des éditions Ii* Installation hors connexion It

Figure 4
Ivlodifying - Visual Studio Community 2022 - IÎ*'.*0.0 E
Workloads Individual components Language packs Installation locations
Web oc Cloud (4)
Installation details

@ ASPHET and web development


Build web applications using A5P.NET Core, A5F'.I'-IET,
HTl'vlL,r'_Iava5cript_ and Containers including Decker supp...
rl'-'laure development
r"'r-'cure SDI-is. tools. and projects for developing cloud apps
and creating resources using .NET and .NET Fra mework....
" 'Visual Studio core editor
I .NET d es ktop d eve I opment *
r ASFtl'-lET and web development s
'I included

P Pyttion development
Editing, debugging, interactive development and source Uã I'-lode._js development
Build scalable network applications using lslo-de-js an
vl' -NET Framework 4.1'-E development tools
si" A5F=.I'lET and web development prerequisi.-.
'I' Ciptional
control for Python- asyncbrooous event-driven Javascript runtime-
-I'lET Framework AE developrrrent tools
Cloud tools for web development
Desktop dc lvlobile (5) -|'-IET profiling tools
Entity Framework 6 tools
Mobile development with .tsl ET .HET desktop development Lave share
IB Build cross-platlo rm applications for iüî, Android or
Windows using 1-lamarin.
'Q Eiuitd WPF, Windows Forms, and console applications
using Cri, 'visual Basic, and Fil' with -NET and .MET Frame..-
ivis' oeougging v.-riri. wsi
lnte liCode
.I'lE' Framework project and item templates
Wirdows Communication Foundation
-NET Framework 4.6.2-A-?.i development t..-
Desktop development with C+ + I- Universal Windows Platform development
E Build modern C+ + apps for Windows using tools of your
choice, including l'v1B"r.*'l.'§. Clang. Clvlake, et l'v'l'Sr0uild-
II 'Create applications for the Universal Windows Platform
with Ci, V0, or optionally *E + +-
Additionai project templates (previous ver ..
.NET Webassembly build tools

Location
Cï'tFrogram Filesl-,l'r.-'licrosoft Visual 5tudio"r,202É'i,Communit'¿.r
Total space required 1.1? *GE
By continuing, you agree to the license for the Visual Studio edition you selected. We also offer the ability to download other software with Visual Studio- _ _ _
This software is licensed separately, as set out in the drd Party Notices or in its accom pa nying licen se. By continuing, you also agree to those licenses. '"5""" """"""¿" '¿"¿“"'“"]'3F"“0 2 9 """"Bd"ÎI"

progremmez.com
using System;
public record Employetint Id, string Hon, string Prenom, int Adel;
Ifinamespace Beéore
{ public class Test
i
- internal class Program
{ public static void Hainil
. I r
T static void Hain(string[] args) Enploye employel = neuil, "Francais", "Clément", 16);
Employé employeî = neeil, "Francois", "Clément", lol;
{
Console.HriteLine(“Hello Horld!“]; Console.WriteLine[employel == enployeîl;
_ 1 ff Sortie: True
' } fr aurait donné False si le type Employé était une classe mais dans ce cas True
2} ff parce que l égalité est testée sur la valeur des dissérentes prorietes

Console.WriteLine{employel};
Figure 5 ff Sortie: Fersen i Id = 1, Hom = Francois, Prenom = Clément, Age = 1 I
1
Fhognanscs -b IE 1
IEÂI Article.l'~lett5 "
1 Console.NriteLine["Hello, Norldl“); Figure 0
a l
Figure 6 Malgré que le type record soit de type référence, on peut
remarquer que l'égalité entre les deux variables est vraie.
Canstantes de chaines de caractéres interpalées Ceci s'explique per l'égalité par voleur des différentes pro-
l_'interpoletion de chaines de cemctéres est un méca nisme de priétés des deux voriobles. Ce qui n'euroit pas été le ces s'il
formatage de chaines de ceractéres- Une chaine interpolée s'ogissait du type classe.
est une chaine qui peut contenir des expressions d'interpola- Le type record o connu une évolution avec lo création du type
tion. Lorsqu'une chaine interpolée est résolue en une chaine "record struct". Les record struct permettent de créer des
de résultots, les éléments contenant des expressions d'inter- records en tant que structures, et donc de type valeur. Un
poletion sont remplacés par les représentations de chaine record struct e toutes les fonctionnalités d'un record, mais
des résultats de l'expression. sera alloué dans lo pile comme toute structure et nen dans
Avont le C# 10, il était possible de conceténer des chaines le heep.
de ceractéres- Le fonctionnalité d'interpoletion de chaines de Le type record struct utilise aussi donc l'égalité basée sur le
ceractéres existait, mais ne permettait pas d'evoir des voleur. Deux variables de type record struct sont égales si les
constantes de chaines de ceractéres interpolées. définitions du type sont identiques et si, pour cheque propriété,
Avec le C#10, nous pouvons ovoir des constontes de chaines les valeurs des deux enregistrements sont égales (Figure il).
de ceractéres interpalées (Figure 7] et avec, nait une syntaxe
plus lisible et plus protique que le formatage composite des public record struct Emplayeiint Id, string Hom, string Prenom , int AEe]
chaines-
public class Test
public class Punclasc {
I
public void Pun[} public static void Hainii
'I _
const string platFomI _ “.HET';
l
const string language = 'Cl“;
Employe eoployel = neufll, "Francois", "Clément", 15);
const string version = "10-0"; Employé employe! = nenil, "Francois", "Clément", 131;
const string Fullflroduetflale =
S“PlatFern: {p1at{orl} - Language: {language} - Version: {veriion}';
Console.HriteLine{employe1.Equalsflemployeljl;
Console.HriteLine{emplaye1 == enploye2);
Console.HriteLineflfullflroducthllel; ff Sortie: True
1 fd Un struct ordinaire n'implémente pas les opérateurs == et l=, un record struct si
1
ff L égalité est testée sur la valeur des ditéérentes proriétés
I

Console.HriteLine{emplaye2];
ff Sortie: Person { Id = 1, Hom = Francois, Prenom = Clément, Age = 10 1
Record struct I
Le type record est introduit en C#9. Microsoft e apporté une I

évolution ou record en créant le type record struct avec l'er-


rivée du C#10. Le type record a pour but de fournir une syn- Extended property pattern
taxe simple pour déclarer des objets de type référence conte- Avec le C#B, Microsoft a introduit les Property pattern. Un
nant des propdétés. A la différence des classes, l'égalité dans motif permettant de faire correspondre les propdétés d'un
les records ne signifie pos nécessairement l'égalité des réfé- objet examiné. Le Cdt 10 vient améliorer ce pattern en sim-
rences- Deux instances de record sont égales si les valeurs de plifiant l'eccés aux propriétés imbriquées via l'extend€'Cl pro-
toutes leurs propriétés sont égales. lls peuvent étre hérités ii perly pattern.
l'inverse des structures- lls exposent égolement une méthode Avec le property pattern depuis C# B :
ToString() retournant choque propriété ainsi que sa valeur;
if le is MethoclCallExpression 1 Method: { Name: "li'lethodNarne" ill
différente du ToString(l d'une classe qui retourne le nom du
type (Figure 0].
Avec l'extended property pattern en (lt til, l'on obtient:
if (e is Methodíallixpression { Methad.l'lame: "l'i'lethodl'lame" 1)

La différence se situe au niveau de la correspondance des

progremmez.com
prapriétés enfants. évec le praperlv pattern, an abserve une Cette fanctiannalité farce le campilateur a imparter autama-
imbricatian supplémentaire c|ui niaméliare pas tarcément la tiquement un ensemble de using basé sur le type de praiet.
lisibilité du cade tandis c|u'avec l'extended prapertv pattern, En prenant l'exemp|e d'une applicatian cansale, les directives
la carrespandance est faite directement via Gbjet.Prapriété. suivantes ne sant plus nécessaires a l'impartatian 'explicite'.

Mixage entre déalaratian et afieatatian dans la décans- using Svstem;


truatian de Tuples using Svstem.l0;
Un tuple atfre un maven léger de récupérer plusieurs valeurs using Svstem .Callectians-Generic;
a partir d'un appel de méthadei Cependant, une fais le tuple using 5v5tem.l.inq;
récupéré, naus devans faire une gestian individuelle de ces using 5vstem.Net. Http;
éléments. La décanstructian des tuples permet de décampa- using 5vstem.Threading;
ser taus les éléments d'un tuple en une seule apératian. La using Svstem.Threading.Tasl-as;
svntaxe générale de décanstructian d'un tuple est similaire a ¢PrapertyGraup>
la syntaxe gui permet d'en définir un. Les variables aux- ¢TergetFremewarkenetü.B¢!TergetFremewark›
quelles chaque élément dait étre affecté entre des paren- *Nullebleeenablesfflullablee
flïmplicitüeingseenableflflmplicitüsingse
tttéses sant placées dans la partie gauche diane instructian
efPrapertyGraupe
d'at"lectatian. 'I

Figure \U
Larsc|ue naus utilisans la décanstructian, naus sammes auta-
risés a assigner au a déclarer les variables dans lesauelles Elle parte deux vaieurs passibles (Figure 10), qui sant le
naus décanstruisans. Cela signifie que ces deux décanstruc- enable et le disable.
tians campilent : -=clmp|iitUsings':=*enable-silmpliitUsings:*› paur l'activatian et
ii .étttribuer des variables par clécanstructian silmp|iitUsings.t›disable*='¿lmpliitUsingsï-“› paur la désactivatian.

intx=-J;intv=[l;
Le framevv-c|d< facilite ainsi sa prise en main en prévavant un
tx rl = Pviflt: ensemble de directives diimpartatian par type de praieti
ir' Déclarer des variables par décanstructian
Minimal ÀPI
[int x, int vl = paint;
Les API minimalistes permettent aux dévelappeurs de créer
.étvant C# ll), la décanstructian exigeait que tautes les des ÀPI a l'aide d'un seul fichier au ils peuvent canfigurer
variables saient nauveiles, au c|u'e|les saient tautes déclarées l'applicatian_, mais aussi écrire le cade des paints d'entrée ;
au préalable. API. La nauvelle versian du framevvark a rendu extrémement
Il n'est cependant pas passible de les mélanger dans les ver- simpte liécriture des ÀPI REST avec le minimum de dépen-
sians précédentes Clu langage. La prablématique se situant dances.
dans les scénarias au l"une des variables a été préalablement Dans |'exemple suivant (Figure H), naus canfigurans liap-
déclarée dans natre cade, tandis qu'une autre est abtenue plicatian et créans une API d'ajaut d'emplavés directement
par décanstructian. C# lO léve cette cantrainte et naus per- dans le fichier pragram.cs.
met de taire les déclaratians et les atlectatians lars de la l_'an peut vite remarquer aue cette tanctiannalité mise sur la
décanstructian camme liillustre le baut de cade suivant: simplicité des appraches et le minimalisme. En revanche, elle
peut étre critiauable sur certains paints.
int x = iii;
Traditiannellement la classe startup. cs permettait de canfigu-
ix, int vl = paint;
rer liapplicatian via Cieux méthades et la classe F'ragram.cs
permettait diajauter la canfiguratian du serveur Web. En
ASP .NET 6 tusiannant ces deux fichiers de canfiguratian et en v rajautant
Using implicite les API dans un seul et méme fichier, an s'expase au risc|ue
Une nauvelle balise vait le jaur dans le .cspraj de nas praiets, d'avair un fichier valumineux a la langue paur des prajets
celle du using implicite ~clmpliitUsings':›. appelés a évaluer.
Il est impartant de nater que la dacumentatian d'APl est sup-
Figure I H cri:-asian de 1. app nah
var builder = haašpplicatian-CreeteBuiLder{arg5]; partée paur les ÀPÎ minimalistes via OpenAPl.
ff Enregistrement des services paur injectian des dapendences
buiIdar,5erui:qi,Add5ingLetan¢IFrptuvaafippe, Frpîageefivμeefij;
builder.5eruice5.édd5neggerGen[]; HTTP lagging
var app = hui1aer.Eui1a[J;
La versian 6 du .NET Framevvark permet la canfiguratian et
I-app.HapFasc[“fepifanp1ayea', async iïcrpãeyvefivpe repa, Enpteyve anptayaal =*
i
l'activatian de la jaurnalisatian HTTP en utilisant les
ver enptayaeiithîa I avait rapa.éaaésync{aIpIayaaJ;
return Results-CreatedétHaute[“GetBpId', nen I Id = elplayeeHithId.Id }, enplayeeïithldl; méthades d'extensian AddHttpl.agging et UseHt'tpLagging.
_ ii;
Leur utilisatian active un middlevvare intégré permettant de
app.HaμGeti“íaμi£enpLavve£iidi', esvfla {1FepLeμpvñvpe repa, string id) =1 i
ver enplayee = auait repa-GetEgIdésync{id]; capturer les intarmatians sur les reauétes et répanses HTTE
return Eamptayaa == aeFxuLt] ? Hvsu1ts.HptFauna{] : ?esu1ts.ak[aμpLayea];
}].HithHane['GetById“]; les en-tétes et les iniarmatians sur le carps des requétes, etc.
ff Run the applicatian Paur la canfigurer, naus devans invaquer la méthade
spμ.HuflE}:
cl'e-xtensian Àcldl'lttpLagging appartenant til l'intertace

pragrammez.cam
lServiceCallectian. Le cade de la figure 12 mantre cam- services . l!tddHttpLagging [httpLagging ==› Figure 12
l
ment pracéder. ff Quelques exemples de lignes de canFiguratian
l_'activatian est faite en invaquant la méthade d'extensian
ff Laggé taus les champs des requêtes et répanses
UseHttpl.agging camme suit : httpLagging.LaggingFields = HttpLaggingFields.àll;
app.UseHrtpLagging() _; ff éjauter une entéte
httpLagging.HequestHeaders.eaaí"Request-Header-Dema“];
Aussi intéressante que puisse étre la jaurnalisatian HTTH elle ff Spéciiier l'encadage
peut nuire aux periarmances de liapplicatian si Ilan chaisit de httpLagging.HediaTypeüptians.AddText(“applicatianfjavascript“1;
lagger taut et n'importe quai, natamment les carps des ff Définir une limite de taille de la requéte
httpLagging.RequestBedyLagLimit = HEBE;
requétes et répanses. Il est danc judicieux de tenir campte de ff Définir une limite de taille de la repense
|'impact sur les perlarmances larsque naus chaisissans les httpLagging.HespanseEaayLagLinit = HEBE;
3-J:
champs él jaurnaliser.
app.UseHttpLagging{);
W3Clagger
Taut camme le Ht-tpLagging, le W3CLagger est un middle services.AddH3ELegging(lagging =e Figure 13
vvare qui écrit des tichiee iaurnaux, a la seule différence que i
ff Laggé taus les champs des requêtes et répanses
le W3CLegger le fait dans le tarmat standard du WSC. Les lagging.LaggingFielas = wscLaggingFietas.al1;
jaurnaux cantiennent des infarmatians sur les requétes HTTP ff la taille maximale du jaurnal en ectets
lagging.File5ieeLimit = 5 * IEÉH * lülü;
et les répanses HTTFi W3CLagger taurnit des jaurnaux d'in- ff Hambre maximum de Fichiers legs canserués
farmatian sur les requétes et répanses HTTE les en-tétes, les lagging.HetainedFileEauntLimit = 2;
métadannées sur la paire demandeirépanse (datefheure de ff PréFixe du nam du Fichier de jaurnalisatian
lagging.FileHame = “HyLagFile";
début, duréei, etc. ff répertaire dans lequel serant ajautés les Fichiers de jaurnalísatian
Paur l'activer, l'an utilise la méthade UseW3CLagging et lagging+LagDirectary = Ê"E:llags“;
ff la périade aprés laquelle les jaurnaux serant vidés
paur cantigurer les éléments a lagger an utilise la méthade lagging.FlushInterval = Time5pan.Fram5ecands[2]
ÀddW3CLagging (Figure 13). tit:
app.UseH3CLegging[);
Enrichissement clu .Net BCL
La BCL représente |'une des bibliathéques standard du tra-
mewark .NET Elle faurnit des tvpes représentant les tvpes de Figure 'I4
veid Uateünlyflethadfl
dannées CLI intégrés, i'accés de base aux fichiers, les callec- {
Dateünly aatnflrïp = new DateUnly{};
tians, les attributs persannalisés, le tarmatage, les attributs de
fiatcüiïv = new Dateünlyfilflll, 1, Bül;
sécurité, les flux d"El'S, la manipulatian des chaines de carac- } aateünlu
H. . = new DateUnly(2H21, 9, 9, Hem Gregarianíalendarfilji
téres, etc. Elle cantient des tvpes de base, tandamentaux,
camme Svstemfitring et Svstem.DateTime. De nauveaux
types et cancepts ant été aiautés au HCL dans cette mise a '¿.r.-..

vaid Timeünlyflethadfl) Figure 15


jaur du tramevvark. Les types Dateûnlv et Timeûnlv. {
Le tvpe DateTime naus a taus cantraint a gérer la partie 'iceürly tiacüaïy = new TimeUnly{}; ff Eüzflû
tírefirîv = new Timeünlv[3EEEBBBflûûûE]; ff BB:3û
Time dans bien de situatians malgré que natre besain se rirpürly = new Timeünlvflï, 251; ff B?:25
situait qu'au niveau de la date. Paur pallier cette prabléma- } *-'LJ Iv. = new Timeünlvffl, EB, üi; ff en rajautant les secandes
tique, le tvpe Dateünlv se tacalise que sur les trais prapriétés
diane date qui sant le jaur; le mais et liannée. Ce nauveau
type dispase de trais canstructeurs qui sant illustrés é travers
liexemple de la figure 14. .NET MAUI
Le premier initialise une date au Ul-Ul-OUDI, le secand au Rappelans quiavec le .NET 5, ivlicrasatt enta-
30 Janvier 2022 avec ardre des paramétres |'année, le mais mait le pracessus diuniticatian de la platetar-
et le jaur. Le traisiéme canstructeur rajaute la natian du me .NET, en réunissant .NET Care et
calendrier, dans natre exemple le calendrier grégarien. Manafïamarin dans une seule bibliathéque --

lv- les
Le t-,fpe Timeünlv lui traite la partie temps, natamment de de classes de base ElCi_ et une seule chaine
l'heure ]usqu'é la millisecande selan le besain. Paur ce taire, d'autils SDK.
il expase 4 ditlérents canstructeurs qui sant illustrés a travers .NET MAUI acranvme de .N ET Multi-plattarm
liexemple de la figure 15. app Ul est le nam de la nauvelle salutian ,G5
Le passage de ces structures vers les structures DateTime et améliarée en tant que cadre diinterface utili-
Time5pan sant également pris en campte é travers des sateur d'appiicatians multi platefarmes paur Figure le
méthades telles que TaDateTime paur le Dateünlv et le créer des applicatians natives multi plate-
TaTimeSpan paur le Timeûnlv. farmes avec .NET paur Andraid, IUS, macUS et Windavvs
ll est impartant de nater que la sérialisatian de ces types n'est (Figure 16).
pas encare prise en campte dans cette versian du tramevvark. Malheureusement dans la release du .NET ti de navembre
Ce que prévait intégrer ivlicrasait dans la versian 7. Une 2021, .NET tvlAUl est le gras absent. Afin d'altrir é ses utili-
sérialisatian de ces deux tvpes prapagerai une exceptian de sateurs la meilleure expérience, la meilleure perlarmance et
tvpe Netlmplemented Exceptian. la meilleure qualité, lvlicrasaft annançait en septembre 2021

prag rammeacem
la mise a dispasitian du .NET MAUI au début du deuxiéme lée n'est pas nécessairement mise en cache et peut entrainer
trimestre de 2022, quelques mais aprés la publicatian du un ralentissement diexécutian. Micrasaft a pris en campte
.NET ó. La versian previevr du .NET MAUI est cependant dis- ces para métres en aptimisant la campilatian JlT via une éva-
panible paur utilisatian. Micrasaft ne danne aucune garantie luatian méthadique de ce qu'il faut mettre inline au pas au
dessus tant qu'elle paurra cansidérablement étre madifiée travers d'une variété d'heuristiques.
avant la sartie de sa release. l_"inlining va de pair avec la dévirtualisatian qui, elie, est l'acte
par lequel le JIT prend un appel de méthade virtuelle au d'in-
Linq terface et détermine statiquement la cible finale réelle de l'in-
De nambreuses méthades LINQ ant été ajautées dans .NET 6. vacatian en émettant un appel direct E1 cette cible et par la
Ces méthades sant 0istinctBv (), Unianlfiv (), lntersectBv (l, écanamiser le caüt de la répartitian virtuelle. Une fais dévir-
ExceptBv (j, MaxEiv (), l'v'linBv (j and Chunk (j que naus tualisée, la cible peut également subir l'inlining paur davan-
détaillerans : tage d'aptimisatians.
I Etistinctüv (j retaurne les éléments distincts -:l'une séquence E-Êlptimisatian arientée prafil de l'expressian anglaise Prafile-
selan une fanctian de sélectian de clé. guidecl aptimisatian (PGUJ a déja été mise en ceuvre dans
I ExceptBl*' il retaurne la différence diensemble de deux une variété de piles de déveiappement et a existé dans .NET
séquences selan une fanctian de sélectian de clé. saus de multiples fermes au fil des années, natamment le
I* lntersectflv () retaurne liintelsectian de deux séquences PGU statique. l_'améliaratian majeure appartée en .NET 6
selan une fanctian de sélectian de clé. est l'aptimisatian arientée prafil dvnamique.
'I' UnianBv (} praduit l'unian de deux séquences selan une Depuis .NET Care 3, le principe de la campilatian par étage
fanctian de sélectian de clé. est dispanible en .NET. La campilatian cammence au niveau
I r'v'linBv (j et ivlaxBv () retaurnent la valeur minimale paur le 0 au le JIT applique trés peu d'aptimisatians via une campi-
ivlinBv au maximale paur le l“vlaxBv dans une séquence latian assez rapide. Le cade résultant de cette premiére étape
générique selan une fanctian de sélectian et éventuelle- de campilatian camprend des dannées de suivi paur campter
ment diun camparateur de clés spécifiées. la fréquence d'appel des méthades. Le JIT met par la suite
I* Chunk (] divise les éléments diune séquence en marceaux en file cl'attente les éléments de sarrie du niveau 0 dépassant
cle taille au plus égale a la valeur en paramétre. un certain seuil paur une campilatian de niveau l. cette
'I Et d'autres méthades avant leur équivalent dans étape, tautes les aptimisatians passibles sant faites par le JIT
Svstem.Linq.Quervable. en tirant des leçans de la campilatian de niveau 0. titre
d'exemple une variable statique en lecture seule peut devenir
Perfarrnance une canstante du fait que sa valeur aura déja été calculée au
.NET é représente la versian la plus perfarmante de tautes mament au le cade du niveau l est campilé. Avec le PGO
les versians du framevvark depuis san avénement. Stephen dvnamique, le JIT peut maintenant effectuer une instrumen-
Taub, dévelappeur au sein de l“'équipe .NET de Micrasaft a tatian plus paussée pendant le niveau 0, paur suivre nan seu-
rédigé un super article sur les perfarmances du .NET é- dis- lement le nambre diappels, mais aussi tautes les dannées
panible sur le blag de lvlicrasaft. l.'a|ticle en questian a été intéressantes qu'il peut utiliser paur l'aptimisatian guidée par
rédigé sur la base des 550 Pull requests traitant des sujets de le prafil et les utiliser pendant la campilatian du niveau l. Par
perfarmance sur les 6500 que la branche principale du prajet défaut dans .NET 6, le PGO dvnamique est désactivé. San
.NET é camptait. Dans cette sectian de natre dassier, naus activatian est faite en définissant la variable d'envirannement
décrirans succinctement quelques-unes des perfarmances les DOTNET_TiereclPGO a l.
plus significatives.
Les Entrées et Sarties
Cen1pilufeurJ|T Les améliaratians appartées aux Entrées et Sarties de fichiers
Rappelans que JIT acranvme de Just ln Time est un mécanis- se traduisent par une réductian du temps diexécutian, de la
me cle campilatian utilisé paur traduire le langage intermé- latence et de l'utilisatian de la mémaire. Paur ce faire, naus
diaire en cade assembleur au mament de l'exécutian. Dans allans naus référer a l'étude et camparaisan faite par
.NET 6, d'impa|tantes améliaratians ant été appartées au lvlicrasaft é travers l'utilisatian de quelques méthades clés
campilateur. Trais de ces améliaratians sant axées sur l'inli- dans le but d'abserver le temps d'exécutian et la mémaire
ning, la dévirtualisatian et l'aptimisatian guidée par le prafil. utilisée lars d'apératians d'entrées sarties sur le framevvark
Liinlining est le remplacement d'un appel de méthade par le .HET 5 et sur le .NET 6. Natans que les paramétres temps
cade de cette méthade dans la méthade appelante. ll a paur d'exécutian et utilisatian de la mémaire dépendent de la
abjectif majeur diexpaser le cantenu de la méthade appelée quantité de clannées traitées tel dans le camparatif suivant
au cantexte de liappelant, permettant une aptimisatian ulté- que dans ceux d'aprés.
rieure en exécutian.
ll n'a pas que des avantages. Par principe, elle augmente la
taille du cade assembleur. San utilisatian de façan démesu- Reaclésvnc 25,l [ll ms l3, l UB ms l 0'?-'i 0960 382 B
rée impliquerait une grande cansammatian de mémaire. Les
Read 2l'?,3EB ms 83,0?ll ms 3 062241 B 2 lûii B6?B
ardinateurs utilisent des caches diinstructians trés rapides aù
ll“r'riterllJlTextAsvnc l,590 rns l,l 43 ms 23 KB l5 KB
sant stackées les cades cr exécuter dans le cadre cliune réuti-
Campress l ü5i),2 us ?Bti,tr us - -
lisatian. En pratiquant l'inlining, le cade de la méthade appe-

pragrammea.can*r
Reflectian faute de frappe qui impliquait taut un redémarrage de natre
Des améliaratians significatives sant également appartées aux applicatian, chases assez frustrantes qu'an a taus certaine-
méthades réflexives camme le mantre le camparatif suivant. ment cannu. Avec le Hat Relaad naus pauvans madifier du
cade en caurs d'exécutian et apercevair directement les
madificatians sans avair cr redémarrer natre applicatian au
mettre manuellement en pause au d'a1teindre un paint d'ar-
Getfustarn
rét, et ce quelque sait le tvpe diapplicatian. La fanctiannalité
Atlributesücta i'3,_58 ns 69259 ns 46 B -
existait certes dans Visual Studia 2019, mais présentait
lsliiefined 292,0l ns 252,00 ns 400 -
Getíusterrvittritrutes 2 406,51 ns 446,29 ns l 0565 l28B quelques lacunes en termes de perfarmance. Celle embar-
Invake l4l ns l23,l ns I04 B 64 0 quée avec Visual Studia 2022 est beaucaup plus perfarman-
Create 26,350 ns 9,439 ns 24 E 24 B te. Il existe évidemment quelques limitatians, natamment si
l'an madifie le démarrage d"une applicatian au taut cade en
Callectiarrs et LINQ exécutian unique. Dans ce cas, naus devans redémarrer
Les callectians et le campasant LINQ ant été rendus de plus natre applicatian paur que les madificatians saient prises en
en plus perfarmants au fil des versians du framewark. La ver- charge.
sian 6 apparte des améliaratians, certaines saus ferme d'ap- En exécutant natre applicatian, dans la barre des téches
timisatian d'APl et d'autres saus farme de nauvelles API, ces naus pauvans apercevair l'icéne en farme de flamme (ciest
derniéres abardées un peu plus haut dans ce dacument. vraiment du Hatj, ciest le Hat Pelaad au Rechargement é
chaud (Figure 18).

rr 1-; rr _:-:rr

lvlin 5,20? ms 4,29l ms - -


Iî=- cenrinuer * O
*rj lÎ,Ej Ê = Il O j tl» . = = gs: L3
Max 4,926 ms 4,222 rns - - .j [Il] FU- 6 Ftechargementà chaud
Caunt l2,066 us 5,228 us 32 0 32 0 Q lmpassible de redémarrer l'applicatian
SequenceEqual 5 42l,l us l50,2 us
Get Êalleclian Item l6,296 ns 9,45? ns Fiechargement à chaud lars de Penregistrement d'un fichier
Distinct an callectian Paramètres
and Éaunt 5,l 54 ms 2,626 ms 5 MB 2 MB
Le Hat relaad est passible directement depuis la ligne de
Ces tableaux camparatifs ne sant sans daute pas assez signi-
cammande en exécutant la cammande : detnet watch.
ficatifs paur tirer de grandes canclusians, mais présentent taut
de méme des chiffres intéressants sur les améliaratians de
Web Live Preview
perfarmances qu'an peut abtenir en migrant vers le .NET 6.
Le Web Live Preview permet une carrespandance en temps
Les Outils réel entre natre cade saurce et le rendu HTML de nas applica-
Cette sectian n'est pas spécifique a la versian du langage, tians Web ASPNET Framewarl-1. En d 'autres termes, elle naus
mais nécessite un petit facus. permet de faire des madifícatians directement depuis le rendu
En méme temps que la versian 6 du framewarit Net, et d'abserver les madificatians dans le cade carrespandant et
Micrasaft a sarti une nauvelle versian de Visual Studia 2022 beaucaup plus. Paur tirer parti de cette fanctiannalité avant
(Figure 17] Visual Studia 2022, il fallait installer une extensian Visual
Studia partant le méme nam que la fanctiannalité. Depuis
Visual Studia 2022, elle est par défaut embarquée avec liédi-
teur et des améliaratians sant appartées afin de supparter éga-
lement les applicatians WPF via le ){AivlL Live Preview.
Paur l'activer au le désactiver, il faudra se rendre dans Outils
-Le Ciptians -le Web Live Preview (préversian) et mettre a
true au false les aptians désirées. ll faudra par la suite cliquer
Visual Studia 2022 est une versian purement 64 bits, un sur Ok et redémarrer Visual Studia paur tirer prafit du Web
chaix qui d'aprés les respansables du praduit permettrait de Live Preview.
tirer prafit au mieux de tautes les ressaurces svstémes. ll
embarque un certain nambre d'améliaratians en matiére Le remate testing
d'éditian et de débagage. A titre d'exemple, il affre la fanc- Plein de nauveautés ant été ajarrtées 6 liéditeur paur amélia-
tian Hat Relaad, qui permet aux dévelappeurs de madifier rer liexpérience des tests. La passibilité que liéditeur émette
leur cade saurce pendant que leurs applicatians siexécutent un san a la fin d'exécutian des tests, celle de naviguer entre
dans liéditeur. ll dispase également de capacités de Live un fichier de test et l'explarateur de test via le menu cantex-
Preview et de tests multi platefarmes sur Linux, parmi tuel dispanible au clic drait dans le fichier au depuis l'expla-
diautres fanctiannalités nauvelles et améliarées. rateur de salutian et celle de faire un Cansele.WriteLine(}
dans une méthade de test, la sertie est affichée dans le panel
Le rechargement rir chaud (Hat Re-lead) de détail des tests.
ll siagit incantestablement de liune des fanctiannalités La fanctiannalité la plus intéressante est celle du remate tes-
phares publiées dans .l*lET. La petite madificatian au la petite ting. Elle permet de cannecter l'éditeur cr des envirannements

pragrammeacam
distants paur exécuter et débag uer des tests. Elle est trés utile du framewark, il aura lieu de faire une mise ri niveau des
paur les dévelappeurs multi-plates-farmes car, avec elle, naus envirannements de dévelappement et de test lacaux avant
pauvans exécuter des tests Linux directement rr partir de une mise a niveau de l'applicatian Azure.
Visual Studia en cannectant l'explarateur de tests ri lienviran-
nement distant. ll peut s'agir de canteneurs Linux, de WSL, Cenclusian
et méme de cannexian SSH. .Net 6 révalutianne cansidérablement le dévelappement
d'applicatians. Un paint clé 6 nater est san suppart 6 lang
lll. Impacts sur les technalagies nan terme étalé sur 3 ans. Un schéma qui se paursuivra Paur
prises en charge chaque versian paire de .NET (6, B, l0, etc.l. Paur de nam-
Avec cette nauvelle versian du framewarl<, des impacts signi- breuses arganisatians, cela fait cle .NET 6 la premiére versian
ficatifs sant ti signaler lars d'une mise 6 niveau de certains fiable du nauveau .NET qu'elles sant prétes a utiliser, car
types diapplicatians. Paur les applicatians utilisant les farmu- elles s'en tiennent strictement aux versians LTS (Suppart
laires Web au Windaws Warkflaw Faundatian, l'applicatian Lang Terme). La sartie de .NET 6 canstitue danc un change-
devra étre réécrite en .Net 6. ment de paradigme asse: impartant.
Natans que dans ce dassier,. plein d'autres nauveautés niau-
ASP N ET Web fcrrrns rant pas été traitées. ll en existe énarmément qui auraient
Depuis .NET 5, la nauvelle arientatian de Nlicrasaft est axée mérité le détaur; telles que les améliaratians appartées 6 la
sur les bases du .NET Care, et nan sur celles du .NET classe Pracess, liaméliaratian du tvpe struct, la génératian
Framewark, dant les farmulaires Web fant partie. ll est danc sécurisée des nambres aléataires, le suppart du pratacale
lmpassible d'exécuter nas applicatians ASPINET Web Farms HTTP,l3 qui vise 6 apparter des avantages en termes de per-
en utilisant le runtime .NET Care. lvtais cela ne signifie pas farmances, principalement paur les utilisateurs mabiles au
que lvticrasalt s'est "débarrassé des farmulaires Web". les cannexians peu fiables au encare les améliaratians de
ASPNET Web Farms n'est clairement plus une aptian paur pertarmance autaur des entréeslsarties de fichiers. Elles
les nauveaux dévelappements. ll est certes é éviter, mais pas auraient tautes mérité le détaurç mais le but niétant pas de
mart. Nas applicatians en Web Farms cantinuerant de fanc- faire une liste exhaustive des nauveautés, mais plutét de
tianner tant que naus aurans du persannel paur les supporter, mantrer la belle facette révalutiannaire que cette versian du
mais taut camme les applicatians ASP classiques, elles framewarl< apparte 6 nas dévelappements.
deviendrant de plus en plus fragiles 6 mesure qu'elles vieillis- Le I? février dernier, lvlicrasaft en célébrant sa cammunauté
sent. En bref, naus pauvans cantinuer a exécuter des appli- et ses 20 ans d'innavatian annançait la prachaine étape du
catians Web Farms, mais faire le chaix de nauvelles techna- framewad-4 .NET; .NET 7 via sa versian preview l. .NET 2 s'ap-
lagies paur de nauveaux dévelappements. Paur ce faire, il est puie sur les tandatians établies par .NET 6, qui sant : un
recammandé de cammencer 6 tester Razer Pages, Blazer et ensemble unifié de bibliathéques de base, de runtime et de
ASPNET Care MVC et vair quelle fechncrlagie camblera au SDK, une expérience de dévelappement simplifiée et une pra-
mieux les lacunes. ductivité accrue des dévelappeurs. Les principaux damaines
d"intérét de .NET Î" camprennent une meilleure prise en char-
Winclews warkfiew feundatian ge des scénarias claud native, des autils facilitant la mise a
Windaws Warkflaw Faundatian nécessitera un examen beau- niveau des prajets existants et la simplificatian de l'expérience
caup plus lang. Nan seulement il n'est pas parté, mais les du dévelappeur en facilitant le travail avec les canteneurs.
campasants (camme WCF) utilisés en canjanctian n'ant pas Ceci dit, an en déduit assez clairement que .NET 6 ne repré-
été partés également. CareWF (le remplacement recammandé sente que la fandatian des futures évalutians du framewark;
de .NET 5) peut devenir asser ban paur de nambreux utilisa- et ciest taut a natre hanneur.
teurs, mais il n'est pas prét paur la praductian dés maintenant.
Resseurces et liens
WCF lttt|1s:lr'rlucs.micrtrsul1.|1umien-usldatrrsticurelwhats-newfrlatrret-B
Les applicatians WCF devrant également étre réécrites. Des htt|1s:Tt'tlutnecmicmsnftcnmien-uslduwnlned
autils facilitent cette réécriture, l'un d'entre eux est une exten- Install tlisual Struliu l llrlicrssnlt Ducs
sian de Visual Studia au nam de Visual ReCade. ll aide 6 la httμs:r'Arrrvw.vuutuhe.snm.lwstchiv=E4lrjμHqLLM
réécriture des applicatians utilisant le WCF vers le gRPC paur httpsLHl1etterj1mt|ramminr;|.pr|l1r'upr:rrming-iealrrres-in-t.-1I]-l44Tl2l]3|lsa.:
.NET Care et .NET 5+ dés maintenant. Le gRPC est un cadre httμs:Hsntlrnnvr|iret|i.tumi2[I2lillïltiiintrnrluting-c-lllertenrterl-μmμsrty-pstlsmsl
RPC (Remate Praced ure Call) maderne, apen saurce et per- lrtt|1s:Hvnvw.i|:|lrrm:e.e1miwhsts-new-in-mirmspft-net-lil
farmant fanctiannanl' dans n"impc.rrl'e quel envirannement. lrllicrasult shiμs .NET Ti - ltiratss
Wlmfs new in .NET B i lllicmsult [ltrcs
.Net 6 et Azure httμszlivisualrecurle.camr'l1lagr'netfi-lack-ahead!
Les principaux autils PaaS (platfarm-as-a-service) Azure ant httμs:r't't|lng.inetlexnmritletnetirretfi-weh-inrms
trés rapidement adapté .NET 6. Les principaux services affec- Update tm .llET Multi-μlatfnrm App Ul (.llET MAUI] - .lllET Bing
tés sant Azure Functians, Azure App Service et Azure Static Hut Helmad ln titi .NET ti T Visual Studiu 2[l22 - .NET Eure Tutnrisls
Web Apps. La prise en main de ces services ne devrait pas ilnntruncing .ltETT Preview 1 - .NET lilag
étre trap dilficile, tant la campatibilité est ascendante entre Perlemrrrncr: lmμmvements in .NET ti - .lllET Hltrg
les versians du framewad<, Paur adapter la nauvelle versian

pragrammea.can*r
Xamarin.Forms est mort,
Vive .NET IVIAUI l
De nos jours, la prob émalique concernant les applications supportant plusieurs
plates-formes ou systemes d'expIoitalion est souvent au cceur des discussions des edi-
teurs, mais aussi parfois des utilisateurs qui veulent retrouver es memes interfaces et
la meme ergonomie quel que soil leur appareil. Concernant les editeurs, certains tont le
choix de dupliquer eur code pour produire des applications natives pour chaque plate-
forme, et dautres décident de mutualiser leur code source pour n'écrire leur application
qu'une seule lois pour plusieurs plates-iormes.
Nous ne détaillerans pas ici les avantages et les inconvénients
de liune ou l'autre des décisions puisque nous allons nous
focaliser sur la réponse de Microsoft, son nouveau framework
.Net MAUI, successeur de Xamarin. Nous détaillerans com-
ment cette solution s'intégre dans liécosvstéme .NET et la
camparerans él ses concurrents actifs sur le marché.

Présentation générale
.Net MAUI l Ce nom exotique est en fait simplement
l'acronvme de "Net Multi-platform Application Ul". Ciest
donc un composant logiciel qui fournit une interface
utilisateur pour différents svstémes d'exploitation. Comme son
grand frére Xamarin le faisait avant lui, il prend en charge les
' WM
El.--
svstémes d'exploitation mobiles que sont Android et ÎDS, mais
en plus, et ciest une nouveauté, il prend en charge les
svstémes diexploitation Desktop Windows et macDS. ll Figure 1 :Les plates-formes supportées par .NET llrlAUl
permet ainsi de développer des applications natives quelle
que soit la plate-forme. De plus, comme nous le verrons plus A ces plates-formes s"ojoutent aussi :
tard, il existe aussi des svnergies avec Blaaor pour créer une I* Tieen, le svstéme diexploitation maison de Samsung dont
application hvbride multi-plate-forme native et Web. le support est directement implémenté par la firme
Tout ceci permet donc d'avoir a partir d'un méme code coréenne
source une distribution sur la grande majorité des supports I* Linux de maniére non officielle (support effectué par la
oujourdihui utilisés sur le marché. Mais est-ce vraiment une communauté)
nouveauté E' En réalité, c'est en fait une évolution du projet
Il-tomorin.Forms qui permettait déja de produire des Une expérience unifiée par rapport 6
applicatians pour Android et TDS. Xan*rorin.Forms
.Net MAUI a connu sa premiére pré-version en mai 2020. Le .NET MAUI profite de l'unification des différents runtimes
projet n'est pas encore disponible de maniére générale puisque permises par .NET 6 et offre ainsi une API de haut niveau
pour v accéder il faut pour le moment utiliser Visual Studio unifiée qui adresse les différentes plates-formes (Android,
2022 dans sa version "Preview". Tout récemment, le T2 avril, la TOS, Windows, macOSl. Pour cela, il continue de s'appuver
version Release Candidate a été publiée. Une disponibilité sur l'ensemble d'APl fourni par Xamarin Essentials,
générale est prévue pour la fin du 2e trimestre 2022. renommé pour l'occasion en .NET MAUI Essentials. Ces API
permettent diaccéder aux fonctionnalités des appareils natifs :
Actuellement .Net MAUI prend en charge les plates-formes connectivité, accés aux capteurs comme liaccélérométre ou
suivantes (Figure 1) : la lampe de poche, envoi de SMS,lmails... Il reste cependant
*I Windows Desktop ainsi que la plate-forme UWP (Universal possible de travailler avec les APIs natives si nécessaire.
Windows Platform) gréce a Winlll 3 (Windows Ul Librarvj
*I Android tir partir de sa version 5.0 (API 21] La grosse nouveauté se situe dans le fait quiavec .Net MAUI,
*I TDS ri partir de sa version T0 il n'y a qu'un seul projet qui pointe sur différentes plates-
l macDS 6 partir de sa version l0.l3 (via Mac Catalvstl formes quond, pour )tomarin.Forms, il v avoit un projet par
Microsoft annonce apporter une attention particuliére pour plate-forme. En ){amarin.Forms, il était possible diextraire
conserver des features équivalentes sur toutes les plates- des librairies afin de mutualiser une grande partie du code et
formes. de les référencer dans les différents projets. Cependant

prog rammeacom
certains éléments restaient dupliqués sur chacun des projets, De nouveaux patterns
c'était notamment le cas des différentes polices d'écritures de développement
ou méme des images. Tout ceci est révolu avec .Net MAUI Irtamarin utilisait déjé le pattern MVVM (Model View View-
(Figure 2). Model) avec liutilisation du XAML depuis sa sortie en 2006.
A propos des images, la prise en charge du format SVG sera Avec .Net MAUI, Microsoft introduit la prise en charge de
intégrée de maniére native dans .Net MAUI, ce qui patterns plus récents comme MVU et Blaeor. MVU (Model-
simplifiera largement son utilisatian et permettra d'avoir un View-Update) rompt avec le pattern MVVM en rendant l'état de
rendu visuel totalement basé sur une approche vectorielle. l'opplication immuable, en apportant de la centralisation et de
liexplicitation (l'étot ne peut étre initialisé et mis a jour qu'a un
Pas de panique pour autant si vous migrer depuis seul endroit). MVU empéche aussi les problémes d'occés
){amarin.Forms, il vous est possible de continuer a travailler concurrents. Le XAML est toujours pris en charge, le projet par
avec vos différents projets sous MAUI. défaut est d'ailleurs toujours généré avec du )'='.A.lvlL. Du point
de vue du code, MVU ressemble beaucoup a la sémantique du
Rechargement 6 chaud Dart pour Flutter. La figure 4 montre un code en version ÎÁAML
Tout comme .Net 6, MAU! intégre le rechargement a chaud respectant le pattern MVVM, celui de la figure 5 montre une
(hot relaad). Le confort et la facilité de développement sien version en C# respectant le pattern MVU. Ces 2 bouts de code
trouvent accrus. Les changements opérés dans un fichier produisent exactement le méme rendu graphique.
XAML sont immédiatement reportés dans |'application en
cours d'exécution, méme sans sauvegarde.
Figure 2 _* le Single Project Concernant le code écrit en C#, il suffit de cliquer sur le
bouton l-lot Reload de Visual Studio 2022 pour que les
changements soient effectifs tout en conservant bien sür
l'état actuel de l'application.

Intégration avancée Figure 4 - MVVM


clans Visual Stuclio 2022
Microsoft a enrichi liintégration de .NET MAUI avec Visual
Studio 2022 afin d'améliorer l'expérience du développeur. Por
exemple, une fenétre miroir de l'app|ication lancée en debug
vient siintégrer directement dans Visual Studio, ce qui est
pratique pour les développeurs qui travaillent sur un seul écran.
Il s'agir véritablement d'un miroir; ce qui signifie quion l'on peut
interogirovec et que liétat est le méme que celui de liapplication
lancée en debug. ll est également possible diutiliser des outils de
Visual Studio comme les régles qui vont nous permettre de
mesurer différentes tailles en pixels directement sur une
application en cours diutilisation (Figure 3). Figure 5 - MVU

Figure 3 -
XAMT. Live Preview

jÎ.ll"tÎlIt_:,tl"lÎIl"l"ll"l"lE'I.tItÎiIl"l"t
C"est alors une affaire de goût : MVU apporte l'immutabilité,
irrésistiblement liée 6 l'univers des langages fonctionnels
comme Elm dont il est issu. Cela reste cependant une option A
et les développeurs habitués a MVVM peuvent continuer 6
utiliser ce pattern.

Ellaror a été pensé comme une alternative a JavaScript pour _ iii- _ “P


les développeurs de liécosvstéme C# et .Net en se basant sur
la technologie WebAssemblv. La possibilité d'utiliser Blaeor
avec .Net MAUI suit la logique qui avait fait le succés 'l' j t . ri'
d'Electron JS, c'est-ri-dire utiliser une méthode de
développement respectant les standards du Web pour
développer des applications Desktop. Grace a
Bla.r:orWebView, .Net MAUI ajoute a cela les plates-formes Figure 6 - Décauplage des contrôles dela plate-forme
mobiles. ll est donc possible de développer une opplicotion
Android avec du cade HTML. que lion écrit ses modifications diinterface dans le cc-de C#,
De plus, il est possible d'intégrer une applicatian Blaeor liaffichage visuel se met 6 jour 6 chaque sauvegarde de code
existante pour l"intégrer a un projet .Net MAUI trés dans la fenétre graphique.
facilement.
Composants visuels
Découploge de l'interface utilisateur M.AUl permet nativement de choisir un théme parmi les
et du systéme d'exploitation différents visuels courants (Cupertino, Material Design,
Un des principaux apports de .Net MAUI est aussi le Fluent ID) et offre égolement la possibilité diétendre les
découplage qui a été opéré par les équipes de Microsoft au contréles de maniére plus facile que J-(amarin Forms
niveou de l'architecture des moteurs de rendu. En effet, il est (notamment sans utiliser de custom renderer). Dés sa sortie
maintenant question de "slim renderers". Pour comprendre officielle, il est fort probable que certains éditeurs de
la différence, il faut voir comment fonctionnait composants profitent de cette possibilité pour proposer leurs
)(amarin.Forms auparavant. Les moteurs de rendu qui propres visuels compatibles MAUI.
produisaient les vues natives dépendaient directement des
contrérles de )tamarin.Farms. Avec MAUI, une interface a été Intégration dans
introduite entre les contréles MAUI et les moteurs de rendu Fécosystéme Microsoft
natifs. Microsoft met tout en ploce avec MAUI pour que les
Si l'on prend liexemple du bouton sur la figure 6, il faut développeurs habitués aux technologies Microsoft puissent
considérer que l'interface lButton niétait pas présente dans faire du développement mobile multi-plates-formes dans leur
.i{amarin.Forms. écosvstéme préféré tout en capitalisant sur leurs
connaissances.
Ce changement permet de dissocier la responsabilité du L'important pour eux était d'intégrer complétement Xamarin
rendu spécifique a la plate-forme, qui est géré par chaque dans l'univers .NET a partir de .NET 6 et de proposer la
moteur de rendu, et l'implémentation de l'interface méme expérience pour tous les développeurs. : que celo soit
utilisateur. via Visual Studio, via VS Code (oa le debug est égolement
Par conséquent, cela permet de créer des implémentations supporté) ou via la CLI.
alternatives de l'interface utilisateur; mais qui restent basées .NET 6 étant par ailleurs une version LTS (Long Term Support
sur .Net MAUI pour la gestion multi-plate-forme. - donc supportée jusquia fin 2024), cela devrait rassurer les
entreprises envisageant de migrer sur cette technologie.
Le projet Comet
Ainsi, il v a déja un projet expérimental qui profite de ce Pour les développeurs ){amarin.Forms, la migration sera
changement, Comet, et qui met tir disposition un pattern facile. Pour les nouveoux, la marche sera un peu plus
MVU. importante, mais ils ne seront pas perdus, cor MAUI continue
Au lieu de se baser sur )tAlvlL, Comet permet de définir de sioppuver sur le couple )(AMLr'C# qui survit a
entiérement ses interfaces graphiques avec du code Crit lienchainement des technologies depuis l'apparition de WPF
Fluent. Les API Fluents, populaires depuis quelques années, en 2006.
se basent sur des méthodes d'extension pour permettre
d'appeIer les méthodes de maniére choinée. Cela signifie Profiter de toutes les features des derniéres versions de C#
qu'on pourra ajouter un élément graphique de type texte est trés agréable pour des développeurs Back ou habitués
argenté en taille de police de T0 et avec une marge interne aux frameworks Web Microsoft. Pour autant, les
de 30 avec la svntaxe suivante : développeurs préférant la programmation fonctionnelle et
new Tart(*'Hella Warld!”).Fnnt5ire(lH].[alar([alor.5ilvr-rj.Pt|dding(3ll); aficionados de F# seront ravis d'apprendre que .Net MAUI
Comet tire ainsi complétement profil du hot relaad : pendant supporte également ce langage.

progremmez.com
.NET MAUI vs ses concurrents le développement diapplications natives - a son arc, qui en
Si MAUI a copié le rechargement 6 chaud sur ses présentait déja de nombreuses autres : le développement
concurrents, c'est que c'était une feature incontournable d'applications Web, d'APl REST ou méme de jeux vidéo avec
dans l'écosvstéme de développement mobile actuel et l'un Unit).
des paints noirs de )-tomarin dans les comparaisons passées
avec ses concurrents. Conclusion
Si MAUI propose une svntaxe en Cdt Fluent pour définir ses l_'ambition affichée par Microsoft est clairement de fournir
interfaces, ciest qu'il souhaite attirer tous les développeurs qui des outils modernes aux programmeurs de sa communauté
ont trouvé que c'était une super feature de Swift Ul ou Flutter. existante pour qu'iIs n"aient pas rfi aller voir ailleurs pour
Si MAUI souhaite développer une communauté Front autour produire des applications qui répondent a des
d'un langage bien connu des développeurs, ciest parce qu'il problématiques dans l'air du temps. En effet, un
pense que la réussite de React Native a été de se baser sur programmeur habitué ri lienvironnement .Net sera prét
une forte communauté JavaScript, alors que le ticket d'entrée relativement rapidement et facilement 6 produire des
pour Flutter est plus importa nt avec la nécessité de monter en applications multi-plateformes grace a .Net MAUI, ce qui
compétence sur Dart. peut l'encourager 6 préférer cette solution a liapprentissage
Si Microsoft nous propose un produit mature, ciest que ce d'un nouveau langage.
n'est pas vraiment un nouveou produit, mais une grosse En revanche, bien que les fonctionnalités se rapprochent de
évolution de )'íamarin.Forms agrémenté de tous les celles des frameworks déja bien installés sur le marché
avantages qui lui manquaient par rapport a ses concurrents. comme React Native et Flutter, il semble assez peu probable
Si Microsoft investit pour que ses concurrents comme Flutter que des développeurs en dehors de l'écosvstéme Microsoft
puissent aussi construire des applications Windows, ciest que fassent le pas pour jr entrer. Un peut dire qu'avec .Net MAUI,
la société ne met pas tous ses oeufs dans le méme panier; Microsoft cherche 6 combler son retard par rapport aux
refroidie par liexpérience du possé (morts successives de autres géants que sont Facebook et Google, qui soutiennent
Silverlight, WinRT Windows Phone,...). respectivement React Native et Flutter; pour conserver sa
Il reste cependant une grasse spécificité dans liapproche de cammunauté de développeurs.
ce marché par Microsoft : au lieu d'avoir un outil phare qui Est-ce que cette évolution et ce changement de nom suffiront
cible exclusivement les développeurs Front, la firme de a apporter ri .Net MAUI le succés qu'ont pu connaitre ses
Redmond a une autre stratégie : capitaliser sur son langage concurrents il L'avenir nous le dira, mais les éléments
de prédilection trés répandu. techniques sont la. Dbjectivement, .Net MAUI répond aux
Avec .Net MAUI, Cd* ajoute finalement une nouvelle corde - critiques qui avaient pû étre portées a l'encontre de ttamarin.

DEVCON#14
Conférence
dévelappeur

19mat2Ø22 GitHub
€SG|
À l'école ESGI écolo supérieure de
genre rntormatrqae
flüdewm-pg
Î

www.programmez.com
DROGRGMMGZ!

|ÎIII'l.ÎirIQl"r'.Îll"I"II"l"lE'I.r'ZtÎ.ll"l"'l
Jamstack, sauveur
(Îles DGTITS COITIITIBTCGS PART|e 1
Depuis (apparition de la COVID-19 et des mesures qui
ontete prises pour limiter la pandémie, l'e-commerce mstcrck
s'est developpe massivement et a permis aux commerçants de rebondir et de maintenir
leur activite. Cependant, lorsque tout le monde se lance dans l'e-commerce, il est
important de se différencier des concurrents. Mais quelle technologie choisir? Quels
outils? Car la rea ile du web ne facilite pas le choix. Le Jamstack est une approche
.rf J"

pragmatique face aux classiques CMS.


Jamstack est une obréviotion inventée par Mathias Biilmann, le contenu d'un site Internet. S'il est rr headless rr, alors il
PDG de Netlify, qui signifie "JavaScript, API and Markup". expose la donnée sous forme d'APl uniquement et est tota-
Jamstack fait référence 6 une architecture de développement lement découplé du front-end.
web qui permet aux développeurs de s'appuver sur les avan- I* Des pipelines d'intégration et de déploiement continu
tages diun site web statique tout en conservant les attributs TCITCD) : Chaque modification de contenu, sur le CMS ou
dynamiques d'un CMS orienté base de données, sans la base sur le code source, est notifiée 6 un serveur d'intégration
de données. Elle peut étre utilisée pour de nombreux usages : continue qui va reconstruire le site.
site vitrine (avocat, restaurant...), site personnel (blog, port- r Un hébergement CDN : Un CDN (Content Delivery
folia...), site e-commerce. Figure 'I Nehvork) est un maven dihébergement depuis plusieurs
Un site en Jamstack est constitué de différents éléments qui sont : serveurs situés dans des zones géographiques différentes. ll
permet de charger le contenu de la page web depuis le ser-
veur le plus proche de l'utilisateur et donc de réduire le
-'.Tcr.1.ro-.5t1r“'rFr'l.Î ÁFTI5 Hm* “P
temps de chargement. Les principaux sont Netlify et Vercel
. D ' Un ou des services tiers : llécosvstéme florissant des API
permet de trouver une solution pour a peu prés tous les
besoins, dela gestion des paiements et des données defor-
mulaire a l'authentification des utilisateurs, en passant par
Figure 'I le stockage et la récupération des dannées en temps réel et
la gestion des trîiches de commerce électronique. Figure 2
1* Un générateur de site statique (GSS) Un générateur de Dans une architecture classique, les pages sont calculées 6
site statique est un outil qui construit des pages HTML sta- la volée : chaque requéte est reçue par le serveur qui génére
tiques. partir du contenu d'un CMS ou d'un autre svsté- la vue et la renvoie rir l'utilisateur;, alors que dans une archi-
me, le GSS applique un modéle ou choix et génére une tecture Jamstack, les pages sont pré-générées : quand le ser-
structure de fichiers HTML purement statiques, ce qui veur en reçoit liordre, il construit la vue de chaque page du
donne des pages prétes pour le web. Parmi les plus connus, site, et tout le site est servi depuis un CDN.
nous retrouvons Gotsbjr, Nexcjs, ou encore Eleventv
1' Un CMS headless : Un CMS (Content Management Pourquoi la Jamstack ?
Sjrstem) est un type d'application web qui permet de gérer ll v a beaucoup diavantages a développer un site de e-com-

Figure 2
loire'-rré'ra*l'5~cr-H* Je site
åta-taut 5E:.I"I-'i-Cr: '|§ÎEI"'-1'-

,É le
,,_.,«*'”“ j l
~

T un il-ol rrrcrrr-ag."*rr
J-H re 5 i-:rue

cr-rs ““f-'e,, gin / **~._g_


Hfiflrfllltlfoflr /I,-"":"“"-._ r _

- j' l _
ifëo-e.r-e.rr"lI E Hšhcrgùflui rie
ÎÎL- jr.)fl'~"f-*Ep-¢~"lïE.'-I'
j crfcrr 1- mi." :pg 5, :Hat clsrv A **`*“**"i~=*"“ Fr-=-Ht-er-rl

î .rre /S i
en: _l \___-//I

prog rammeacom
merce avec la Jamstack, mais le plus évident est liaméliora- cace pour ce probléme précis [l]. lls ajoutent des briques
tion considérable des performances. Pour commencer, a dvnamiques dans la version statique du site afin de person-
chaque fois qu'une modification de contenu est appliquée naliser le site au profil de l'utilisateur connecté. Si l'utilisateur
dans le CMS, le site est entiérement reconstruit cérté serveur. a déja commandé des produits féminins, il verra donc mis en
En conséquence, lorsque les utilisateurs visitent le site, ni les avant les articles pour femme. Afin d"éviter la page blanche
API ni les bases de données ne sont appelées. Sion ajoute rir pendant le temps de chargement de ces briques djrnamiques,
cela que toutes les pages générées sont prétes a étre ils se servent du "Skeleton Screen". Cette technique mise en
consommées sur des serveurs de CDN géographiquement avant par Luke Wroblewski en 20l 3 part du constat que les
proches de l'utiliseteur. où qu'il soit dans le monde, alors on pages de chargement habituelles attirent l'attention des utili-
obtient des performances nettement accrues par rapport a sateurs sur le fait qu'ils sont en train d'attendre [2]. Le
une architecture classique. Skeleton Screen consiste a afficher ce a quoi devrait ressem-
Utiliser un CDN permet également de compenser de façon bler la page, mais avec des placeholders ri la place des don-
transparente un éventuel pic soudain de trafic. ll met fin aux nées. Ainsi, il permet de faire patienter l"utilisateur en don-
problémes liés a la capacité du serveur ou a une interruption nant l'impression que le site est chargé. Cette astuce est déja
de connexion avec la base de données. De plus, ces pages utilisée par la plupart des géants d"lnternet comme Slack,
web statiques pré-rendues sont toujours indexées sans pro- Netflix, ou encore Twitter pour n"en citer que quelques-uns.
bléme par les robots de Google.
Enfin, pouvoir s"appuver sur une multitude de services tiers et La crise COVID et Favénement de la
se concentrer exclusivement sur le front-end rend l'expérien- Jamstack
ce de développement bien meilleure. En effet, tous ces ser- En mars 2020, le premier confinement dü a la CCJVID-l P qui
vices sont développés par des équipes entiéres consacrées tir devait durer initialement 2 semaines a été mis en place.
un seul besoin, a une seule problématique. Cela apporte un Malheureusement, la crise sanitaire étant difficilement
vrai gain de temps en termes de développement et d"expé- gérable, nous avons dû enchainer les confinements. Les vic-
rience puisque ces solutions sont déja optimisées, perfection- times économiques de ces confinements a répétition ont été
nées et sécurisées. les petits commerces qui, niétant pas des commerces dits
Suite a la mise en production, aucune maintenance n'est rr essentiels rr, ont dü fermer leurs portes. Malgré leur stock
nécessaire sur une Jamstack. Avec le CMS headless, le client bien rempli, ils étaient dans I'incapacité de vendre et donc de
a le controle surtout le contenu et devient autonome s'il a maintenir leur chiffre d'affaires. Le temps était venu pour ces
des modifications ri jr apporter. Ce CMS a l'avantage d"étre commerces de s"adapter l C'est la où les solutions telles que
simple et intuitif cr utiliser pour le client. Ce point en fait éga- le svstéme de clickdrcollect ou les solutions de commerce
lement un choix idéal pour les agences et pour les dévelop- électronique sont devenues vitales et ont commencé a se
peurs freelances pour fournir des sites clé en moin o leurs développer en fléche.
clients en les rendant autonomes.
Gréco au CMS et a liutilisation de services tiers, le coüt de Quel rapport avec la Jamstack ?
développement est réduit par rapport ri une architecture clas- Au-delo de l'élaboration de la stratégie marketing, du choix
sique. Et certains CMS tels que Contentful ou DatoCMS et des produits et du design, il est primordial lors de la conception
certains services d'hébergement comme Netlify ou Vercel d'un site de commerce en ligne de choisir avec précaution la
proposent des plans gratuits, ce qui permet de faire baisser technologie qui sera utilisée pour le développer. De plus, de
les frais d'hébergement récurrents a presque aéro. nos jours, 5326 dela consommation du web se fait via mobile,
A l"heure actuelle, il existe deux grosses limitations a la solu- il faut donc évidemment penser le site en "mobile firm".
tion e-commerce Jamstack. La premiére se présente en cas Pour un site e-commerce, il est essentiel de disposer d'un site
de catalogue de produits trés important. Par nature avec la web performant et sécurisé. Nous avons vu précédemment
Jamstack, lors cliune petite modification sur une seule page, que les Jamstack sont sûres, fiables, flexibles et surtout
toutes les pages du site sont reconstruites. Si le site contient rapides. Mais pourquoi cela est-il si important ii
des milliers de pages, cela peut prendre plusieurs minutes. Le rapport "Nlilliseconds Make Millions" de Google!Deloitte [3],
Cependant, des solutions existent déja. Gatsbjr et NextJS ont qui a analvsé la corrélation entre les taux de conversion et la
publié une option de construction incrémentale. Les vitesse d'un site web, démontre que les deux sont liés : plus
canmructions incrémentales permettent de ne reconstruire les performances sont élevées, plus le taux de conversion
que les pages pertinentes, ciest-a-dire celles qui sont réelle- augmente. La rapidité joue un rriile essentiel dans la réussite
ment modifiées. Cela permet maintenant diavoir des sites e- de toute initiative numérique et plus particulierement pour les
commerce avec de trés gros catalogues produits en sites de commerce en ligne. En effet, il est démontré qu'amé-
Jamstack. liorer le temps de chargement de 0,1 seconde améliore les
La deuxiéme limitation est le manque de personnalisation du taux de conversion de 8".l6. Figure 3
site web pour chaque utilisateur. En effet, le site étant généré
en amont (nous sommes dans une approche statique et non 2.'-l' 5.5 *'-L9. 5.?
'Ir-cconrris. secomls '-I-eceflfllfi seco-H-:ls
dvnamique, NDLR), tous les utilisateurs en ont la méme ver- 'I-|.__ . - _

sion. A liheure de liultra personnalisation, cela peut devenir


un vrai probléme pour certains. Cependant, le site de com- .
_
rev
I' È
.ï court.-'rer's.icu-s
= 1.s°r., «I 1°/.
conversion
,
*
-_
ecenrgr-s.trcrn
.-"
: 0.s°r.›
_
eerWe.I"-sien
.r
r'

merce en ligne Everlane a mis en place une solution trés effi- I:-I
'- . . '
I
_ I
' ' . il-"
Il-_.
,r ,, -I
'-._ __-
£,.r
Figure 3
progremmez.com
FTQ'-“P 4 Figure 6

l"`“*S° “P-'ff' T°'~“-ff 4€ r›....,.rr_.¿.,,~ Hogan Static Site Generetors adoption


par fieåãlün 'Fi°“V¿r'5'l°“ Web Almenec 2020; Jamstack
-Îííiiífi 1Îí.í1.í.Îí" .Î'îíT'Î'-íîm.

desl-ttop I n1oh:ie

rr. 1 +s.:.1°/. j {+s*.¢r°7.j ;+*=t.:.1°7.;


i I ll

0.B¿l›'i'r"rr

Figure T ÎJe_'¿k'l§orp ›""rc›loil.f_*_


._. D.Î"Er'i-'i:-
/
son
acl
.Tomsr o.sa*-'rs
Éûlfil 0.50 'fo 0 .E14'fs 0.34%
P009
5-_

u.-.-

2.0 2.0 0.31'-"E D .Î5'P'o o est-:. /


Pc-arcen

Êvolufliinn 'I' ïfiafs +19' iwilfi 0 0ûi~"o ÎEm EI


2020

Ê!-:rr-.--rt'.'l£-or.-c.i.' rÉ›:.es.r"stE'.-re,
Le temps de chargement a également une influence directe ll est difficile de suivre le développement de liécosvstéme ta nt -I-Jil-lin-|'.q-.rr -Je |-Il.r| IL-hi-q

sur le taux de rétention. Qui n'o jamais souffert d'une page il est rapide a l'heure actuelle. Cependant, voici une petite l\E>-fl.
web trop longue ii liste non exhaustive des principaux services tiers en termes de
Toujours selon cette étude, 56'ffs des personnes déclarent site e-commerce. Figure 5
® enfer
abandonner le site s"il met plus de 3 secondes é charger et l - -:Ici

utilisateur sur 5 ne reviendra jamais sur le site en question. L'acloption de la Jamstack ci' jme.-.rr.r.=. -_›;, ng., jf -.r
D EIJJLTU
-.:r-Is _¿___
Pour présenter cela plus simplement, la moitié des clients Selon les chiffres de 2020, le nambre de Jamstack sur le web B Eur-È-fu Tzllrlãg"

quittent un site avant méme de l"avoir visité. En plus d"avoir a augmenté de 6596 par ropport a 2019 pour les sites web
' l'I!'I!-I|.Irl'IlIll'

perdu un acheteur potentiel, on perd un client qui ne revien- desktop et de 14296 pour les sites mobiles [4]. ll existe r-'-r |
,¿_:,c~onrr'nrrrcoqrr|r E; EHIFCÂHT
dra jamais. presque deux fois plus de Jamstack qu'en 2019. Cela
¿¿]Écor.rrr.r|errce
Lorsque la vitesse d'un site s"améliore de 0,1 seconde, les démontre un vrai signe de Iialtrait de la communauté pour
données montrent une corrélation positive avec le fait que les cette solution. Figures 6 et 7 I'-liP'IliI"|'F

consommateurs consultent plus de pages par session. Plus de stripe Ê sv-*mer


pages consultées par session signifient également plus de Selon Forbes, la CCIIVID a accéléré le développement du e- D P¢IyFr:.rl
transactions et plus de dépenses. En effet, en movenne les commerce de 4 a 6 ans [5]. Saite a la pandémie, tous les
utilisateurs ont dépensé 9,296 de plus. Figure 4 vendeurs phvsiques lancent leur propre site e-commerce. ll illtrrllllrhll. .i.nI|Irl*'£l.r|l1 b!Ir|_ I|'IdIlIlI.|.r|_rI5II-rr

E algolia ll' High "Ètllfif


Un autre critére primordial a prendre en considération lors du est donc vital de sortir du lot pour optimiser ses revenus. La
développement d'un site e-commerce est le référencement Jamstack peut faire cette différence. Elle permet diétre en _ *fre elastic Q MM i.__`____Tt?r{Îrr«m
naturel. Le référencement naturel, ou SED (Search Engine haut des pages de résultats de recherche ce qui apporte un
Figure 5
Optimization), englobe toutes les méthodes et techniques qui meilleur trafic. Elle garantit des meilleures performances qui
visent cr positionner un site Internet da ns les premiers résul- influencent l'expérience utilisateur et donc |"association avec
tats des moteurs de recherche. la marque.
La Ja mstack offre toutes les qualités en matiére de SEC). Un De plus, opter pour la Jamstack apporte un vrai gain de
temps de chargement plus rapide est svnonyme de meilleur temps de développement grdce o l"utilisation des services
référencement, car les moteurs de recherche favoriseront tou- tiers, mais aussi une réd uction des coûts par son efficacité et
jours un site plus léger et plus rapide lors de l'indexation d'un le peu de maintenance nécessoire post développement.
site. ll est évident que plus un site web est haut dans les résul- l_'émulsian autour de la Jamstack et du e-commerce est tel-
tats des moteurs de recherche, plus il sera visible et visité. lement importante que Shopify vient de décider de supprimer
Contrairement aux solutions tvpe Magenta et Shopify qui per- ses commissions pour le premier million de dollars de revenus
mettent de créer facilement des catalogues de produits, une annuels [6]. Cela donne la possibilité 6 beaucoup de com-
Jamstack donne la possibilité de créer en supplément du merçants de se lancer dans l"e-commerce : c'est peut-étre
contenu éditorial qui est trés bénéfique lui aussi pour le réfé- l'occasion idéale de se lancer ii'
rencement noturel. En effet, la Core Update de Google de
décembre 2020 met dorénavant a l"honneur les sites web [1 ] htlr1s:.l.l'vnrnv.vnutul1e.armr'v.ratrh?v=Tjh_oafliVrrlåt=1s
avec plus de contenu éditorial. [2] lrlt|1s:lVvnmrr.lrrlrew.cnnrl'flr'entr',r.aspÎl1Till
Les nombreux avantages vus plus haut participent a la haus- [3] https:rVnr.*nv2.delrritte.cnmiielenfpageslcnnsultinglarticleslmillisecnnds-
se de popularité du développement de Jamstack et de sites e- malle-millions.html
commerce. Cela impacte directement Fécosjrstéme qui voit [4] httμselrlalmanne.httprrrehive.orr|fenr'202l].ljemstacltlllijj-2
naitre réguliérement de nouveaux outils : tir chaque besoin, [5] https:r'.lv.rr'nv.lurhes.cumfsitesfjuhnlnretsierf2[l2l]rl[l5fl.2feovid-lll-aa:e-
son service. l_'abondance d"outils et de ressources disponibles lerated-e-commerce-rjruwtlr-4-to-li-veorsr'
contribue cr repousser les limites de ce qu"il est possible de [6] htlμszlrlwww.jfoutrrlrernmrlwrrtrtlri-'v=WltlrHlllrr.lr|_l'
faire avec un site web statique.

prog rammeacom
Abonnez-vous à Programmez! bonnez-vous à Programmez! l-lbonnr

Toutes nos offres sur wwvv.programmez.com

ABONNEMENT 6 retourner avec votre réglement él :


uH m la n ne PROGRAMMEZ, Service Abonnements
I 57 Rue de Gisors, 95300 Pontoise
l_.l ÀlI}ü|'1l1EITlEI1'l' T GH I *Ê j:j I Un Prggrflmmgzj 1 Ê
Il Àbüfl |1E|*T|E|1'|' 2 r_]n5 1 Ê + l mois d'occés a la bibliothéque numérique ENI

U Abonnement T an Etudiant : 45 € U 2 uns pmgmmmazj ¿ 109 .Ê


152
PRDG
PPUTUCUPÊE lîlf-* IU CUFTE '-'ïl'É'-'ÎUCIÎUHT 'Î' lUlf"Cll'E` + 1 mois d'accés a la bibliothéque numérique ENI UI-
'l_
'.'.1-
P'
j:j Gptiüfl 2 UCEÈ5 j:||__|;.-;_ Cjj-*chjwj-55 Ê + l tIlI'"l EIE' _lÎ.'-'_-Î'r'Il'lt'llII.l5£lI..ll'-l'-35 (2 l'lUl"r"lÉI'ü5] .F-r
;-É'
-
"-1.
UI'
rl-
H.
.I-

-l'|.r

U Mme l:l M. Entreprise : Fonction : -I-


ÈI
.I-
H-
'-1-
-I'-'
_|
I"'r

Prénom : Nom : 'I_


.Il-

ll-._
1-.
EJ
L.

.r"r
Adresse : -h_|

'-1-
.1-

Er'--.

Code postal : Ville : :È


ar

L Adresse email indispensable pour la gestion de votre abonnement Î


E-mail : @

U Je joins mon réglement par chéque a l'ordre de Programmes: l l:l Je souhaite régler a réception de facture * Tarifs France métropolitaine
more numéro Le magazine des
IIIII
dévs

Wi LI- I. I.-1.1 _I I I Il-.I",.t_..I,.1 .*I.* 1 Ir I 4' ex r f- " H


._ _ ' _ gg 51:
IÎÎEGIÎÈAIITMÊZIÂI
_ _.. .'i. I I ._ ' _ I I I _ _-I _

Mit.
'.1-Il... -_:
“_|Ih. _-JL.
_..|__
.__'. '_
' ":-1.”
_.-.-
--e
_- _-
'II . ._'_,_.- _-. __ SPECIAL
_|-__
._.


__'-_

:I -
_ _
_.

_ -' 1- '
_... I

-'-Il-1.-.-. :"
_
.NET 5
-et ar:--v'*..'!:* *“'-1f_'*-_-_ .-
_ -'_ .lu-._ -...3-.'i:
Mgji AZQRE
1' -:I-I-:_ `_ _,:--- _

.'_,q."l âne WINIJD


or- - 'Ir r ' '
IJ- '." '
'H_._---l_`:|I:`._
".""-- _,
“ :li 1'.
_L-|
|.-1
-. I
iioinprendre et _
T"
coller des apps lit!
rtnmn
'l'lpfl'rIi|;rÇ'-I.|'I
1-
J -È
Itflilrll F'r|"ll'Ia 'I
*-=-= - l. . i
zrro
ei'
Il-Î fllï='||" eo 'I _ Il I-. I-I E -n

'H'
¢\I
_".'.". _' ' _ i.I_-"-'. ._- '_'.' _"_' '_'--L-...'-
24.2..j,iiã
gf
_-
HS02
`:DFl0GRClfûlhG_Z! EZ -I 8 .CD _-Il.C11.Z3lfiGZl to ROGFlClfilmGZ!
FiCl "l 'lE.I --_-eg. * ompiler.
lZFi'0GFil`Îl` 'l
PIII
rr-r.I:r
J
.. JZEATW éployer partout.
"_" Ftecl Hat
l'jlot.rrrlrr|'rr'rr
'H I
Le * ` oeoesran c '_
E'_ cUr *.____

ti-I'iil-riIl..'Ir"l'l'l DEVELO P UR.. Java. ûuarltus.


II,'IlI,llI:l'I.'i'fE'H'
.ll.£`Il" vr. sx Tai
il
Hoiš-10 L. API. Hua ernelesf
du code. du code et du code!
== Lrrtenner “
Ii-! F.É|l§'l"I§ll'lr!"||: _
lfi
'H'
flq '.-..I" '_ '.."` ` 'I.l.-lllI;l.ll ore 'F
2021Hson
l"I2r3'ETEl-F
E-llI'|"I CPIEIISII' IJFIÊ .l'r."|T`

HS05
2021
automne -rl - r. r -
. . Il
1-rirîfll-.'-'r.'
_.. . .. |
i
_|

DROGRCITÎITÎIGZT
_ _.¿ __ E
l LANCE-TUI i
FEHHE5

.lrlrV.tr5Cl1'lIilT Cgmplélçz
rest
rrosronesor

ä
srtcunne
eat rs r-ro-cooe
uHlr-rIr.Ir-rr`: al oarelcar-||!I|LÈ
§'.I.F'llii"CIl...'lïi'l EE-D'lE ELCI I-Il.l"5F.S
\
D
_
votre collectton. . --
lfl
hl
rr rssra os
mami ã
Tarif unitaire 6,5 *E (frais postaux inclus)
I.. IH
.gn-5 I:-1-I -:_ ._:_- '_-nl ._n.. --n_.- n-_.- ___- :T -.ma -Inn. ._. :._. .-_-_. Il-5 cn. I-n_.. '__-1% I.: 1. l-_n_- -In 1-.. .-_ _
I.
¿_-
IITIIT .I
_
I -: -. -r- .-: ~- -_' ~- .-:-'- -=.'- -to -' '- -'-- -'-'-. -= -' '- '_ -
Principales nouveautés détaillées
de JavaScript de ES2015 (E86) à
es2o21(es12),
PARTIE 1 : LES NOUVEAUTES DE JAVASCRIPT 2015
Nous allons explorer au travers de cet article les principales évolutions du langage
JavaScript de 2015 à 2021 accompagnées dexemples illustrant les nouveautes appor-
tées par les différentes versions. JavaScript repose sur les standards d'EClVlAScrlpt qui
lui se charge de définir un ensemble de normes concernant les langages de program-
mation de type script et standardisées par Ecma International dans le cadre de la spéci-
fication ECIVIA-262.
Historique des versions de ECMAScript

l Juin IPR? Premiére édition. Naissance du standard ECMA-262


2 Août T998 Mise en conformité par rapport au standard international lS0r'CEl-l 6262.
3 Décembre T999 Expressions rationnelles plus puissantes, amélioration de la manipulation des chaines de
caractéres, nouvelles instructions de contrûle, gestion des exceptions avec les instructions
trvlcatch, formatage des nombres. Elle correspond a JavaScript 1.5.
4 Aucune publication Travail inachevé qui ne verra pas le jour au travers d'une version
5 Décembre 2009 Clarification des ambiguïtés de la 39 version et introduction aux accesseurs, ri l'introspection,
pour la version 5 au confrérie des attributs, aux fonctions de manipulation de tableaux supplémentaires,
et Juin 20] l au support du format JSCIN et au mode strict pour la vérification des erreurs.
pour la version 5.1
6 Juin 2015 De nombreuses évolutions majeures apportées au langage : fonctions fléchées, portée des
variables, classes, modules, promesses pour la programmation asvnchrone, déstructuration etc.
T Juin 2016 Clpérateur d'exponentiation, nouvelle méthode pour les prototvpes de tableaux
3 Juin 201? Fonctions asvnchrones, mémoire partagée et atomique etc.
9 Juin 2018 ltérateurs asvnchrones, clause finallv ajoutée o Promise, ajout des notions de propriétés de
reste et de décomposition pour I"affectation dela déstructuration des objets etc. ..
10 Juin 2019 Ajout des fonctions flat et flatMap pour les tableaux, d'une fonction de création d'objets a
partir de couple de clélvaleur, ajout de fonctions de suppression de caractéres vides
complémentaires pour les chaines de caractéres, plus de souplesse pour la clause catch etc.
11 Juin 2020 Nouveau tvpe Biglnt, opérateur caalescent des NULL, opérateur de chainage optionnel,
import dvna mique, champs privés de classe, nouvelle fonction rr allSettled rr pour les
promesses, ajout de la fonction rr matchAll rr pour les String, standardisation de liordre
d'itérotion sur des propriétés énumérables d'un objet via for..in, standardisation pour
liobtention du contexte global (globalThis), amélioration de liexport des modules nommés, efc.
12 Juin 2021 Séparateur numérique rr _ rr pour plus de visibilité, fonction replaceAll pour les String,
nouvelles fonctions rr anv rr et rr race rr pour les promesses, opérateurs d'affectation logique,
ajout d'accesseurs privés utilisables uniquement dans une classe, etc.

Evolutions du langage la variable est initialisée. En utilisant rr let rr, la variable est ini-
Principales nouveautés de ECMAScript 6 tialisée a liendroit oû le parseur évalue son contenu.
(ES6) ou JavaScript 2015 A liinstar de rr const rr, rr let rr ne crée pas de propdété sur l'objet
Nouvelle instruction rr let rr window quand les variables sont déclarées au niveau global.
La nouvelle instruction rr let rr permet de déclarer des Syntaxe :
varia bles dont la portée est limitée a celle du bloc dans lequel let variablel [= valuel] [, variable2 [= value2]] [, ...,
elles sont déclarées. Le mot clé rr var rr, déja existant, quant variableN [= valueN]];
cr lui permet de définir une variable globale ou locale a une I Les paramétres définis par variablel, variable2, ...,
fonction (sans distinction des blocs utilisés dans la fonction). variableN doivent étre des noms de variable respectant les
Une autre différence entre e let rr et rr vor rr est la façon dant conventions JavaScript.

programmeacom
I' Les veieurs cietinies per veluel, velue2, ..., velueN sent àvis : A utiliser ees que le taesein s'en ieit sentir lersqu'en peut eviter le
tecultetives ce qui siqnitie que peur cheque verielele clecle- rnet cle v ver v. Je ne censeilie ees e'e reciecierer une verieliule pertent ie
ree, en peut indiquer, cle teçen eptiennelle, se veleur initiele. reerne nern cie veriei:›ie elens un seus isiec inclus dens un hiec principei, eu
Ces veleurs peuvent être n'imperte quelle espressien elle est cieie elecleree, peur cles reisens de cempreiiensien e“e cecie eiin
legele. el'eviter teete emhiguite.

Exemples : Neuvelle instruction v censt v


lllustretien cle l'utilisetien de tt let si Le neuvelle instructien v censt v permet cle creer une
censtente nernmee qui est eccessible uniquement en lecture-
Cele ne siqnitie pes que le veleur centenue est immuelele,
uniquement que |'iclentitient ne peut pes etre reetiecte.
Mfichege dens le censele : fltutrement clit, le veleur cl'une censtente ne peut pes etre
med ifiee per des reefiectetiens ulterieures. Une censtente ne
peut pes être decleree e neuveeu.
Les censtentes tent pertie cle le pertee du elec (cernrne les
veriehles clefinies evec v let vl eu elles ent ete detinies. le
clitterence cles verieleles clefinies evec v ver v, les censtentes
cleclerees eu niveeu glebel ne sent pes cles preprietes clu
Aifichege dens le censele : centexte glebel. Au sein d'une même peitee, il est impessilele
cl'eveir une censtente qui perteqe le même nem qu'une
veriehle eu qu'une tenctien.
lllustretien de le pertee cles veriel::-les vie -:t ver n et v let v
À neter :
' il est necesseire tiiinitieiiser une censtente iers de se ciecieretien.
' i.e clecleretien v censt v cree une reference en lecture seule vers une
veleur. Cele ne signifie ees que ie veleur reierencee ne peut pes être rneeli-
fiee- Ainsi, si le centene de ie censtente est en ehiet, l'ei1ietlei-même
peerre teqieurs etre rneeliiie ee niveeu ele ses preprietes entre eutres.

Syntmte :
censt CONST_i*l£'~JvlE_l = veluel [, CGNST_Nrïsi'vlE_2 =
vc|lue2 [, [, (.ÎO'NST_|`*liÎkME_N = veluel*-l]]];
I* Les perernetres eetinis per COH5T_NetME_l,
CiÎJl\lST_l`*lAiv'lE_2, _.., CiÎiNST_N.¿tiv'lE_N peuvent etre
n"imperte quels iclentitients velicles.
'I' Les veleurs detinies per veluel, velue2, ..., veluel\l repre-
sentent des veleurs esseciees e des censtentes. Ces veleurs
peuvent etre n'imperte quelles espressiens velicles, v cem-
Mfichege dens le censele : pris une clefinitien de tenctien.

Exemples :
Altichege de le veleur cl'une censtente definie

Àftichege dens le censele :

Échec cle chengement cle veleur cl'une censtente

Attichege dens le censele :

pregrenernez.cern
Cele levere une et-tceptien v TvpeErrer v cer en ne peut pes Altichege clens le censele :
reetiecter une veleur e une censtente.

Echec de redetinitien d'une verieble vie le met cle v ver v


eu sein d'un même blec Succes cle recleiinitien d'une même verieble vie le met cle
e censt iv eu sein d'un hlec different

Cele levere une esceptien v 5vnte:rErrer v cer en ne peut pes


cletinir une meme verieble cleie definie cemme etent une
censtente.

Echec cle retlefinitien tllune verieble vie le met cle vr let v- eu


sein cl'un même blec

Àffichege dens le censele :


Cele levere une et-:ceptien vt Svnte:›tErrer v cer en ne peut ees
cleiinir une rnerne verieble clejcl clefinie cemme etent une
censtente-
Echec de redefinitien cl'une même verieble vie le met cle
Echec cle redefinitien d'une verieble vie le met cle v censt v v ver v- eu sein d'un blec different
eu sein d'un même blec

Cele levere une esceptien v 5vnte:~:Errer v cer en ne peut pes


cletinir une meme verieble cleje clefinie cemme etent une
censtente.
Cele levere une esceptien v Svntei-tErrer v cer en ne peut pes deli-
Succes de redetinitien c|'une même verieble vie le met cle nir une mërne verieble cieie cletinie cemme etent une censtente
vr let v- eu sein d'un blec different vie le met cle v ver v etent cienne qu'il e une pertee glebele.

Échec de clefinitien cllune censtente sens initictlísetierl per


défeut

Cele levere une esceptien v 5vntes:Errer v cer une censte nte


cleit teuieurs être clecleree evec une veleur.

Echec cle redefinitien cle le veleur rfune censtente

F.ll"t2Î2il;l,l"lIIIi"f'll"l"Il.E'I.'IiIlîÎIIl"l"l
Cele levere une eitceptien e TvpeErrer v- cer en ne peut pes
reessiqner une veleur e une censtente.

Àvis : A utiliser des qu'en seuheite definir une censtente. ie ne censeiiie


pes ele reclecierer une verieble pertent le même nem rie verielsie clens un
sees elec inclus elens un iniec principei, ee elle est rieie clecieree, peur des
Cele levere une ei-iceptien -v TvpeErrer si cer en ne peut pes reisens tie cemprehensien cie cee'e eiin ei'eviter teute embigeite.
reessigner une veleur e une censtente.
Àjeut du v Spread epereter v- lüperetien de decempesitien
Chengement cles preprietes d'un ebiet déclere en tent -«I -+1
qu'une censtente Le svnteste de clecempesitien permet cl'etendre un iterelele
lper exemple une eszpressien cle tebleeu eu une cheine cie
cerecteres) en lieu et piece de plusieurs erguments (peur les
eppels de tenctiensl eu cle plusieurs elements lpeur les litte-
reus cle tebleeusi eu de peires cles-veleurs (peur les littereus
cl'el:›]etsl.

Exemples :
Decempesitien d'un tebleeu

.Mtichege dens le censele :

Aftichege dens le censele :


lci en decempese un telsleeu en recuperent ses elements pre-
sents vie l'epereteur v v eppele v Spreeci epereter v.

lfievemple prececlent mentre qu'en peut suppnrneiç meclitier Fusien cle cleui-1 tebleeu:
et eieuter cles preprietes d'un elitjet cletini en tent qu'une
censtente.

Ajeut de neuveeus: items clens un tebleeu defini cemme


etent une censtente

.Mtichege dens le censele :

Aitichege dens le censele :

Echec de redefinitien d'un tebleeu cletini cemme etent une Avis : 'lies pretique peur teire ele le recepie et cle le iusiee e'e centenu de
censtente tetaleeuii et ele le cepie e“el;›iets. A utiliser des qu'un peut et sens limite.

Delinitien de Template Iiteruls ilittereuit de geherits)


Les qelïierits sent delimites per des cerecteres eccent greve l` `}
eu lieu cles epestrephes cleubles eu simples. Les geberits
peuvent centenir des especes reserves (plecehelders). Ces
especes sent incliques perle signe cleller ($} et cles eccelecles
l${e:q:=ressien}). Les espressiens cle ns les especes reserves et
le teste cempris clens ces especes sent pesses cl une fenctien_

pregremmeecern
Peur creer le cheïne tinele, le tenctien per defeut cencetene
simplement les ditierentes perties en une seule cheïne.
Àftichege dens le censele :
Exemples :
Cencetenetien de cheines de cerecteres event E56

Àffichege dens le censele :

Avis : lies pretique dens certeins ces de mettre des veleurs de peremetres
per deieut eiin d'eviter de deveir ceder l'el1sence de peremétres dens le
cerps de le ienctien. Cele permet de simplitier et de réduire le cede. On
peut eeelement prepeger des evceptiens e le piece de veleurs de pere-
metres per deieut.
Aitichege clens le censele :
åjeut du rt Destructuring iv (lxlffectutien per décempesitien}
Le v Destructuring v est une expressien Jeve5cript qui permet
Cencetenetien de cheines de cerecteres e pertir de E56 d'extreire des dennees d'un tebleeu eu d'un ebjet grece e
une svntexe dent le ferme ressemble e le structure du
telsleeu eu de l'ebjet.

Exemples :
Extrectien de dennees depuis un tebleeu event E56

Àffichege dens le censele :

Àvis : Je precenise d“utiliser les littereux de gelterits cer cele permet de Attichege dens le censele :
rendre plus lisible ie cencetenetien de cheines de cerecteres.

Ajeut de le netien de peremétres per défeut peur une Extrectien de clennees depuis un tebleeu e pertir de E56
lenctien
E56 e intreduit un meven d'ejeuter des veleurs per deteut e
le liste des peremetres de le tenctien. Cele se meterielise per
l'eieut du cerectere v = v suivi d'une veleur juste epres le
detinitien d'un peremetre.

Exemples : Atfichege dens le censele :


Appel cl'une tenctien cempesee de deux peremétres initie-
lises per defeut
Les v [ ] v representent le tebleeu e destructurer et -=~= X v,
v Y v, v Z v representent les verieleles eu les veleurs du
te bleeu deivent etre steckees. `v'eus n'evez pes besein de spe-
citier les index du teleleeu cer ils sent eutemetiquement impli-
.ettichege dens le censele : cites. Penclclnt le destructuretien, certeines veleurs peuvent
être iqnerees, per exemple le veleur -v Y v peut être iqneree
cemme indique ci-desseus 1

Affichege dens le censele :

eftichege dens le censele :

F.ll"t2Î1Il5il"lIIIl"f'll"l"ll.Ê'I.'tIlîÎIIl"l"t
Aifichege dens le censele :

Extrectien de dennees depuis un elzijet event E56


Aitichege dens le censele :

Avis : ties utile diextreire pertieliement des preprietes diun elniet et des
elements d 'un tebleeu- Ceie simplifie netemm ent l'ecriture d'ei-rtrectien des
preprietes d'un etiiet cer en n'e pes lneseiri de spécifier les chemins cem-
piee veccedent. Per exemple, en Fteect, en utilise tres seuvent ie v destruc-
turing v evec -r preps ii.

Simplilicetien de le definition des preprietés d'un ebiet


si Ohieet liteml Sherthend ii (Abreviutien de litterul r:l'ebjet}
E56 etlre une neuvelle feçen d'initieliser les ehiets sens repe-
titien de cede, ce qui les rend cencis et teciles e lire-
Avent E56, les ebjets eteient initielises en utilisent les memes
nems de preprietes que les nems de veriebles qui leur eteient
Aifichege dens le censele : ettribues, cemme indique dens l'exernple ci-desseus :

Extrectien de dennees depuis un ehiet e pertir de E56

Aitichege dens le censele :

En regerdent de pres l'exemple precedent, il est cleir


que -rr l3rend:brend v et v medel:rnedel v semblent reden-
Aifichege dens le censele : dents et le neuveeute de E56 est de supprimer ces nems de
veriebles en deuble dens les preprietes d'un ebiet si les pre-
prietes ent le même nem que les veriebles qui leur sent essi-
Les rr { } v representent l'el:iiet e etre decempese et qnees, cemme indique dens l'exemple ci-desseus :
-=-= brend v, rr rnedel ii, ii celer v- et -=-= veer v representent les
veriebles eu stecker les preprietes de I'el:iiet. Il n'est pes
necesseire de specitier le prepriete d'eù extreire le veleur cer
l'ebjet v iv'l`ï'_CAR v centient deje une prepriete eppelee
v lerend v et le veleur est eutemetiquement stecl-:É-e dens le
verieble -=~: prend v.
Cemme peur le decempesitien de tebleeu, le decempesitien
d'el:›jet permet cl'extreire uniquement les veleurs necesseires
e un mement denne.

Extrectien de le seule prepriete v celer v de l'eb]et Afiielvege dens le censele :


rr MY CAR n

Avis : A utiliser sens limite cer ceie simplifie le cede en enlevent les reden-
dences.

Aieut d'une neuvelle maniere de définir une tenctien


vi Arrevr funetiens v {Fenetiens tleeheesl
.Au trevers de cette neuveeute, en e veulu simplifier le svntexe
diune tenctien en intreduisent les tenctiens ilechees-

pregremmexcern
Avent E56, le seul meven de definir une tenctien eteit de devient eleliqeteire seulement si en seuheite reteurner un
declerer se ienctien cemme suit : résultet.

tunctien tunctienblemeipereml, ..., pereml\l) {


Avis : Fes recemmende cer cele simplifie l'ecriture des fenctiens et les
rend meins verineuses.
i
eu v tunctienNeme v represente le nem de le fenctien et Aieut des clesses
iv pereml v,___, v peremN v les peremetres eptiennels de le E56 e intreduit les clesses qui ne sent qu'un -v edden svn-
tencflen. texique v per reppert 6 l'l1eritege preteivpel. Cette neuvelle
Depuis E56, en e desermeis pessieilite de declerer se lenc- svntexe n'intreduit pes un neuveeu cencept d'heriteqe dens
tien cemme suit : Jeve5cript et se cherqe uniquement de feurnir une svntexe
plus simple peur creer des eleiets et menipuler l'heritege. Une
censttunctienhleme = lpereml, ..., pereml\l) :Iv { };
clesse Jeve5cript est en feit une tenctien speciele qu'en defi-
eu v tunctientleme v represente le nem de le tenctien et nit de le même meniere qu'une tenctien clessique per decle-
v pereml v,..., rr peremN v les peremetres eptiennels de le retien eu per expressien. Leur cempertement niest pes le
tenctien. même que celui des lengeges de pregrernmetien erientes
ehjet tels que Jeve_
Exemples :
Definitien d'une tenctien d'edditien event E56 A neter :
E56 e ègelement intreduit deux neuveeux mets-cles, v super v et
v extends v, qui sent utilises peur étendre les clesses.

Exemples:
Deiinitien ¢;l'une e Arrevv lunctien si t:l'£1ClditÎen Decleretien et instencietien d'une clesse simple evec une
tenctien nen stetique

Definitien d'une v Arrevr tunctien v qui censtruit et reteurne


un neuvel ebjet

Affichege dens le censele :

lci les perentheses euvrente v i v et termente v l v dens le lelec


de le tenctien permettent de preteqer le creetien de l'eb]et et
clenc eviter que les ecceledes euvrente -v { v et termente rr } v
ne seient interpretees cemme le dellmiteur d'un blec de ienc-
tien. lci, le met cle v return si est eesent dens le tenctien rneis
il est implicite en l'el:›sence du delimiteur de l:1lec_

Definitien d'une rr Arrrnv fenctien vi evec plusieurs instruc-


tiens 6 executer

Attichege dens le censele :

Definitien d'une expressien de ciesse enenvme evec une


tenctien nen stetique et sen instencietien

lci, etent denne que plusieurs instructiens definissent le cerps


de le tenctien, elles sent delirnitees per des ecceledes
euvrente rr { v et terrnente -rr } v et du mement eù en délimite
le hlec de le tenctien vie des ecceledes, le met cle v return v

F.ll"tiÎ2il;l,l"iIIi"f'll"l"Il.E'I.'tIlîÎIIl"l"l
Aftichege dens le censele :

Affichege dens le censele :

Deflnitien d'une expressien de clesse nemmee evec une


fenctien nen stetique et sen instencietien

Avis : Peur ie cemniuneute des v ieveteuii v, ceie permet de se reppre-


clver de l'ecriture qu'eile cenneit bien d'une clesse et ciest bien eppre-
cieble

Ajeut des netiens d'experti'impert des medules


Un medule E56 est un fichier centenent du cede Jeve5cript
et il n'v e pes de met cle specifique désignent un medule. Un
medule est lu cemme un script et il peut être defini cemme
un fichier JS cempertent des censtentes, des fenctiens, des
clesses etc.
Les medules E56 sent censideres cemme ecrits en mecie
strict. `v*eus peuvez imperter et experter des medules vie les
epereteurs v impert v et -v expert v.

Expert de medules
Per defeut, dens un medule, rien n'est defini cemme public
ce qui signifie que si d'eutres medules veulent beneficier des
tenctiens, des censtentes, des ebiets, des clesses, etc. qui v
sent clecleres, il feut les experter vie le met cle rr expert v.
Un peut experter les elements seit eu fur et 6 mesure seit 6
Affichege dens le censele : le fin du medule qui est beeuceup plus recemmende peur
plus de clerte et de visibilite.
Peur eviter de designer per un nem ce qu'en experte, en peut
Definitien d'une clesse heritent d'une eutre clesse et sen reeliser jusqu'e un seul expert per defeut.
instencietien Un peut renemmer les elements qu'en experte vie le met cle
rr es v- suivi d'un cerectere espece puis d'un neuveeu nem.

Exemples
Expert de fenctiens nemmees, d'une clesse nemmee, d'une
censtente renemmee et d'une fenctien per defeut (fichier
rr med.mjs vi

pregremmexcern
lmpart multiples

Affichage dans la censele :

Avis : i_es meduies sent tres pratiques peur centreiiser des fenc-
tiens utilitaires, des censtentes et autres. L'expert et l'impert des
medules centribuent e une meilieure structuretien de sen cede
architecturaiement parlant.

Ajaut des Pramise (premesses)


Java5cript a la velente de se teurner de plus en plus vers des
medeles asvnchrenes car cela permet au meteur Jave5cript
de gerer plusieurs teches en parallele ievenements, afficha-
ge, interregatien sur le lecal stere...} et de censerver une
interface reactive malgre le fait qu'il seit v Single Thread v.
Peur fermaliser cela, E56 e cree un ebiet nemme Premise
lmpart de medules (Premessel Les premesses sent danc des ebiets qui reteur-
Uimpert censiste 6 imperter des elements qu'en a bien veulu nent la valeur d'une eperatien esvnchrene, autrement dit
experter dans d'autres medules. Peur imperter un element elles representent une valeur future.
d'un medule qui a ete experte en le designant par un nem, Elles dispesent de methedes permettent de traiter le resultat
en l'imperte en l'encadrant par des ecceledes en suivent la une fais l'aperatien accemplie ithenil et catch{)) et vent neus
svntaxe : permettre de neus affranchir des v cellbeck v des fenctiens,
v impert { mvitem } tram 'path' v. qui sent clesermais attachees 6 le premesse. Cela permet cle
Peur imperter un element d'un medule externe qui a ete naus liberer de l'inversien de centrele induit par les cellbecl-as
experte par defaut, en n'a pas besein dieccelade peur imper- (c'est danc la fenctien appelee qui est chargee de les lancer).
ter cet elernent et en peut le nemmer cemme en sauhaite en On peut chaïner les premesses via l"eperatien v .thenii v-
suivent la svntaxe : Peur rappel, une -s callbacl: v est une fenctien de rappel pas-
rr im pert rrijrfustemitem tram 'path' v. see dans une autre fenctien en tant qu'argument, qui est
executee 6 l'interieur de la fenctien externe peur accemplir
Exemples : une actien.
lmpert avec renemmage de certeins elements impertes Une premesse cemperte 3 etats passibles :
* Fulltilled ireseluel : le veleur de la premesse est reteurnee
sans erreur. La fenctien -s reselve v est appelee.
I* Rejected (rejetee) : Une erreur est survenue et en a pessi-
bilite d'eftectuer un traitement vie la fenctien si reiect v.
*I Pending ten caurs) 1 Le valeur reteurnee par la premesse
n'est pas encare dispanible.

A nater : une feis le premesse reselue eu reietee, elle ne peut plus chen-
ger d'etet. ll existe une fenctien rr Premiseeli v qui prend un tebleeu de
premesses en peremetre et est reselue lersque teutes les premesses sent
reselues eu si l'une d'entre elles est reietee. Si aucune premesse n'e
eclteue, elie renveie un tebleeu qui centient les resultats des premesses en
censenrent i'erdre des premesses defini dans ie tebleeu initial passe en
Affichage dans la censele : parametre.

Exemples :
Definitien d'une fenctien asvnchrene permettant d'at-
tendre le temps defini par l'utilisateur et d'efficher le resul-
tet une feis le premesse reselue evec succes

F.ll"tiÎ2il;l,l"iIIi"f'll"l"Il.E'I.'tIlîÎIIl"I"l
Affichage dans la censele :

Executian avec succes de deux premesses en parallele

Affichage dans la censele :

Chainage de deux premesses

Affichage dans la censele apres 3 secandes cl'ettente :

Executien de deux premesses en parallele dent une qui


É-cheuera

Affichage dans la censele apres 3 secandes d'attente :

Affichage dans la censele apres 2 secandes supplemen-


taires d'attente :

Affichage dans la censele apres 3 secandes d'ettente :


Echec d'une premesse

Avis : A utiliser sens mederetien des qu'en seuiteite ceder en esvncltrene-

Dans la partie 2 6 paraitre dans Pregrammesl 253, neus


explererens les neuveautes d'ECiv'lA5cript Y alias JavaScript
2-CH6.

pragrarnmexcern
Crattsmanship,
Clean Code, retour d'expérience
La traduction exacte de Software Crattsmanship est << artisanat du logiciel ››.
Comme son nom l'indique nous verrons en quoi le logiciel peut s'apparenter à de l'arti-
sanat et quelle est la valeur qui s'en dégage. Le Software Craltsmanshio s”inscrit a la
suite (tune lignée concernant 'évolution de la pensée agile démarrée en 1986.
ll s'agissait alers de la Spirale de Behem et de l'itératif incré- centraintes et m'adapte si nécessaire v (rétrespectives
mental. Plus tard en 1991 apparaissait le RAD de J.Martin de Scruml. Le prefessiennalisme c'est -v Je traite men client
que l'en peut classifier cemme le pére de la méthade Agile. cemme un partenaire v- (principe e'u -rr ceurege v d'){P
De l'ii'94 6 2000 émergeaient (U.5} KH (US) Scrum, (U5l Extreme pregraming).
FDD, (US) ASD, (U5) Ccvstal. A cette méme périade le RAD
était imparté en France par Jean-Pierre `v'icl<eff. Ceci neus améne au Manifeste du Saftvvare
En 20Ul sertait le Manifeste Agile. En 2009 les pratiques Craftsmanship (2)
Agile atteignaient une certaine maturité et le Répetteire Agile " Pes seulement des legiciels epératiennels, mais aussi des
Alliance apparaissait. legiciels bien cençus.
'I Pes seulement l'adaptatien aux changements, mais aussi
De Êfilü 6 nes jeurs le Seftvrare Craftsmanship perté par l'ejeut cenaant de veleur.
Rabert C Martin (Uncle Bab) et faisant l'ebiet du présent 'I Pas seulement les individus et leurs interactiens mais aussi
article, s'intreduit avec le Clean Cade dans la lignée des une cammunauté prafessiennelle.
méthades et techniques de tvpe DEVGPS 1 l'intégratien canti- I' Pas seulement la callaboratien avec les clients, mais aussi
nue, l'ATDD : le dévelappement pileté par l'acceptance test, des partenariats preductifs.
le TDU' : le dévelappement pileté par les tests et le BDD : le
dévelappement pileté par le cempertement applicatif. Le Clean Cade
Les régles du Clean Cade
Naus cemmencerens par le philesephie du Sefhvare ' Chaque ingrédient 6 sa place
Craftsmanship. Il s"agit de l'artisanet du legiciel, c'est-6-dire " Les ingrédients sant bans...
la façen méme dent est cençu et écrit le cede. Cantine un
artisan, le dévelappeur méne la pratique de san expérience Les règles du Clean Cade peuvent s'6nancer de la façan
avec un grand saveir-faire abeutissant 6 l'excellence. suivante :
"' Tu es respansable de ten cede
Une pizza c'est assez simple 6 faire : Tu es respansable de la qualité de ten cede, tu ne deis pas
" Faisable ches sei, rejeter ta respensabilité sur les autres.
I* De trés nambreux restaurants en prepesent.
Une benne pine c'est asset cempliqué 6 faire : 'I Nemmage des variables
'Î _*

I' Un a taus natre restaurant préféré paur ses bennes Elles deivent représenter ce qui leur cerrespend, elles deivent
pifias. étre prenançables et peuvent étre recherchées. Évite les
Une trés benne pizza c'est trés rare et demande un nems cempliqués.
gre nd saveir-faire.
'I Cln est dans ce cas dans le Seftware Craftsmanship : " Régles sur les fenctiens
Fexceüence Rédige le nem des fenctiens avec un verbe 6 l'infinitif
(créer...). L'ebjectif est que le nam de la fenctien puisse te
Cette excellence trauve une camplémentarité dans le mode denner suffisamment d'infermatiens peur t'éviter d'eller lire
Agile et la seuplesse des cvcles de dévelappement il ). Les
ingrédients nécessaires peur praduire un lagiciel de qualité
sent l'asseciatien de la Qualité, de l'humilité, du partage, du
Presque
Dv axla isilxe
pragmatisme et du prefessiennalisme. Fit-sie' vers sv' *H ' Pra'l*ia'i.ra

rnvzsinre _1 .."“"".'-l"'“T....*.*1'.“.*_.__
Prali-aue
Mais il ne s'agit pas de vains mets. La Qualité c'est la Pnutlaae
._., 0 Utilsatlea l“""“"*i'“"“
I Linlii Prntsaua
cenceptien simple, le clean cede et le refactering des tests Hümmúnü Clara. rar-glas Pralirrqui
dû' eurlel Fralraae
dent le TDD. Ehumilité c'est v Je me remets en questian et ïnflnbhi -c:-ra-n'u'nu|'|-tnirllrn Pratt-tsue*
Frei-lil crμltr
le m'améliere en centinu si (rétrespectives de Scrum). Le par- ' F'|'fl1.lr-t1l..lfl
F'
0 ; Ta ee Elu cade eflîflfilf' Len @HH i F""l'-'H'-"E' H
tage c'est v Je pregramme en greupe v : prepriété cellective . œsw-,fiflg àla Phu dg, 0 unllarraa Ln Etam -en
petaneattfl mrrrmeateïflfl
du cede. Le pragmatisme c'est v Je cemprends les

|ÎIII'l.ÎfIQl"1'.Îll"I"lI"l"lE'I.r'Zl1Î.ll"I"'l
1'": sa.-----se

I' I
le cede. Une fenctien deit faire une seule chase. San cacle Le TDD censiste 6 mettre le
idéal deit étre séquentiel, lisible de haut en bas. Le nambre test en amant du dévelappe-
de ses paramétres deit étre réduit (éviter plus de 3). Evite les ment. ll s'agit du «v Test
duplicatiens de fenctiens. Driven Develepment v eu si piletage du dévelappement par
les tests ii. Avant de dévelapper en deit tester mais cam-
'I' Du cade explicite 6 la place de cemmentaires rnent ça peut marcher si en n'a pas encare le cade ?
ll faut des cemmentaires cependant, mais uniquement
lersque c'est nécessaire, surteut peur aider 6 le cempréhen- L6, intervient le BDD : v Behavier Driven Develepment v au
sien. Lersque le ce-de est suffisamment explicite, il n'v a pas v le piletage du dévelappement par le cempertement appli-
besain de cemmentaire... catif v-
De quai s'agit-il ?
'I' Les régles sur les cemmentaires Avant de cammencer 6 naviguer quelque part, il vaut
Bens cemmentaires : Être infermatifs, peur clarifier le cede. mieux saveir eù aller l (4)
Peur denner des avertissements. Peur générer eutemetique- La neuvelle fanctiannalité 6 dévelapper indique le but.
ment de la dacumentatian (Ex.: leva Dec). IJATDD (Acceptance Test Driven Develepment) crée v les
Mauvais cemmentaires 1 Nan nécessaires, redenclants, tram- reutes passibles de navigatien s en livrent une visien glebale
peurs (pas en phase avec le cede). Evite les gres séparateurs des parceurs utilisateurs.
de cede, les cemmentaires de fin de blac. Evite les html dans
le cede. Evite l'histerique [les gestiennaires de cede savent le ll s"agit ainsi de callaberer avec les persennes impliquées sur
faire). le prejet (Preduct Ctvvner, testeur...) : Cemprendre la visien
qu'elles ent de la future fanctiannalité et cenfirmer qu'il v a
'I Du cade lisible pIut6t que du cade eptimisé (3) un vrai besein peur le changement prepesé.
Écrit plut6t du cede nen eptimisé mais lisible et cempréhen- A partir de I6, il est impartant de définir les chases 6 tes-
sible au lieu du cede eptimisé nen cempréhensible et nen ter... et en paurra utiliser les principes du BDD. ll s'agire
lisible. Le reppert entre le temps de lecture et d'écriture du danc d'utiliser la svntaxe suivante :
cade est enviren de lU peur l. Denc rendre le cede plus faci- Étant denné : Given; Quand : When, Alers : Then; Et : And
le 6 lire, le rend plus facile 6 le maintenir et 6 écrire le neu-
veeu cede. Exemple :
Given Un utilisateur laisse un cemmentaire
"' Les tests unitaires When le cemmentaire dépasse IDOU ceractéres
Apprend 6 maitriser l'apprache TDD (le piletage du dévelap- Then le cemmentaire ne deit pas étre sauvegardé
pement par les tests). Fait des tests unitaires legiques et And l'utilisateur deit veir un message d'erreur
nécessaires. Sache créer le lien entre le BDD (le piletage par
le cempertement applicatif) et le TDD. Mais cemment tester ?? ll n'y a pas de cede ill
Le test ve échauer parce qu'il n'v a pas de cede assecié avec l
"' Utilise des Linters C'est cemme si veus aviez le texte sur un c6té de la page et
Utilise l'analvse statique de cede. Ces eutils pred uisent des que veus deviez répandre aux questiens de cempréhensian
tvarnings en fenctien de régles (exemple SONAR). Clbjectif : sur l'autre c6té.
amélierer ten cede. Per centre sache eù mettre le curseur Afin de passer le test, veus allez écrire le code dans un eutre
peur t'amélierer (régler les régles). fichier qui évaluera le lengueur du cemmentaire et renverre
une erreur (eu pas).
I' ltére sur la revue de cede Lersque le cede est écrit et que le test est réussi, veus passez
Revait les fanctiennalités écrites, reviens-v et fait de la revue au prachain test et danc au prachain ce-de.
de cede avec des cellégues. Vérifie qu'ils camprennent bien L'échec est bénéfique. Taus ves tests dai-
ten cede. Les régles deivent étre cemmunes peur taus tes vent échauer au début !
cellégues dévelappeurs ÿ- _____"`*_*-'~, On arrive ainsi au cvcle : Reuge-vert-

'I' Pratique, pratique, pratique le Clean cade Rauge : Veus écrivez un test simple qui écheuera avant
C"est un état d'esprit. ll faut que tu seis teujeurs dans l"amé- méme d'avair écrit le cede. Denc le test écheue ebligateire-
lieratien de ten cede. Tu dais débattre de ten cede avec tes ment puisque le cede n'est pas encere écrit. Le test est denc
cellégues. Les règles ne deivent pas étre figées mais peuvent reuge.
évaluer. Vert : Vaus écrivez le cede le plus simple passible peur faire
passer le test. Denc le test réussit, il est '
IJATDD, le BDD et le TDD vert.
'I Travaille sur la pate Refacter : le cede que veus avez écrit
' Geiite les ingrédients avant de les installer peur faire passer le test est peut-étre
'I' Cençait le geüt veulu en fenctien des préférences des invi- trap simple. Un refacter de ce cede est
tés... maintenant passible.

prag ramn'1ez.cem
Men retaur d'expérience cencernant 6 l"intersectien des exigences et des cas d'utilisatians, sant
le Craftsmanship et le Clean Cade définis ultérieurement. Naus identifiens sur ces matrices les
J'ai mei-méme suivi les principes et les régles du impacts fenctiennels ainsi que l'effert de test étant neté par
Craftsmanship et du Clean Cade édictées dans ces chapitres. le nambre d'impacts asseciés 6 chaque exigence. Figure 1
Bien que men demeine d'activité ne seit pas le dévelappe-
ment étant practice menager dans le demeine du test chez On ebtient ainsi une valeur de ss sensibilité v- et a d'influen-
Altran depuis trés lengtemps (i'ai cependant une langue ce ss. Cln dira qu'une exigence est d'autant plus sensible
expérience prefessiennelle du dévelappement), j'ai pu en qu'el|e est impactée par les autres exigences, en dira au'elle
retirer les expériences suivantes. est d'aLrtant plus influente qu'elle impacte elle-méme les
autres exigences.
Le cantexte
Naus avens, chez Altran des méthades trés affinées dans le Ces valeurs naus permettent d'ebtenir la valeur de I'effert de
demeine du test et parmi ces méthades naus avens la test nécessaire et de priariser ainsi les cas de test et les scé-
ca nflructien des matrices de ceuvertures des exigences narias de test. Hetre eutil élabere ainsi, 6 pertir du centenu
métier et des tests en suivant des medes epérateires trés pré- de la matrice, 6 l'issue de l'atelier, une matrice de régressien
cis dans le cadre d'eteliers fenctiennels mis en eeuvres avec calculant eutemetiquement les valeurs de sensibilité, d'in-
les sachant(s) métier de nes clients (veir chapitre suivant : fluence et d'effert de test par exigence. Bien d'autres fanc-
rr I*-latre perceptien du Cl7{AFT5ivlAN5HlF' dans le test i' Le tiennalités permettent natamment, lersqu'en évalue la cem-
cadre méthodalegique v, veir également man article dans le plexité et le nambre de cas de test par cellule de la matrice,
Livre Blanc du CFTL Editien 2lÎl2l : a Autematisatien des de générer les cas de test nen valerisés et de les imperter
activités de test si il Gestien industrialisée et autematisée de directement saus un gestiennaire de test avec l'architecture
l'effert de test ss) (5). Ces matrices de ceuvertures, neus les fenctiennelle medélisée dans la matrice. Figure 2
élaberens dens un eutil déveleppé simplement saus Excel qui
fanctienne en liaisen avec les autils du marché de gestien des Cependant il neus manquait une visien directe et plus immé-
tests (ALM, 5quash...). Cette méthadalagie est aussi bien diete de cette architecture saus une eutre ferme que le vue
mise en ceuvre dans les prajets sr cycle en V n qu'en made matricielle.
Agile. .r"""«,
. -l ' .I
- -* _ seF- _ ' I|IHII|r111-I-'-|I'h-r-H1

Sur ces matrices naus liens les exigences métier avec les cas
d'utilisatiens. Les cas de test petentiellement dans les cellules 'a
Flgure 1 r'Îf“s - `
Appliaatiens
Demeines
_ métiers
Ces
a utilisatian pt' -ir hf*
G., Q
E*'fIi""""i"l"""""' ft???Êmmmï
ilvl* -'.Lg
Ets rv. .-" | "I-_
Imp-|cI: |

F ulnea cl' Il-en -En _


'Evtttdei
|1'-nx .pr-nel] .Iv -une-en vn -rr --'
DH

F.-' _____ ___ _- __.. Ê


|Tc-.Ir r|:|I'|:r-fill Hal:-rrrnulu H la -Ivrsühllt.-|. "H r.a-|'r-I-|.|-:rn-Ilnúx i vr- r-l-ri'-r|1I|:i'-rl
lli-Hlral'-I'-.Ir-I'|I l'iI|IrI'II~|-xl'-'-:Jte-|'l: 'H'
[Tux μ-nal] .lrmnuu un-nnμ “- I _ I I I I EZ

[Te-ul μIal1l|.lI-rr-as-rn.|.ll.e les da-|'u'I-e-un Il-cr.I'|r|-t|v.r-er. d'u-nca-|-:IL H*

llinll-aI'I1-l-II'|' cl-il-a-Il-I-rl! "'] il-l' Irc-ilII'lI: url ali]-rl “" J'ai danc, 6 ce mement-I6, décidé de dévelapper saus Excel
I liI|I'I|II-=I'I'-1HI'I
|ii:|z|-un-un:
Ir' pla-ll-I'I'l "*lll-E III I'I'=IIl'-Ir ln Ill-III'-lvl-L II'-rl'I'I-III.-Il Ill'+-H si-lI_|I'l "'
l||.1-|:|1¿:|.|||*|.'l'ri-.-|:r.1r'-nl:|-|-n-|.""'
'l'e-.rx 1.n-l'fr-rlt-el 1-: |:areu.|l:-L-lue; r-I:-r-|'|c|'Itre|'u.-I'|.n ae-|-el ""+
une vue cartographique en medélisant les exigences par des
IÉIIII -clfllrlrllll I|:I-|:I.I'l "'È, '|lIiIcl'II'.l||II "' '_ I-PH! "' 'J J|I|:In'|l'l-I.r.flII|.I' |1|fl|:I1.I_ lmrll,
|J\r-rn-'r-|.|.u-I ui. rr-l.|-du-rn d'un n-I-luc ' "'
lie-stl-c-Hu-li: I-|.|:rI-a-hnl: ""]|-Iri'|I|-|1-rxlrr-arr-I-.ll nada-rul. un-I-I-_ "*'| Ir ca-lui-I tu Pv|:r-|::H-u|Iu."' cercles dent leur dimensien est en fenctien de l'effert de test
'I.I1-elhl-rl
F 2
rI|-cI-|rn|-n.tr.a|uu- |'-.rn n-ral] |l!I|.r|-|x=n'r '-'_ -lI'.I-|.|:i-er'ru-|n- *--. nμn-lu'-t "', I';n|:l-nr-'rai-|-I", .-pu-r-l
[rrv-I-elIlnvd1-vrclvlur-|rH'lfl-|:l|1.sn|lauHln-que et la ceuleur leur criticité. Chacun de ces cercles (eu exigen-
ce) est relié aux autres cercles par des vecteurs indiquant
"' __.-"'fl..Il
*'.f” .
."'-
_

.-'."'-I _.-2"...-
l'impact entre ces autres exigences et l'erientatien de ces
'f"lÎl'IiilllÈ«'illlclr'l'.s
Dam-eines métiers f' .fl-'fx;
.r 4-I' .-
Hz”

1.1"-'il'-fl -'Cs*“"lï“'f
3.-'C 1'! ' -
É I I
.
il
vecteurs dennant le sens de l'impact.

Apptrc atrens
ait'“
'fx

.-'ir s¿*"šÂ"{-*f:r,t°fš`;
/I.-"ff
.r
____.-"-" -:__.-.-' W
s
@Eset
Il

Peur dévelapper le legiciel (en VBA seus Excel) i'ai décidé


1I'l1|sI-lit
Darnernes metiers
a›>:«C:**:.fi:./e**:'%*e**.6 ›*:; aåfi--*
nfl
-Fit
"fr `is-irrfet
J.
H
"' J. L Il '
.
I d'appliquer taus les principes et régles du Craftsmanship et
'Ix
_f__rlrqt1a|'|-tra d'ap-p.lrtl1an ch; rrlaua
Criticttù
fiI|'I
Îm I-_

IHH IJI .HL I:


du Clean Cade.
I
_ I

lllrulltilhs I'lïI fI'l

Man retaur d'expérience


FF-I'

'ÊII"îI'ÈIlI'I naux-ul
:hui-|1:i'h|'* I-Il-_
Ifq-red-|'.' nI|I1:I'|IIIIn ___ ___
E6* llt:l'..'iI.tlI.
Irish
._ _|_| Men premier censtat a été que je n'ai pas mis plus de temps
-.l- ...-_. que ce que j'aurais pu mettre 6 dévelapper ce legiciel si je
'="""a"*""""""=
tkel.-ti'-all-hr: Il-:HI
..r'. . _'I="'-I

lu-I-*hs-in -:I-:lu
ilrgpitifl-Ill Il -I1_xI-_-I
11.22! n'avais pas suivi les principes du Craftsmanship et du Clean
-El clru.gI'acù:I.I'-:I-" "'I"' "' I. 333
-s Cade. Peut-étre méme eis-je mis meins de temps 6 le déve-
Elie 'HH-E56
ela- I'IxdI..l l"Qÿ:I.I:|-|'| μl.I"IlI. :nniszl "

*““`*"t'“'“t“*“" * luî i lappec


I_I _I

J-L

...-.. I I I I
Cl-

'¢,.F |'-| Ii. :ll'|||HF


ill] FI FI
l|'-:rLu|r-||.|- 'rl' EI li' it-ir I|.I.'. |-I-I-._ |:.1|i- 'i-l"'If |:|.|" CIE ,__ -;.. . .- Ç|'I-.-
I. fl'.||;si|_||E - ||u.rr_|_|e|'-u_|;' H' Hi J": I_i|-I-'I-_' l.|I'-i-I- li!.'l:I'Cil ""-.'.= -_ :|.|:|" Hull-J EE* I-I-|-I-Il
[ílilirfl-II.lTIF+ Il'I=l.UI.=:I'lEEll::!Ilil.I'I'I'El!'TI.= E1 Îrl-H ifi :iz fl'H:' Eh :Ill: l_IZ flrh. H H-ls l.I'l .r IJ1 I: DE LJ HZ II] El 15 H Ln. Eu' -ils.. il..

pragrammez.carn
J'ai danc démarré le dévelappement en utilisant le principe l_'applicatian svstématique des régles du Clean Cade (je
du TDD c'est-6-dire du test avant le dévelappement. Cela n'évequerai pas men retaur sur tautes les régles que j'ai suivi)
peut étre intéressant du paint de vue philesephique car la m'a permis de preduire un dévelappement selide, trés
premiére questian que je me pesais était la suivante : cem- stable peurtant trés feurni en analvse mathématique, netem-
ment je peux tester sans avair cedé la génératian autemati- ment les fenctiens trigenemétriques cencernant par exemple
sée d'ebjets graphiques saus la ferme de cercles sur une les chaix des cennecteurs sur les cercles lersqu'un vecteur
feuille Excel il deit s'v étre cennecté en fenctien de sa directien de départ,
Car le test, 6 ce niveau, peut étre simplement visuel. Denc l'interdic'tien paur un cercle d'en recauvrir un autre, peur un
j'auvre une feuille Excel vierge et je ne vais rien, pas un seul vecteur de recauvrir un cercle, le pesitiennement des cercles
cercle, danc men test a écheué et alers Ê' etc.
Cela veut dire qu'avant de ceder la génératian de cercles sur
ma feuille il faut que je teste s'il existe un eu plusieurs CODING DOJO - KATA
cercles sur cette feuille. Le ceding deja (6,Î") est une rencentre entre plusieurs per-
sennes qui sauhaitent travailler sur un défi de pregrammatien
Un secend principe vient alers 6 la rencentre du premier. de façen cellective. Le défi peut étre un prebléme algerith-
ivtais peurquei tester s'i| existe des cercles puisque, si je les mique 6 réseudre au un besain 6 implémenter.
crée, je n'ai danc pas besein de vérifier leur existence. C'est Chaque ceding cleje se cencentre sur un sujet particulier, et
I6 teute la subtilité du prebléme. En effet, si la vérificatien de représente lfebjectif de la séance. Ce sujet deit permettre
leur existence ne m'était pas parue immédiate au départ, elle d"epprendre de façen cellective sur le plan technique et sur
m'a permis par la suite cle maitriser le centenu de l'en- la maniére de réussir le défi.
semble de ces ebjets graphiques sachant qu'il fallait teus les
gérer et les relier les uns aux autres (un ebjet étant relié 6 n KATA : Une persenne démentre au reste du greupe 6 partir
autres) en fenctien des dannées utilisées sur les impacts fenc- de zére cemment réseudre le prebléme. Un kate est aussi un
fianneb. exercice de pregrammatien que l'en répéte peur perfectien-
ner ses cempétences.
Cette eptien qui censiste 6 vérifier l'existence des ebjets gra-
phiques s'est avérée ainsi ferte utile peur la peursuite du Prendre un petit prebléme de pregrammatien et essayer de
dévelappement et m'a permis d'éviter pas mal de preblémes mettre en ceuvre une selutien encare et encare. La salutian cg,... - *<7
ultérieurs. réelle est meins impertante que l'acte de réseudre le preblé-
me. Les petites techniques de réselutien de preblémes tent Q. ' ~ ' = :›
En suivant les régles du Clean Cade j'ai denné des nems de pregressivement partie de la mémaire musculaire, un peu
fenctiens relativement lengs peur qu"ils représentent une cemme une répétitien de l'entrainement spertif.
0 'tu
infarmatien claire (v Rédigé le narn des fenctiens avec un
verbe 6 l'infinitif (créer...). L'ebjectif est que le nam de la Netre perceptien du CRAFTSMAN-
fenctien puisse te denner suffisamment d'infermatiens peur SHIP dans le test
t'éviter d'aller lire le cede n : 3€ régle du Clean Cade, veir Un trie dans le test
chapitre rr Les régles du Clean Cade n). Cela m'e évité pas La méthade a des trais amiges n (B) cencerne la mise en
mal de retaurs arriére dans la campréhensien de l'ebjet des ceuvre d'un trie dans le test.
différentes fenctiens. ll s'agit du Preduct Clvrner (PD), du dévelappeur et du tes- t"`v.=-.- ,,___.
teur :
Je suis parti également sur la différenciatian des fanctianna- I Le Preduct Dvrner (PD) prierise et rédige les user staries
lités que j'utilisais en tant que TDD et en tant que BDD (US)
(seuvenez-veus -x C'est cemme si veus aviez le texte sur un 'I Le testeur et le dévelappeur réalisent une revue des U5. Le
c6té de la page et que veus deviez répandre aux questiens de testeur les cempléte en fermalisant des BDD (se renvever
campréhensien sur l'autre c6té. Afin de passer le test, veus aux BDD)
allez écrire le cede dans un autre fichier qui évaluera la len- 'I Le dévelappeur déveleppe les U5, réalise les tests unitaires
gueur du cemmentaire et renverre une erreur, eu pas x, veir et le testeur anime les séances de testing
au chapitre : a l_'ATDD, le BDD et le TDD vi). I Le testeur teste les US, autamatise les tests au fil de l"eau
peur censtituer pregressivement un référentiel de tests de
J'ai danc différencié ces deux types de fenctiens en les faisant régressien permettant de garantir une cauverture de test
précéder d'un verbe 6 l'infinitif paur les fenctiens de type suffisante dans la durée
BDD et des ceractéres v TEST v- paur les fenctiens de tvpe 'I Le testeur déveleppe les beuchans, les autils de test et
TDD. Au baut d'un certain temps, il a été difficile de décider feurnit les jeux de dannées nécessaires
si une fenctien était de type TDD eu BDD. En fait, seuvent les Les testeurs pesitiannés dans les équipes agiles (squads) ent
fenctiens TDD éveluaient vers des fenctiens BDD. Mais le fait en général des cempétences en dévelappement.
de censerver et d'utiliser pendant taut le dévelappement les
strates plus au meins anciennes des fenctiens TDD permet- Travail en équipe et Ce-Iecalisée
tait d'éviter facilement les régressia ns éventuelles en teste nt Les teneurs interviennent teut le lang du cvcle prejet, peur :
facilement. 'I' Participer 6 tautes les cérémenies : 5print Planning,

prag ram mez.cam


Meeting, Déme, Rétraspective dans lesquelles les caracté- Les 3 Amiges censtituent préalablement une cauverture des
ristiques du praduit sent présentées, analysées eu estimées. tests avant le dévelappement dans une matrice de cauverture
'I 5'assurer que les niveaux de qualité de l'applicatien seu- des exigences.
haités seient atteints.
I Un fermalisme de User Steries (langage Gherkin) Le TDD peut ensuite étre mis en ceuvre par les dévelappeurs
I Mettre en place une stratégie de testidéveleppement en relatian avec les deux autres partenaires Amigas (leiles
'I Prepaser la démarche d'autematisatien des tests. testeur(s) et le Preduct Owner).

Un R6|e accru du testeur C'est teujeurs un travail du dévelappeur en relatian avec les
Le r6le du testeur censiste 6 : deux autres partenaires Amiges que de mettre en ceuvre le
I Partager la visien du praduit, BDD en amant et en aval du TDD paur analvser le campar-
I Cellaberer avec le métier paur affiner les user staries et les tement applicatif et définir les tests nécessaires au dévelep-
critéres d'acceptatien, pement (cemme vu précédemment) en définissant les fenc-
I Définir la stratégie et le charge de test, pilete etieu réalise tiennalités de bas niveau qui vent permettre de tester, ces
la cenceptien et l'exécutien des tests, fanctiennalités asseciées 6 des mets clés qui vent les activer.
I Déterminer les ces de tests 6 autematiser et réalise les Ces mets clés mis baut 6 baut peuvent permettre d'exécuter
scripts d'autematisatian, des tests autematisés 6 partir de phrases simples mais signi-
I Cemmuniquer sur le niveau de qualité de l'applicatian. ficatives peur des fenctiennels nen techniques.

Quels sant les avantages ? En ATDD, en écrit le test d'acceptance avant le cede au
Les avantages des trais Amigas sent les suivants : méme titre qu'un test unitaire peur le TDD.
I Détecter le plus rapidement passible les bagues d'intégra-
tien dans le cadre d'un dévelappement cellaberatif, Une benne maitrise du CR.AFl'SlvtANSHlP et du Clean
I Réduire les écarts entre le business et le dévelappement Cade, permet la mise en eeuvre de l'intégratien cantinae au
legiciel en se recentrant sur les beseins business par le mise Dev0ps dans une chaine entiérement autematisée du déve-
en place de nauvelles méthades mieux adaptées utilisant lappement jusqu'6 la mise en praductien.
les autils apprepriés.
I Pasitienner différemment le test. ll deit se situer au niveau Références
du besein tetalement en amant du dévelappement. ( I) Le testeur Agile - La taverne du testeur
I Déclaisenner la MDA, le dévelappement et la preductien lrttμs:ir'latavernetlutesteur.lri2l]2li[|Eil]ir'le-testeur-at|ilei'
peur travailler de maniére cellaberative, plus rapidement et
efficacement, en amélierant la qualité, la stabilité et la (2) C'est quai le Saflvrare Craftsmanship ? (linl<edin.carn]
sécurité de la praductien. ltttps:r'i'lr.linltetlirr.carru'pulseicest-quoi-le-saftwsre-|:relts|nenshi|1-hurrsseit|-
tliaunnt
Le cadre méthadalagique
Le schema cr dessaus represente le cadre métheclalegique (3) ID bennes pratiques peur du cade lisible | Spiria
dans lequel en peut se situer peur parvenir 6 l'intégratien httμs:ii"tvtvtv.spiria.eami'lrr'l1lat|uar'methades-et-Intunes-μratiquesi'lll-
centrnue au au deplerement centinu (DevCIps). hannes-pratiques-paur-du-sarls-lisihlei

e ci UU nïacr : (il) Apprenez le behaviar driven develepment (BDD) - Testez


l'interface de vatre site - 0penClassreams
lttlpssi.-"upenclr|ssra|1|rrs.c|1milricnursesiilfillilrtfi1-testez-linterlet:e-tle-vatre-
u' -1-=--'. l-=-".l'“-'.I`lI"|l-'--;f.'l'.r:'-|'. '.--.1-'.I_.1l:'-.._l-'-|-|'. j lÎ""'í'l'-'l""I"I'l'“f=T
sitei-tîillãfifi-aμμrenez-Ie-hehaviar-rtriverr-rlevslaμrnent-htlrl
T [ l |
I-
|l._|=|n- -fl
Ans! st E'-rv
(5) Livre Blanc du CFTL Editien 2U2l : v Autematisatien des
._ -" `¿ - -'
-1-_ _".-_ I _".-_ I _".- I activités de test v J' Gestien industrialisée et autematisée de
I

" :«~ T
J'
,1 "| 3.
.JI
|'.;|r|.j|;;.-;.I|.*r.'-1|'- r__1.:._x'_-g_.r..:.E
l'effart de test x J-P GALLANT
IlI-'- I-t""H. ITI-'FI1

(6) Cading deja -- Wikipédia (vvikipedia.erg)


J_I
qIrl
I-
.
htIj1s:r'r'lt.vvilriμerlie.argivvilrifEa|ting_rlaja
-.|-_. . _. II:| .I'_ -É":ii .'52 fi.-"'
'f""'i'-' - 'F f.a-e 3 Amigbsf
I'csi
E'f-6
Ê 1?
-:En "=.
'-"-Î.'_'-'-Tr'
(T) l.'univers des cading dejes - Bleg {cedeinsider.fr)
https:tiltlagxarleinsirler.lrilunive|s-des-catling-dajtrsi
l.'ATDD peut se mettre en ceuvre dans le cadre de l'anal(rse
des exigences métier en début de traitement au dans le (B) Les 3 amiges en agile - Mjr Agile Partner Scrum
backlag de praduit en made Agile. On peut, taut 6 fait, dans l1tt|1s:r'r'l1lag.mvat_|ilej1erlrrer.lriindex.μhμi2l]lilfll2i[llii'les-3-amiges-egilei'
ce cadre, erganiser des ateliers fenctiennels e6 vent pa rtici-
per les sachants métiers.

pragrammezcam
l\/longoDB & Java: Client-Side Field
Level Encryption.
Le Client-Side Field Level Encryption (CSFLE) est une nouvelle fonctionnalité ajoutée
dans MongoDB 4.2 qui vous permet de chiffrer certains champs de vos documents
MongoDB avant de les transmettre vla le réseau au cluster pour les stocker.
Cest la sécurité ultime contre tout type dintruslon ou despionnage autour de votre
cluster MongoDB. Seule fapplicatfon avec les bonnes clés de déchiffrement peut
déchiffrer et lire les données protégées.
instructiens de Mise en Place Lancer le Cade de Démarrage Rapide
Taut le cede présenté dans cet article est dispanible dans le Dans ce tuteriel, je vais veus mantrer l'APl CSFLE 6 l"aide du
dép6t Github que veus pauvez clener librement : driver Java lvlengeDB. Je vais veus mantrer cemment :
hltps:iigithuh.turtrimangarlh-rleveluμerijava-quick-start I' créer et cenfigurer les cennexiens MengeDB dent neus
avens besein.
Si veus n'evez pas encare canfrguré vatre cluster gratuit sur ll'lengeDB
Atlas, c'est le ben mement peur le faire. I créer une clé principale (Master Key en anglais).
Veus avez tautes les instructiens sur ce site: I créer des clés de chiffrement des dannées (Data Encryptien
httpszii'|l|1cs.atlas.mangatll1.curr|r'getting-startetli. Key eu DEK en anglais).
I créer et lire des dacuments chiffrés.
Dans cet article, je vais veus présenter l'APl Java CSELE et la
lagique de fanctiennement de la cryptegraphie 6 travers un Paur exécuter man cede 6 partir du dépôt Github ci-dessus,
exemple simple. Je tiens aussi 6 préciser que seule la versian censultez le fichier READlvlE.md
cemmunautaire de l-rlengeDB est nécessaire peur bénéficier httpscligifltul1.su|ru'n1angudh-tlavelaμarijava-t|uitlt-stardlilahimastsriHE.llDllrlE.|t|tl
de cette fanctiannalité telle que présentée ici. Cependant, la
versian entreprise de A'lengeDB eu un cluster dans l'v1engeDB Mais peur faire ceurt, la cammande suivante devrait veus
Atlas effre un eutil supplémentaire peur autematiser le permettre d'étre apératiennel en un rien de temps :
chiffrement des champs: mengecryptd.
Dans ce tuteriel, j'utiliserai le cryptage explicite (eu manuel) mvn campile execjava -liexecmainlïlass-="cam.mangaclb.quicltst
des champs qui ne nécessitent pas mengecryptd et l'éditien art.csfle.Client5i›::leFieldLevelEncryptian" -lJmangadb.uri=”mangatlb+
entreprise de lv'lengeDB au Atlas. 5i veus seuhaitez explerer sn':iiU5EltllrirlllE:Pl'rSSWüRlJ@dusteril-altctlemangatlb.netr'testivr=majarity “
la versian entreprise de CSELE avec Java, veus pauvez en
saveir plus dans cette dacumentatian hlt|Js:l'r'w'r."rrtr.trlangl:r|lb Veici la sertie que veus devriez abtenir :
.samildaasitlriversrljavaisynr.:i'v4.5i'lt|ntlamer|talsissflel
'I'i'I"I"E'I'i"il"E'i"iI"II:Eii'

lt-le cenfendez pas mengecryptd avec la bibliathéque libmengecrypt qui * frlASlEll lift' *
est la bibliathéque C utilisée par les drivers pour chiffrer et déchiffrer -É-I-I--1-li-ïr-I-lt-H-1-I--I-I-I

vas dannées. l'leus avens besein de cette bibliathéque (en plus du il new Master lfey has been generated and saved ta file "master_ltey.txt".
driver lave) peur utiliser CSFLE. .le l'ai ejeuté dans le fichier pemsanl Master Key: [1 llll, B2, 12?, -til, -92, -93, fl, -l 1, 41, -96, ils, -39, -26,
de ce prejet.
-25, -33,31, B5, -56, 64, ill, -91, 99', -44, -51', itl, 105, -tûl, -111, -ai, -
B1, -19, 56, -112, 62,l1,ll16, ~6, B5, -125, 45', -T, -49, 38, 31, 24, -48, -
cdependentys- 6, -15, 21, -126, -31", -5, 65, B2, T4, -B4, -T4, -65, -43, -15, 411, BU, -23, -
cgrauμldsxergmangatlb-cigraupld:- 52, ~114, -13, -T3, -64, -31', -3, -23, -33, 102, -44, 32, 65, ill), -123-, *9?, -
-cartifactltls-aangadb-crjrpt-clanifaalds 49, -13, 126, 33, -63, -75, -52, T3, -5, -102, 91, 126, 163, 113, ll]-4, 36, -
-*cversian:.'-l.3.lÎl<:i'versian:- T9]
cidependenqe-
i-H-I-I-H-I-I-I-H-1-Iii-E-II-H-E

Peur que les exemples de cede seient ceurts et agréables * lllllliltllinllilll *


dans les exemples ci-desseus, je ne partagerai que les parties
les plus pertinentes. 5i veus veulez veir le cede fenctienner =::- Creating lacal Key Management System using the master key.
avec teut sen centexte, veuillez télécharger le cede saurce =::- Ereating encryptian client.
dans le dép6t github dans le package csfle directement. =::- Creating l'rlangal`JB client vrith autarnatic decryptian.
https:r'l'githuh.cuminarrgadh-rlevsla|1erijava-tjutck-startitreeimasterisrru' =:=- Cleaning entire cluster.
mirinijavaitanifrnaajjarlhitjaiclistarticslie

prag rammez.cem
. "S 'd”:"6{l55lb 8cIdlilb?3?r'95B 3i'3-ta"
Setup Data Encryptren Key(s) ,I D' E E
(vvith lecel key previoler) ""fl"'s"="*'li'=s"-
"age”:2E,
" hene": "D9 Bi' 65 43 21",
Î se-taxes .EM W,.._ .W
F* 'Cf ` '
Master Key }

CllEl"lÎ Ere EHES l_ClCH.l KEY l:l'I'Cl"'tl'lC1El' x-xHex+HeHe+H~x+HeHeeH+H+xeHeHH+H+xH+eH+He+H-seen*


Applicatian * HEMUVE ALIC E's llE`1' + RESET THE Clillflflflllillfl (reset lllîll cath e) *
m
Un gc": _L'_'_“ x-Haas-x+xeH+H+x-HexeeHH+eH+eH-xeH+HH+HeeHx-Hc+HeeH-se

O:: Slüleå ln Alice ltey is new remavecl: 1 ltey remaved.


_ =:=- Creating Mengelifl client with autematic decryptien.
Data Encryptren Key
(encrypted) *iii-*ii-iiti-i-ii*-i-*iii-*ii-i-ii-1**-ii-*ii-iii-E-li*

l-rey veuit cellectien t Titi' Ttl llEAll ALICE lIl'lL{ AGAIN BUT Fall *

Figure 1 We get a lIllengaE1-:ceptian because 'libmangacrypt' can't decrypt


**Hi**H *H *H**
these fields anymere.
* CREATE llE`l' ALT llAlllE5 UlllflllE llll}Ell * Regardens plus en prefendeur peur cemprendre ce qui se
iifiiiiiiiifiiiiiiiiiiiiiiiiiiifiiiiiiii
passe.

'!'{"Ei-!'{"E'l-!'*i-i'l'{-I-I"I"Ei-1'i{'ii'i"E'I'1'{"Ei
Cam ment ça marche Figure!
* CREATE DATA El'lCll“|'PTllll*l llE`t'5 * CSFLE a llair campliqué, cemme teute fanctiannalité de
HH**H* **H
sécurité et de chiffrement, je suppese.
Created Bebby's data l-rey ID: 6ti6a35af-dftlf--tctl-9493-t3dl}9tl3d4tid3b Essayens de faire simple en quelques mets:
Created Allce's data ltey Ill: l)f]3l]24b3-a3lJ6-49üa-9'f31-Î"ablJ?bcc334tl Naus avens besein dlune clé principale qui déverreuille
tautes les clés de chiffrement des dannées (DEK en
iifiiiiiiiiiiifliiiiiiiiiiiiiiiiiiiflifiiiiiiiiiii
anglais) que naus pauvans utiliser peur chiffrer un eu
* lll5Eill El^lCll“|'Plfll llllCUltlEHlS Füli E»(lliB)' Er ALICE * plusieurs champs dans nes dacuments.
Veus pauvez utiliser une DEK peur Fensemble de vatre
Il tlecs have been inserted. cluster au une DEK différente peur chaque champ de
chaque decument de vatre cluster. C“'est 6 veus de
*HH*H* H** **
décider.
* FIND lilliiB)"S llliíUlllflll Bt' PH[lllE * Les DEK sent stecl-:ées dans une cellectien dans un
HH**H* *H **
cluster i'AengeDB qui ne deit pas nécessairement étre le
Babby decument faund by phane number: méme que celui qui centient les dannées chiffrées. Les
l DEK sent steckées chiffrées. Elles sent inutiles sans la
"_id":{ clé principale qu'il faut pretéger.
"$aid"t "6D551bc3ddElb?3?95Be3?33f" Veus pauvez utiliser le chiffrement manuel (éditien
l, cemmunautaire) au autematisé (enterprise advanced eu
"name": "Bobby", Atlas) des champs.
"age": 33, Le déchilfrement peut étre manuel eu autematisé. Les
"phane":"l}'l 23 45 6189", deux fent partie de l'éditien cemmunautaire de
"blaed_type": "A+", l'AengeDB. Dans cet article, j'utiliserai le cryptage
"medical_recard": [ manuel et le décryptage autematisé peur rester fidéle 6
l l'éclitian cemmunautaire de MengeDB.
"test": "heart", Clé principale : httμs:iivrtvvr.ment|urlh.tarnirlnssidriversisecarityiciierrt-
"result”: "bad" sirle-lielrl-level-errtryritiae-guirteiitstrl-label-fle-treete-a-master-key
} Clés de Chiffrement des dannées (DEK) : httμss'ivrvrn.man-
] j:r,rirlb.|:amr'rlr1|:si'|lriversi'se|:urily."r:lient-sirle-liltlrl-level-encryptian-guitlei'lfh.-
} create-a-data-encryμtian-key

""""t"*"""""'t'r""c'r"'*""'*"t"*"*"" Cenfermité RG PD
* ilEA[llllG ALlClE'S llllílllrlflll* Les leis eurepéennes impesent la pretectien des dannées et
******“**“******“**“**“* de le vie privée. Taut manquement peut entrainer des
Befere ne remeve Alice's ltey, vre can read her daaiment. amendes nen négligeables.
l CSFLE est un excellent meyen d"écenemiser des milliens de
"_id": l dellarsfeures. lrtlps:Alen.vrikiperlia.argivrikii[il]Pll_lines_anrl_natices

pregrammezcam
Par exemple, CSFLE peurrait étre un excellent meyen ivlais veus veudrez prebablement le faire une fais, puis
d'appliquer la pelitique du "drait 6 l'eubli" lttlμs:flgiljii- réutiliser la méme 6 chaque redémarrage de vatre
inla.eiii'arl-1)'-gilμif de la RGPD. Si un utilisateur demande 6 étre applicatian.
supprimé de ves systémes, les dannées deivent étre effacées Veici men implémentatien peur la stecker dans un fichier
de vatre cluster de preductien, bien süi; mais aussi des legs, lecel le premiére fais puis la réutiliser 6 chaque redémarrage.
de l'envirennement de dévelappement, et des sauvegardes...
Et eveuens-le neus : persenne ne supprimera jamais les impertjava.ia.Filelnput5tream;
dannées des sauvegardes. Et si jamais veus restauree au impertjava.ie.Fi|etÎiutputStream;
utilisez ces sauvegardes, cela peut veus ceüter des milliens impertjava.ia.lDEiiceptien;
de dellarsleures. impertjava.security.Secureliandem;
lvlais maintenant... chiffrer les dannées de chaque utilisateur impertjava.util.Arrays;
avec une clé de chiffrement cle dannées (DEK) unique et
peur "eublier" un utilisateur peur teujeurs, il veus suffit de public class llilasterlteyl
supprimer la clé. Ainsi, enregistrer les DEK sur un cluster
séparé et appliquer une pelitique de faible rétentien sur ce private static final int SlZE_MASTElt_ltEi' = 96,;
cluster garantira qu'un utilisateur est vraiment eublié peur private static final String MA5TEH_tlEt_FlLEllAME = "master_liey.tirt“';
teujeurs une fais la clé supprimée.
Kenneth White httμs:ffwvnv.linltediii.camr'inr'biiitei:hr'. Security public static vaid mainlString(] args) {
Principal chez MengeDB, qui a travaillé sur CSFLE, l'explique new lvlasterl'leyl).tuteriall);
parfaitement dans cette répense dans le Ferum 1
Cemmunautaire de MengeDB.
httμszffdevelapiii.mengailli.ciirirfcamniiinity ilnnimsfticlient-side-fielit-level- private vaid tuteriall) {
anayjitian-ilelis-anil-hiiisltupsil 35iii'2 final l:iyte[] niasterltey = generatellewürRetrievelillasterlteyFrem
File(l'.'lASTEH_ltE*r_FlLEt-lAlii'lE);
Si le metivatien principale est simplement de s'assurer que les System.aut.printlal"lilaster Hey: " + Arrays.teString(masterlfey));
enregistrements d'utilisateurs en clair qui ait été supprimés restent l
supprimés quai au 'il am`ve, alers cele devient une simple stratégie de
synchrenisatien et de sépemtien des préaccupatians, et le salutian la private byte[] generatel-lewürlletrievelrlasterlteyFremFile(Striag
plus simple censiste 6 cléplacer la cellectien de ceffres-ferls (qui
filename) {
centient les DEl(,l vers une autre base cle dannées eu cluster
l:ryte[] masterl-fey = new liyte[SlZE_MASTER_llE`r'],;
camplétemeat séparé, cenfiguré avec une rétentien de sauvegarde
beeuceup plus ceuite ,' lÎ5Fl.E ne suppese pas que vatre cellectien de fait
DEA chiffrés est ca-résidente avec vatre cluster actif au a les mémes retrievelrlasterl'leyFremFilelfilename, masterltey);
centréles d'accés et lristeriaue de sauvegarde, juste que le client petit, System.eut.println{"ltn existing Master lley was found in file 1""
si nécessaire, établir une canne:-rien audienefrée 6 cette base de + filename + "t".");
dannées de ceffres-ferls. ll est impartant de rieter cependant qu'avec } catch (ltlExceptien el {
un cycle de sauvegarde plus ceurt, en ces de cerruptien de dannées masterltey = generatelvlasteitteyü;
catastrephique (malveillante, intentiennelle au accidentelle), tautes les saveliilasterl'{eyTeFile(filename, masterlteyi;
clés de cette base de dannées (et dc:-nc tautes les dannées chiffrées) System.eut.printlnl”A new liilaster Key has been generated and
ne sent récupérables qu'6 partir de la sauvegarde la plus récente saved ta file 'i"“' + filename + “t".”);
du ceffre-fort.
1
return masterltey;
Plus trivial, mais en ces d'intrusien, teute dennée velée sera l
sans valeur sans la clé principale et nlentraïnera pas une
amende ruineuse. private vaid retrievellilasterlteyFramFile(5tring filename, byte[]
masterlteyl threws lüEiiceptien {
La Clé Maitre try (FilelnputStream fis = new FilelnputStreamlfilename)) {
La clé principale est un tableau de 96 ectets. ll peut étre fis.read(masterltey, III, 5lZE_lvlASTElt_ltEt');
stecké dans un service de gestien de clés clans un feurnisseur l
de claud eu peut étre géré lecelement. l
httμs:i'.l'www.mengurlh.canuldiicsi'ilriveisisecuiityiclieiit-siile-lielil-level-
i=iiicry|ilian-liiciil-lie'ji- ii-liatsi' private byte[] generatelllastetlteyli {
byte[] masterlley = new liyte[S|ZE_MA5TEFt_liE`r'];
D'une maniére eu d'une autre, veus devez la pretéger de new Securellaitdemll.nei-itlîtytes-{masterl'(ey];
teute menace. return masterltey;
C'est aussi simple que cela de générer une neuvelle clé l
principale :
private vaid saveldasterlteylefile(String filename, bytejj masterlley) {
final bytejj masterltey = new byte[96]; try (fileliutpulfitream fes = new FiletÎiutputStream(filename)) {
new SecureFlandeni().nextBytes(masterlteyi; fes.write(masterltey);

prag rammez.cem
l catch llDEirceptien el { MengeClient
e.printStacliTrace(l; AuteencryptienSettings aes = AuteEnciyptienSettingsbuiltlerl)
i .l-reytlaultlilaniespacel"csfle.vault“')
l .ltmsPraviders(l-imsPreiiideis)
l .liypassAateEnayptienltriiel
C'est lein d'étre si..`ir peur un envirennement de preductien, .build();
car laisser le fichier master_lrey.ti-rt directement dans le
dessier de l'applicatien sur vatre serveur de preductien l'ilengaClientSettings mcs = liilengeClientSettings.liuilder()
revient 6 laisser la cembinaisen de celfre-fert sur un pest-it. .applyCennectien5tring(cennectien_string)
5écurisez ce fichier eu envisagez d'utiliser un KMS en .auteEntiyμtienSettings(aes)
praductien. .liuild[);
httμstfiwww.miingaiib.eamiilaasiilriversisesarihiitliiint-sitle-lield-level-
eiicryμtiiin-liisal-ltey-tri-limsr' ltilengaClient client = litangeClients.createlmcsl;

Dans ce tuteriel, je n'utiliserai qu'une seule clé principale, bypassAuteEncryptien(tnJel est le ticlret peur lléditien cemmunautaire.
mais il est teut 6 fait passible d"utiliser plusieurs clés Sans cela, mangecryptd s'appuiemit sur le schéma ISDN que veus
principales. auriez 6 faurnir peur crypter eutemetiquement les dacuments. Veir cet
exemple dans la dacumentatian peur plus dinfermatiens :
litt|:is:i'r'maiigiiilh.gilliiili.iar'iiianga-java-ilii'.ieif4.L"dri'reii"tutoiialsi'clieiit-siile
Le Feurnisseur de Services cle Gestien
-entniμtiiinflleiiamμles.
cle Clés (KMS)
Quelle que seit la salutian que veus cheisissez paur la clé Vous n'étes pas ebligé de réutiliser la méme URl de cannexian peur les
principale, veus aurez besein d'un feurnisseur Klv'l5 peur deux cannexians 6 i'rlengeDB. li serait en fait beaucaup plus
ce nfigurer les ClientEncryptien5ettings et les Auteiïncryptien "cempcrtible avec la RGPD" a"utiliser des clusters séparés afin que veus
Settings. puissiez appliquer une pelitique de faible rétentien sur les clés de
htlps:i'i'wvrni.miingailb.cami'dacsfdiiversfsecurihifclient-siiie-lielif-ievel- chiffrement des dannées.
eaayjitiuii-liical-liey-tii-lrms
Index Unique
`“v"eici la cenfiguratien peur un lil"/i5 lecel : sur les Nems Alternatifs des Clés
La premiére chase 6 faire avant de créer vatre premiére clé de
litap-=:Striag, liilap-c5tring, [lliject:.*-'.r- ltmsltreviders = new Hashlrilap
chiffrement de dannées est de créer un index unique sur les
-cãtring, lrlap-cStting, übjectzv-1:-(1 {{
nems alternatifs des clés paur veus assurer que veus ne pauvez
put("lecal“', new Hashlttap-cString, ühjean-() {{
pas réutiliser le méme nem alternatif sur deux DEK. différentes.
put(“liey”, lecallrlasterlteyls
Ces nems veus aiderent 6 "étiqueter" ves clés peur savair 6
lil; quai chacune sert ce qui est tetalement 6 veus de décider.
ll;
Nlangefellectien-'clfilecuments- vaultCell = clieat.get[latatiase("csfle")
.getCellectian("vault”);
Les Clients
vaultCell.createlndex(ascending(”keyAltllames"),
Naus devrens cenfigurer deux clients différents :
new lndexüptians().unique[true).partialFilterEi-ijiressien
I Le premier ClientEncryptien sera utilisé peur créer nes
(exists("lieyAltl'lames"'))),;
Data Encryptien Keys (DEK) et chiffrer nes champs
manuellement. Dans men exemple, je cheisis cl'utiliser une DEK par
I Le secend MengaClient sera la cannexian MangeDB utilisateur. Je chiffrerai teus les champs que je seuhaite
plus cenventiennelle que naus utiliserens peur lire et écrire sécuriser dans chaque decument utilisateur avec la méme
nes dacuments, 6 la différence qu'elle sera cenfigurée peur clé. 5i je veux "eublier" un utilisateur; il me suffit de
décrypter eutemetiquement les champs chiffrés. supprimer cette clé. Dans men exemple, les nems sent
uniques, danc j'utilise ceci peur mes i<eyAltl'lemes. C'est un
ClientEncryptien excellent meyen d'étre en cenfermité avec la RGPD.
CannectiariString cennectien_string = new Cenneaien5tring("mangedli
:i'llacalhest"); Créer des Clés de Chiffrement de
Mengefllientåettings lrvmrs = MangaClient5ettings.builder().a|:iply Dennées
Cannectienãtring(cenaectien_string).buildl); Créens deux clés de chiffrement de dannées : une peur
Bebby et une peur Alice. Chacune sera utilisée peur chiffrer
ClientEnciyptienSettings ces = ClientEncryptianSettings.builtler() teus les champs que je seuhaite garder en sécurité dans mes
.l-:ey'ilaultlitangaC|ientãettingsll-ivmcs) dacuments peur chaque utilisateur.
.lteyliaultllamespace["csfle.vault")
_lrmsPreviders(kmsPraviders) lílsenlšlinary bebbylfeylcl = enayptian.createDatalteyl"lecal", lieyillt
.build(); lilame{'“Babby"));
BsenBinary alicelleyld = encryptien.aeateDataltey("IecaI", lteynlt
Clientfnayptien encryptien = ClientEnciyptiens.create(ces); l-lame{"itlice'“'));

pregrammez.cen'i
randamlAllCE));
Naus recevens un peu d'aide de cette méthade privée peur
retum new Decument("name", ALlCEl.append("age", 28).append
rendre men cede plus facile 6 lire :
l"phane", pliene].append["b|aed_type", blaetlType);
private llatalteyliptians keyAltllamelString altlilaaie){ }
retum new [latalteyt'.)ptians().lieyAltl'lames(singletenlistlaltl'lame));
l private Encrypttllptians deterministiclString lteyAltl'lame) {
retum new EncryptlJptiens(l1E1Elllilll-l1511C).keyAltlilame(lieyAltl'lame);
Veici 6 quai ressemble le DEK de Bebby dans me cellectien
csflevauit :
l

t private Enciyptüptiens randem(5tring lieyAltltame) l


“_id" : UUl[1("aaa2e53d-6i'5e-4irldEl-9ceü-decE'ia96585?1"), retum new Enciyptl1ptiens(FlAN[ll}lvl].lieyA|tlilame(lreyAlt|'lame);
"lieyAltl-lames" : ["Elebby" ], }
"keyhtaterial" : Bin[lata(lZl,"i'azPZBlilltll.lJU9udZy1`l'e1hl'li'l'lHqllPrjd
Padsalll'ljHli+cZliltlllnweZe5pûPpzclicGmt'ctTAdiiB3b+lm`r'5f]lilTzEZlrq private vaid createllindlnseitBebbyAndAlicelClientEncryptien encryptien,
MgsllwenlwûliïfifaglpflllIlllI)ylllaEjll'i'3+e3}î`r'1Wmwlhemüpiplvleïy lli1engeCallectien-c[lecument:=- usersCell) {
a6lZU2TwyqT9fcN?E5pNIlhl]nL3liCPli[lsi}IIlxLTi'ejl1lSe`flwxq2ui'yll1fC6r'L [lecument liebby = createBal:ibyDec(encryptian);
[D1 yITllC5lWfiTA= ="), Document alice = createalicellectencryptien),:
"creatienllate" : l5l1liate("2ll21-G3-19T16:16:l}9.Bfll1Z"l, int nblnserted[lacs = iisersflell.insertlvlanylasListlbabby, alice)).get
"updateüate" : lSl][late("2[l21-D3-19T1a:1e:üs.Bü0Z"l, lnsertedldsl).size();
"status" ztl, System.eut.printlnlnblnsertedllecs + " decs have been inseitetl."l;
"masterlley" :{ }
"pravider" : "lecal"
Veici 6 ciuei ressemblent les dacuments Bebby et Alice dans
l me cellectien encrypted.users :
l
Cemme veus pauvez le veir ci-dessus, le l<eyr'v'lcrterial (la DEK Bebby
elle-méme) est chiffré par la clé principale. 5ans la clé
principale peur la déchiffrer; elle est inutile. De plus, veus
l
"__icl" : Clbjectldl"al154d91c2i5a2i'5l134fe533tlü"),
peuvez identifier qu'il s'agit de la clé de Bebby dans le champ
"name" : "Bebby",
lceyAitNames.
"age":33,
"phene" : BinData(fi,"ATltkRdZWlliIi+Hpqlily*fAÎr'zglUCgeBE4SvLllwa
Créer des Decuments Chiffrés
lfzl'rFlBNPIsirWdHRE51pPai'1W9iigZ13lnHd56J1PLusuvih5liEgaj£+l'Jl.lL
Maintenant que naus avens une clé de chiffrement peur
wll'rJUliltatülGbZd56Bizxyl{ltTH+iy+8v'v'?Cmt'="),
Bebby et Alice, je peux créer leurs dacuments respectifs et les
"l'ilaad_type": Bin lÎlata(6,"Ajl(lcl1clZWlil]+Hpql-ly`fAi"zglUCUclc3l}Al?›l
insérer dans i'v'lengeDB cemme suit :
T1211pWn?Cl1pztillyr[lps?A6glJJhJdj+BEqlliitiir5Ut1?itpncitiri2i'+estFtxlq
private static final String DETERMIHISTIC = "AEA[i_AES_256_CBC_ llJi5ll1Aif5i+8ZEllSw=="l.
HlilAC_SHA_512-Detenninistic"; "meclical_recard" : BinlJatali5,"Ajl{kRdZllfRtl+Hpi:|Ny`r'AI"zgIUE5l5s4t
private static final String HANDUM = "AEA[l_AES_256_CEtC_Hl'ilAC_ PPvzqwe?BBltFEa91+lt'lqûUge5l<iZDllZequdlePutri5S5cEEiHAllIiAsliZD`rq
SHA_5l2-ltandem"; i"ltCqbqiltvjllabübvslltsiliclvllliilllidHzWtqWMlzigeejdZüswz2AliTÎ"SllrD
lilliawIIl")
private llecumentcreateBebby[1ec(ClientEncryptien encryptien){ l
BsenBinary phene = encryptien.encrypt(new ilsanString("û1 23 45
Alice
6? 89"), determinlsticlBOBB`i'));
BsenBinary bleecllype = encryptienenciyptlnew BsenStringl"A+"), l
randamlB[lEli`rl)); "_itl" : {lbjectld(“6(l54d9l c26a2i'5ll34fe533[ll "'),
Bsenllecument medical Entry = new ilsen[lecument("test", new ilsen "name" : "Alice",
String("heait")].append["result", new Elsen5tring("bad")),' "age" : 28,
BsenBinary medicalllecerd = encryptianencryptlnew Bsenitnay "phene" : BinData(ti,"Alli'}ldi'i5LHUcWgïj+ltbUT++sCCEeiaCZ1zaM
(singletanList(medicalEntry)), randem(BDBBY)); tzabawhgliïlsiquwltvldtlfpA+üm+CtGevGylgliltjtj2jAHAüvllEsay3aq9p5
return new l1lacument("narne", BtlBBt').append("age", 33) mblvnllqiBl'lttHUlpiI|aaUn22WxÎ"a+nla633'll08+c="),
.append("phene", phene) "bleo-:l_lype" 1 BinDatal6,"ltni'lfdé5LHUcti'ilg'i'j+ltbUT++sCTyp+Pl
.append("bleed_type", bleecllype) ltudA|tNl5Hcdlt21vBll'ilBHqEll`fSplHdZli0sC{liizBlirlPan'1lsTllrlIlSdAl'l5yHTh
.append("meclical_recarcl", medicalltecard); P3li'itsu9jlhNe+lz5f3Li'l{t'lll==")
} }
Le chiffrement des champs c6té client feurnit actuellement
private [lecument createAlice[iac(ClientEncryptien encryptien) {
deux algerithmes différents peur chiffrer les dannées que
llsenBinary phane = encryptien.enaypt(new BsenString("fl9 si 65
veus seuhaitez sécuriser.
43 21"), deterministic(ALlCE));
https:i'i'www.niiingiiclh.ciimi'ilai:si'iiiiinuali'cniei'secaiity-client-sii:li=i-encrjrμ-
Bsanliinary bleaclïype = encryptienencrypttnew Bsan5tiing("{l+"),
tiani' ifenizryμtian-algaiillims

prag ram mez.cam


ncAe_AEs_25a_cec_HniAc_s HA_5i 2- "medical_recerd": [
Deterrriinistic f
Avec cet algerithme, le résultat du chiffrement avec les "test": "heart",
mémes dannées en entrée (valeur et DEK) est déterministe. "result": "bacl"
Cela signifie que naus avens un meilleur suppart peur les i
epératiens de lecture, mais les dannées chiffrées avec une l
faible cardinalité sent sensibles aux attaques par analyse de l
fréguence. Cemme veus pauvez le veir; le déchiffrege autematique a
htt|is:ffen.wiliiparlia.urgfwilriilleterminislir:_anr:n)|itiiin fenctienné cemme prévu, je peux veir men decument en
lit11is:lfen.wiliipeilia.urgfwilriillardiiiality ter-rte clair. Peur treuver ce decument, je peurrais utiliser les
liltμszffarixviliiparlia.iirgr'wilrifFrat|uancy_analysis champs _ial, name, age, eu phene, mais pas les champs
bleecl_type eu medicei_recerel.
Dans men exemple, si je veux peuveir récupérer les
utilisateurs par numéres de téléphene, je deis utiliser Lire le Decument d'Ali-ce
l"algerithme déterministe. Camme un numére de téléphene lvtettens maintenant CSFLE 6 l"épreuve. Je veux étre siir que
est susceptible d"étre unique dans me cellectien si la DEK d'Alice est détruite, le decument d'A|ice est perdu
d'utilisateurs, cet algerithme est sür ici peur pretéger ce 6 jamais et ne paurra jamais étre restauré, méme 6 partir
champ. d"une sauvegarde qui peurrait étre restaurée. C'est peurquei
il est impartant de censerver les DEK et les dacuments
AEne_AEs_2ss_cec_Hivia.c_s HA_5i 2- chiffrés dans deux clusters différents qui n'ent pas la méme
Randem pelitique de rétentien des sauvegardes.
Avec cet algerithme, le résultat du cryptage est teujeurs Récupérens le decument d"Alice par sen nem, mais
différent. Cela signifie qu'il effre les meilleures garanties de pretégeens men cede au ces air la clé d"Alice seit "perdue
ca nfidentialité des dannées, méme lersque le cardinalité est par inadvertance'"...
faible, mais empéche les epératiens de lecture basées sur ces
private vaid readAlicelfPassible(litengaCellectien-cllecument:«- users
champs. hltps:i'i'en.wiliiμerlia.art|i"ii'.'iltifPrababilistic_encryptinn
Calll l
Dans men exemple, le greupe sanguin a une faible
cardinalité et cele n'a aucun sens de rechercher dans me
intl
String alicetlec = usersCall.find[eq("name", ALlCE)).first(].teJsen{);
cellectien d'utilisateurs par greupe sanguin de teute façen. ll
System.eut.println("Befare we remeve Alice's key, we can read her
est denc siiir d'utiliser cet algerithme peur ce champ.
decurnent.");
De plus, le dessier médical de Bebby deit étre trés sécurisé.
System.eut.println(aliceDec),:
Ainsi, l"ensemble du seus-decument centenant taus ses
lcatch (MengaExceptian e){
dessiers médicaux est également chiffré avec l'algerithme
5ystein.err.println("We get a lilengeEirce|:itien because 'libnienge
aléateire et ne sera de teute façen pas utilisé peur rechercher
ciypt" can't deciypt these fields anymere.");
Bebby dans ma cellectien.
l
l
Lire le Decumerit de Bebby
Cemme mentienné dans la sectian précédente, il est passible Si sa clé existe teujeurs dans la base de dannées, je peux
de rechercher des dacuments par champs chiffrés avec alers déchiffrer sen decument :
l'algerithme déterministe.
Veicl cemment:
l
"_id": {
BsenBinary phene = encryptien.encrypt(new BsanStringl"l}1 23 45 "$aid": "6'fl54d£'f1c26a2?5l]34fe533[11"
6? 69"), deterministic(BDBBïl); 1.
String dac = usersCall.findleq["phene", phane)).firstl).teJsen(); "name : Alice",
.l'.I.I'l'

"age": 16,
Je chiffre simplement 6 neuveeu, avec la méme clé, le
"phane": "[19 B? 65 43 21",
numére de téléphene que je cherche, et je peux utiliser ce
"blead_type": "Cl+"
Bsenfiinary dans me requéte paur treuver Bebby.
Veici le résultat que j"ebtiens si j"affiche le decument en
l
chaine de ceractéres : lvtaintenant, supprimens se clé de la base de dannées :

l vaultCeI|.deleteDneleq("lieyAltllames", AtlCE));
"__id": l
Dans un vrai envirennement de preductien, cela n'aurait
"$eicl": "e[l54d91c26a2?5tl34fe533lIil]"
aucun sens de relire sen decument ,; et parce que naus
i. sammes taus des dévelappeurs prefessiennels et erganisés
"name": "Bebby",
qui aiment garder les chases en ardre, naus supprimerens
"age": 33,
également le decument d"Alice avec sa DEK, car ce
"phane":"l]1 23 45 6189",
decument est maintenant cemplétement sans valeur peur
"bleetl_type": "A+",
naus de teute façen.

pregrammezcem
Causetl by: cam.mengadb.crypt.capi.ltlengaCryptExceptien: net all
Dans men exemple, je veux quand méme essayer de lire ce
keys requested were satisfied
decument. Mais si j'essaie de le lire immédiatement aprés
at cem.mengedb.cnrpt.capi.lrlengeCryptCantextlmpl.thravrExceptien
aveir supprimé sen decument, il y a de grandes chances que
Fram5tatus(liliangeCryptCentextlmpl.java:145)
je puisse teujeurs le faire 6 cause du cache de clé de
at cem.mengadb.ciypt.capi.li'lengaCryptCentei-rtlmpI.thrawEi-rcepticrn
chiffrement de dannées de 6G secandes
Frem5tatus(lrlangeCiyptCentextlmpl.java:151)
qui est géré par libmengecrypt.
at cem.mengedb.aypt.capi.MangaCryptCanteiitlmpl.cempletelrlenge
https:i'igitliuh.camimiingiiilliisjiaciiiiratiansihlahfmastarfsnurceicliant-siila-
Clperatientlitengeíryptfientextlmpl.java:s3)
iincryptianfclient-siile-encryptian.rstlflibniangiri:ryjit-i:lala-lri=i',r-ching
at cam.mengedl:i.client.intemal.Crypt.fetchlfeys(Crypt.java:284)
1? mere
Ce cache est trés impartant cac sans lui, de multiples allem-
reteurs seraient nécessaires peur déchiffrer mes dacuments.
ll est essentiel peur empécher C5FLE d'impacter les Cenclusien
perfermances de vatre cluster li-tengeDB. Dans cet article, naus avens déceuvert cemment utiliser le
Denc, peur m'assurer que je n"utilise plus ce cache, je crée chiffrement des champs c6té client 6 l'eide du driver Java
un taut neuveeu MengeCiient (teujeurs avec les para métres MengeDB, en utilisant uniquement l'éditien cemmunautaire
de déchiffrement autematique) peur cet exemple. Mais bien de MengeDB. "vleus pauvez en saveir plus sur le chiffrement
siÎii;. en preductien, cela n'aurait aucun sens de le faire. autematisé dans la dacumentatian.
Maintenant, si jlessaye d'accéder 6 neuveeu au decument https:i'i'www.mangiiilh.aainftlacsfinanualfcurefsecurily-antamatic-client-
d"Alice, j'ebtiens la A'lengeExceptieri suivante, cemme prévu side-einnyptian
et le decument d'Alice est bien perdu 6 teut jamais : CSFLE est la fanctiannalité de sécurité ultime peur assurer le
niveau de sécurité maximal de vatre cluster. Méme ves
cam.mangedh.MengaExceptian: nacam.mengedb.liilangeEiiceptien:
administrateurs ne paurrent pas accéder aux dannées en
net all lieys requested were satisfied
preductien s'ils n'ent pas accés aux clés principales.
at cam.mangadb.lrlengaEirceptien.fremïhrawablel'lenlilull(h'lenga
Mais ce n"est pas la seule mesure de sécurité que veus devez
Eitceptien.java:83)
utiliser peur pretéger vatre cluster. Empécher l"accés 6 vatre
at cem.mengedb.client.internal.Crypt.fetchl'feys(Crypt.java:2li6)
cluster est, bien sûr; la premiére mesure de sécurité que veus
at cam.mengadb.client.internal.Crypt.eirecute5tateli'lachine(Crypt
devez appliquer en activant l'authentificatien et en limitant
.java:244)
l'expesitien du réseau.
at cam.mengadb.client.internal.Ciypt.cleci'ypt(Crjrpt.java:128)
https:i'i"vnv'iv.mengeilh.carni'deasfmanualftuteiiallarialile-authenticatiinii'
at cem.mengedb.client.intemal.CryptCennectien.cemmandlflrypt
httμs:r'i'wvrw.mangarlli.sanii'tlaasfmanualfaitmiiiistratienlsaturity-irhatlilistf'
Cannectien.java:121)
flanaw-limit-netwarli-eirpasure
at cam.mengedti.client.internal.CiyptCenneaien.cemmancl(Crypt
En ces de daute, censultez la liste des centreles de sécurité
Cennectien.java:131)
avant de lancer un cluster en preductien peur veus assurer
at ceni.eiengatlb.intemal.aperatien.CemmandflperatienHelper.ei-recule
que veus n'evez négligé aucune aptian de sécurité que
CammandlCammandüperatienHelper.java:545)
MengeDB a 6 effrir peur pretéger ves dannées.
at cam.mengertb.internaI.eperatien.CemmandtlperatianHelper.eiiecute
https:fi'vnrnrv.mangailh.aamfdacslmanualfriilniinistratianfssturity-theclilisti'
CammandlCemmandClperatianHelper.java:33e)
at cam.rnengetlb.internal.eperatien.CeniniandtlperatianHelper.eiiecute
ll y a beeuceup de flexibilité dans la mise en ceuvre de CSFLE :
CemmandWithCennectien(CemmandûperatienHelper.java:222)
veus pauvez cheisir d'utiliser une au plusieurs clés
at cem.mengadfi.internal.eperatian.Findtl|:ieratien$1.calltfindûperatian
principales, idem peur les clés de chiffrement des dannées.
.javat658)
"v'eus pauvez également cheisir de chiffrer taus ves numéres
atcam_mengedb.intenial.eperatien.Find[fperatien$1.call(Findl1peratien.
de téléphene dans vatre cellectien avec le méme DEK au
java:ti52)
dlen utiliser une différente peur chaque utilisateur. Clest
at ceni.niengailb.intemaLaperatien.liperatienHe|per.vrith|ieadCannectien
vraiment 6 veus de décider cemment veus erganisez vetre
Saurcelûperatianhelper.java:5B3)
stratégie de chiffrement mais, bien sûr, assurez-veus qu'elle
at cem.mengedb.internal.eperatien.Findf.lperatian.eiiecute[Findllperatien
remplit bien tautes ves ebligatiens légales. ll existe plusieurs
.java:65It)
bennes maniéres de mettre en eeuvre CSFLE, alers assurez-
at cain.mengedti.intemal.eperatienFindliperatian.ei-recute(Findlllperatien
veus de treuver la plus adaptée 6 vatre ces d"utilisatien.
.java:aa)
at cem.mengaclb.client.intenial.MengeClieetlfelegatciilelegateflperatien
Dcicumeritciticins supplémentaires
Eirecuter.execute(liilengeClientl?'elegate.java:1ill)
Dép6t GitHub avec teus les exemples Java Quickstait de
at cem.mengedhclient.internalfintliterablelniplfirstlfintllterablelmpl.
cette série dlaiticle :
java:2iIl*[l)
https:fi'githuh.i:aitiimiingarlh-ilavslii|iari'java-tjuiclr-start
at cem.mengedlxguiclistan.csfle.Client5ideFieldLevelEncryptien.reatlAlice
MengeDB CSFLE Dec:
ltPassible(Client5ideFieldLevelEncryptian.java:s1)
https:ffwviriv.mangailh.aernftlacsimaiiurilfearaisaturity-client-slila-antiyptian
at cam.mengai:ib.quiclistan.csfle.Client5ideFieldLevelEnayptien.deme
lvlengeDB iave Driver CSFLE Dec :
(Client5ideFieldLevelEncryptien.java:i'9)
htliir'rJ'ii'rvnv.nringnilh.tiinfiliicsfrlrivarsfsasiirityfilisrit-sirlri-fislil-laval-ansryμtiiin-guiilaf
at cem.mangadb.c|uiclrstarl.csfle.lÎlient5ideFielclLevelEnciyptian.main
Exemple d"implémentatien CSFLE de |"Université lvlengeDB :
(ClientSideFieldLevelEncryptian.java:41)
https:i'fgilliub.cariiilmiingatlb-uiiiversityibslle-guidesiltreefmasterfjaval

prag ramn'iez.cem
Carvel : une boîte à outils pour
vos apps Ku bernetes
Carvel (anciennement l<f4s) est une suite doutils open source destinée a simplifier la
configuration, le packaging et le déploiement dapplications sur Kubernetes (Kes).
Contrairement à des applications plus polyvalentes, comme Helm, qui adoptent une
approche tout-en-un, Carvel est composée d'outils simples, mais intégrés, qui répon-
dent chacun ä une mission unique et interagissent facilement les uns avec les autres.
Cette appreche "De One Thing And De lt Well", fidéle 6 la Présentatien des autils
philesephie Unix, facilite sen utilisatian au quetidien, sa prise vendir : synchrenisatien de dépendances
en main, sen débegage ainsi que sen intégratien dans un E1'lL1'EI'I'IE5
écesystéme plus large (par exemple, des chaines de ClfCD). vendir répand 6 la nécessité de ne pas dépendre de dépen-
A ce jeur la suite Carvel campte six autils. Dlautres sent en dances externes, en autematisant leur synchrenisetien.
ceurs de déveleppement(l ). Gr6ce 6 vendir; il est facile de censelider des ressaurces
Le but de cet article est de présenter ces autils, le besein issues d'autres prajets au sein d'un méme référentiel.
auquel ils répendent et la valeur qu'ils peuvent apperter au Figure 2, un exemple de prejet centenant une dépendance
pracessus de créatien d'une applicatian ainsi qu'6 sa main- vers un fichier manifests/vanillalvsphere-csi-drivenyaml. Ce
tenance (Day l fx Day 2) fichier sera cepié dans les fichiers de cenfiguratien du prejet
Le dévelappement et la maintenance d'applicatiens sur Ktls suivant le chemin cenfiglupstreamfvsphere-csi_ (4)
se décampesent en plusieurs étapes : Figure 3, le fichier est bien présent. chaque neuvelle syn-
La créatien de cede seurce chrenisatien, ce fichier sera mis 6 jeur 6 partir de la saurce
La créatien de fichiers de cenfiguratien définie dans le YAML (exemple Figure 2). l.'utilisateur ne deit
_ La censtructien d"images danc pas le madifier. (5)
Le packaging Ceuplé 6 ytt, il est simple de récupérer des ressaurces externes
Le dépleiement et cle les madifier eutemetiquement sans avair 6 faire de
La gestien du cycle de vie cenfiguratien rr manuelle rv autre que la cenfiguratien initiale.
Figure 1
ytt : terriplciting cle fichiers YAML
lnstal latien Le YAML est un langage cemmun dans |'écesystéme
Veus treuverez la precédure dlinstallatien sur le site efficiel de Kubernetes, utilisé peur écrire des fichiers de cenfiguratiens
Carvel : hltps:i'i'canisl.rleiii" (2). Elle ne sera pas décrite dans cet (applicatifs cemme peur les clusters). Avec la multiplicatien
article, mais sachez qu'elle est trés simple. Les autils qui cem- du nambre de fichiers de cenfiguratiens il devient vite difficile
pesent la suite étant largement indépendants, veus pauvez de standardiseij, d"industrialiser et de limiter l'erreur humaine.
cheisir de ne pas taus les installer. Peur tester ces autils, veus Les autils qui existent peur réseudre ce prebléme sent Helm
treuverez un werkshep sur le Tanzu Develeper Center 1 et Kustamize. Le prejet Carvel posséde également sen prepre
https:r'r'tanzu.vmwara.camr'ilavelaperfwarlishiipsilab-getting-starteii-willi- eutil appelé ytt, qui prend en charge les deux appraches.
i:arvi=.ilr'(3) ljappreche de ytt paur travailler avec ces fichiers YA.fvlL est la
suivante. Au lieu d'interpréter la cenfiguratien cemme du

1 Day l Day 2

0 A
iv...
LIWS
gg.. ___...-I"
lil D" F'
E1'E'5'l!iEl'r'i till.-I i:'yt:l'E'
de vie
M_
is-es
ü_
l
a-Lir

Créatien cle 'Ccrnstni-cticin Packaging Fiefa-cflliscltiürt Cenfiguretieri du [Î.lé|1il-eierrierit


Ø?
Cenfiguraticiri cl-E Reclimensiennenient
fichier de cl'ir1'1ci-ges cl-es packages dépleiement |i:i-atchirig
cenfiguratien

Figure 1 - Schéma des autils inclus dans Can-'el intégré 6 un cycle Day l et Day 2

pregrammezcem
texte brut, il fanctienne avec des structures telles que des
cartes, des listes, des dacuments, des scalaires, etc. Ce tai-
sant, ytt est en mesure d'éliminer de nambreux preblémes
tels que l'échappement de caractéres, les ambiguïtés, etc.
`v'eici une illustratien de l'ensemble des structures gérées par
ytt : Figure 4-- (él
ylt met 6 dispasitian un langage cle type Pythen (5tarlark) qui
rend sen utilisatian trés accessible-(?)
Gr6ce 6 la structure cle ytt, il est passible de a variabiliser si
certains pararnétres de natre YAML afin de peuveir madifier
Figure 2 - Exemple dlun prejet de Tanzu Cemmunity
l'affichage sans aveir 6 madifier le cede seurce de l'applica-
tien. Dans l'exemple Figure 5, l'encadré vert indique 6 ytr
que la valeur de la variable d'envirennement HEi.LC`r_i'rl5G
sera définie dans le deta.velue.helle_msg. l_a structure de
cfata.values vient de la librairie cfata cle yit permettant de
créer des eptiens de cenfiguratien dans des fichiers séparés.
Figure 3 - Suite de i'ei-temple

Ainsi, il est passible de madifier la valeur de cette variable,


J" _ _ _ _ _ _ _ _ _ _ _ * Input Files J Ciutput Files
sans madifier le cede seurce de l'epplicatien ni les fichiers de 'Fi Data Values `- 1 . . . . . . . . . . . . . . . . .. .__

cenfiguratien. `v"eici un exemple de cammande peur madifier I Scheme 1 '


I
III' I
Plain Decument
I I I I I I I I I I I I I
l
'IIIC

'- Decument
la valeur de HELLC)_A'lSG. Figure 6 ` ' ' ' ' ' ' ' ' ' ' ' J rr ElliÊ|'lÎ-El ll'-i'l-311-.-lÉ5 l :I TE|'T||:||,g[,g-[I |:|.|:|[:|;_||"|'|E-|"|,'[' I '
È Elecument il `- - - - -- - - - - - - - -- - - "
Peur tester les fanctiennalités de ytt, veus pauvez veus rendre sur -r le
l
r _ _ _ _ -E _ _ _ _ _ - I

terrain de jeu interactif v de Carvel : lrllpsiilcanfel.riisv.iytlfil|ila','griiunil.


li

Une des autres fanctiennalités intéressantes de yfl est l'ever- *-C., .,f""“ _.-*f Îb

lay, qui permet de patcher des structures de fichier `r'AivlL


cléj6 existantes. Cln peut llutiliser peur rechercher; insérer; .l
remplacer; eu supprimer des éléments de ces fichiers- `v"eici f/Evaluated Decument Setïii Cliutput Decument Bet
"i
un exemple de cammande peur remplacer le nambre de Evaluatecl De cu ments Legend
replicas par 3 peur teus les fichiers YAML cencernés. l Fifa- |
_ . .-x*' F viãrlrfdaï-
Figure T - (B)
L Î Î Î Î Î Î Z:

R. s/ Data 'fstriicttirej
- Executren -iv-
- Date Îfii-
kblcl : censtructien cl'images Figure 4 - iype cle pipeline
Peur recenstruire une image de centeneur lers du change-
ment du cecle seurce de llapplicatien, il faut généralement
exécuter manuellement un build 6 l'aide dleutils de créatien
d'image tels que decker, pack, etc. ; puis enveyer l'image
résultante dans un registre d'images accessible au cluster
Kubernetes afin qu'elle puisse étre dépleyée. Teute resseurce
de dépleiement devra alers étre medifiée peur utiliser la ver-
sien spécifique de la neuvelle image.
L'eutil kbld cle Carvel est un eutil qui feurnit un meyen simple
cl'insérer la créatien d'images de centeneur dans un praces-
sus de dépleiement. kbld recherche des images dans la cenfi-
guratien de l'applicatien (plus précisément des clés d'image),
vérifie s'il existe une définitien cle cede seurce asseciée et, si
c'est le cas, déclenche une censtructien de l'image du cente-
neur 6 l'aide de decker (eu d'un autre mécanisme de
censtructien), et enfin capture la signature unique des
images censtruites (sha256) et niet 6 leur la cenfiguratien
avec les nauvelles références d'image- Figure 5 - Exemple d'un `fAli4l_ de cenfiguratien
kbld llleut s'intégrer entre ytl et kapp afin de déclencher une avec le fichier data asseaé
génératian d"image répendent 6 la cenfiguratien reçue de ylt
et en incluant le résumé de l'image avant de transmettre la
cenfiguratien 6 kapp peur le dépleiement. Figure B, veici

Figure 6 - Exemple d'une cammande permettent de changer le veleur d'une verieble d'envirennement

[IIl'lZlIi_;]i'IlÎlr'1"1l"l"1'E..T'1.IlÎfIii"f"l
Figure T - Exemple issu du bleg de Stéphane Rebert- l*rl'lrési`tez pas 6 censulter sen super travail de vulgarisatien de le techna-

Figure B - Exemple el une ligne de cammande utilisant ytt, lrblcl et l-:app

charger; déplacer des images dans un autre registre


cl"images (centainer image registry cemme Harber par
exemple)- La figure 9 en mentre un exemple - (P)
imgpkg permet également de générer une image CJCI 6 par-
tir de fichiers arbitraires, appelée bundle (veir Figure 10).
Ainsi imgpkg est capable de cepier des bundles et les images
qui en déceulent dans n'imperte quel registre. (10)
L'intérét de ce bundle est de peuveir centenir n'imparte quel
Figure 9 - Exemple al une cammande imgpkg qui déplace une image entre
deux regrstries cennectees type de fichier 1 `“r“AlvtL, ylt template, Helm chart, etc. Peuveir
packager des ressaurces quelle que seit leur erigine, permet
inciex.cleclier.ierueertrmy-bunctlet;v1.iZl.iIi de les cepier dans un envirennement privé etfeu sans
cannexian 6 Internet (cas trés fréquent)-
Bundle DCI image
Figure 10 - 5chema
du cencept cl un bundle "mfll"k9fh“"dlE'ilml Usflsflsisfll UC' 'meet 1 ka pp : une alternative 6 kubectl
m,_,¿,,: ,mgppg -imgplrgiimeges-yml Peur dépleyer une applicatian l(Bs, la cammande habituelle-
Depenclent C1131 lrnege 2
ment utilisée est kubectl, qui reteurne uniquement la liste des
filet .txt
[iepeneent DGI image il ressaurces affectées au dépleiement. Ce que kubectl ne fait
filee-yml
pas, c'est lister les medificetiens appartées afin de denner 6
file3.yml
llutilisateur la visibilité sur les changements qui vent s'eppérer
ainsi que la pessibilité de les cenfirmer au de les réfuter- De
plus, kubectl ne dispase pas encere d'une capacité de net-
teyage peur faire cenverger un ensemble de ressaurces
lersque la cenfiguratien est réappliquée 6 un dépleiement
existant-
L'eutil kapp de Carvel campense ces limites de kubectl. ll est
cençu en prenant en campte le maniére dent Kubernetes
cenceit ,f cenceptualise les applicatians, clest-6-dire un
ensemble cle ressaurces liées, qui partagent une étiquette
cemmune (pad, replicaset, dépleiement, services,..-)-
Figure 11
Figure 1 1 - Exemple de cammande l-rapp liée 6 une applicatian
Veici quelques principes clés du fenctiennement de kapp :
I kapp sépare la phase de calcul du changement (diff) de la
l'exemple d'une ligne de cammande qui permet de déclen- phase d'applicatien (apply) peur denner aux utilisateurs
cher successivement la cenfiguratien, le censtructien et le une visibilité sur les changements s'appliquant au cluster.
dépleiement d'une image. I kapp se fende sur un libellé unique appliqué aux ressaurces
ll cenvient également de nater qulen plus cle censtruire des dlune méme applicatian, libérant l'utilisateur du seuci de
images et de mettre 6 jeur les références, kbld annete les res- rnedifierfsupprimer d'anciennes ressaurces lers de le mise
saurces l<Bs avec les métadannées d“image qu'il cellecte et 6 jeur de l'applicatien-
les rend rapidement accessibles peur le débegage. Trés utile I kapp erdenne les ressaurces afin que le serveur d'APl
lers de l'examen de l'état de l'envirennement. Kubernetes puisse les traiter avec succés lersque des
dépendances existent (par exemple, les CRD et les names-
imgpkg : packaging paces sent créés avant les autres ressaurces).
imgpkg a cleux intéréts principaux : clest un eutil en ligne de I kapp essaie d"attendre que les ressaurces seient prétes
cammande et également un farmat cle fichier. avent de censidérer le dépleiement cemme un succés.
Avec la ligne de cammande, il est passible de cepiei; télé- Figure 12

prag rammez.cem
l_ers d'un changement de cenfiguratien, kapp prepese plu- Cenclusien Centinueus Ftecenciliatien
Ftepesiiery (saurce af truth]
sieurs fenctiennalités : Teut cemme KBs, Carvel a été déveleppé selan les principes
r"-xi' li-'-I '1. " ,|__|.--'lllll
I kapp détecte les medificetiens appartées aux ressaurces en essentiels de la philesephie d'Unix, 6 saveir, faire UNE chase,
cemparant la cenfiguratien lecale 6 la versian déj6 dépleyée mais la faire BIEN. Carvel est danc une beite 6 eutils spécia-
sur le cluster. Ainsi, kapp ne prend pas en campte l'erigine lisée dans la censtructien, le dépleiement et la mise 6 jeur
des changements 6 appliquer et ces changements ne deivent d'applicetiens sur l(Bs avec cemme vecetien d'étre cembinée
pas ebligateirement étre steckés dans le systéme. Cela signi- avec d'autres autils. Par exemple, certeins autils sent utilisés
2'i'r"ii'fi_ '-
fie que kapp peut étre utilisé avec dlautres autils qui predui- dans Tanzu Applicatian Platferm, la plateferme qui simplifie 'li.'!-'-i
.'.l'i

sent des cenfiguratiens l{Bs, cemme helm au kustamize. le dévelappement et le dépleiement d'applicatiens sur l-.i|:'i_i - :_.-iii'-:_-ll--i l

'I kapp peut afficher les medificetiens dans un diff de style git Kubernetes de `v'Mware, et des previders terraferm ent éga-
Figure 13 - Schéma du
en feurnissant l'indicateur -diff-changes. lement été mis 6 dispasitian- fenctiennement de kapp-
I kapp ne réappliquera que les ressaurces qui ent été medi- Carvel est un prejet apen saurce dent la cammunauté d'uti- centreller kapp-centreller a trais
fiées. lisateurs et de centributeurs ne cesse de grandir(l3). L'U5 ces d'usages principaux
I kapp attendra que les pads asseciés au dépleiement seient Army a récemment adapté cette suite(l4). Elle est cempa-
-v prét rr avant de quitter avec succés. tible avec les nembreuses réguletiens que ses équipes IT dei-
vent respecter peur assu rer la cenfidentialité et le sécurité cle
kapp-cantreller : gestien du cycle de vie leurs epératiens- Elle leur a permis d'augmenter la preducti-
l_'APl déclarative et l'appreche multiceuches de kapp-centrel- vité des dévelappeurs et des équipes epératiens, sans risques,
ler permet de censtruire, de dépleyer et de gérer ves applica- et de gérer facilement de multiples clusters.
tians. Cet eutil permet également de packager vatre legiciel en l\l'hésitez pas 6 suivre l'évelutien de Carvel et 6 participer aux Figure 12 - Exemple de
sertie aprés avair utilisé lrapp
packages distribués et permet 6 ves utilisateurs de déceuvrir; prajets.
peur un dépleiement
de cenfigurer et d'installer ces packages sur un cluster l(Bs.
kapp-centreller permet de récupérer; de créer des templates
et de dépleyer des applicatians Ktis puis de les garder centi-
nuellement 6 jeur quand la cenfig uratien des repesiteries
change (gitepsfcleveps), de maniére flexible.
Cet epérateur teurne dans un cluster l{8s et intégre les eutils
vus précédemment, ytt, kbld, imgpkg et kapp. De cette manié-
re kapp-centreller effre un systéme rebuste et autepertant.
Cemme le mentre le schéma Figure 13, kapp-centreller sur-
veille l'évelutien du fichier seurce et, quand un changement
est détecté, dépleie la derniére versian de l'applicatien.
kapp-centreller a trais cas d'usages principaux - (l 1) :
La livraisen centinue en utilisant kapp-centreller ceuplé
6 ytt et kapp
La censemmatien de package avec les fanctiennalités
d'imgpkg
La créatien de package - (12)

httpstfigithiih.iranifvinwara-taniuisarval
tt|is:i'icaniel.iievr'
tt|istfitaniiivinwara.criririrlevalaperiwtirlishii|isrlali-garting-stanail-witli-rsaivali'
tt|is:i'igithiili.canrilviriwarii-tanzulcnrniriiinity-ailitiaiifliliiliimainiarliinnslpacliagesivspliaie-csii2.4.lfliunrllei'veni:lir.','ml
tt|is:i'lgithiih.caniivniwara-taniiiiitiirriiiiiinity-aiiitiariitraafniainiailtlansipacl-ragesivspliare-csii'2.4.lrliiiniilsitenfigiiipstreanirvsμhiire-csifnianilestsivanilla
tt|is:i'i'r.:aniel.ilevfyltlrlacsi'v[l.'1l[l.llr'hiiw-il-warlisi'
tt|is:h'githiili.caniilhazi.=illiiiiliïlfstarlarli
tt|is:frliltig.stepliane-reliaitinferasstil-íulranietes-ytt-template-μatchi
tl|is:i'r"r:arvaliiaviinigplrgfrlacsfvl].2i.lÎli'air-ga|i|ieii-wiirlrlfawr'
https:ricanral.ilaviimg|ikgidecsrv[l.2T.[lr
ftps:h'tanzu.vmware.camidevalapsrlguiilasikapii-cantriiller-gai
tips:ricarvalsleviliajiji-irantitillerfilncsrv11.34.flrtiacliaging-tutririalr
ÎÎÎ ltps:figithuli.caniivniwaie-taniiir'carval
'_" _" _'= ':= '=Z'= https:ricarval.rlavihliigrcasasturly-rnaileaiiiing-the-us-arrnyr

pregrammez.cem
Pourquoi je n'ai plus de classes
abstraites dans mon code ?
Depuis quelques années, j'ai constaté que je n'écris plus de classes abstraites dans mon
code et je me suis donc posé la question “Pourquoi je n”ai plus de classes abstraites
dans mon code ?". En creusant la question, je me rends compte que je n“utilise plus de
classe abstraite depuis que fai commencé à appliquer le TDD (“Test Driven Develop-
ment" ou développement dirigé par les tests). fai donc décidé décrire cet article pour
montrer qu'un peut oublier les classes abstraites au profit de la composition.
Je vais d"aberd cammencer par les définitiens de ce qu"est le Le dévelappement dirigé par les tests nécessite taut de méme
TDD et qu'est-ce une classe abstraite. quelques prérequis. En effet, avant d"attaquer l'écriture du
premier test, il vaut mieux définir les "baby steps". Ce sent de
Qu"est-ce que le TDD ? petites étapes peur arriver 6 la salutian finale attendue.
Kent Beck a créé la méthedelegie du dévelappement dirigé
par les tests dans les années 2000. v Test Driven Classe abstraite
Develepment si est une méthade qui pr6ne une neuvelle gym- C"est une classe dent l"implémentatien n'est pas cempléte
nastique de l'esprit et une neuvelle discipline : écrire le test (htliis:A"fr.wiliipeitia.erglwiliillIlassa_alistraita). Elle peut étre héritée,
avant le cede de preductien- L"idée est denc de se fixer un mais ne peut pas étre instanciée. On peut y définir une
ebjectif 6 atteindre en écrivant un test. Ce dernier permet de méthade abstraite dent le cerps est implémenté dans une
saveir quand s"arréter de dévelapper le cempertement atten- classe fille. Elle peut centenir des méthades au des attributs
du. Dans un premier temps, le test sera reuge 6 l"exécutien implémentés (privés au publics).
puisque le cempertement clu cede cerrespendant n"existe pas Seuvent en l"utilise peur facteriser du cede.
encare. Cln deit danc avair créé manuellement eu généré via Prenens l"exemple suivant : figure 1
l'lDE la méthade 6 appeler. La deuxiéme phase cerrespend 6 Le mentent tetal est égal 6 la semme du mentent hers taxe
écrire le minimum de cede peur que le test passe au vert. Et et la TVA. Par centre, la TVA varie selan le pays. Peur la
enfin le facterisatien du cede permet de l"amélierer et d"eb- France, elle est de 20'iii et imaginens que peur le
tenir une meilleure lisibilité et maintenabilité en traisiéme Luxembeurg, le calcul en taut autre. ll y a une taxe de 12%
phase. Cin parle alers du cycle RedlGreenlRefacter cemme sur le service et une taxe de 15",ir sur le matériel.
présenté dans l'image ci-desseus. Quand en facterise peur créer une classe mére abstraite, en
peut définir le calcul du mentent tetal qui est cemmun aux

sE;'>`“` deux classes filles. Par centre, ce qui est spécifique aux
classes filles, en le définit cemme abstrait au niveau de la
classe mére. Ainsi en a juste 6 le spécifier au niveau des
clesses filles. Ci-dessaus une salutian de facterisatien de
natre exemple. Elle implémente le -v design pattern v (medéle
de cenceptien) x Template methed v. Ce pattern fait partie de

*r~'*1*'-(fifi/6Rllll ceux du GeF (Gang ef Feur) décrit dans le livre v Design


Patterns: Elements ef Reusable Clbject-'Driented Seftware x-
écrit par Erich Gamma Richard Helm, Ralph Jehnsen, et
Figure 1
Jahn Vlissides, avec une préface de Grady Beach. Figure 2
.|. . 1
'l'i_II |.1'I.rI-|-'1 ' "Î

6 Vue cemme ça, la classe abstraite est bien utile peur rendre
le cede plus lisible et peur bien séparer ce qui est cemmun
de ce qui est spécifique-
. I l.
'i|'|Il__'I._|1 ".'T||"."'_..I:|_'|_;_
f
ll y a quelques années, c“était la selutien que je précenisais
'-'c _- i'.t--1'-1' " i_I'T

IJ.
|'".."'|"I".I.T

.
III.

.| ..-
"
surteut aprés une cenceptien faite cemme elle se deit, avant
"._
.
- '_ '
1
l.'| - _'_.
. 1
. i
de cammencer les dévelappements. En teut cas, c"est ce que
j'ai appris 6 l'écele et pendant mes premiéres expériences en
tant que déveleppeuse junier. Et puis, ça parait prepre, lisible
et bien factarisé ! D'ailleurs, les premeteurs de l'appireche
"Big Design Up Frent" (BDUF) expliquent que cette appreche
permet de déceuvrir les preblémes avant la phase de
dévelappement. Denc c'est impartant peur eux de cenceveir
teute la salutian avant de cammencer le dévelappement.

pregrammez.cam
'Cz-.-_. .1'.'å.' -.-_ "-
_r

C'est en eppasitien avec la premetien de l"agilité qui invite 6


-IJ

cammencer par le MVP (Minimum Viable Preduct, la versian


la plus minimaliste et viable du praduit) peur expérimenter le -L'.'rx-.1 .'r'r.rli'- '-.."r -
If.1'i..r .I"|"'-Hi"

praduit et ensuite itérer sur les évalutians peur l'amélierer. IIÎJ-i.-.1 .|'I1""' -r"l.l'I.1i." -..'1 '

_- i -
1

En utilisent une classe abstraite, il faut teujeurs passer par


l"instance d'une classe fille peur tester unitairement le
cempertement cemmun. On ne peut tester directement le
|;-'.'1.-i-ii L-_. ' ;-'.1ir-r'--.- '-.-..r-I.' -;-. 1

cempertement de la classe abstraite vu qu'en ne peut pas l.fy.'.-|r|.'.-'..'xr.:


U-.-IIIIl'JI'I|'I"I'ÎrII-6"I.' "I
.-'I' T 11'-1
-I":J- (._. J-'-r|'J-'I
I -I..
r"-1-""-'- '

l"instancier. 5i en veut étre sûre d"aveir bien respecté le |


1
I
_-" I'-Îi-.-.-i-'r-' -i"l.iIi-'- .-'J'
1
I
I
1 4
I

principe de Liskav (L de 5ClLlD : Une classe mére peut étre


substituée par une classe fille sans que le cempertement
change), en deit retester le cempertement cemmun 6
chaque feis au'en teste une classe fille, puisque le
cempertement cemmun ne petit pas étre testé directement.
Figure 2
Cln va danc aveir autant de tests que de classes filles peur
vérifier que le cempertement cemmun n"est pas medifié.
Quand en n"a que deux classes filles, la t6che est simple, Ilîalcalalui-'l.rrieant[)
mais imaginens le cas d"une dizaine de classes filles, c"est un
peu galére, nen l
1 Pr

Cemment implémenter sans classe


abstraite ? *Cn lc ir l-'iii-'V-'it [Ii
Lars de mes expériences, j"ai rencentré plusieurs façens de +c.1ir;r,-i.~rn-i='rr-T.*.x.-'ravie unit) F. 3
igure
dévelapper. Ce qui m'a permis de cemperer; d'analyser et de
cemprendre cemment mieux implémenter; méme si je suis
certaine qu"il y a petentiellement d"autres méthades et que la I
'_'

mienne est encare perfectible.


Et puis un jeur j'ai déceuvert le principe "Campesitien aver
inheritance" dans le livre du GeF cité dans le paragraphe I
_I.I

ll
-|'.

l'-.II
I ' __.I.||

'I'-I'l|"I"I" ¿"l '. I

I.I || I|I.||.I' 'I |J_ I.

précédent. Ce principe invite 6 faire de le cempesitien des μ

abjets peur implémenter la fanctiannalité veulue. J'ei


cemmencé 6 l"appliquer clans mes dévelappements. Au
début, c'était difficile de s"affrenchir de l"héritage cemme
j'avais l'habitude cle l'appliquer et surteut j"étais cenvaincue
Figure 4
de l'utilité de la facterisatien avec une classe abstraite. Avec
le temps j"ai appris la méthade TDD et je me suis rendue Avant cle finir
campte que j'utilisais de meins en meins l"héritage. La démarche que je viens de décrire cerrespend 6 l'apprache
Reprenens l'exemple du calcul de la taxe. Quand je le fais en "eutside in" en TDD (appelée aussi appreche meckiste). Le
TDD et en baby steps, je vais décempeser men prebléme en cléveleppement est guidé par le besein et Fimplémentatien
trais parties. Le calcul neminel du mentent tetal, le calcul de de la selutien se fait de l'er-rtérieur vers l"intérieur en utilisant
la TVA française et celui du Luxembeurg- cles substituts appelés aussi mecks.
Peur calculer le mentent tetal, en a besein de la valeur de la Rabert Martin et Sandra Mancuse ent fait teute une série de
TVA et le mentent hers taxe qui vent étre récupérés. Et peur vidées peur expliquer la différence entre les deux appraches
chacun des pays, en a le calcul des valeurs de la TVA. Ainsi, (eutside in Vs inside eut) par ici
en va avair la classe ClrderPrice qui centient la méthade (httpsziielearrearleni.camfsariasreempaiiilivallasign).
CalculateAmeunt(). Cln va créer les tests peur cette méthade.
Sauf que peur faire les calculs, en a besein du mentent hers Cenclusien
taxe et du mentent de la TVA. Peur cela, en crée une .l'espére que j"ai apperté suffisamment d"infermatiens peur
interface qui reteurne ces deux résultats. A ce stade, en a veus mantrer qu'en peut se passer des classes abstraites en
besain de la classe 6 tester (C`irderPrice) 6 laquelle en injecte utilisant la cempesitien. Le cade reste taut aussi clair; veire
en dépendance l"interface lVatCalculatar (sans plus clair qu"avec l'l'iéiitage. Je censidére l"existence d'une
implémentatien) cemme le décrit le schéma suivant. Ainsi, classe abstraite dans le cecle cemme un "smell“ (un signe que
en peut tester unitairement la fanctiannalité de calcul en le code est amélierable) qu'en peut refacterer peur séparer le
substituant l"interface injectée. Figure 3 cempertement générique de celui spécifique. Si veus veulez
saveir quand refacterer; je veus invite 6 lire men article
En deuxiéme temps, en va préparer les tests cerrespendants "Quand refacterer et peurquei" publié dans le n" 251 .
6 l"une des implémentatiens de l"interface lVatCalculater; f~l"hésitez pas 6 revenir vers mai paur en discuter sur les
suivis par ceux cle la deuxiéme implémentatien. En résultat, réseaux seciaux (Twitter au Linkedin). Je serai ravie de
le diagramme de classes ressemble 6 ce qui suit. Figure 4 débattre sur le sujet. :)

pregrammez.cem
Tester ses composants avec la
famille dom testing library
Da ns les fra mevrarks frant-end, un campasant est une assa- liutilisateur devant un campasant changerait-il suivant que ce
ciatian entre un template HTML et une classe Tvpescript au dernier sait écrit en angular, en React au en `v"ue.is F' Paurquai
iavaåcdpt ne pas s'affranchir des détails d'implémentatian des
En théarie, écrire un test de campasant, c'est vérifier de framesvarks et tester un campasant camme le ferait un
maniére autematisée que l'assaciatian entre le rendu (états utilisateur F'
du DOM) et les actians utilisateur praduit le résuitat attendu. 5'affranchir des implémentatians prapres a chaque
En pratique, implémenter cette vérificatian dépend farternent framevvark et écrire des tests de campasants canfarmes aus:
des API du framevrark utilisé. usages de Futilisateur : vaila la pramesse de la dam-testing~
Dans Fécasvsteme *v'ue.js par et-tem ple, *Vue Test Utils' (WU), librarv l
la librairie de test afiicielle définit une API qui permet de
repraduire le cvcle de vie du campasant lmaunt, render; Testing-library : la librairie de test qui
i |
I- I
I i
+ destrav; etc.], de déclencher des actians camme un utilisateur s'abstrait des nceuds de DOM
1 “ " 1'
I-
il

.
'
*._. 'I :I-"'
_-_ _-:__
!'
I il le ferait et de vérifier si l'al'lichage est canfarme. Il n'est pas Camme paur matérialiser le principe d'inversian des
_
passible de dissacier la vue l[HTML} du madéle (classe JS). dépendances qui veut que : tt les madules de haut niveau ne
En Angular en revanche, camme il esiste trais maniéres de devraient pas dépendre des détails. Les deus devraient
CodeWorl<s tester san campasant :
I En isalatian (isalated testing) : le test vérifie uniquement le
dépendre des abstractiansv, la dam-testing-librarv en tant
que teile définit une «s care API v. Cette care API représente
campartement de la classe Tvpescript. Le DOM est le s madule de haut niveauv.
tatalement ig naré. Chaque lramevvark au librarie qui le sauhaite peut
I' En superficiel [shailavr testing) : le test assacie bien le implémenter sa salutian en se basant sur la care API et se
template et sa classe, mais sans tenir campte de la pase ainsi de facta en v madule de bas niveaus au détail
dépendance vis-a-vis des autres cam pasants. d'implémentatian.
I En prafandeur (integrated testing) : le test assacie le A ce jaur, selan le site atticiel, les librairies et framewarks
campasant et ses dépendances. utilisant la care API de la dam-testing-librarv sant 1 React,
Ce n'est que dans le cas des tests en superficiel ishallaw Cvpress, Testfiafe, Svelte, Vue, Angular, Puppeteec React
testing) et en prafandeur lintegrated testing] qu'iI est Native, Preact, Reasanfteact, l*-lightWatch_ Figure 'I
nécessaire de s'intéresser a. Testfled, |“'APl alticielle de tests ll est asset facile de retrauver les déclinaisans assaciées :
des campasants et de cannaitre les subtilités de la classe react-testing-iibrarv, vue-testing-iibrary, angular-testing
(Îampanentl-isture. iibrarv, testing-iibrarv, testfafe-testing-iibrarv, etc.
Aussi, paur taut dévelappeur frant-end écrivant des tests, un Quelle canséquence cette déclinaisan dans plus clis:
changement de framewark n'est pas anadin. Il s'agit de framevrarks cela peut-il avair paur naus en tant que
devair apprendre les spécificités de chaque librairie de tests dévelappeur E* Assurément un gain de temps et une
asseciée aux framevvarlcs frant, mais aussi et surteut de unifarmisatian des pratiques de tests cle campasants.
renancer aux API, a leur caniiguratian vaire les mécaniques Dans la suite de cet article, naus reviendrans rapidement sur
d'aptimisatian cansalidées autaur du framesvark habituel. les mativatians des auteurs de la librairie puis présenterans
Le changement est l'unique canstante, particulierement dans les indicateurs de la librairie avant d"illustrer le gain de temps
natre métier me dire:-vaus. qu'affre la famille *-testing-librarv par un et-temple tests de
Mais qu'est-ce qu'il v aurait de différent dans l'utilisatian campasants déclinés en `v"ue.is et en Angular.
d'un campasant Angular par rappart a un campasant `v'ue.js
au React d'un paint de vue utilisateur E* Le campartement de Mativatian des auteurs de la librairie
Figure I En traduisant la présentatian depuis le site alficiel, dam-
testing-librarv est :
lagas des princi- rr l. . .J une saiutian trés légére paur tester les nceuds du DOM
paux utilisateurs (aussi bien simulé camme cnrec JSDOM tel que faurni par
cle l'APl de la
DCiivl-Testing- défaut avec Jest au présents dans le navigateur). Les
Librarv principales fanctiennalités qu'eiie faurnit impliquent
i 'interragatian du DOM paur ies nceuds é la façan dant un
utiiisateur recherche des éiéments dans la page. De cette
façan, ia iibrairie permet de siassurer que vas tests vaus
dannent cantiance dans vatre cade Ul. Le fii canducteur de ia
iibrairie DSM Testing est:

|Î.lI'l.ÎI*gI'tÎIl"I"Il"I"l~'.E'I.'iIt2Î.ll"I"I
@testing-lihmrïlreect-haahs

Ir
-E
I 1-r-'.1 n_; r-rent hc-c-I-.'. urrt |rI|r-|;r.:|1 a'1 |"-

Plus vas tests res*sem-bieat a ia icrtgan ciant vatre lagiciei est I. tr-st ing- L llsrery -Ir-al

util'isÉ=, plus ils ,G*er.iv'e.at vaus a'artrter tîar"iiicrnce_›› @test i ng-I i hrerylreect
Et paur les persannes qui ne sant pas taut a fait él l'aise sur É'
.ul
'I
I I-r".1 II; r-Ht! ul I.IlI.:-fl'- |sc'I rr- I'-t r-lI:'|-' |-I I.. lufl I! .Ir-1 rflcl a It' la -r' 1:'
l'écriture des tests, la famille ii-testing-library encaurage les
|_. ._ _

Jil- l!l'"r.[ ing I lb1'.Lr5,r- I:-al

bannes pratiques de tests Ul camme naus le verrans dans les


EsliHI-Plugin-testing,-Iihlïlrg
er-temples plus Iain. Une tais les bases pasées, vaus ne risquez
'F'

pas de vaus en élaigner. I r-slrnt -r-'.lrn|:plu|:_rn Hlrnt-p!|.-|:; n lnl: tr-'.1 rg l='.1r1 ;.- af. '1*" 'I
II.

1 festins: tlbrarï IJ-ar

Fiche technique tÿfltesting-lihrarïfclam

Au mament de I'écriture de cet article, la derniére versian I 1-rj-11-113 -.r r--'r'- μclnrn u |: rrr-|r_ 11 rr Ir runnl arr*-la rncl -r n
F'

l-

l8.l l.lÎi} datait de trais jaurs et dépassait les sis: millians de I. t-r".[ ing- I |br.Lr§,I-Il-ul

téléchargements hebdamadaires. @testing-Iibmqfluser-event


Ce qui mantre que nan seulement c'est un prajet maintenu, 'F'
il
I I-r'.1tI: 11'-sf I1' lI:Ir.1";.' -:lc-rn1-rr1IrI;ir |l:Ir1 ,r r-Htt vr-sl: '||.'_
mais aussi qu'il a rencantré san public et qu'an peut
F.

I. I!-r".I! mg- I |I:|r.1.r§,r- h-ul

raisan na blement s'v fier.


@testing-Iihrerïliest-dam
La librairie s'installe en tant que dépendance de
Il

dévelappement. I ne-'ir-ne rl-:im rs-sl ,s-:Ia-rn I


@_ .

Figure 2 _' extrait de résultats paur une recherche sur le raat-clef "testing-library"
Fiche NFM
I I.
Du fait de multiples déclinaisans vues plus haut, il v a
@tesüng-tihmrvidam E
plusieurs résultats liés cr testing librarv sur npm : figure 2 i-.'.I.I'I - - - F E'-.';-.'--r'|1 i '1--|-..'|

Paur abtenir la ri care APIs, la dépendance adaptée est la I-'r:'.||:'I'r-r E-|:-!c-r-r - È H I.'Ir-μ-rn|:I-:'11-c rs .ägr LÈI-Bùrpendrnh le LI-.I£'.'r:' I. rs

@testing-librarvidam. DDM Testing Library .-l

En camparaisan, lest, la librairie de test ultra papulaire de Ir r L

Facebaal-1 a plus de treize millians de téléchargements


ici

hebdamadaires. E-fl1.c-lvand ca fl*p:c-tr; tllii'-'I1-:-st-rI¿:', .rt-lit as th-st c-ncc-uI.1-|:a: |1aad1c-st-ns; r.:-fact rs


'ir git hu I: camrtrstlng-Ir I:Ira|r'v_-'clem -test Ing-

Ftelcl the cla-cs Et!-t thi." dc-c


tf' |r,ithub.cam_.'I.e s.t|np,- l ihrer,-.'da m- Eesti ng..
Fiche state af JS - 2020 ÊIIEIÈ
*
Le site stateafjs.cam classitie les tendances au sein de ' fr 'I'I'i-ri L'|'r '-.|I.I

fllr-H-1 :|-I flh-1 r.!I1| il”-ne s.ats.4ss '“'-"""""""'#_


1
l'écasvstéme JS. I'

Les auteurs de ce prajet interragent un peu plus de 20 000 Figure 3: Fiche NPM dela testing library
dévelappeurs depuis Êtiló paur cannaitre les usages et les Figure 4
apinians des dévelappeurs JS sur leurs autils de travail.
Par défaut, leur classificatian inclut les quatre indicateurs
suivants 1 figure il
Ainsi, en 2020, la testing-librarv fait san entrée dans le
classement et satisfait 9i"iii des persannes l'ava nt déja utilisé.
Figure 5 :
Cela la place premiére de la catégarie rr autils cle tests s.
Classement rr
https:r'i2[l2l].statsslis.|:trrnisn-Ufiitechnalsgiesitestingil Figure 5 state af JS i - des
San taus d'utilisatian en revanche n'est que de 2a?-ti camme autils de tests
le mantre Iiimage ci-cantre- Figure 6 par satisfactian
Cependant, si au vu de la pramesse et des implémentatians
existantes, vaus sauhaite: l'intraduire dans vatre prachain
prajet, vaici un esemple d'implémentatian dans deus
tramevrarks.

Fiabiliser les tests d'UI - Cas pratique


Dans cette partie, naus vaulans mantrer camment la famille
*-testing-librarv tiabilise les tests sur les Ul en ne s'intéressa nt
quié ce qui est visible a liécran (ter-rt, label, bautan, etc.i.
Figure 5 1
Naus avans vaulu mantrer camment les apératians de
Classement rr
recherche d'éléments du DUM et la gestian des événements state af JS 2lÎi2lÎl ii
différent suivant les librairies de tests aflicielles et camment des autils de tests
par usage
les versians 'ic -testing-iibrarv unifarmisent les tests Ul.
Paur une meilleure lisibilité, naus naus barnerans aus
implémentatians en Angular et en `v'ue.js.
Paur chaque écasvstéme, naus avans sauhaité deus valets :
I* La différence d'apprache dans les librairies rr afficielless et
I'apprache dam-testing-librarv

pregrammez.cem
Paur isaler les campasants du DOM de la TadaApp a tester,
naus avans intreduit des attributs data-* nammés ici data-
test-ici.
Les attributs data-* permettent de raiauter des infas
supplémentaires aus tags HTML5 standard. lls sant, par
définitien, techniques danc invisibles paur l'utiliseteur.
Naus rappelans ici que les auteurs de la testing-librarv
Clement que : "".r'5`.|'tis tests r'esse-ral:-.I'e-nt ci la fa-can ci-ent
vatre i'c~gicie.i est utiiise_. plus iis ,peuvent vaus ~:i'an.n_er
C*s*rî*i.'tJ.ri<LîE' “_
Figure T :
Organisatian des tests *I Mantrer camment la dam-testing-librarv change peu d'un Dans natre cas, méme si les tests sant passants, il reste qu'il
frametvark e l'autre. v a trés peu de chances paur qu'un utilisateur devant san
Le besain métier est d'af'licher la liste des chases a faire et appli TadaApp se dise :
d'en rajauter. sPaur aiauter une nauvelle téche, ,ie vais cammencer par
Chaque écasvstéme vérifiera ces deus fanctiennalités cr tester rechercher ia div avec un attribut data-test-id dant la valeur
camme ci-dessus : figure 7 est égale e “'aaldTada*, puis treuver le bauten dent ie data-
test-id est egale cr 'farm' avant cie valider le farraulaireii.
Éeesvsrsme vusis 1 vue Tee une (vTu) vs Et peurtant, c'est camme cela que natre test "create tada"
Vue-Testing-Library (VTL) est esprime--_
Dans cette partie, naus mantrans dans un premier temps Par ailleurs, au-dela de la charge cagnitive liée a la
camment WU naus amene a utiliser intensément les divergence entre l'usage réel d'un utilisateur et la lagique trés
"attributs data-ii afin de retrauver des éléments du DOM et technique des tests censés préserver le ban fenctiennement
simuler les actians utilisateur depuis un test de campasant. d'une fanctiannalité, il v a teujeurs un risque a se baser sur
Oans un secand temps, naus mantrans camment le méme des tags HTML.
besain est esprimé avec WL. Lierreur etant humaine, Ce type de tests fenctienne iusquia ce
Le cade HTML se présente camme ci~dessaus 1 qu'une persenne supprime au renamme les attributs data-
test-id du template du campasant- Cela ne cantribue pas a
llaugmentatian de la cantíance en ses tests cl'Lll.
Ou'en est-il de la versian testing-Iibrarv ii

Vue Testing Li brarv


Le cade assacié aus deus cas : affichage d'une liste de
ttiches et ajaut d'une nauvelle téche.

Vue Test Litils WTU]


Le cade assacié aus deus cas : affichage d'une liste de
taches et aiaut d'une nauvelle téche.

FJfüÉ,|fCIfl1lTIÊI.CülTl
Ou'en est-il clu test écrit grece a
la angular-testing-librarv il

Angular Testirrg Librarv


Figure II

Taute la mécanique d'initialisatian


du campasant a tester avec TestBed
disparait l
Ii reste certes une recherche par
'quervSelectar', mais c'est paur
peuveir déclencher l'actian de
saumissian du farmulaire !
Par ailleurs, en mettant céte é
céte les tests ii-testing-librarv, les
différences sant minimes.

Figure I I
J

Cas niil : Afficher la trîiche par défaut


vue-testing-librarv

angular-testing-librarv

Cas n':"2: Aiaut cliune nauvelle ttfiche via le champ du farmulaire


vue-testing-li brarv

angula r-testing-librarv

CGHCIUSIGI1 de partir de Cypress au de React vaire de la dam-testing-


La care API de la testing-librarv apparte un sauffle nauveau librarv en elle méme paur n'utiliser que la care API.
dans l'autillage du dévelappeur frant. Uécasvstéme frant changeant rapidement, miser sur la dam-
Bien que cet article ait mantré uniquement les différences testing-librarv camme care skills dés a présent, ne serait pas
diimplémentatian entre `v'ue-js et Angular, il vaus est passible risqué si vaus vaus sauciet de la fiabilité de vas tests Ul.

IÎJll"tÎ2lÉ|l"tÎIi"l'Il"I"IIE'E.'tIlîÃ`IIl"I"l
Bonnes pratiques N0de.js
Vous avez decide de creer une API révolutionnaire avec Nodejs. Bravo ! Mais avez*
vous choisi Node pour les bonnes raisons? Quelles sont les consequences de cette
decision ? Comment votre appli va-t-elle evoluer et comment eviter des clowntimes ?
C'est pour repondre à ces questions que nous sommes ici.

Les avantages et les incanvénients paurquai. l_'ab]ectif étant ensuite de corriger ces erreurs
Node.js vous permet de n'avoir qufune seule technologie que pour éviter au masimum leur reproduction. Pour bien
ce soit paur le front ou le back : JavaScript. Finie la recherche manitarer votre app, utilisee un logger (Winston, Loglevel,
d'un profil idéal qui maitrise 3 technos : quelqu'un maitrisant npmlag...} et récupérez via un outil (pm2, prometheus +
JavaScript peut trés vite monter en compétence et étre opé grafana, appmetrics...) les performances de votre app.
rationnel en quelques jours. Cela vous permettra de pouvoir prévenir un potentiel
C'est certes un avantage en termes de recrutement, mais clovvntime au un crash.
qu'en est-il des avantages techniques F ll esiste un maven de réagir aus erreurs nan catchées : 1- 1
li -

Une application I*-lade.js peut étre lancée sur n'importe quelle pracessanl'"uncaugl1tEsceptian'l. ll ne faut pas lfutiliser pour -I'
.Ill
*'*'
-II

1-_:__-=|,ï
plateforme, ta nt que vous avez installé Node sur la machine, éviter que l'applicetian s'arréte, car elle se retrauverait dans
ce qui laisse la liberté sur le chais du serveur. un état corrompu. On peut en revanche l'utiliser pour
Node.js est event-driven. C'est-ii-dire qu'iI est nativement fait nettover des ressources utilisées par lfopplication avant
pour réagir ii des événements. Un appel a l'API est un qu'elle ne se ferme et donc toujours le terminer avec CodeWorks
événement, l'ouverture d'un fichier est un événement... "process.esit|'errorCode)” s'il n'v a aucune opération
Nous avons parlé des avantages, mais qu'en est-il des asynchrone en cours ou avec "process.esitCade =
inconvénients ii Il v en a un principal : Nocle.js est mano- errorCode” qui permet de ne pas forcer la fin du processus
thread. Nous en reparlerans plus tard, mais il faudra ci taut immédiatement.
pris éviter les gras calculs pour ne pas bloquer le thread
d'esécutian de natre app. Mana-thread
Coder avec Node, c"est faire du JavaScript, et JavaScript est
Quelques connaissances utiles mono-thread. Cela signifie que toute opération svnchrone
Le cycle de release bloque le processus qui correspond a votre applicatian. Notez
Node.js a un cvcle de release bien défini : il v a une release bien que i'ai dit JavaScript : Node.js propose des fonctions
majeure taus les 6 mais, avec potentiellement des breaking svnchrane au asvnchrane les: fs.readFiie et fs.readFiieSvne),
changes. Les releases paires sant maintenues pendant une mais les apératians faites en JavaScript, camme une boucle
lang ue périade (30 moisi, ce qui permet de les utiliser far; un map, des additions et autres sont elles lülfliti
librement. La derniére release paire est appelée la versian svnchrones.
"active". Si vous voulez savoir si l'opération que vous faites est
Les versions impaires sont utiles pour préparer le passage ti bloquante au non, référer:-vous a la dacumentatian Node
la version poire suivante pour les développeurs de librairies. officielle.
Figure 'I Si vous voulez mieus comprendre le cété bloquant ou non du
Paur eviter diavair des preblémes de Campatibilite, il faut JavaScript, je vous conseille la vidéo de Philip Roberts sur
choisir une versian active au en maintenance paire de l'event-laap, faite lors d'une JsCanf. Figure I :
Node.js pour taus les envirannements (méme de dév). ii'ytl*rme des
releases l`*iao'e.is

Gestion des erreurs


Les erreurs qui ne sont pas catchées avec un bloc trvlcatch
terminerant le processus. Ceci est fait pour éviter que
l'application ne se trouve dans un état inconnu et qufelle soit
corrompue. Pour cela, il v a plusieurs choses a mettre en
place :
'I' Utiliser un autre pracessus qui relancera l'app si elle est
davvn : cela permet de repartir a un état connu de
l'applicatian et d'éviter trop de davvntimes. ll v a beaucoup
d'autils paur mettre ça en place : upstart, forever, pm2...
Si votre application est hébergée par un fournisseur. il aura
aussi des solutions é vous fournir:
I* Manitarer l'application : cela permet cie savoir quand
ltopplication a eu des erreurs et surtout de trouver

progremmez.com
indesjs
Si vous bloquer: le processus de votre application, elle ne
cpœs
réagira plus. Vous avez peut-étre déja vu des sites ou des
const {Warlrer} = require[“viarlrer_tltreads"l
applis qui ne réogissaient plus au clic. Bloquer votre
processus principal aura le méme effet.
let num = *'-'lil
Documentation I*-Iode : httμs:i'ins|ieis.nrgisμii
li' Create new vvorlrer
Vidéo event loop : httμsziivnvwstiutahe.ct|miwat|:h'iv=lie[ihZl1lraFl1[1
const worker = nevr lillarIrer{"_i'vvarlrer.js", iivorlrerüate: {num: num}}}

Conséquences du mana-thread
llListen far rt new message from worker
ll fout donc éviter ou masimum de bloquer le processus. Mois
vrorlrer.once("message", result =::› {
qu'est-ce qui peut bloquer le processus ii Par esemple :
cansale.lagl`${num}tb Fibonacci Number: ${result}`l
I des boucles for ou cles mopll sur de trés grands arravs,
surtout si on les enchaine aussi avec des filterll par
li
esemple. ll ne faut pas oublier que chacune de ces
vvorirer.anl"errar", result ='.=~› {
opérotions est un parcours complet de l'orrov_
cansalelaglerror)
I des reges compleses. Par esemple, pour une vérification
d'email : r""`la-ZA-Z0-Pile-LA-Z0-P_ll.ll-li+d«]*@(la-zA-
il
Zfll-Pillo-:A-ZGPlflli-Flo-:A-Z0-9]+}*ll.,l+[a-eA-
*.vo|”lrer.onl"esit“', esitíatle =:› {
Z,l{2, lU}$i qui est de plus en plus longue iii résoudre plus
cansale.laglesitiIorlel
l'email est long.
Bref, tout ce qui est une opération com plese est ét éviter. Vous
il
pouvez utiliser perfarmance.naivli ovont et aprés lfopératian
cansale.lagl"Esecutecl in the parent thresd"]
et faire lo différence pour avoir le temps qu'elle prend en
ciμres-
millisecondes.
vvorlrecjs
cpres-
Mais comment faire si on doit passer par une opération
const {psrentPart, vvorl-rerlîlatel = requirel"viarlrer_threeds”}
complese méme aprés ovoir optimisé son code ou masimum i'
ll v a quelques solutions :
parentPart.pastlrllessagelgetfibtviarl-ter[iata.numl)
I Utiliser d'autres programmes écrits dans d'autres langages
qui sont multithreadés en les appelant dans notre
function getiiblnamlt
programme Node. On peut par esemple utiliser le grip ou
if [num === tilt
le SSL du reverseProsv quond on écrit une API.
return tl
I Utiliser les Worker Threads de Node. lls sont un moven mis
a natre disposition depuis la version l I .?.IÎl pour esécuter
i
else if (num === 1) {
du code sur diautres threads que le thread principal.
return 1
Disons, par esemple, que nous devons calculer un nombre de
l
elsel
la suite de Fibonacci. Pour éviter de blaquer le processus
return getiiblnum - il + getiibiaum - Il
principal, nous ollons utiliser les Worker Threads :
i
1
clprezv

PROCHAI Nu Éno Ici, nous calculons le 40e numéro de la suite de Fibonacci


sans bloquer le processus principal et celui-ci sera affiché
gréice au consoie.iog{',l dans ivorker.once|'"message”,. _ _ l.

Pour le cas des API, vous pouver: aussi utiliser un Cluster qui
crée des threads partageant les ports du serveur. Le
processeur principal servira alors juste é rediriger les
connesions utilisateurs vers le bon thread.

Cluster : https:iinatlsjs.argiaμii'rluster.html#cluster
Worker threads :
https:iint|tlejs.argiapiiivarlter_threads.html#vrsrlrer-threads
Disponible Code : httμs:i'igitltub.carnlsinstthieuiviarlrer-tttresrl-rleme

dès le 25 mcii Liste de bonnes protiques :


httμs:iigitl1t|l1.c|:|n|igt1ltlbergvanilnatlebestpractices

|3FDQFCIl"flfl"lEI.CüI'fl
Découverte cle my0Ll\/l et son
langage AQASIVI, la solution
quantique d”Atos
Les differentes solutions de simulation quantique, Microsoft Quantum (et son langage
Qt) et IBIVI Ctiskit notamment, ont certainement ec ipse quelques autres demarches. En
H' ..I"' J'

particulier la plate-forme rny(1LlVl, tleveloppee par tentreprise Atos et a ce titre solution


française, ne tait que très peu l'objet tlarticles dans la presse specialisee informatique
ou scientifique. Cest tout tobjet du present texte que de defricner cette solution et de
permettre autant que possible de texperimenter.
Description de la solution Jupvter, on peut évidemment esporter notre programme en
l_"idée pour Atos est de démocratiser l'apprentissage des un fichier _aqasm ou .circ pour utilisation éventuelle sur une
technologies quantiques, en proposant la possibilité de créer machine quantique réelle.
des circuits quantiques avec le langage AQASM (Atos Il est asse: classique dtinstaller la distribution Anacondo pour
Quantum Assembler] dant ltutilisatian est facilitée par le obtenir Jupvter (en plus d'autres logiciels Python a vocation
recours a une librairie Python nommée PyAQASM (Python scientifique). ll est également possibie d'utiliser le
Atos QA5M)_ La programmation se réalise donc gestionnaire de paquets Python pip en ligne de commande.
essentiellement en Python. lfesécution en local se réalise par
un simulateur qui selon la machine courante peut atteindre
20 qubits. Techniquement le code AQASM envové vers le On installe a présent mvQLM, également avec pip.
simulateur local peut prendre deus formats :
Ile format .aqasm, qui est un format te:-cte au contenu
intelligible ; Pour générer les images représentant les circuits quantiques,
I le format .circ auquel la ligne de commande a recours en particulier dans un notebook Jupjrter, il vous faudra myQLM
quand cette possibilité est utilisée pour ltoctivatian de la ivtagics. La ligne de commande suivante permet de l'installer_
simulation.
La solution quantique d'Atos permettra a terme de solliciter
des ordinateurs quantiques, bien réels cette fois, qui prendront Premier prog ramme AQÀSM avec
justement l'un de ces deus formats en entrée. Le langage Jupyter
AQASM est donc le format d'entrée de référence des l_'ensemble de ce qui suit est réalisé dans un notebook
machines quantiques actuelles et futures de l'entreprise Atos. Jupvter, disponible en ligne a l'adresse suivante :
ljabjectif pédagogique est donc doubié d'un objectif industriel httμs:iigithub.samlbenμrieuriTESÎltl1ASMihlahimsinflestA[lASM.iuvnh
de proposition d'une architecture et d'un langage de référence Disponible dans ce dépot Git :
associé, en ce qui concerne le quantique chez Atos. httμs:llgitltub.carnlbenμrieurlTESTlt[lASM
Enfin, mentionnons un atout singulier de la plate-forme : On travaille diemblée avec un notebook Jupvter. Lfidee est ici
ltinteropérabilité avec dlautres plateformes de simulation de produire un des quatre états de Bell, c'est-a-dire un des
quantique : Oiskit, ProjectO, Cirq, et P*yOui|. Ainsi vous pouvez états d'intrication masimale. En l'occurrence, nous allons
écrire votre programme quantique en AQASM puis gnfice a essaver de produire cet état :
cette passerelle, ltesécuter sur un autre simulateur quantique, |00)+|11)
un simulateur de Qiskit en ligne par esemple.
La documentation en anglais est disponible en ligne ; elle ×/Ê
inclut tous les aspects abordés ici : installation, On commence par créer le circuit proprement dit en AOASM.
programmation quantique, interopérobilité [notamment avec On commence par importer les objets dont on aura besoin.
Qiskitj, ressources dédiées a la recherche opérationnelle :
https:limvqlm.github.iu
On procéde a la création du programme quantique avec
Installation de rnyQ LM deus qubits en entrée.
La programmation autour de myQLM utilise largement les
notebooks Jupyter. C'est-ci-dire qutusuellement on conçoit
nos programmes quantiques sous Jupvter. On peut
également lancer la simulation de ces programmes
directement depuis Jupvtec Une fois mis ou point sous On ajoute une porte de Hadamard (H) sur le premier qubit,

prag ram mez.cam


puis une porte CNOT entre la sortie de la porte de Hadamard résultats obtenus et qutils sont presque équiprobables (423
et le second qubit_ Notre circuit est prét. essais qui donnent |00îe et 522 donnent I l l le). On obtient
aucun essai donnant |0l`I»=* ou |l0`e ce qui correspond
effectivement a l'intrication masimale recherchée.

Interopérabilité avec d'autres


On procéde a la génération graphique de ta représentation solutions quantiques
du circuit quantique. Chose rare dans le secteur des plates-formes, AQASM
propose de lfinteropérobilité vers d'autres solutions. Les cinq
solutions supportées sont : Qiskit, OpenQASM, PvQuil,
On obtient alors la représentation graphique suivante. ProjectQ et Cirq_ Pour au moins trois de ces solutions,
Finteropérabilité fonctionne dans les deus sens. Ainsi pour
ee Â) Oiskit, on peut :
Qi' I Concevoir un circuit quantique avec AQASM et le simuler
Le circuit quantique étant prét, on procéde cr son utilisation. On sur Qiskit.
importe la classe PvLinalg que nous allons tout de suite utiliser. I Réciproquement, on peut esécuter sur AOASM, un circuit
quantique conçu avec Qiskit
Un tel usage nécessite dfinstaller un module supplémentaire.
Pour Qiskit, on esécute cette ligne de commande dans le
terminal.

On lance a présent la simulation quantique.


Ensuite l'essentiel de cette interaction bidirectionnelle
consiste en la conversion d'un circuit AOASM en un circuit
On analvse les résultats sur les deus qubits de sortie et on Oiskit ou réciproquement de Qiskit vers AQASM Les deus
mesure ltamplitude de chacune des sorties. petits codes suivants assurent respectivement chacune des
deus conversions-
Oiskit vers AOASM :

On obtient ceci comme résultat.


Résultat
état |00îe amplitude l0.,Î"0?'l0o?Bi lBa54.75+0,il AQASM vers Qiskit :
état | i is amplitude lU_70?i0a?-si i8o54?5+0,r`l
Ce resultat correspond bien a :
rlr
Fort de notre circuit converti en Oiskit, on peut le simuler sur
une plate-forme Oiskit. ll nous faudra seulement déclarer notre
On peut a présent procéder a une simulation plus ambitieuse taken IBM irécupérable sur le site IBM en ligne : "API token"i
en sollicitant le circuit quantique un millier de fois, pour ainsi que le nom du simulateur visé [nous utiliserons ici le
vérifier que les probabilités obtenues sont bien celles simulateur nommé ibmq_qosm_simulotor)_ On commence par
correspondant aus états de Bell. déclarer les modules et classes dont on aura besoin.
On crée un job de l000 essais.

Puis on l'appIique a notre circuit quantique. Puis on crée un job avec 333 essais sur notre circuit en
AOASM.

Puis on analvse les résultats aprés mesure quantique.


On convertit alors notre circuit m*,rQLM ,i AGASM en un
circuit IBM Oiskit

On obtient le résultat suivant en sortie (Ie résultat est On déclare alors notre taken de l'APl IBM ainsi que le
probabiliste et peut donc varier d'un essai a l'autre) 1 simulateur IBM que nous allons utiliser (en précisant la
Résultat maniére de solliciter ce simulateur de façon svnchrone,
|0ti:=~ comme ici, ou asvnchronel.
0.4FB
|ll:=-
0.522
Cela signifie que |00?e et | I l Ie sont les deus seuls tvpes de

|!ÎifOQfûITllTIÊI.COFfi
Puis on soumet le circuit converti a une machine quantique
lBM ; dés que possible, on analvse le résultat transmis :

Partitionnement cle graphes


Le probléme précédent (coupe masimum) n'est qu'un
esemple parmi d'autres du probléme général de
On obtient le résultat suivant. ll est cohérent avec le résultat partitionnement de graphes selon un critére donné. Lfidée est
souhaité lintrication masimale) ainsi qu'avec les résultats ici d'estraire de façon optimisée des sous-graphes d'un
obtenus précédemment sur mvQl.M : graphe principal. La encore, on a une classe dédiée pour
Résultat énoncer ce probléme, une fois le graphe principal défini.
|tÎlrÎl:›
0.50-450450450-=l50-=i5
| i is
0.fli954P54954'?54955 Un esemple est disponible dans le notebook Jupyter suivant :
Notebook Jupyter
Pour aller plus loin : théorie des graphes lrttps:iilrub.glteÉ.nrr,fbinrier.art|luserr'nrvt|lrrr-rrrr,rt|lnr-nutehooks-ul]tguiμjfinate-
La saiutian mvQLtvl compte un certain nombre de ressources iroulrsltuturislslcambinstorial_optirnirrrtiunimss_crrt_rnr,fr:|lnr.i|rjrnh
qui permettent diutiliser des algorithmes quantiques
appliqués a des problémes d'optimisation en recherche Probléme dela clique
opérationnelle, en particulier relatifs a la théorie des graphes. Ici on recherche les sous-graphes complets d'un graphe
La présente section détaille donc différents problémes principal. C'est ce sous-graphe que l'on appelle justement une
proposés dans la documentation en ligne ainsi que les clique : un sous-graphe dont deus sommets quelconques sont
ressources associées dans m~,rOLlvt a ce propos. toujours adjacents. La classe l(Clique permet ici dténoncer le
Documentation en ligne o propos de théorie des graphes 1 probléme avant de solliciter un simulateur quantique.
lrlt|1s:r'r'mr,rt|irrr.r__r,ithulr.iolarivarrosr:l_oontbirrstariel_aptirniratian.htrrrl#

Probléme de coupe masimum


Si on considére un graphe donné, chaque aréte a une valeur Un esemple est disponible dans le notebook Jupvter suivant :
donnée. Le probléme de coupe masimum consiste en trouver la Notebook Jupyter
coupe qui traverse la somme masimale de valeurs d'arétes_ Ce trttos:iihulr.r;|lre2.mvbinrter.argiuserr'mvalnr-mrrtjlm-ntrtelroolrs-r'it|ee*irs|rinate-
probléme a un certain nombre d'applications concrétes, troslrsltuturislslcanrbinstorial_oμtimitstirrrrllr_r:lir|ue_rn*,rr|lrrr.i|1r,*nb
notamment le modéle dflsing en physique, consistant a
rechercher les états d'énergie minimale ldans ce modéle les Probléme de couverture par sommets
sommets du graphe sont des otomesl. Ce probléme revient a Dans ce probléme on cherche a trouver lfensemble minimal
masimiser le partitionnement en deus sous-graphes du graphe de sommets qui permet de couvrir toutes les arétes (et donc
principal. Dans le notebook Jupvterci-dessous, l'esemple pris ne tout le graphe). La encore, une classe est dédiée a la
comprend aucune valeur sur les arétes. ll s'agit donc de trouver modélisation du probléme avant simulation quantique. Il
une coupe masimisant le nombre d'arétes dans la coupe : s'agit de la classe `v'ertesCover.
Notebook Jupvter
lrttμs:ii'nr1,rlrinrler.orgivïighimvlltltllirrrvqlrn-notetrooIrslHlÉAl]ilile|:rath=tuto-
ritrlslilrîFoarnl1ineturial_uμtinrirstioo“iu2Fnras_cut_rrrr,rqlrrr.ir:rr,*rrlr
Quelques éléments utiles du code AQASM pour ce probléme Un esemple est disponible dans le notebook Jupvter suivant :
donné. On utilise le module Python netrvorks pour définir puis Notebook Jupyter
matplotlib pour dessiner le graphe : lrtt|rs:ii'hulr.glre2.rrrr,fl:rinrlecargiuserim-,frrlrn~rrrjirrlrrr~nutetruulrs~scsrrectrïiinuts-
irtrtrlrsitutrrrislsicamhirrrrtorisl_rr|:rtimirstianivertes_r.:aver_mrolm.iprrnlr

Conclusion
Ensuite on utilise la class Masfiut pour énoncer le probléme La solution mvOLM d'Atas, moins popularisée que Oiskit
de coupe masimum : d'lBM par esemple, présente pourtant de nombreus atouts
sans doute trop méconnus (en plus d'étre une solution
technologique d'origine française et européenne) 1
I Une programmation en Python.
Enfin, on peut créer un job et lancer une résolution quantique I Une interopérobilité forte avec dtautres plateformes
sur mvQLM : comme abordé ici avec Oiskit.
I Un socle solide de classes dédiées a des problémes réputés
NP-*difficiles ou l\lP*complets, utilisés massivement en
sciences et dans I"industrie_
' Une documentation en ligne trés concréte incluant de
nombreus notebooks Jupvter disponibles.

progremmez.com
- Et Piénr l¿5 de-VÖP5 50m ÎTPÎ5
fois moins touchés que la population
J et tort vn Seodeee Pour \ ga-natura r Mason: nan ?
connaitre le taux d rncrdence --- «_
COVID Chel l£S d€.VOPS Tu parles d'r,rn¿=;
,1.--I"
surprise
_. -,_/-f
.I-"-"r'_
-III
'IIII'

- Ah our 7

K 'pout-quai tu

dis W ? Bah si tout le monde restait


chez sor a monter une stack KES
& sur son hormetab, et
“W”19/am,
" es effifiace

r"¿;rr¿,
P ~s¢=,,;,=¿f_*` a'As
e ,mar› .s
em »Prrr5_~_
X ma'-et-.ile aser
r
ll/rrrjlj j j/
CommitStrip.com
I I _ II I_ I I_ I -I -I -Il I

*_ -.= 1._.'=- "-' '.= .-.'-.*-


'.-"....
r -,:"='*'.jr :ss '- 't _' '.-
-I . I J 'I' I -_
_-_-rn
I
-:-jr
I "
--
' I
:
'
':'-: .'= .-.of-ff-.-*T- -
'-1' I..-

I .'i" ir I_- I. -.'-|_::."I :O iÂI'i"':“-.Il 2'.r,'I'i.|r. ùr -ir' _ I -I _; I'Î -2 .".| 'IJ :


.'.".'r-'."I'--I-'.-'.îr--"I" 'Î'c- i.-1'-"-I-' .'-.--:' --- I:='.-'i'.,'j- il.-II - '.'I.-' -.'-I*'-'- 'I¿'.'r5'.'i:

. . Abonnement
P S d
I “we _nn re _ Abonnement ltarifs France] : 55 *E pour I an,
1 | | " ,, ïãeeîïflgágggêffflfiîlrîztfiedifl Et de -si s pu- 2 su. srusrsss 1 rs s. ru-et si sures i
I P _ - _ - _ n _ ' il U G5 Ê - Algérier Maroc .I Tunisie : oil *E - Canada : 30 E
Priigrümmšz' n_252 'jm' Juin EG? _ D"PPfP“' * 0"" BORSCHA - Tom - Dom : voir www.|rragramnrer.r:urrr.
Seigneur Sith niveou directeur des redactrons : oborar-;hq@horon5ailqmo_fr åutres 5 , cümultez IES tarifs
François Tonic - ltanicfiμragrsmmeicoum Responsable titre : Terry MATTARD Em, w,WpÊåg,åmmE¿_EDm_
Review : Dorro Bartaguiz TÉIÉPITUHE 1 P9 PT 32 P9 30
Pour toute question sur Fobonnement :
Contacter la rédaction : rertactiao@|:rragrsmmeLoaro Publicité
Ont collaboré tr ce numéro : Louis Adam (Zdneflr Nefer-IT ahunnementsúîμrügrammelœm
Commirsrrio Tél. : os sa rs ai os Abonnement PDF
Les contributeurs techniques fiP“lE@PlP9mmmPf*EPlT' münde Enfler i 45 E pui" I un'
Jérémv Bruvére Br Léo Svlvain Cuenca Impression Acces aux urchwes I En E'
Lhuile Jean-Paul Gallant SIE Imprimerie, France |~.|EfE,-.|T
Fnnnif nauk Maxime Beugnet [rg-pür lëggl 5? rue de Gisors, P5300 Pontoise France
Julien Leborgne Alesonclre Caussignac _ d Ct-
Pierre Germain-Lacour Elise Savornin À pumhün ÎÉIEL ¿Èn8@úp;Êg;üln3EEI`Cüm
Thierry Fondrat Dorra Bartoguiz Commission paritaire
Gagobo Koffi Narcisse Michelle Avamo l225IO'B3oo Toute reproduction intégnale ou partielle est interdite
Gaétan Viola-Nguven Matthieu Albert sans accord des auteurs et du directeur de la
Christophe Herol Benoit Prieur ISSN publication. fifi Nefer-ITX Programmetl,
Cynthia Henaff lo2Î-0905 mai 2022.

progremmez.com
softéluent
Rejoignez l'ESN créée por des
I développeurs pour les Développeurs

Vous possédez une ou plusieurs de ces compétences 7

Azure Dex/Ops (:|OUd

Server Angujür Reoct

Cr'-'rf Cl/CD .NET Core

ASPNET MVC l\/licroservices

- - -I 1 '-IÎ-__-1_----' -
__II .I '
ir
II
I

E Contactez nous !
l \
Retrouvez-nous sur notre page carriere: softfluent.fr/nous-rejoindre

Ou contactez Sylvie, en charge du recrutement chez SottFluent :


I \. of-367140139
sy|vie..benjeI|oun@softfIuent.com l

I Conseil Expertise Po rtoge


R* softfluentfr
Vivez |'e><|oérience
Be _- by ENI
La solution de formation à Finformatique en ligne
ENTREPRISES | CENTRES DE FORMATION | ÉTABLISSEMENTS O'ENSElGNEl\/IENT SUPÉRIEUR

rr BUREAUHQUE WEB st PAO

E; @ IS-:eîs </› Ê
1 300 livres
330 cours
12 000 vidéos
Eh
JAVA 145 e-formations
17 certifications ENI

Accès gratuit 48h !

www.eni-eIearning.com '

Vous aimerez peut-être aussi