Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

TDD utopie ou géniale avancée ?

Perdu dans mes pensées lors d'une pause amplement méritée je pensais à la méthode TDD et j'ai eu envie de vous livrer le fruit de mes réflexions. Après tout, bloguer c'est ça aussi.
...C'est sûr je vais passer pour un ET, aucun être humain normalement constitué n'irait penser à de telles choses pendant une pause. Mais j'assume !

Le Test-Driven Development ou développement piloté par les tests, n'est pas réellement un sujet récent, cette méthodologie est dérivée du concept "tester en premier" de l'Extreme programming, lui même une forme dérivée de l'Agile Software Development datant de 1996, dans la même veine que Scrum ou RAD en 1991, ce qui ne nous rajeunit pas.
Tout cela pouvant remonter certainement au néolithique de proche en proche. Par exemple taper sur la tête de son voisin avec la massue toute neuve qu'on vient de fabriquer histoire de tester si elle sera assez solide pour aller à la chasse était certainement le grand début de l'Agile ou piquer un silex tout taillé à un copain est finalement le début de la réutilisation voire du RAD. Dieu lui-même en reprenant les plans de fabrication et une côte d'Adam pour faire Eve faisait de la réutilisation et du design pattern. Confondre grand ordonnateur et grand ordinateur est un exercice de style osé, j'en conviens.

Bref le TDD, comme toute méthodologie, n'est que le fruit d'une lente maturation au fil des ans. Et parmi toutes celles proposées ces 20 dernières années c'est celle qui apparaît la plus sage, la mieux adaptée. Elle recentre le développement sur l'essentiel : le besoin réel et donc l'utilisateur. Techniquement elle prône une économie de mouvement évitant les errances : on ne code que ce qui est nécessaire pour que ça marche et surtout pas plus. On s'éloigne ainsi des grandes généralisation, fantasme d'informaticien, donnant lieu à des développements complexes et coûteux qui, une fois terminés, sont déjà obsolètes.

Mais est-ce une nouvelle utopie et subira-t-elle le même sort que toutes les autres méthodes de développement (à savoir se limiter à quelques termes pompeux sur les propositions commerciales et à quelques discussions autour des machines à café) ?

UML est un bon exemple du triste sort réservé aux meilleures idées de nos têtes pensantes. Même si cette mode tend à passer (remplacer par d'autres) il fut un moment ou toute "propal" se devait de faire apparaître ce terme comme toute lessive se doit au minimum d'avoir la mention "deux en un" (voire plus) sur son emballage pour se vendre.

Avant que d'excellentes méthodes comme TDD puissent s'imposer, il sera donc nécessaire de changer les mentalités, celles des dirigeants de SSII et de leurs commerciaux qui se retranchent souvent derrière la loi du marché et de la concurrence pour offrir au client ce qu'il demande au lieu de lui conseiller ce dont il a besoin, et celle des clients qui ne peuvent continuer à se dédouaner de leur ignorance s'ils désirent obtenir des logiciels fiables, maintenables et adaptés à leurs besoins et ce au meilleur prix (mais pas en dessous, la qualité se paye). 

Un long voyage nous attend donc avant qu'un tel bouleversement se produise, et TDD, comme l'XP ou l'Agile development et bien d'autres dont nous avons tous oublié les noms, finira peut-être aussi dans les nymbes brumeuses où s'évanouïssent les idées trop en avance sur les mentalités...

En attendant, essayez de développer selon TDD :  vous y gagnerez en efficace et en qualité.
Visual Studio se plie fort bien au Unit Testing, mais beaucoup moins bien au TDD. Il est fort simple de créer un test pour une méthode existante mais pas l'inverse, base du TDD. Néanmois, avec un peu d'imagination, il est tout à fait possible de créer un squelette de classe, d'y ajouter une méthode ne faisant rien puis de générer le test unitaire pour enfin revenir sur l'implémentation de la méthode. Il n'y a pas de temps perdu, il n'y a qu'à changer un peu l'ordre dans lequel les choses sont faites.

Essayez, vous verrez, c'est étonnant comme le code final d'une classe est assez différent de celui qu'il aurait été créé par la méthode "classique".

Happy coding !

Simplifier l'utilisation des expressions régulières avec Expresso

Les expressions régulières semblent être ignorées par bon nombre de développeurs malgré leur puissance. Une raison à cela : c'est aux antipodes de la programmation moderne qui se veut claire et lisible...

Les expressions régulières c'est un peu comme XSLT, balèze mais incompréhensible à moins de ne faire que ça tous les jours. Le problème avec ces "langages" c'est que justement on n'en a pas besoin tous les jours ! Et ce n'est pas en pratiquant une fois de temps en temps qu'on acquiert l'habilité nécessaire. Au final, les plus courageux qui ont essayé plusieurs fois finissent par laisser tomber...

Dommage. D'autant que les expressions régulières sont parfaitement intégrées aux frameworks modernes comme .NET, et que leur bonne utilisation permet des choses quasi magiques en une ou deux lignes d'intruction : tester la conformité d'une donnée complexe et même, ce que beaucoup ignorent, découper une données en groupes ou extraire une information dans un flot (par exemple repérer automatiquement les adresses web dans tout un texte).

Mais j'ai une solution pour vous !

J'ai trouvé un soft, gratuit, qui permet de saisir des expressions régulières, de les tester, et de les analyser (pour le debug c'est parfait, mais aussi pour.. apprendre!). Ce soft est vraiment bien fait et vaut le coup d'oeil dans tous les cas.

