Kata sur le refactoring et les tests unitaires

Laura NATAF

Notre consultant Yusuf a présenté la semaine dernière, à 8 développeurs spécialisés en développement C#, un KATA, c’est-à-dire un exercice consistant à apprendre en s’exerçant jusqu’à ce que le sujet soit maîtrisé par les participants.

Le sujet était le “Tennis refactoring Kata”, basé sur le language C#, et les idées ont fusionné tout au long de cette soirée spéciale organisée au sein de nos locaux.. L’échange fut le maître mot de ces quelques moments, suivis par une dégustation de pizzas au feu de bois autour de notre table de cuisine.

Voici quelques clichés représentatifs ! :)

WhatsApp Image 2017-11-08 at 20.46.25

WhatsApp Image 2017-11-08 at 20.49.59

WhatsApp Image 2017-11-09 at 10.29.53

 

 

facebooktwittergoogle_plusmail

Ingénieur Etudes et Développement C#

Mission : 

La mission concerne une prestation de maitrise d’œuvre au sein du Service Outils Métiers (Rapide Application Développement).

La mission de cette équipe est la mise en place d’outils pour l’ensemble des services de notre client (en particulier cette mission ciblera les outils de la direction financière).

Les développements durent entre moins d’une journée et 50 jours en moyenne (+ 3 applications plus lourde). Chaque développeur peut avoir plusieurs sujets à traiter en parallèle.

En plus de ces développements, le développeur doit assurer le support des outils en production.

Le développeur étant autant que possible autonome sur ses projets il doive être en mesure de recueillir et comprendre les besoins, proposer une solution et un workflow adapté à la dimension du projet et de vendre/valoriser ses livraisons à travers une bonne communication avec les métiers.

 

Les principales tâches à réaliser :

  •   Recueil des besoins utilisateurs
  •   Conception de la solution
  •   Développement / Evolution des outils (90% du temps)
  •   Recette
  •   UAT ( User Acceptance Tests)
  •   Documentation
  •   Mise en production
  •   Formation / accompagnement des utilisateurs
  •   Suivi des demandes de support adressées par les utilisateurs
  •   Support utilisateurs (Prendre en charge les demandes et résoudre les problèmes dans les meilleurs délais afin de ne pas pénaliser la production)
  •   Reporting régulier
  •   Participation à la construction du planning en donnant des chiffrages précis

Profil recherché :

