{"id":1677,"date":"2023-04-17T18:25:21","date_gmt":"2023-04-17T16:25:21","guid":{"rendered":"https:\/\/www.loicmathieu.fr\/wordpress\/?p=1677"},"modified":"2023-04-17T18:25:21","modified_gmt":"2023-04-17T16:25:21","slug":"devoxx-fr-2023-lincheck-testing-concurrency-on-the-jvm-par-maria-sokolova","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-lincheck-testing-concurrency-on-the-jvm-par-maria-sokolova\/","title":{"rendered":"Devoxx FR 2023 &#8211;  Lincheck: Testing concurrency on the JVM par Maria Sokolova"},"content":{"rendered":"<p>Maria Sokolova est une des d\u00e9veloppeuses de l&rsquo;\u00e9quipe des coroutines de Kotlin et de Lincheck et elle va nous pr\u00e9senter Lincheck, une librairie permettant de valider les algorithmes concurrents.<\/p>\n<p>On prend comme exemple une bounded queue bas\u00e9e sur <code>ConcurrentLinkedList<\/code> dont l&rsquo;impl\u00e9mentation a \u00e9t\u00e9 faite par ChatGTP en Kotlin.<\/p>\n<p>L&rsquo;impl\u00e9mentation propos\u00e9e par ChatGTP semble correcte \u00e0 premi\u00e8re vue, mais comment la tester ?<\/p>\n<p>Stress Test ?  Non car c&rsquo;est non d\u00e9terministe.<\/p>\n<p>L&rsquo;\u00e9quipe de Kotlin a cr\u00e9\u00e9 Lincheck pour \u00e7a : tester des structures de donn\u00e9es dans une utilisation concurrente.<\/p>\n<p>Avec Lincheck, on d\u00e9finit plusieurs op\u00e9rations qui sont des m\u00e9thodes annot\u00e9e par <a>@Operation<\/code>code&gt;@Operation&lt;\/code<\/a> puis on lance de mani\u00e8re concurrente les diff\u00e9rentes op\u00e9rations dans une m\u00e9thode de test annot\u00e9 par <a>@Test<\/code>code&gt;@Test&lt;\/code<\/a> gr\u00e2ce une des classes de test fournie ; par exemple <code>StressOptions().check(this::class)<\/code>.<\/p>\n<p>La difficult\u00e9 c&rsquo;est d&rsquo;exprimer ce qui est correcte dans un monde concurrent, ce qui est simple dans un monde s\u00e9quentiel.<\/p>\n<p>Une execution concurrente correcte se base sur le principe de \u00ab\u00a0linerazibility\u00a0\u00bb : s&rsquo;il existe une ex\u00e9cution s\u00e9quentielle possible entre les diff\u00e9rents threads, alors l\u2019ex\u00e9cution concurrente est correcte.<\/p>\n<p>Si on reprend l&rsquo;exemple g\u00e9n\u00e9r\u00e9 par ChatGPT, celui-ci n&rsquo;est pas valide car la m\u00e9thode add n&rsquo;est pas atomic et deux threads peuvent s&rsquo;entrelacer (interleave).<\/p>\n<p>Comment marche Lincheck:<\/p>\n<ol><li>G\u00e9n\u00e8re des sc\u00e9narii concurrents (\u00e0 la fuzzer)<\/li>\n\n<li>Examine les sc\u00e9narii via stress test ou model testing<\/li>\n\n<li>V\u00e9rifie automatiquement les r\u00e9sultats<\/li>\n<\/ol>\n<p>Lincheck injecte du code de v\u00e9rification avant chaque lecture \/ \u00e9criture d&rsquo;un champ (bytecode enhancement qui utilise invokedynamic).<\/p>\n<p>Lincheck peut aussi d\u00e9tecter si il y a des threads bloqu\u00e9s (obstruction freedom) par un algorithme ce qui aide \u00e0 d\u00e9velopper des algorithmes lock-free \/ wait-free.<\/p>","protected":false},"excerpt":{"rendered":"<p>Maria Sokolova est une des d\u00e9veloppeuses de l&rsquo;\u00e9quipe des coroutines de Kotlin et de Lincheck et elle va nous pr\u00e9senter Lincheck, une librairie permettant de valider les algorithmes concurrents. On prend comme exemple une bounded queue bas\u00e9e sur ConcurrentLinkedList dont l&rsquo;impl\u00e9mentation a \u00e9t\u00e9 faite par ChatGTP en Kotlin. L&rsquo;impl\u00e9mentation propos\u00e9e par ChatGTP semble correcte \u00e0 premi\u00e8re vue, mais comment la tester ? Stress Test ? Non car c&rsquo;est non d\u00e9terministe. L&rsquo;\u00e9quipe de Kotlin a cr\u00e9\u00e9 Lincheck pour \u00e7a : tester&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-lincheck-testing-concurrency-on-the-jvm-par-maria-sokolova\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[166],"class_list":["post-1677","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-devoxx"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1674,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-foundation-db-le-secret-le-mieux-garde-des-nouvelles-architectures-distribuees-par-pierre-zemb-et-steven-le-roux\/","url_meta":{"origin":1677,"position":0},"title":"Devoxx FR 2023 &#8211; FoundationDB : le secret le mieux gard\u00e9 des nouvelles architectures distribu\u00e9es ! par Pierre Zemb et Steven Le Roux","author":"admin","date":"lundi 17 avril 2023","format":false,"excerpt":"Il existe pr\u00e8s de 900 BDD (cf https:\/\/dbdb.io\/) et chacune a ses particularit\u00e9s : mod\u00e8le de requ\u00eatage, mod\u00e9lisation de la donn\u00e9e, moteur de stockage, .... Existe-t-il une de ces trois caract\u00e9ristiques que l'on peut mutualiser ? Oui, toutes les bases de donn\u00e9es stockent de la donn\u00e9e, on doit donc pouvoir\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1330,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-france-2021-ledition-9-3-4\/","url_meta":{"origin":1677,"position":1},"title":"Devoxx France 2021 &#8211; l&rsquo;\u00e9dition 9 3\/4","author":"admin","date":"vendredi  1 octobre 2021","format":false,"excerpt":"Cette semaine, c'est Devoxx France. Et pour la premi\u00e8re fois depuis pas mal de temps, je sors de chez moi, et j'y vais ! Je vous \u00e9cris ces mots dans le train de retour de la deuxi\u00e8me journ\u00e9e, pas de troisi\u00e8me pour moi cette ann\u00e9e. J'ai assist\u00e9 \u00e0 quelques talks,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":936,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/etre-speaker-a-devoxx-france\/","url_meta":{"origin":1677,"position":2},"title":"Etre speaker \u00e0 Devoxx France","author":"admin","date":"mercredi 17 juillet 2019","format":false,"excerpt":"J'ai eu la chance de donner deux talks \u00e0 Devoxx France cette ann\u00e9e (2019). Voici un petit retour d'exp\u00e9rience sur comment j'en suis arriv\u00e9 l\u00e0, et comment s'est pass\u00e9 cette exp\u00e9rience. \u00c9tape 1 : les CFPs Lorsque la saison des CFPs arrive, comme chaque ann\u00e9e, reviens le questionnement \"Est-ce que\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1508,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/4-ans-chez-zenika\/","url_meta":{"origin":1677,"position":3},"title":"4 ans chez Zenika","author":"admin","date":"mardi  6 septembre 2022","format":false,"excerpt":"Avec quelques jours de retard, la date anniversaire \u00e9tant le 3 septembre, voici le bilan de ma quatri\u00e8me ann\u00e9e chez Zenika. Pour ceux qui seraient int\u00e9ress\u00e9 par ce que j\u2019avais fait l\u2019ann\u00e9e pr\u00e9c\u00e9dente, c\u2019est ici : Ma troisi\u00e8me ann\u00e9e chez Zenika. Quelques chiffres : 11 articles sur mon blog perso,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1672,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-improving-your-skills-with-the-debugger-par-bouke-nijuis\/","url_meta":{"origin":1677,"position":4},"title":"Devoxx FR 2023 &#8211; Improving your skills with the Debugger par Bouke Nijuis","author":"admin","date":"vendredi 14 avril 2023","format":false,"excerpt":"Deuxi\u00e8me conf\u00e9rence \u00e0 laquelle j'assiste (et derni\u00e8re pour laquelle j'ai pris des notes), \u00e7a parle de l'utilisation du debugger. On va utiliser un programme simple de type Hello World. Apr\u00e8s un rapide rappel sur les bases de l'utilisation d'un debugger avec IntelliJ on entre dans le vif du sujet, les\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1474,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-19-quoi-de-neuf\/","url_meta":{"origin":1677,"position":5},"title":"Java 19 : quoi de neuf ?","author":"admin","date":"mardi 12 juillet 2022","format":false,"excerpt":"Maintenant que Java 19 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=1677"}],"version-history":[{"count":3,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1677\/revisions"}],"predecessor-version":[{"id":1680,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1677\/revisions\/1680"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=1677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=1677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=1677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}