L’intégration continue Open Source en .NET – 1/3

17 06 2010

Article en 3 parties sur l’intégration continue en technologie .NET à l’aide uniquement d’outils open-source.

Cet article est sorti du tiroir puisqu’il a 2 ans, mais il reste totalement d’actualité.

Origines

On oppose généralement l’aspect industriel du développement à l’artisanal. Pour mieux saisir la signification de ce terme, je vous propose une petite histoire :

Après quatre mois de développement, c’est le grand jour de la livraison. Georges, après avoir testé une dernière fois que son code compile, décide de déployer la version finale du site Intranet de la mairie.La démarche est maitrisée puisque cela fait maintenant une vingtaine de fois qu’il a répété l’opération. Comme à chaque fois, il commence par demander à son collègue sur quels fichiers il a travaillé. La liste connue, il récupère par le réseau ces fichiers, puis tente de compiler le projet. Chance, tout compile. La suite est plus délicate, Georges doit se connecter à distance au serveur, migrer la base de données et insérer les données mis à jour. Vient ensuite la partie copie des fichiers sur le serveur et redémarrage du serveur. A ce moment, si tout va bien, le site devrait être mis à jour. Malheureusement, au premier test, impossible de se logger.

Si cette scène vous rappelle quelque chose, pas d’inquiétude car c’est courant et aujourd’hui de nombreuses sociétés fonctionnent dans ce mode de gestion. Mais l’industrialisation et l’automatisation sont maintenant un but plus facile que jamais à atteindre grace à de nombreux outils. Preuve en est également l’implication de Microsoft sur le thème « Gestion du cycle de vie logiciel » et la fourniture d’une offre complète avec la suite Team System et son serveur Team Foundation Server.

Néamoins pour des raisons de simplicité, nous nous attacherons ici à présenter les concepts de l’intégration continue à l’aide uniquement d’outils open-source.

Concept

clip_image002

Figure : Schématisation d’une chaîne d’intégration continue

L’intégration continue est un concept qui se base sur l’analogie avec une usine automatisée. Sauf qu’au lieu de constuire des voitures, on construit un logiciel. Cette « usine » est construite sur l’enchainement suivant :

  1. Un développeur travaille en local. Lorque ses modifications sont terminées, il archive son code sur un serveur gestionnaire de sources.
  2. A la detection d’un changement (ou suivant une règle temporelle paramétrée), le serveur d’intégration récupère la dernière version des sources et déclenche la contruction (« build ») de la solution.
  3. En étape facultative mais intéressante, il est possible d’appliquer des métriques et des tests sur la solution et d’en générer des rapports
  4. Enfin, la solution et le bilan de la construction sont déployés sur un serveur de résultat accessible à l’équipe projet. Dans le cas d’un sous traitance, ce portail peut aussi être mis à la disposition du client pour qu’il puisse constater l’avancement du projet. (Particulièrement utile dans le cadre d’une démarche agile).

Mis en pratique

Après ces concepts théoriques, nous allons nous attaquer à la réalisation de notre chaine d’intégration continue. Afin de garder un ensemble cohérent, nous restreindrons notre programme à une unique classe effectuant une manipulation sur une chaîne de caractères. Cette chaine sera fournie au programme en ligne de commande et le résultat sera affiché à l’écran.

Le programme

Il s’agit d’une classe « ChaineManip » qui contient une méthode « Manip ». La méthode Manip prend 2 strin en paramètre et affiche sur la sortie le résultat de l’opération. Afin de pouvoir être executé directement en ligne de commande, cette classe possède également une méthode Main qui délègue l’appel à ChaineManip.Manip. Voici le code :

image

Figure : ChaineManip.cs

Tests unitaires