Nous rechercherons donc un développeur.Net (C#, VB .net, Access, Excel, SQL Server, VBA, etc.).

Expérience : 2-5 ans

Vous souhaitez intégrer une équipe dynamique, à même de vous faire progresser, n’hésitez pas à nous adresser dès à présent votre candidature à l’adresse : drh@ossia-conseil.com

facebooktwittergoogle_plusmail

Quoi de neuf sur Microsoft?

 

Il est primordial de se tenir informé des évolutions de son environnement de développement et de faire ce qu’on appelle communément de la veille techno. En ce qui me concerne, j’interviens sur une mission en tant développeur C# et je m’informe continuellement .

Découvrez ainsi mon retour sur les dernières versions Microsoft .NET 4.7 et Visual Studio 2017.

picto microsoft

1- .NET 4.7

Microsoft .NET Framework 4.7 est une mise à jour sur place hautement compatible des précédents framework .NET.

ll ajoute principalement des fonctionnalités sur le transfert de données, la communication réseau et le développement d’interfaces utilisateurs

  • Pour le transfert de données, c’est en particulier la classe DataContractJsonSerializer et la sérialisation WCF qui ont été améliorées;
  • Pour la communication réseau, il y a maintenant le possibilité de paramétrer les protocoles TLS par défaut alors qu’auparavant, il était nécessaire de coder;
  • Pour les technologies liées aux interfaces utilisateurs, on peut noter des fonctionnalités supplémentaires dans ASP.NET, WINFORM, WPF. Par exemple, la gestion de la mémoire pour ASP.NET, que ce soit au niveau du cache ou des ressources disponibles. Pour WINFORM ou WPF, il y a la gestion de la haute résolution (meilleur rendu graphique sur les moniteurs haute résolution), ou la gestion du tactile et du stylet (pour les moniteurs tels que la surface pro de Microsoft).

2 – Visual Studio

Visual Studio est une suite de logiciels conçue par Microsoft. Plus précisément, il s’agit d’un ensemble complet d’outils de développement permettant de générer des applications web ASP.NET, des services web XML, des applications bureautiques et des applications mobiles.

Visual Basic, Visual C++, Visual C# utilisent tous le même environnement de développement intégré (dit IDE), qui leur permet de partager des outils et facilite la création de solutions faisant appel à plusieurs langages.

Par ailleurs, ces langages permettent de mieux tirer parti des fonctionnalités du Framework .NET.

La dernière version est Visual Studio 2017. Voici les principales évolutions recensées sur cette version :

  • L’IDE est plus rapide plus réactif et est moins gourmand en consommation mémoire. Il contient bon nombre d’outils permettant d’être plus productif. On peut noter par exemple, la notification des tests unitaires faite en temps réel (pas uniquement pour mstest mais aussi Nunit et Xunit). Il en est de même pour la validation de dependance d’architecture. Cela risque de faire de l’ombre sur des outils comme Ncrunch;
  • Les tâches sont simplifiées : plus besoin de gérer les branches GIT via une extension comme gitextensions, visual studio l’intègre. Il est maintenant possible de configurer notre environnement de développement et le retrouver sur le poste que l’on souhaite en utilisant la gestion des extensions itinérantes;
  • Des raccourcis ont été ajoutés pour naviguer plus facilement dans une solution (on retrouvera des raccourcis similaires à ceux proposes par Resharper ou Productivity power tool);
  • Le développement d’application mobile: il est désormais possible d’innover et d’obtenir des résultats rapidement grâce à Xamarin, qui regroupe les exigences des différentes plateformes mobiles en une seule base de code ;
  • Il y a également beaucoup de nouveautés sur le debogage, notamment la gestion améliorée des erreurs.

N’hésitez pas à tester ces nouveautés et nous faire part de votre retour d’expérience !

facebooktwittergoogle_plusmail

NCraft 2016 – Jour 1 : Cyrille Martaire, Interviewing Domain Experts

Christian

J’ai la chance d’avoir rencontré Cyrille chez Engie cette année où mon équipe bénéficie de son expérience tant sur le plan technico-architectural qu’humain.

Il aborde ici de manière énergique la grande problématique de nos vies : communiquer avec le business.

Nous attaquons le talk par la loi de Wiio : “Communcation fails except by accident”. Le fait est que notre business ne parle pas notre langage. Et nous ne parlons pas le langage du business.

Je retiens la proactivité comme élément essentiel dans la démarche de communication. Notre domaine expert n’a pas beaucoup de temps à nous accorder voire pas du tout. Nous nous devons de comprendre un minimum le business dans lequel nous travaillons avant de nous présenter devant lui. Pour cela, nous devons nous préparer.

De plus, montrer notre connaissance du business (même légère au début) permet de montrer que nous nous intéressons au domaine fonctionnel dans lequel nous travaillons. A partir de là nous pouvons commencer à construire une relation de confiance.

Cyrille a également insisté sur la nécessité de prendre des notes, de développer notre système de prise de notes. Ce système doit nous permettre de relever les ambiguité et les certitudes de notre business expert.

Enfin, demander des exemples. Les exemples permettent de lever les ambiguités tôt. Par conséquent, il sera facile de corriger si du code existe déjà, ou d’éliminer d’éventuelles fausses pistes.

Je vous encourage vivement à regarder la vidéo de sa présentation qui devrait être disponible rapidement.

Les ressources:

facebooktwittergoogle_plusmail

Avantages des applications ASP.NET MVC

Karim

ASP.NET MVC est le Framework de développement web tendance poussé par Microsoft. Dans cet article on va découvrir les avantages principaux d’un tel Framework.

  • Une architecture orientée « Action » au lieu d’une architecture orientée « Vue » (l’approche ASP Webform) ce qui donne une approche plus cohérente avec le logique métier. Exemple : un utilisateur clique sur un bouton « Acheter » ; dans l’architecture MVC, la requête arrive d’abord à l’action d’achat (la méthode qui exécute l’achat) qui appartient à un controlleur, qui à son tour indique quelle vue à retourner à l’utilisateur avec le model approprié. A l’encontre, dans l’approche Webform, la requête utilisateur arrive à la vue (.aspx) qui donne le relai au code behind (.aspx.cs) qui exécute à son tour tout le cycle de vie d’une page web (compliqué) pour arriver finalement à exécuter l’action d’achat et retourner un résultat. Cette architecture permet également une meilleure performance étant donné qu’il n’est plus besoin de parcourir tout le cycle de vie (parfois long) d’une page pour avoir un résultat d’une requête.
  • Séparation des tâches (SoC): Le Framework MVC offre une séparation claire entre les différentes couches: Le logique business (représenté par le Controlleur C), la logique présentation (représentée par la vue V) et les entités business (représentées par le model M). Chaque couche est indépendante de l’autre. Cette logique permet une meilleure structuration de code, en conséquence une simplification de la maintenabilité des applications. Aussi, l’indépendance Controlleur-Vue permet d’avoir un output très propre.
  • Développement dirigé par les Tests (TDD) : Tous les contrats de base dans le Framework MVC sont basés sur des interfaces et peuvent être testés en utilisant des simulacres (Mock Objects), qui sont des objets simulés, imitant le comportement des objets réels de l’application.  On peut tester de façon unitaire l’application sans recours à l’exécution des contrôleurs dans un processus ASP.NET, ce qui rend les tests unitaires rapides et flexibles.
  • Plusieurs types de rendus de page : Pas seulement du rendu HTML qu’on peut avoir avec les applications MVC, mais aussi d’autres types tels que JSON. Ceci peut être spécifié au niveau de l’action.
  • Un Contrôle HTML Total: Contrairement à l’approche ASP Webform, l’approche MVC est « stateless », elle est conçue pour surmonter les défauts du « Viewstate » (notamment s’il s’agit d’un grand volume de données au niveau de la page ce que ralenti énormément le chargement des pages) et la programmation événementielle. Le MVC ne supporte ni «Viewstate» ni événements, en conséquence, le déclenchement des événements est remplacé par deux mécanismes – URLs et le POSTing et le maintien des états est assuré par les « Viewmodel » et certains d’autres techniques comme le « Viewbag », « tempdata » et le « Viewdata ». En outre, le MVC offre une intégration facile avec les frameworks JavaScript tels que jQuery et AngularJs ce que permet un rendu full HTML plus propre et facile.
  • Moteur de Recherche Optimisé (SEO): Les URL sont plus convivial pour les moteurs de recherche, ils sont basés sur le style d’architecture RESTful. Exemple : mywebapplication.com/users/ 1 – récupère l’utilisateur avec un ID = 1 alors que mywebapplication/users/getuser.aspx (id est passé en session)).
  • Support des fonctionnalités existantes d’ASP.NET webform. ASP.NET MVC permet d’utiliser des dispositifs tels que les formulaires d’authentification et l’authentification Windows, les autorisations sur les URL, les fonctionnalités d’appartenance à un groupe (membership) et de rôle, le mécanisme de cache de données et de code produit, les session et la gestion du profil, le système de configuration et l’architecture des fournisseurs.
  • Le modèle MVC fonctionne bien pour des applications Web développées et soutenues par de grandes équipes de développeurs et de designers, qui ont besoin d’un degré élevé de contrôle sur le comportement des applications