Je vous conseille donc de le télécharger et de le tester, vous pourrez insérer des expressions régulières complexes dans votre code et passer pour un héro à la machine à café, c'est pas cool ça ?

Ca s'appelle "Expresso" et ça se trouve là http://www.ultrapico.com/Expresso.htm.

LINQ à toutes les sauces !

Je suis en train de boucler mon article de présentation de LINQ. Au départ je pensais m'en sortir en une dizaine de pages, mais j'en suis à plus du double... juste pour faire le tour des principales possibilités et sans détailler la syntaxe (ce n'est pas le but de cet article).

J'ai eu maintes fois l'occasion de vous dire ici que LINQ est l'innovation la plus fantastique que j'ai vue depuis longtemps dans un langage. Vous en saurez plus en lisant le prochain article qui sera en ligne ce week-end, mais pour vous prouver que LINQ peut servir partout et tout le temps voici deux exemples à contre-courant de l'idée qu'on se fait des utilisations possibles de LINQ :

Cas 1 : Lister les services actifs de Windows.

C'est bête mais balayer et filtrer une simple liste comme celle là (et de bien d'autres du même genre retournées par le framework .NET ou par vos applications), c'est produire du code pas très marrant... Avec LINQ ça devient :

using System.ServiceProcess; 
var srv = from s in ServiceController.GetServices()
         where s.Status == ServiceControllerStatus.Running
         select s.DisplayName;
ListBox1.DataSource = srv.ToList();

 
Je trouve ça élégant, pas vous ?

Cas 2 : Remettre à unchecked tous les Checkbox d'une form

Balayer certains contrôles d'une fiche n'est là non plus pas l'endroit où l'on s'attend à trouver du LINQ... Et pourtant ! Imaginons une fiche de saisie avec des tas de checkbox et un bouton "raz" de remise à zéro de la fiche. Balayer tous les contrôles de la fiche pour ne sélectionner que les checkbox n'est pas un code bien complexe mais avec LINQ ça devient tellement plus chouette !

var cb = (from Control c in this.Controls select c).OfType<CheckBox>();
foreach (var c in cb) c.Checked=false;
 

C'est pas plus joli et plus clair écrit comme ça ? (et encore on pourrait se passer de la variable "cb" et intégrer directement la requête LINQ après le "in" du "foreach")?

Bref, LINQ j'adore. Et j'espère bien que le papier à venir va vous transformez en fans vous aussi ! alors... Stay tuned !

Les nouveautés syntaxiques de C# 3.0

Les expressions Lambda vous connaissez ?

Et l'inférence des types locaux, les méthodes d'extension, les expressions d'initialisation des objets ou les types anonymes ?

Si tout cela sonne bizarrement à vos oreilles, n'hésitez plus une seconde : téléchargez le nouvel article que j'ai mis en ligne gratuitement !