La démarche d’industrialisation s’accompagne naturellement d’une meilleure gestion des tests unitaires automatisés. Si vous n’avez encore jamais utilisé de framework, je vous invite à découvrir cette méthodologie (http://www.dotnetguru.org/articles/outils/tests/nunit/nunit.htm).

Dans notre cas, c’est le framework Nunit (http://www.nunit.org) que nous allons utiliser.

Pour nous simplifier la tâche et éviter des soucis de compatibilité, nous allons utiliser les DLL fournis dans l’installation de NAnt (installé au chapitre suivant) et donc nous passer d’une installation de NUnit.

Nous allons ainsi créer une classe de test « ChaineManipTest.cs » qui testera l’unique méthode « Manip » de notre classe programme. Sans entrer dans les détails, le code suivant teste le résult de l’appel de la méthode en le comparant avec un résultat attendu.

L’objectif est de compiler le code de notre programme et d’exécuter les tests unitaires dans la continuité. Si un problème est détecté à l’exécution des tests, la construction est stoppée et la release jugée non fiable.

image

Figure : ChaineManipTest.cs

Contrôle de source

Un gestionnaire de source est la pierre angulaire d’une organisation projet. Si vous n’avez jamais utilisé d’outil de ce genre, je vous incite à vous pencher fortement sur le sujet à travers des articles tels que http://dev.nozav.org/intro_svn.html.

Le principe est donc d’avoir ce serveur à la disposition de l’équipe. Quand un développeur a terminé une modification sur le code, il vérifie que sa modification compile sur son poste puis envoie les sources modifiés sur le serveur. L’outil le plus adapté pour notre chaîne est « Subversion » (http://subversion.tigris.org). Bien qu’en réalité il ne faudrait pas mettre en place de chaine d’intégration continue sans un bon gestionnaire de source, nous allons simplifier notre chaine en utilisant un simple dossier comme « repository » de code.

La suite Partie 2.



Actualités Mai 2010

17 05 2010

Vous pouvez continuer à suivre d’autres publications techniques autour du monde .NET sur le blog Microsoft SQLI.

Celui-ci est accessible ici : http://blogms.sqli.com/

Sinon, j’ai profité de la sortie du .NET 4.0 ainsi que de Visual Studio pour écrire mon premier article dans un magazine papier.

Il s’agit du Programmez! de Mai 2010 n°130.

Vous pouvez le retrouver en kiosque ou l’acheter en PDF en ligne directement. Donc n’hésitez pas et si vous avez des questions, vous pouvez toujours m’interroger ici.



Compte rendu Techdays 2008 – Partie 3

23 02 2008

Pour terminer de manière exhaustive ce compte rendu, voici la description de la deuxième journée.

 

Présentation générale SQL Server 2008

Session intéressante car nous avons eu droit à un point de vue 360° sur les nouveautés.

Je retiens particulièrement le travail apporté sur la partie Reporting. En effet, le moteur était déjà très intéressant dans la version 2005 mais quelque peu limité dans son utilisation par des novices. Avec l’arrivée de nouveaux outils orientés « Business », cela sera un argument de plus pour ce produit.

 

Software+Services : Introduction

Session décevante où la première partie a consisté en la lecture des slides.

J’aurais aimé une présentation plus argumentée avec une comparaison des différents moyens pouvant être mis en oeuvre pour mettre en place du Software + Services.

 

Commerce Server 2007

Ayant déjà une expérience sur les problématiques e-commerce et ayant manipulé un peu Commerce Server, j’étais intéressé par le sujet. En effet, je souhaitais voir comment l’outil était manipulé par des experts du domaine. Et bien, je continue à avoir un à avis favorable sur le sujet et je pense que CS2007 est un des solutions les plus pertinentes actuelles en e-commerce prêt à l’emploi. L’aspect « Out-of-the-box » est un vrai argument avec un starter-site collant au maximum à un besoin standard.

 

Team System Rosario CTP

Session agréablement présentée par deux personnes de chez Winwise. Malheureusement le contenu était relativement pauvre en nouveautés. Rien de transcendant n’a été présenté mais juste des améliorations du produit. La conclusion étant de toute façon : « rien ne sert d’attendre rosario, passez déjà à Team System 2008« …

 

Conclusion

L’impression d’événement de l’année pour les développeurs a été amplement confirmée par le nombre de visiteurs (16 000) et la qualité des 300 sessions présentées.  Vivement les 2009 ;-)



Compte rendu Techdays 2008 – Partie 2

21 02 2008

Suite de la première journée :

Nouveautés de C#3

Session en « speed » pour nous faire un maximum de démonstration sur les nouveautés du langage. Session la plus technique de mon parcours. Car oui je considère que si je viens aux Techndays, c’est pour m’ouvrir à des horizons et des perspectives différentes et pas pour me former en 2 jours… Néanmoins cette session fût très intéressante et a largement piqué ma curiosité sur les lambda expressions.

En dehors de ces fameux lambda, on remarquera surtout la stabilité du langage pour sa troisième version. Preuve en est la qualification de « Sucre syntaxique«  sur quasiment toutes les nouveautés du langage.

 

ROA – Symposium DNG

Je mets la note de meilleure session des Techdays à Aurelien Pelletier pour sa présentation sur ROA (Ressource Oriented Architecture).  J’ai apprécié d’une part le speaker qui a su nous entretenir sur le sujet pendant une heure sans temps mort et d’autre part le sujet qui préfigure d’une évolution passionnante du web. J’engage ceux qui ne connaissent pas encore le sujet à creuser tant cette façon de procéder est en adéquation avec l’utilisation du web tel que nous le faisons aujourd’hui.

Pour les slides, c’est par ici.

.NET et l’Open Source – Symposium DNG

La grosse déception de la journée mais je vais tenter d’être factuel. J’avais une attente assez forte sur cette présentation car étant un « double compétence » Java/.NET, l’intérêt d’utiliser des outils et des frameworks Open Source est une évidence pour moi. J’attendais donc de cette session des retours sur leur utilisation et quels étaient leurs conseils en la matière.

Malheureusement, Didier Girard et son acolyte se sont contenté d’expliquer les principes de l’open source avec des généralités limite (Mettre Visual Studio Express sur une liste de produits open-source par exemple), de « torcher » en 3 slides une explication du fonctionnement de Spring et de Hibernate et de conclure que leur projet a été réussi grâce à ces technos.

Je pense que le public présent n’a pas pu apprécier cette session à sa juste valeur. En effet, beaucoup de personnes présentes dans la salle connaissaient déjà des frameworks Open Source et donc , ne pas avoir d’éléments factuels, ni de comparaison technique ou grilles de décision fait que la conclusion de la session n’a apporté aucune pierre au débat.

Pour les personnes novices sur le sujet, la session a permis de dissiper un peu de F.U.D sur la peur d’utiliser de l’open source en environnement Microsoft mais dans ce cas, il fallait mieux mettre en avant et expliquer les outils Spring et Hibernate au lieu de se contenter d’afficher le code des tutoriaux. On attendait une explication plus générale et donnant l’eau à la bouche et l’envie d’installer chez soi.

Dans tous les cas, je salue le travail réalisé pour cette session qui va dans le bon sens et j’attends avec impatience les prochaines sessions sur le sujet…



Ruby on Rails 2.0

11 12 2007

Un an et demi s’est écoulé depuis la 1.1. Le changelog est à la mesure du changement de numéro de version.

Toutes ces nouveautés paraissent bien utiles, malheureusement je n’ai plus le temps de suivre de près l’évolution de ce langage.

En effet, ces derniers temps font que je penche désormais beaucoup du coté .NET, mais je reste attaché profondément aux valeurs portées par ce framework. (Un jour peut-être que j’y reviendrais…)

C’est pour cela aussi que je vois venir avec grand intérêt le framework ASP.NET MVC dont les personnes à l’origine sont également fans de Rails.

Petite liste des fonctionnalités « inspirées » :

  • Séparation des rôles : Possibilité de tester la couche Controlleur sans conteneur web
  • Hautement extensif et pluggable : Comme tout est à base d’interfaces, il est facile d’intégrer un moteur d’injection de dépendance
  • URL Mapping Natif : Idem des routes de Rails
  • Moteur de template pour la couche présentation
  • etc.

Tant mieux si Ruby on Rails peut apporter sa philosophie dans d’autres environnements, tout le monde y sera gagnant.



Silverlight, le retour de l’applet

5 06 2007

 Ce post traine depuis trop longtemps dans mes brouillons, alors je publie avant qu’il ne soit complètement périmé…

Silverlight a été récemment annoncé par Microsoft au MIX07.

C’est une annonce intéressante car le produit est annoncé comme un Flash-Killer. Il faut oser aller sur ce marché où l’on considère aujourd’hui que le lecteur Flash d’Adobe est installé sur 95% des postes, ce qui représente une part de marché assez conséquente.

Silverlight est donc le nom officiel d’un produit en gestation depuis quelques temps. Son nom de code était « WPF-E ». Il empruntait son nom à la technologie WPF qui permet de réaliser des interfaces graphiques vectorielles puissantes en .NET 3.0. Un truc sympa et classique en WPF est qu’une vidéo est considérée comme une texture. On peut donc associer notre vidéo à un bouton ou la coller sur un cube en 3D assez simplement. Le WPF utilise également une sémantique de balises pour décrire l’interface. Il s’agit simplement d’un fichier XML et le langage du XAML.

Microsoft a donc repris les bonnes idées de son WPF (le XAML, la simplicité d’utilisation,…) et en a réalisé une version « Everywhere ». La version WPF faisant partie du framework .NET 3.0, elle est limitée à l’environnement Window…

Silverlight est donc une runtime qui s’installe sur le poste client qui est aujourd’hui disponible pour Windows et pour Mac (une version Linux sera proposé, implémentée en Mono).

Ce qui est amusant avec cette annonce est de voir à quelle point le mouvement est cyclique dans les inventions informatiques. En effet, depuis un bon moment maintenant on voulait alléger le client au maximum et utiliser le navigateur comme interface universelle. Les applets Java sont déclarés mortes et le succès des technologies AJAX ne sont pas là pour démentir.

Aujourd’hui, il parait aberrant de proposer à un client une solution où il faudrait installer une runtime sur le poste de l’utilisateur et pourtant c’est exactement ce que Microsoft nous propose.

Alors quelle est la pérennité d’une telle offre ?

A l’heure actuellle, Silverlight n’est pas prêt de remplacer toute le savoir que l’on commence à maîtriser sur les technos AJAX. Là où Silverlight peut séduire c’est par sa simplicité : pour une partie d’un projet ASP.NET où le besoin ergonomique est fort, on implémente une partie sous la forme d’un projet .NET Silverlight. Résultat, on ne change pas de technologie et on se retrouve avec une interface jolie. Si beaucoup de projets ouvrent cette voie, le cercle vertueux de l’adoption pourra démarrer. Car avec 10 ans de différences, j’espère que Microsoft aura prévu de contrer les arguments qui ont fait l’ »échec » des applets Java.



Conseils pour reprendre du code existant

2 04 2007

Les projets de maintenance sur de l’existant ou le « legacy code » sont fréquents.

Le « legacy code » possède une définition simple : « C’est du code si vieux/mal fait qu’on a peur d’y toucher« . Malheureusement, il faut tout de même y toucher à un moment pour le maintenir ou ajouter des évolutions (et combattre le statu-quo!). C’est à ce moment là que quelques bonnes pratiques peuvent sauver le développeur de la démence…

Je vous recommande la lecture d’un excellent article de Jeremy Miller, Removing the « Legacy » from your Code qui décrit sa stratégie générale.

Les points essentiels que j’ai retenu et déjà appliqué :

1. Gérer ses ressources : Inutile de partir bille en tête dans une refonte totale du projet. Cela sera sûrement une perte de temps. On ne touche aux morceaux de l’appli que lorsque l’on veut ajouter une valeur métier. A ce moment là, il faudra en profiter pour améliorer le design de l’application.

2. Automatiser le build : C’est souvent un point critique sur les anciennes applications. Une procédure de compilation / déploiement en 15 étapes à la main est source d’erreur et de problèmes de configuration. C’est ici que les outils de build comme ANT/NANT (Maven, Rake,…) peuvent être utilisés à bon escient.

3.  Avoir une vision globale de où l’on souhaite aller : On peut mettre en place au sein de l’équipe une vision du projet à long terme. Par exemple, se fixer comme objectif de remplacer l’ancienne couche DAO par le framework ORM Hibernate/NHibernate. Un wiki collaboratif interne conviendra très bien à ce genre d’informations.

4. Visible du management : Dans l’idéal, il faut que l’idée de cette amélioration du projet par à coups et en douceur soit acceptée par la direction. Avec son support, les modifications majeures seront plus faciles à porter. Par expérience, malheureusement ça sera rarement le cas. Dans ce cas il suffit d’adopter la technique du sous-marin : J’intègre dans mon chiffrage le temps d’effectuer les mises à jour techniques nécessaires. Attention, cette technique doit avoir l’aval de l’équipe technique sous peine de se retrouver isolé…

5. Interdiction d’abîmer le code : Le code source du projet est déjà suffisament ancien, toute modification de celui-ci doit respecter la qualité attendue. Aucune verrue supplémentaire ne doit être tolérée.



problème d’installation .NET ?

7 02 2007

Pour référence, 3 posts utiles :

 

A garder bien au chaud, c’est vraiment utile ! ;-)



Situation du développement .NET sous Windows Vista

5 01 2007

Pour situer, Windows Vista est sortie en version finale (RTM) depuis le mois de novembre et sa sortie « boîte » est prévue le 30 janvier 2007 .

Il est donc parfaitement possible pour les développeurs disposant de la MSDN d’installer sur un poste de développement une version de Windows Vista .

Je relativise ce fait, sachant pertinement que cela représente un faible pourcentage de développeurs qui oseront franchir le pas dès aujourd’hui. Mais il n’empêche que Microsoft se doit d’assurer un fonctionnement normal pour les gens ayant sauté ce pas (oui comme moi…).

Mon soucis du jour concerne le développement .NET. En effet, la version finale de Windows Vista n’est pas compatible avec Visual Studio 2005. Or, VS 2005 c’est pourtant l’outil de référence pour le développement, c’est un produit Microsoft et il est sorti en novembre 2005, ce qui fait plus d’un an !

Ainsi, lorsque je lance Visual Studio j’ai droit au joli message d’avertissement que voici :

 

Je peux concevoir que Visual Studio est un logiciel complexe qui nécéssite une intéraction forte avec le système d’exploitation (c’est également ce qui en fait une de ses forces), en revanche là où cela devient moyen c’est quand on apprend qu’un SP1 était prévu pour VS2005 en décembre. Ce que tout le monde espérait, c’était une compatibilité VS2005 / Vista. Et bien perdu, et il faudra attendre la sortie d’une version spéciale du SP1 dédiée à Vista. Et ce patch ne sera disponible que lors de la sortie officielle de la bête…

Pour relativiser,ces problèmes de compatibilité ne sont pas forcément apparents. J’ai ainsi pu donner une semaine complète de formation .NET sans tomber sur un os lié à Vista, mais pour tout développement sérieux, je ne conseille pas le passage sous Vista étant donné la situation (Si vous y tenez quand même, vous pouvez vous aider de ce post).

 

Juste pour faire peur à ceux qui tenteraient l’expérience, voici la liste (exaustive j’espère) des problèmes potentiels :

Visual Studio 2005 on Windows Vista Issue List : Running with normal user permissions

Visual Studio 2005 on Windows Vista Issue List : Running with elevated administrator permissions

 

 

Sql Server 2005 n’est pas en reste, mais c’est un logiciel serveur donc je suis plus conciliant :-D

Microsoft SQL Server 2005 on « Microsoft Windows Server Longhorn » or Microsoft Windows Vista

Et il faudra donc attendre la SP2 pour avoir une compatibilité totale.

 

 

Pour conclure, je suis sûr que les développeurs Java sont mieux lotis sous Vista… Enfin, Eclipse démarre :-)



Office 2007 dispo sur la MSDN… sauf pour la France

17 11 2006

Je lis ce matin que Office 2007 est disponible sur la MSDN. Je me connecte pour la télécharger et là surprise :

Note to Customers in France : Office 2007 has not been authorized for supply, import or export to or from France. If you are located in France, Microsoft does not authorize the download of this product, until further notice.

Quelqu’un est au courant de cette histoire ?

Update : C’etait juste une question d’autorisation. Office 2007 est donc maintenant disponible ainsi que Vista RTM. En revanche pour l’instant, ce sont juste les versions américaines… vivement la FR !