Pour finir, ci-dessous un résumé des différences principales à connaître entre ASP.NET Webform et ASP.NET MVC.

 

Webforms

MVC

Cycle de vie Le fonctionnement est géré par des évènements sur lesquels on peut s’abonner. Après il y a tout un cycle de vie de requête qui est fortement basé sur la « page active .aspx » Le cycle de vie est différent car il fait intervenir un contrôleur qui va charger des modèles de données puis sélectionner la vue à utiliser pour générer le rendu
Dépendances Les pages sont composées d’une vue et de code-behind. Ceci a un impact important car la vue et le contrôleur sont fortement dépendants Le contrôleur sélectionne la vue à afficher. Celle-ci ne dépend que du modèle qu’elle va utiliser pour le rendu.
Testabilité Les pages sont difficiles à instancier en dehors d’un fonctionnement normal. Ceci a pour effet de les rendre impossible à tester de manière automatique Les contrôleurs sont de « simples » classes qu’on peut instancier sans contexte Http. Elles sont donc plus faciles à tester avec des tests unitaires par exemple.
Gestion de l’état Les contrôles stockent leurs états dans le ViewState. Le ViewState est transmis dans chaque page. Il a tendance à grossir très rapidement. MVC ne maintient pas d’état des pages, ni de ViewState. Vous avez le contrôle complet de votre application.
Evènements L’extensibilité est gérée par les évènements. On doit donc s’abonner pour modifier certains comportements L’extensibilité est gérée par héritage ou des filtres. Le fonctionnement est simple à comprendre et à débugger
Les contrôles visuels Webforms est fortement basé sur des composants visuels comme Winforms. Ceci implique que le code est généré de manière automatique (sans grand contrôle) MVC n’utilise pas d’évènement ni de code généré. On doit donc écrire du code HTML propre comme on  le souhaite
Connaissances HTML, CSS et JS Etant donné la présence de contrôles visuels, on n’a pas besoin d’avoir de connaissances approfondies en HTML, JS et CSS pour créer des applications. Les composants vont générer le code pour vous L’absence de contrôles visuels et de drag & drop nécessite des compétences en développement HTML, CSS et Javascript. En contre-partie, On peut écrire du code jQuery et des requêtes Ajax très simplement
Apprentissage Webforms est plus facile à apprendre et permet de créer rapidement des écrans visuels grâce au drag & drop de composants. Le framework est intéressant pour débuter avec le Web quand on connait déjà Winforms Le temps d’apprentissage est un peu plus long car il faut bien comprendre les concepts du framework. Une fois qu’on a bien compris ces concepts, on peut développer très rapidement des applications web modernes

 

 