Voici le lien, il n'y a qu'à cliquer ici !

Vous êtes encore là ?

... Alors ne loupez pas le tout dernier article "Présentation de LINQ avec C#", un papier de 32 pages riche en exemples !

Le journal des TechEd : Jour 5 - The End

Ca y est... C'est (déjà) fini Frown On aimerait tellement en voir plus, avoir plus de temps pour suivre tout...
83 conférences dans ma sélection, juste une poignée suivies, les TechEd devrait durer 1 mois !

Heureusement qu'à partir de la semaine prochaine les vidéo seront en ligne en attendant le DVD... En fonction de ma sélection, cela fait une bonne centaine d'heures... De quoi occuper les longues soirées d'hiver Laughing.

J'ai suivi aujourd'hui une conférence sur un langage un peu exotique, F#, vous connaissez ? Un dérivé de ocaml (Objective Caml) un style différent appelé "programmation fonctionnelle orientée objet". Avantage de F#, il fonctionnera sous MONO aussi. La conférence TLA405 se titrait "Parallel and Asynchronous Functional Programming on  NET with F#", tout un ... programme.
Simple curiosité ou langage d'avenir ? Je ne saurai vraiment pas le dire. C'est en tout cas la curiosité qui m'a amené à voir cette session, je suis content, je sais ce que c'est maintenant et je pourrai frimer à la machine à café "comment ? quoi ? tu ne connais pas F# ? quel hasbeen tu fais mon pauvre xxxxx (à remplacer par le nom du pauvre gus qui se trouvera là) !".

Non je plaisante, s'ouvrir l'esprit en regardant toujours ailleurs est certainement la qualité la plus importante du développeur, et peut-être la moins bien partagée quand on voit comment parfois les gens se cloisonnent et s'accrochent à leur savoir, à "leur" langage (comme s'ils l'avaient écrit eux-mêmes), à "leur" IDE... C'est en regardant C#, comme ça, pour m'informer que j'ai basculé vers .NET... 
Mais bon, là, je n'échangerai pas mon baril de C# contre deux de F#. Intéressant, certes, mais un peu trop exotique à mon goût. Mais faites-vous votre propre opinion en visitant la page du labo de recherche de Microsoft qui a planché sur ce nouveau langage.

Plus ardue mais passionnante, fut la conférence Win401 "Deep Reflection - Things You Really Need to Know About Reflection 2 0". Il s'agissait de voir en profondeur la réflexion sur certains aspects comme la façon d'inspecter les génériques ou même de créer des génériques au runtime.. La génération de code avec CodeDOM a été très instructive et il a fallut s'accrocher lorsque le speaker a décidé de nous entraîner dans le code IL et les méandres de la CLR. Je ne suis pas certain qu'après une semaine de conférences avoir choisir de clore par cette session était une excellente idée, j'ai la tête farcie Tongue out !

Les techEd sont terminées, mais en réalité seule la partie visible de l'iceberg vient de fondre : le plus gros du travail est à venir. Trier, digérer l'information, voir et revoir les vidéos, tester au calme chaque aspect démontré dans chaque conférence, en tirer la substantifique moëlle, et vous faire partager tout cela au travers d'articles à venir...

Pour le moment, c'est le sas de décompression : une soirée calme avec quelques rougets bien frais achetés à la Boqueria que je vais accompagner d'un riz le tout arrosé d'un bon rouge local ! Demain direction Figueras et le musée Dali, impossible d'en être si près sans aller voir les oeuvres du maître.

L'année prochaine, venez aux TechEd (qui auront lieu ici encore très certainement) et réservez-vous du temps pour voir du Picasso, du Dali, les maisons de Gaudi et toutes les splendeurs de Barcelone. Participer à une conférence sur F# ne suffit pas pour prétendre s'ouvrir l'esprit, l'art, les gens, sentir l'atmosphère d'une ville, d'une nation, c'est aussi important, je dirais même mieux, sur le plan personnel et humaniste, la visite d'une maison de Gaudi vous marquera à vie, alors que dans 20 ans vous ne vous souviendrez plus du paragraphe plus haut sur F# !

La suite bientôt sur ce blog... Du C#, du LINQ, du WPF, du Silverlight, vous n'avez pas fini de m'en entendre parler !