facebooktwittergoogle_plusmail

Optimiser du code utilisant la reflexion avec FastMember

Robin

L’application sur laquelle je travaille actuellement calcule des positions à partir d’objets COM modélisant les deals passés dans le système. La volumétrie est importante et il est nécessaire de wrapper ces composants COM dans des objets .NET utilisables par mon application. Ces objets COM sont complexes et de plusieurs types (un par type de deal).
Cependant, l’application est basée sur un modèle de deal C# plat, prenant en charge tous les types de deal et gardant une référence vers le deal COM associé. Chaque appel à une propriété de cet objet C# entraîne une reflexion sur le deal COM sous-jacent afin d’en déterminer la valeur.

Les propriétés de cet objet ressemblaient à peu près à ça:

J’ai récemment effectué une refonte de ce processus, en créeant une Factory instantiant dès le départ toutes les propriétés du deal .NET à partir du deal COM, sans garder de référence entre les deux.

Ce refactoring a eu un impact très important sur l’utilisation mémoire de l’application (un facteur 2-3), mais les performances étaient assez catastrophiques. Etant donné que les deals COM pouvaient être de types différents et inconnus au runtime, il était nécessaire d’utiliser la reflexion pour déterminer la valeur des propriétés (sachant qu’il fallait extraire 40 propriétés par deal COM).

Alors que je reflechissais aux pistes d’optimisation, j’ai découvert FastMember, une librairie développée par l’un des membres les plus actifs de la communauté StackOverflow : Marc Gravell. Il annonçait des métriques démentielles sur son blog relatives à l’accès aux valeurs de propriétés, à savoir:

Static C#: 14ms
Dynamic C#: 268ms
PropertyInfo: 8879ms
PropertyDescriptor: 12847ms
FastMember.TypeAccessor.Create: 73ms
FastMember.ObjectAccessor.Create: 92ms

La librairie est très simple à utiliser:

Effectuer un wrapping initial sur l’objet sur lequel va s’effectuer la reflection :

Ce wrapping initial est un peu coûteux, mais les accès ultérieurs aux propriétés de l’objet seront très rapides, et on s’affranchit complètement de la syntaxe lourde de la réflexion :

Dans mon cas, j’ai implémenté une méthode simple dans ma Factory, permettant de récupérer la propriété du deal COM ou de spécifier une valeur par défaut, au cas où le deal COM n’a pas la propriété interrogée :

L’utilisation de cette librairie a viabilisé mon projet de refactoring, et on est proche des perfs que l’on attendrait d’un code C# statique !

facebooktwittergoogle_plusmail

CleanCoder : Giving up on TDD

Christian

Ou pourquoi certains dév abandonnent TDD par Uncle Bob Martin.

Ce post est une mine d’arguments pour expliquer et convaincre vos collègues de l’utilité de la méthode Test Driven Development.

Morceaux choisis

Design et TDD

– But I thought TDD meant that you didn’t have to design.

Yeah, and: “Love means you never have to say your sorry.” What a bunch of horse hockey! We are programmers! We design! We create structures with high cohesion and low coupling. We manage dependencies. We isolate modules. WE. DESIGN.

Les tests nous parlent

Something that is hard to test is badly designed.

– Hmmm. I’m not sure…

Look. Suppose you ask me to write an app to control your grandmother’s pacemaker. I agree, and a week later I hand you a thumb-drive and tell you to load it into her controller. Before you do you ask me: “Did you test it?” And my response is: “No, I chose a design that was hard to test.”

facebooktwittergoogle_plusmail

Kata refactoring legacy code chez Ossia

Christian

Le premier kata ossiens s’est déroulé le 11/02/2016. Le thème était refactoring Legacy Code. Je me suis donc retrouvé, développeur .Net, avec une majorité de Java-iste :).

Ce fût une excellente soirée d’échanges autour de nos technologies respectives. J’espère que j’aurais l’occasion de faire un kata en Java la prochaine fois.

La base choisie était le kata TripService de Sandro Mancuso disponible ici sur github.

Les réflexions de la soirée sont disponibles ici sur github : https://github.com/MacReiben/KataOssia-201602.

N’oubliez d’envoyer vos idées pour la soirée du mois prochain !

@ bientôt !

facebooktwittergoogle_plusmail

Unity : tester l’instanciation des classes

Christian

Cela fait plusieurs fois que je rencontre le problème des enregistrements manquants dans Unity. Le projet se lance et on obtient l’erreur suivante :

Les applications en entreprise nécessitent souvent que des webservices soient lancés, des cas de tests créés etc … .
Mettre toutes ces conditions en place prends du temps – pour parfois aboutir à ce message d’erreur, et être obligé de tout recommencer.
Heureusement il est possible d’automatiser.
Régler le problème d’un test unitaire
Pour pallier à cette perte de temps, voici un test unitaire qui instancie tous les types définis dans Unity.
J’utilise dans cet exemple MSTest comment moteur de test et FluentAssertions comme librairie d’assertion (plus lisible que la librairie d’assertion classique).
La collection _typeToExclude donne la possibilité d’exclure certains types au cas où.

Enjoy !

 

facebooktwittergoogle_plusmail