Le journal des TechEd : Jour 4

L'avant dernière journée de cette course folle s'achève...

Sélectionner les bonnes conférences est toujours délicat. Je vous parlais dans un précédent billet de l'excellente idée de Microsoft de filmer toutes les breakout sessions qui se retrouveront ainsi en video sur le DVD de la conf et dans l'attente de ce dernier qui seront téléchargeables sur le site des TechEd.

Mais il y a une autre façon de présélectionner les conférences, en téléchargeant les slides sur la page "My event" (à laquelle tout participant a accès avec son login). Les slides sont souvent "légers", beaucoup de speakers n'y mettent qu'un minimum préférant la démo en live au texte des diapos. Malgré tout cela permet de se faire une idée plus précise du plan que suivra le conférencier et d'affiner sa sélection.

Parmi les conférences de la journée, TLA403 "Loose coupling in practice - Composite UI Application block (CAB) in the real world" a retenu mon attention. Elle présentait notamment le "Smart Client Software Factory" dont la V2 est sortie en mai dernier, un ensemble de classes et d'outils facilitant la conception d'applications modulaires. La V2 intègre la gestion des CAB pour la distribution des modules. Vous pouvez télécharger la SCSF et ses sources sur Codeplex ou sur la page officile chez Microsoft: http://msdn2.microsoft.com/en-us/practices/bb190387.aspx .

La session présentée par David Platt était doublée dans l'après par une autre conf sur le même sujet présentée par Mario Szpuszta (TLA406). Je n'ai pas assisté à cette dernière qui, selon les slides, faisait intervenir Workflow Foundation dans les patterns proposées. Une conférence qu'il sera bon de visionner lorsque sa video sera mise en ligne donc...

La conférence TLA303 présentait le Visual Studio 2008 Shell et la façon de créer son propre IDE en se basant sur ce noyau. je n'ai suivi que le tout début préférant voir ce contenu en video plus tard car au même moment se tenait la TLA407 "Dealing with concurrency and multi-core CPUs with today's developement technologies", ou bien en français "comment gérer la concurrence et les microprocesseurs multi-coeurs avec les technos actuelles". Une conférence dense, très intéressante qui méritera une seconde écoute au calme quand la vidéo sera en ligne...

Bref, une journée encore bien chargée... Après 4 jours de conférences en anglais on se surprend à retrouver dans ses notes des paragraphes entiers notés en anglais sans s'en être aperçu.. L'immersion linguistique, c'est aussi un autre avantage des conférences internationales comme les TechEd !!

A demain pour le dernier jour !

 

Le journal des TechEd : Jour 3

Encore une journée bien chargée...

Les conférences se succèdent, les sessions "Ask the experts" sont particulièrement riches en information pointues, une sorte de forum de discussion ouvert avec des experts de tout bord, de quoi satisfaire les participants qui sont venus non seulement s'informer mais aussi trouver des réponses précises à des questions techniques précises.

Mais revenons au journal des TechEd, que je vous livre au jour le jour, en direct de Barcelone. Il sera bien temps à mon retour, et une fois la masse d'information digérée, de prendre la plume pour quelques articles techniques qui seront mis en ligne gratuitement ici et sur le site www.e-naxos.com.

Parmi les choses les plus spectaculaires, je ne peux m'empêcher de vous livrer une petite photo d'une conférence sur LINQ. LINQ est un rêve devenu réalité, un pont établi entre deux mondes, le langage d'une part et les données d'autre part. Il y aura dans l'histoire des langages informatiques un avant LINQ et un après LINQ, c'est une évidence. Je vous en reparlerai souvent je pense dans les papiers à venir...

Microsoft étant passé maître dans l'art d'organiser des conférences de cette ampleur, il y avait ce soir le "country drink", une petite soirée festive offerte aux participants des TechEd, pays par pays. Pour les français c'est au MIX que cela s'est déroulé, un lieu entre bar branché et discothèque. Boissons diverses et variées à volonté, tapas originaux et délicieux servis en parallèle par des serveuses ayant un charme hispanique certain...

Quand je vous disais qu'il fallait venir !

A demain pour d'autres nouvelles !