<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Improve Technologies</title>
	<atom:link href="http://www.improve-technologies.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.improve-technologies.com</link>
	<description>Le blog de Java pour l&#039;entreprise</description>
	<lastBuildDate>Mon, 04 Mar 2013 09:55:54 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.1</generator>
		<item>
		<title>Usine de développement : étude comparative</title>
		<link>http://www.improve-technologies.com/2013/03/01/usine-de-developpement-etude-comparative/</link>
		<comments>http://www.improve-technologies.com/2013/03/01/usine-de-developpement-etude-comparative/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 15:23:08 +0000</pubDate>
		<dc:creator>Frédéric ESNAULT</dc:creator>
				<category><![CDATA[Analyse et veille technologique]]></category>
		<category><![CDATA[ALM]]></category>
		<category><![CDATA[Forge]]></category>
		<category><![CDATA[intégration continue]]></category>
		<category><![CDATA[processus qualité]]></category>
		<category><![CDATA[usine de développement]]></category>
		<category><![CDATA[usine logicielle]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/?p=367</guid>
		<description><![CDATA[Pour compléter mon premier article sur l’usine de développement, il apparaît utile de faire un tour d’horizon des solutions existantes dans ce domaine et de voir de quelles manières elles répondent aux besoins évoqués. Ce second article est en effet <a href="http://www.improve-technologies.com/2013/03/01/usine-de-developpement-etude-comparative/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.improve-technologies.com/wp-content/uploads/2013/03/usine-300x201.jpg" alt="" title="usine" width="300" height="201" class="alignright size-medium wp-image-418" /><strong>Pour compléter mon <A HREF="http://www.improve-technologies.com/2012/06/29/﻿l’usine-de-developpement-du-cauchemar-a-la-realite/">premier article sur l’usine de développement</A>, il apparaît utile de faire un tour d’horizon des solutions existantes dans ce domaine et de voir de quelles manières elles répondent aux besoins évoqués. Ce second article est en effet le bilan d&rsquo;une étude menée sur 6 produits candidats au titre d&rsquo;usine de développement.</strong></p>
<h1>Question de définition</h1>
<p>Avant tout, j’ai choisi d&rsquo;employer l’appellation «&nbsp;usine de développement&nbsp;» (ou «&nbsp;usine logicielle&nbsp;») car elle correspond bien à l’idée d’industrialisation. Malheureusement, chacun met un peu ce qu’il veut derrière ce nom générique. Pour rajouter à la confusion, les termes de «&nbsp;forge&nbsp;» et d’«&nbsp;ALM&nbsp;» désignent des notions qui s’apparentent fort à ce qu’on peut attendre d’une usine logicielle. Avant donc de se lancer dans une étude, il est important de préciser sur quoi elle porte : sans prétendre être une définition de référence, c’est la définition suivante qui a servi de repère pour la présente étude.</p>
<p>L&rsquo;idée de départ étant d&rsquo;appliquer l’image de l’industrie «&nbsp;matérielle&nbsp;» au monde du développement logiciel, récapitulons les éléments de l&rsquo;analogie que j’avais exposée dans mon article précédent pour citer les domaines couverts par notre usine :</p>
<ul>
<li><strong>pilotage&nbsp;</strong>: recueil des demandes (exigences sur le produit), planification des travaux et suivi des activités,
</li>
<li><strong>approvisionnement&nbsp;</strong>: fourniture de la matière première (ou des pièces détachées), à savoir le code source et les composants techniques,
</li>
<li><strong>fabrication&nbsp;</strong>: chaîne de production proprement dite qui transforme la matière première en produits (construction des exécutables à partir de la compilation du code source),
</li>
<li><strong>contrôle qualité&nbsp;</strong>: tests du bon fonctionnement des produits et de leur respect des critères de qualité,
</li>
<li><strong>distribution&nbsp;</strong>: diffusion des produits auprès des clients (logistique de livraison / réseaux de distribution),
</li>
<li><strong>support&nbsp;</strong>: réponse aux questions des utilisateurs (internes ou externes), gestion des anomalies et actions correctives.
</li>
</ul>
<p>On le constate d&rsquo;emblée, une telle analogie considère l&rsquo;usine au sens large et va bien au delà de la chaîne de montage. Cette vision correspond plutôt à celle du «&nbsp;supply chain management&nbsp;» qui s&rsquo;intéresse autant aux flux et à leur synchronisation qu&rsquo;au seul process de fabrication. En résumé, il s&rsquo;agit de définir un cadre au sein duquel clients, fabriquant et fournisseurs se retrouvent autour d&rsquo;un ou plusieurs produits. On est donc loin de la simple procédure de build&nbsp;!</p>
<p>A partir de là, rien n&rsquo;empêche d&rsquo;utiliser les appellations «&nbsp;forge&nbsp;» ou «&nbsp;ALM&nbsp;», pour peu que l&rsquo;on garde en tête les six domaines que nous venons de citer. Nous verrons toutefois qu&rsquo;on est souvent loin du compte, les «&nbsp;forges&nbsp;» ayant tendance à se limiter au gestionnaire de source habillé d&rsquo;un bug tracker et les solutions d&rsquo;&nbsp;«&nbsp;ALM&nbsp;» étant très focalisées sur les fonctions de pilotage au point de négliger celles de construction.</p>
<h1>Critères de l&rsquo;étude</h1>
<p>Même si les six domaines définis ne sont pas forcément d&rsquo;égale importance, ils constituent donc un point de départ pour évaluer des solutions candidates au titre d&rsquo;«&nbsp;usine de développement&nbsp;». Néanmoins, comme peu de produits sont organisés selon cette vision et qu&rsquo;il convient de rentrer dans le concret, nous nous sommes intéressés à des fonctions d&rsquo;une granularité plus fine pour favoriser une analyse systématique.</p>
<p>Voici donc une description des fonctions et caractéristiques que nous avons étudiées&nbsp;:  </p>
<p><TABLE><TR><TD align="center"><I>Fonction</I></TD><TD align="center"><I>Description</I></TD></TR><TR><TD colspan="2"><B><U>Généralités &amp; administration</U></B></TD></TR><TR><TD>Intégration des outils (portail)<br />
</TD><TD>Niveau d&rsquo;intégration des différents outils constituant l&rsquo;usine de développement</TD></TR><TR><TD>Facilité d&rsquo;installation</TD><TD>Efforts et compétences nécessaires pour l&rsquo;installation</TD></TR><TR><TD>Arborescence de projets</TD><TD>Le produit sait-il gérer des projets organisés en sous-projets&nbsp;?</TD></TR><TR><TD>Création transverse de nouveaux projets</TD><TD>La création de projet se fait-elle en une seule opération concernant tous les outils&nbsp;?</TD></TR><TR><TD>Templates de projet</TD><TD>Dispose-t-on de modèles de projets réutilisables&nbsp;?</TD></TR><TR><TD>Gestion des utilisateurs et de leurs droits</TD><TD>La gestion des utilisateurs et des habilitations est-elle suffisamment aboutie et intégrée&nbsp;?</TD></TR><TR><TD>Notifications par mail</TD><TD>Existe-t-il un système de notification par mail&nbsp;? Est-il paramétrable&nbsp;?</TD></TR><TR><TD>Fonction de recherche générale</TD><TD>Existe-t-il une fonction de recherche généralisée&nbsp;? Est-elle efficace&nbsp;?</TD></TR><TR><TD>Documentation</TD><TD>Quel est la qualité de la documentation&nbsp;? Comment couvre-t-elle l&rsquo;usine de développement dans son ensemble&nbsp;?</TD></TR><TR><TD>Multilinguisme</TD><TD>Le produit est-il multilingue&nbsp;?</TD></TR><TR><TD colspan="2"><B><U>Travail collaboratif</U></B></TD></TR><TR><TD>Trackers personnalisables</TD><TD>Quel est le niveau de fonctionnalité des trackers&nbsp;? Sont-ils suffisamment paramétrables&nbsp;?</TD></TR><TR><TD>Tâches arborescentes (sous-tâches)</TD><TD>Le produit propose-t-il le découpage de tâches en sous-tâches&nbsp;?</TD></TR><TR><TD>Gestion des références</TD><TD>Le produit gère-t-il des liens entre les éléments des trackers&nbsp;? Les liens entre projets sont-ils supportés ?</TD></TR><TR><TD>Forums</TD><TD>Est-il possible de créer et utiliser des forums&nbsp;?</TD></TR><TR><TD>Wiki</TD><TD>Y a-t-il des fonctions de wiki&nbsp;ou de documentation collaborative au sens large&nbsp;?</TD></TR><TR><TD>Messagerie instantanée</TD><TD>Trouve-t-on des fonctions de messagerie instantanée&nbsp;?</TD></TR><TR><TD colspan="2"><B><U>Gestion de projet</U></B></TD></TR><TR><TD>Définition de roadmap</TD><TD>Peut-on définir et consulter une roadmap&nbsp;?</TD></TR><TR><TD>Fonctions de planification</TD><TD>Quel est le niveau des fonctions de planification&nbsp;?</TD></TR><TR><TD>Gestion de la disponibilité des ressources</TD><TD>Le produit gère-t-il les ressources (équipes) et leur disponibilité (calendrier)&nbsp;?</TD></TR><TR><TD>Suivi d&rsquo;avancement</TD><TD>Est-il possible et facile de suivre l&rsquo;avancement des travaux&nbsp;?</TD></TR><TR><TD>Vues graphiques</TD><TD>Le produit génère-t-il des vues graphiques&nbsp;?</TD></TR><TR><TD>Calendrier</TD><TD>Le produit inclut-il une gestion de calendrier&nbsp;?</TD></TR><TR><TD>Support de Scrum</TD><TD>Le produit est-il adapté à une conduite agile des projets (avec Scrum notamment)&nbsp;?</TD></TR><TR><TD>Production de rapports (personnalisables)</TD><TD>Est-il possible de produire des rapports personnalisés&nbsp;(paramétrés par l&rsquo;utilisateur)&nbsp;?</TD></TR><TR><TD colspan="2"><B><U>Référentiels</U></B></TD></TR><TR><TD>Référentiel de bibliothèques</TD><TD>Le produit intègre-t-il un référentiel de bibliothèques (tel que Nexus ou Archiva)&nbsp;?</TD></TR><TR><TD>Référentiel de code SVN</TD><TD>Le produit intègre-t-il le référentiel de code source Subversion&nbsp;?</TD></TR><TR><TD>Référentiel de code (autres solutions, i.e. GIT)</TD><TD>Le produit intègre-t-il un autre système de référentiel de code source (tel que Git) ?</TD></TR><TR><TD>Navigation dans le référentiel en mode web</TD><TD>Y a-t-il une interface web pour accéder au contenu du référentiel de sources&nbsp;?</TD></TR><TR><TD colspan="2"><B><U>Intégration continue</U></B></TD></TR><TR><TD>Intégration de Maven</TD><TD>Maven est-il pris en compte voire intégré&nbsp;?</TD></TR><TR><TD>Pilotage des builds</TD><TD>Y a-t-il moyen de piloter les builds (via une console d&rsquo;intégration continue)&nbsp;?</TD></TR><TR><TD colspan="2"><B><U>Contrôle qualité</U></B></TD></TR><TR><TD>Tests unitaires</TD><TD>Le produit prend-t-il en compte l&rsquo;exécution de tests unitaires&nbsp;?</TD></TR><TR><TD>Tests automatisés d&rsquo;IHM</TD><TD>Une solution pour les tests automatisés des IHM est-elle proposée&nbsp;?</TD></TR><TR><TD>Tests d&rsquo;intégration/montée en charge</TD><TD>Des solutions pour les tests d&rsquo;intégration et/ou de montée en charge sont-elles proposées&nbsp;?</TD></TR><TR><TD>Audit de code</TD><TD>Le produit comprend-il des fonctions d&rsquo;audit de code (qualimétrie)&nbsp;?</TD></TR><TR><TD colspan="2"><B><U>Publication</U></B></TD></TR><TR><TD>Repository Maven</TD><TD>Le produit propose-t-il la publication dans un référentiel de composants ?</TD></TR><TR><TD>Dépôt de fichiers</TD><TD>Existe-t-il une zone de dépôt de fichiers organisée&nbsp;?</TD></TR><TR><TD>Espace documentaire</TD><TD>Trouve-t-on un espace documentaire où classer des documents (par sujets et par versions)&nbsp;?</TD></TR><TR><TD>Section blog / news</TD><TD>Existe-t-il une section de type blog pour notamment communiquer des actualités&nbsp;?</TD></TR><TR><TD colspan="2"><B><U>Modes d&rsquo;utilisation</U></B></TD></TR><TR><TD>En installation autonome</TD><TD>Le produit peut-il être installé librement en mode «&nbsp;standalone&nbsp;»?</TD></TR><TR><TD>En mode infogéré</TD><TD>Le produit est-il proposé avec un service d&rsquo;infogérance ?</TD></TR><TR><TD>En SAAS</TD><TD>Le produit est-il accessible en mode SAAS (rien à installer) ?</TD></TR><TR><TD>Types de projets</TD><TD>Quelles technologies sont supportées pour les développements&nbsp;?</TD></TR><TR><TD>Ouverture / extensions / adaptations</TD><TD>Le produit peut-il cohabiter avec d&rsquo;autres outils&nbsp;? Est-il possible de l&rsquo;adapter, le compléter&nbsp;?</TD></TR></TABLE></p>
<p>Une pondération a été précisée pour relativiser l&rsquo;importance de certains critères par rapport à d&rsquo;autres. Évidemment, la définition de ces critères est toujours discutable, surtout qu&rsquo;elle dépend des contextes d&rsquo;usages, mais c&rsquo;est le lot de toute étude de reposer sur ce genre de choix.</p>
<p>Ces critères ont donc été évalués sur chacune des solutions, à partir de la documentation officielle et de tests des fonctionnalités sur le produit en action. Une note de 0 à 5 a été attribuée selon que l&rsquo;on a constaté que la fonction était&nbsp;:</p>
<ul>
<li>inexistante (0)</li>
<li>embryonnaire ou peu utilisable (1)</li>
<li>partiellement implémentée (2)</li>
<li>opérationnelle pour les cas courants mais avec certaines lacunes (3)</li>
<li>aboutie et efficace (4)</li>
<li>particulièrement bien faite, avec des options complémentaires intéressantes (5)</li>
</ul>
<h1>FusionForge</h1>
<p>Le premier produit a avoir été étudié est <A HREF="http://fusionforge.org/">FusionForge</A>, qui est un successeur de GForge, lui-même héritier du fameux SourceForge. C&rsquo;est un produit open source écrit en PHP.</p>
<p>Le diagramme suivant résume les notations issues de l&rsquo;étude pour les pans fonctionnels définis&nbsp;:</p>
<p><a href="http://www.improve-technologies.com/wp-content/uploads/2013/03/FusionForge.jpg"><img src="http://www.improve-technologies.com/wp-content/uploads/2013/03/FusionForge.jpg" alt="" title="FusionForge" width="670" height="423" class="aligncenter size-full wp-image-427" /></a></a></p>
<p>Sans grande surprise, si FusionForge propose une couverture correcte des fonctions d&rsquo;une forge traditionnelle, il ignore les aspects construction, intégration continue, contrôle qualité. Un travail spécifique est donc nécessaire pour le compléter. En contrepartie, il a l&rsquo;avantage de rester générique, ouvert à toute nature de projets. C&rsquo;est un produit qui convient bien pour des usages assez peu ambitieux ou des contextes où les compétences et les budgets permettent la construction d&rsquo;une usine de développement «&nbsp;maison&nbsp;». L&rsquo;étude lui attribue la note moyenne de 2,2 sur 5.</p>
<h1>Redmine</h1>
<p><A HREF="http://www.redmine.org/">Redmine</A> est un concurrent direct de FusionForge. C&rsquo;est une forge open source basée sur les technologies Ruby.</p>
<p><a href="http://www.improve-technologies.com/wp-content/uploads/2013/03/Redmine.jpg"><img src="http://www.improve-technologies.com/wp-content/uploads/2013/03/Redmine.jpg" alt="" title="Redmine" width="676" height="426" class="aligncenter size-full wp-image-429" /></a></p>
<p>Redmine obtient une note moyenne de 2,5 et souffre globalement des mêmes lacunes que FusionForge puisqu&rsquo;en l&rsquo;occurrence, ce n&rsquo;est pas une usine de développement telle que nous l&rsquo;avons définie. En tant que forge, c&rsquo;est une solution de qualité, portée par un projet open source actif et réputé mais il y a des efforts à faire pour la transformer en usine logicielle.</p>
<h1>Tuleap</h1>
<p><A HREF="http://www.tuleap.com/">Tuleap</A> est un produit qui se définit comme une suite d&rsquo;ALM open source, elle-même issue de la forge Codendi et portée par une société française dédiée. En conséquence, la couverture fonctionnelle est plus complète, plus aboutie et la note moyenne atteint la valeur de 3&nbsp;:</p>
<p><a href="http://www.improve-technologies.com/wp-content/uploads/2013/03/Tuleap.jpg"><img src="http://www.improve-technologies.com/wp-content/uploads/2013/03/Tuleap.jpg" alt="" title="Tuleap" width="661" height="419" class="aligncenter size-full wp-image-430" /></a></p>
<p>L&rsquo;étude révèle que le produit comporte des fonctions évoluées autour des trackers, avec de bonnes possibilités de personnalisation, du reporting de qualité ainsi qu&rsquo;un bon support des méthodes agiles. Malgré cela, les fonctions d&rsquo;intégration continue y font figure de parent pauvre&nbsp;: Jenkins est inclus mais on doit se débrouiller pour l&rsquo;utiliser et le compléter notamment avec des outils de contrôle qualité et un référentiel de composants. Au bilan, Tuleap est un bon candidat pour l&rsquo;usine de développement mais demande quelques efforts complémentaires pour couvrir le périmètre.</p>
<h1>IBM Rational Collaborative Lifecycle Management</h1>
<p>L&rsquo;étude s&rsquo;est ensuite attachée à évaluer une suite d&rsquo;ALM de référence, à savoir celle d&rsquo;<A HREF="https://jazz.net/products/clm">IBM</A>. La suite en question s&rsquo;organise autour de la solution nommée «&nbsp;Team Concert&nbsp;», elle-même reposant sur «&nbsp;Jazz&nbsp;», une plate-forme implémentant le <A HREF="http://en.wikipedia.org/wiki/OSLC">standard OSLC</A> pour l&rsquo;ALM.</p>
<p>On pourrait s&rsquo;attendre à ce que ce produit d&rsquo;un autre niveau remplisse haut la main les critères de notre étude mais il n&rsquo;obtient que la note globale de 3 et montre de grandes disparités dans la couverture fonctionnelle&nbsp;:</p>
<p><a href="http://www.improve-technologies.com/wp-content/uploads/2013/03/IBM.jpg"><img src="http://www.improve-technologies.com/wp-content/uploads/2013/03/IBM.jpg" alt="" title="IBM" width="672" height="422" class="aligncenter size-full wp-image-431" /></a></p>
<p>On constate que si le produit comporte des fonctions superbement implémentées, avec une excellente prise en charge du processus projet, il est nécessaire de le compléter pour couvrir tout le périmètre de l&rsquo;usine de développement. IBM propose tout ce qu&rsquo;il faut (Rational Quality Manager, Rational Build Forge, etc) mais il faudra finalement acquérir, installer et paramétrer tous ces produits pour qu&rsquo;ils puissent cohabiter. Leur documentation révèle effectivement qu&rsquo;il s&rsquo;agit d&rsquo;outils distincts, qui réclament un effort d&rsquo;intégration malgré leur capacité à communiquer à travers Jazz et OSLC. Si l&rsquo;ensemble a un fort potentiel, il s&rsquo;agit finalement d&rsquo;une plate-forme complexe qui n&rsquo;est adaptée qu&rsquo;aux grosses structures menant des projets de grande envergure.</p>
<h1>Suite Atlassian</h1>
<p><A HREF="http://www.atlassian.com/">Atlassian</A> est un acteur majeur du domaine qui nous concerne. Connu pour son tracker JIRA, l&rsquo;éditeur propose les éléments susceptibles de constituer une usine logicielle et notamment une suite en mode SaaS, JIRA Studio.</p>
<p><a href="http://www.improve-technologies.com/wp-content/uploads/2013/03/Atlassian.jpg"><img src="http://www.improve-technologies.com/wp-content/uploads/2013/03/Atlassian.jpg" alt="" title="Atlassian" width="669" height="426" class="aligncenter size-full wp-image-432" /></a></p>
<p>L&rsquo;ensemble obtient la note de 3,6, avec des fonctions de très bonne facture et une bonne couverture du périmètre. On note quelques lacunes, telles que l&rsquo;absence de référentiel de composants et des manques sur les outils de qualimétrie. Malheureusement, à l&rsquo;instar d&rsquo;IBM, la constitution de l&rsquo;usine dans son ensemble passe par la mise en œuvre de nombreux outils distincts et même si Atlassian a son offre SaaS à proposer, elle ne répond que partiellement au besoin d&rsquo;un outil intégré, simple à installer et prendre en main.</p>
<h1>Improve Factory</h1>
<p><A HREF="http://www.improve-foundations.com/produits/improve-factory">Improve Factory</A> est proposé par la société Open Wide et repose notamment sur Redmine pour les fonctions de forge.</p>
<p><a href="http://www.improve-technologies.com/wp-content/uploads/2013/03/IFy.jpg"><img src="http://www.improve-technologies.com/wp-content/uploads/2013/03/IFy.jpg" alt="" title="IFy" width="669" height="432" class="aligncenter size-full wp-image-433" /></a></p>
<p>Le produit obtient la note de 4 et propose une couverture équilibrée de l&rsquo;ensemble du périmètre. Ce bon résultat tient au fait qu&rsquo;il a été conçu à partir de notre définition de l&rsquo;usine de développement. Ses différents modules couvrent en effet les six grandes activités en se basant sur des outils open source reconnus dans leurs domaines respectifs (Redmine, Maven, Hudson, Sonar, Nexus&#8230;). Sa valeur ajoutée réside dans l&rsquo;intégration, avec une procédure d&rsquo;installation simple et unique ainsi que des ponts entre les outils (tels que l&rsquo;assistant unifié de création de projet et le partage des habilitations). Ce bon résultat doit être nuancé par le fait que l&rsquo;usine cible spécifiquement les développements Java mais le produit a le potentiel pour élargir son spectre dans ses futures versions.</p>
<h1>Bilan</h1>
<p>Bien que cette étude puisse aider à choisir une solution d&rsquo;usine de développement, elle cherche surtout à mettre en évidence la disparité des produits vis-à-vis du besoin tel que nous l&rsquo;avons défini. On constate en effet que ce qu&rsquo;on appelle les forges et les suites d&rsquo;ALM couvrent rarement la totalité du périmètre et l&rsquo;usine logicielle clé en main reste un produit rare. Les solutions complètes paraissent pourtant bien utiles tant il est difficile et coûteux pour une entreprise d&rsquo;investir dans la construction et l&rsquo;administration d&rsquo;un environnement complet alors même que les bonnes pratiques et les outils existent sur chacune des activités. Le regain d&rsquo;intérêt actuel pour ce sujet permet cependant d&rsquo;espérer des progrès et l&rsquo;arrivée sur le marché de solutions complètes, matures et simples à mettre en œuvre.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2013/03/01/usine-de-developpement-etude-comparative/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java et CSV &#8211; Tour d&#8217;horizon des solutions open source</title>
		<link>http://www.improve-technologies.com/2012/07/18/java-et-csv-tour-dhorizon-des-solutions-open-source/</link>
		<comments>http://www.improve-technologies.com/2012/07/18/java-et-csv-tour-dhorizon-des-solutions-open-source/#comments</comments>
		<pubDate>Wed, 18 Jul 2012 09:13:09 +0000</pubDate>
		<dc:creator>BUB</dc:creator>
				<category><![CDATA[Analyse et veille technologique]]></category>
		<category><![CDATA[convertisseur]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[ETL]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/blog/?p=215</guid>
		<description><![CDATA[Sujet récurrent dans le domaine de l&#8217;informatique de gestion, le traitement des fichiers CSV fait partie des incontournables du genre. Il bénéficie à ce titre d&#8217;une offre abondante dans le monde Open Source, il n&#8217;est cependant pas toujours évident de <a href="http://www.improve-technologies.com/2012/07/18/java-et-csv-tour-dhorizon-des-solutions-open-source/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Sujet récurrent dans le domaine de l&rsquo;informatique de gestion, le traitement des fichiers CSV fait partie des incontournables du genre. Il bénéficie à ce titre d&rsquo;une offre abondante dans le monde Open Source, il n&rsquo;est cependant pas toujours évident de trouver les informations utiles pour faire un choix adapté aux besoins.</strong></p>
<p><strong> </strong></p>
<p><strong>Cet article propose un rapide tour d&rsquo;horizon des bibliothèques Java permettant la gestion de l&rsquo;import/export du format CSV les plus répandues, ainsi que quelques éléments de réflexion à considérer pour s&rsquo;orienter.</strong></p>
<h2>Bibliothèque externe ou développement spécifique ?</h2>
<p>Si la problématique d&rsquo;écriture de fichiers CSV pose généralement peu de difficultés, malgré son apparente simplicité la lecture de ces mêmes fichiers peut s&rsquo;avérer complexe. En effet, si l&rsquo;on considère l&rsquo;absence de spécification de référence, ainsi que la possible hétérogénéité des systèmes d&rsquo;encodage, on obtient une première idée des problématiques possibles. S&rsquo;y ajoutent entre autres la possible variabilité des séparateurs utilisés d&rsquo;un fichier à l&rsquo;autre, l&rsquo;utilisation ou non des guillemets, la gestion d&rsquo;éventuelles imbrications des caractères d&rsquo;échappement&#8230; Difficile d&rsquo;être exhaustif tant les subtilités sont nombreuses.</p>
<p>En conséquence rien n&rsquo;interdit le développement d&rsquo;une solution spécifique pour un cas bien identifié, mais dans un contexte d&rsquo;industrialisation des développements il reste préférable de ne pas réinventer la roue et favoriser l&rsquo;homogénéité des développements en choisissant un outil suffisamment flexible.</p>
<h2>Estimer la robustesse des bibliothèques</h2>
<p>Si l&rsquo;on considère le dynamisme des projets, on constate que peu d&rsquo;entre eux présentent une activité importante, que l&rsquo;on considère les forums ou les bug trackers associés. Parallèlement la version courante correspond souvent à un numéro peu élevé.</p>
<p>Ces critères généralement retenus pour estimer à première vue le niveau de maturité et de support d&rsquo;un projet ne semblent pas adaptés au sujet qui nous intéresse, lequel a priori implique peu d&rsquo;améliorations et de support sur le long terme. On recherchera néanmoins les signes d&rsquo;une communauté active via un forum ou un bug tracker animés sans oublier une documentation efficace nourrie d&rsquo;exemples d&rsquo;utilisation proches des problématiques cibles.</p>
<h2>Fonctionnalités/API</h2>
<p>L&rsquo;ensemble de ces bibliothèques propose évidemment des méthodes pour lire et/ou générer des fichiers CSV, mais les moyens et fonctionnalités complémentaires diffèrent d&rsquo;un outil à l&rsquo;autre. On distingue assez rapidement des bibliothèques orientées bas niveau de celles relativement plus évoluées. Les fonctionnalités des premières se limitent le plus souvent à l&rsquo;extraction des données rendues disponibles dans un format de type String. Les plus complètes proposent une intégration plus directe des données par l&rsquo;intermédiaire d&rsquo;un paramétrage à définir.</p>
<p>Les capacités proposées pour la lecture des fichiers varient entre une lecture ligne par ligne suivant un modèle de type Iterator et la génération d&rsquo;une collection représentative du fichier dans son intégralité. Le plus souvent ces deux fonctionnalités sont présentes.</p>
<p>Pour l&rsquo;import de fichier, certaines bibliothèques fournissent une API permettant d&rsquo;accéder directement aux données brutes, d&rsquo;autres facilitent l&rsquo;<strong>intégration directe des données sous forme de Beans</strong> (voire nested Beans), <strong>Collections</strong>, <strong>Arrays </strong>et proposent parfois la génération directe de <strong>requêtes SQL</strong> pour l&rsquo;intégration des données en base.</p>
<p>La <strong>validation des données </strong>et/ou la <strong>gestion d&rsquo;erreurs</strong> n&rsquo;est pas systématiquement présente et les rares solutions proposées concernent : la définition d&rsquo;un filtre sur les données en entrée, l&rsquo;utilisation d&rsquo;un handler d&rsquo;erreurs associée au lecteur du fichier, ou l&rsquo;utilisation d&rsquo;une collection chargée de stocker les erreurs rencontrées.</p>
<p>Du point de vue de la <strong>gestion du format des données</strong>, les fonctionnalités varient d&rsquo;une gestion manuelle au cas par cas à la possibilité de configurer des transformateurs par donnée, le plus souvent en paramétrant les objets de lecture et d&rsquo;écriture, et parfois à l&rsquo;aide d&rsquo;une configuration XML, voire d&rsquo;annotations sur les Beans cibles.</p>
<p>Pour permettre le <strong>paramétrage du mapping des colonnes</strong>, certaines bibliothèques nécessitent un traitement spécifique directement inclus dans le code, d&rsquo;autres le gèrent moyennant l&rsquo;utilisation d&rsquo;annotations, enfin certains outils imposent la définition du mapping dans un fichier XML.</p>
<p>Enfin, au-delà de la gestion du format CSV, ces bibliothèques prennent parfois en charge des <strong>formats complémentaires</strong> tels que les fichiers à champs de taille fixe, les fichiers à délimiteurs autres, les fichiers XML, XLS, voire la lecture d&rsquo;enregistrements sur plusieurs lignes, notamment pour traiter la notion de master/detail.</p>
<h2>Intégration</h2>
<p>Exception faite des classes de tests qui dépendent majoritairement de JUnit, la plupart de ces bibliothèques ne dépendent pas de bibliothèques tierces. Par conséquent l&rsquo;intégration pourra se faire sans conflits avec les dépendances des projets considérés.</p>
<p>Ces bibliothèques sont en majorité soumises à la licence Apache v2 ce qui facilite leur intégration, notamment pour une utilisation professionnelle.</p>
<h2>Synthèse comparative</h2>
<table style="font-family: verdana" border="1" width="100%">
<caption><strong>Récapitulatif des caractéristiques principales</strong></caption>
<thead>
<tr>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Nom et lien vers la librairie"><span style="font-size: x-small">Projet*</span></span></td>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Mode de lecture disponible : bloc ou iteration"><span style="font-size: x-small">Lecture*</span></span></td>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Automatise le binding, notamment sur des beans éventuellement nested"><span style="font-size: x-small">Binding*</span></span></td>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Mode de paramétrage du mapping"><span style="font-size: x-small">Mapping*</span></span></td>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Automatise la gestion du formatage des données"><span style="font-size: x-small">Formatage*</span></span></td>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Prévoit l'identification/le traitement des erreurs"><span style="font-size: x-small">Gestion<br />
d&rsquo;erreurs*</span></span></td>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://code.google.com/p/beanfiles">BeanFiles</a></td>
<td style="padding: 0px 5px 0px 5px">bloc &amp; iteration</td>
<td style="padding: 0px 5px 0px 5px">nested</td>
<td style="padding: 0px 5px 0px 5px">code</td>
<td style="padding: 0px 5px 0px 5px">oui</td>
<td style="padding: 0px 5px 0px 5px">non</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://beanio.org/">BeanIO</a></td>
<td style="padding: 0px 5px 0px 5px">bloc &amp; iteration</td>
<td style="padding: 0px 5px 0px 5px">nested</td>
<td style="padding: 0px 5px 0px 5px">XML</td>
<td style="padding: 0px 5px 0px 5px">oui</td>
<td style="padding: 0px 5px 0px 5px">système de handlers</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://commons.apache.org/csv/">Commons CSV</a></td>
<td style="padding: 0px 5px 0px 5px">bloc &amp; iteration</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">code</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">non</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://csvtosql.sourceforge.net/">csvtosql</a></td>
<td style="padding: 0px 5px 0px 5px">N.A.</td>
<td style="padding: 0px 5px 0px 5px">N.A.</td>
<td style="padding: 0px 5px 0px 5px">XML</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">non</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://flatpack.sourceforge.net/">Flatpack</a></td>
<td style="padding: 0px 5px 0px 5px">bloc &amp; iteration</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">XML / tables BD</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">stockage</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://www.csvreader.com/java_csv.php">JavaCSV</a></td>
<td style="padding: 0px 5px 0px 5px">iteration</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">code</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">non</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://code.google.com/p/jcsv/">JCSV</a></td>
<td style="padding: 0px 5px 0px 5px">bloc &amp; iteration</td>
<td style="padding: 0px 5px 0px 5px">bean</td>
<td style="padding: 0px 5px 0px 5px">code ou annotations</td>
<td style="padding: 0px 5px 0px 5px">oui</td>
<td style="padding: 0px 5px 0px 5px">filtres</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://jsefa.sourceforge.net/">JSefa</a></td>
<td style="padding: 0px 5px 0px 5px">iteration</td>
<td style="padding: 0px 5px 0px 5px">bean</td>
<td style="padding: 0px 5px 0px 5px">code ou annotations</td>
<td style="padding: 0px 5px 0px 5px">oui</td>
<td style="padding: 0px 5px 0px 5px">?</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://opencsv.sourceforge.net/">OpenCSV</a></td>
<td style="padding: 0px 5px 0px 5px">bloc &amp; iteration</td>
<td style="padding: 0px 5px 0px 5px">bean</td>
<td style="padding: 0px 5px 0px 5px">code</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">?</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://ostermiller.org/utils/CSV.html">Ostermiller CSV</a></td>
<td style="padding: 0px 5px 0px 5px">bloc &amp; iteration</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">code</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">non</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://kasparov.skife.org/csv/">Skife CSV</a></td>
<td style="padding: 0px 5px 0px 5px">bloc &amp; évènements</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">code</td>
<td style="padding: 0px 5px 0px 5px">non</td>
<td style="padding: 0px 5px 0px 5px">non</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://supercsv.sourceforge.net/">SuperCSV</a></td>
<td style="padding: 0px 5px 0px 5px">iteration</td>
<td style="padding: 0px 5px 0px 5px">bean</td>
<td style="padding: 0px 5px 0px 5px">code</td>
<td style="padding: 0px 5px 0px 5px">oui</td>
<td style="padding: 0px 5px 0px 5px">non</td>
</tr>
</tbody>
</table>
<p><em><strong>NB : </strong>Les valeurs à &laquo;&nbsp;non&nbsp;&raquo; de ce tableau ne sont généralement pas à prendre comme un non ferme pour au moins deux raisons : il se peut que la fonction soit présente sans qu&rsquo;elle ait été constatée, cette fonction pourrait être incluse dans une version non disponible au moment de l&rsquo;écriture de cet article.</em></p>
<p><em><strong>NB2 : </strong>Nous n&rsquo;avons pu considérer le projet <a href="http://jfilehelpers.com">JFileHelper</a> pour cause d&rsquo;indisponibilité du site correspondant.</em><strong> </strong></p>
<h2>Evaluation</h2>
<p>L&rsquo;ensemble de ces bibliothèques propose l&rsquo;export au format CSV à  l&rsquo;exception de BeanFiles qui n&rsquo;inclut pas cette fonction ainsi que  csvtosql qui exporte les données sous forme de requêtes SQL.</p>
<p>Maven est prêt à l&rsquo;emploi avec les bibliothèques suivantes : BeanIO, Commons CSV, csvtosql, JCSV, OpenCSV.</p>
<p>Mis à part BeanFiles (LGPL), JavaCSV (LGPL), et Ostermiller CSV (GPL), l&rsquo;ensemble de ces bibliothèques est sous licence Apache v2.</p>
<p>Exercice difficile mais utile, une notation est proposée à titre indicatif sur des critères subjectifs. Cette note souhaite rendre compte du niveau de chaque outil relativement à l&rsquo;ensemble des autres. On pourra donc interpréter la valeur &laquo;&nbsp;++&nbsp;&raquo; comme &laquo;&nbsp;dans la moyenne&nbsp;&raquo; et considérer les valeurs adjacentes &laquo;&nbsp;+&nbsp;&raquo; et &laquo;&nbsp;+++&nbsp;&raquo; respectivement comme &laquo;&nbsp;en retrait&nbsp;&raquo; et &laquo;&nbsp;plus évolué&nbsp;&raquo;.</p>
<p>Considérant l&rsquo;absence de données comparables, les critères de popularité et de qualité de la communauté ne sont pas traités.</p>
<table style="font-family: verdana" border="1" width="100%">
<caption><strong>Evaluation qualitative</strong></caption>
<thead>
<tr>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Nom et lien vers la librairie"><span style="font-size: x-small">Projet*</span></span></td>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Estimation comparative des fonctionnalités disponibles"><span style="font-size: x-small">Fonctions*</span></span></td>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Estimation de la maturité du projet"><span style="font-size: x-small">Maturité*</span></span></td>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Niveau de documentation (documentation, tutoriels, exemples)"><span style="font-size: x-small">Documentation*</span></span></td>
<td style="padding: 0;text-align: center;vertical-align: middle"><span title="Estimation du dynamisme du projet"><span style="font-size: x-small">Activité*</span></span></td>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://code.google.com/p/beanfiles">BeanFiles</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://beanio.org/">BeanIO</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://commons.apache.org/csv/">Commons CSV</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://csvtosql.sourceforge.net/">csvtosql</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://flatpack.sourceforge.net/">Flatpack</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://www.csvreader.com/java_csv.php">JavaCSV</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://code.google.com/p/jcsv/">JCSV</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://jsefa.sourceforge.net/">JSefa</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://opencsv.sourceforge.net/">OpenCSV</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://ostermiller.org/utils/CSV.html">Ostermiller CSV</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">?</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://kasparov.skife.org/csv/">Skife CSV</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
</tr>
<tr>
<td style="padding: 0px 5px 0px 5px"><a href="http://supercsv.sourceforge.net/">SuperCSV</a></td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">++</td>
<td style="padding: 0px 5px 0px 5px;text-align: right">+</td>
</tr>
</tbody>
</table>
<h2>Bilan</h2>
<p>Les différentes recherches effectuées montrent une certaine prépondérance de la librairie OpenCSV au sein de la communauté open source. Gage de qualité, cette observation nécessite tout de même de considérer une API majoritairement orientée bas niveau.</p>
<p>Dans un registre similaire, les bibliothèques JCSV, SuperCSV et FlatPack apparaîssent comme des candidats relativement complets.</p>
<p>Parmi les projets les plus récents on notera l&rsquo;émergence de  BeanIO, l&rsquo;un des plus complets en matière de fonctionnalités, déjà  intégré dans le projet Apache Camel et compatible avec la solution SpringBatch.</p>
<p>Parallèlement, notons que la vocation affichée de Commons CSV et son affiliation à la communauté Apache semblent prometteuses sans pour autant convaincre étant donné le manque flagrant d&rsquo;informations et manque de maturité (version 1.0-SNAPSHOT).</p>
<p>Il faut noter que les performances de ces bibliothèques à l&rsquo;exécution n&rsquo;ont pas été évaluées. Cet aspect reste un élément important qui devra sans doute être pris en considération pour le choix d&rsquo;un outil.<em> </em><strong><em><br />
</em></strong></p>
<p>Enfin, précisons que d&rsquo;autres solutions existent mais ne font pas l&rsquo;objet de cet article. Citons notamment des solutions intégrées destinées à un contexte d&rsquo;utilisation plus large telles que SpringBatch, Apache Camel ainsi que les ETL en général.</p>
<p><em> </em></p>
<p><em> </em></p>
<p><em> </em></p>
<p><em> </em></p>
<p><em> </em></p>
<p><em> </em></p>
<p><em> </em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2012/07/18/java-et-csv-tour-dhorizon-des-solutions-open-source/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>﻿L’usine de développement : du cauchemar à la réalité</title>
		<link>http://www.improve-technologies.com/2012/06/29/%ef%bb%bfl%e2%80%99usine-de-developpement-du-cauchemar-a-la-realite/</link>
		<comments>http://www.improve-technologies.com/2012/06/29/%ef%bb%bfl%e2%80%99usine-de-developpement-du-cauchemar-a-la-realite/#comments</comments>
		<pubDate>Fri, 29 Jun 2012 09:46:29 +0000</pubDate>
		<dc:creator>Frédéric ESNAULT</dc:creator>
				<category><![CDATA[Réflexions et débats]]></category>
		<category><![CDATA[ALM]]></category>
		<category><![CDATA[Forge]]></category>
		<category><![CDATA[Improve Factory]]></category>
		<category><![CDATA[intégration continue]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[méthodes agiles]]></category>
		<category><![CDATA[usine de développement]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/blog/?p=338</guid>
		<description><![CDATA[Imaginons un instant une entreprise dans laquelle les projets informatiques tourneraient au cauchemar : le périmètre fonctionnel est mal maîtrisé, les architectes techniques jouent aux divas de l&#8217;innovation, les développeurs sont peu productifs, les managers ne savent pas où en <a href="http://www.improve-technologies.com/2012/06/29/%ef%bb%bfl%e2%80%99usine-de-developpement-du-cauchemar-a-la-realite/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Imaginons un instant une entreprise dans laquelle les projets informatiques tourneraient au cauchemar : le périmètre fonctionnel est mal maîtrisé, les architectes techniques jouent aux divas de l&rsquo;innovation, les développeurs sont peu productifs, les managers ne savent pas où en est le projet, chaque déploiement est une bataille, les délais et les coûts explosent, personne ne veut maintenir l&rsquo;application, l’ensemble finit à la poubelle&#8230; Une caricature ? Bien sûr&#8230; Mais la réalité est-elle plus proche du discours marketing ambiant, fait de beaux outils et de bonnes pratiques, bourré d&rsquo; « agilité », de « lifecycle management » et de « cloud » ? Depuis que des études comme celles du Standish Group (www.standishgroup.com) ont révélé que la majorité des projets informatiques ne se déroulaient pas comme prévu, on est en droit de se poser la question.</strong><span id="more-338"></span></p>
<p>Cet article se propose de revisiter les tares courantes des projets d&rsquo;informatique de gestion pour les confronter aux pratiques et outils disponibles. Le sujet étant très vaste, nous l&rsquo;aborderons ici à travers les notions d&rsquo; « usine de développement », de « forge » et d&rsquo; « ALM » dans le cadre des technologies Java. L&rsquo;objectif est de dégager des pistes de progrès pragmatiques et abordables car s&rsquo;il est illusoire de faire du rêve une réalité, il y a sans doute moyen d&rsquo;éviter le cauchemar !</p>
<h1>Le cauchemar des DSI</h1>
<p>Imaginons un instant que nous soyons confrontés à la pire situation pour une DSI et faisons un rapide tour d&rsquo;horizon des problèmes rencontrés lors des projets informatiques. Si ce scénario peut paraître extrême, la nature des difficultés mentionnées n&rsquo;est malheureusement pas absente du quotidien des DSI.</p>
<p>La première source de soucis concerne l&rsquo;expression et la prise en compte des exigences, ce qu&rsquo;on appelle aussi les spécifications fonctionnelles. Sans évoquer les carences d&rsquo;organisation, il est courant de constater que les utilisateurs ont du mal à communiquer leurs besoins et à les faire prendre en compte par l&rsquo;équipe qui réalise l&rsquo;application.</p>
<p>Les attentes sont finalement mal exprimées et mal comprises et les fonctions réclameront en conséquence des ajustements tardifs, risqués et coûteux. Les demandes d&rsquo;évolution, les dysfonctionnements sont mal remontés et les utilisateurs s&rsquo;en accommodent dans la mesure où leur prise en compte est perçue comme aléatoire. Quand il y a de bonnes idées, elles sont lancées devant la machine à café et jetées avec les gobelets&#8230;</p>
<p>Le cauchemar continue du côté des équipes de réalisation. Quand il y a des règles de développement, pratiques reconnues ou choix d&rsquo;entreprise, elles sont mal appliquées. Pire : on ne sait même pas dire si elles sont appliquées ou pas. Sans contrôle, chacun procède comme il veut, dans son coin. Certains choix se font de manière implicite, sans concertation ni justification, voire même sans aucune communication sur le fait qu&rsquo;un choix a été fait. C&rsquo;est ainsi qu&rsquo;on découvrira trois ans plus tard qu&rsquo;un framework open source a été intégré à une application dans une version non identifiée et avec une licence litigieuse.</p>
<p>Par ailleurs, on a peu de moyens d&rsquo;assurer qu&rsquo;une évolution n&rsquo;entraînera pas une régression des autres fonctions. Il n&rsquo;y a pas d&rsquo;alternative entre les recettes coûteuses et la stratégie du « on verra bien ». Mais si une erreur a été commise, ses conséquences seront visibles si longtemps après qu&rsquo;il sera difficile d&rsquo;en comprendre la cause et de mettre en œuvre un correctif.</p>
<p>Il arrive souvent qu&rsquo;un développeur passe des heures à résoudre un problème alors que quelqu&rsquo;un dans l&rsquo;équipe l&rsquo;a déjà résolu. De toute façon, ce dernier a perdu les informations utiles. Et quand chaque développeur a terminé son travail, on s&rsquo;aperçoit qu&rsquo;on est loin du compte : produire le livrable final demande un effort colossal qui est lui-même source d&rsquo;erreurs, corrigées à la va-vite. Le déploiement en production est ensuite une guerre de tranchées entre l&rsquo;équipe d&rsquo;exploitation et celle des développeurs. L&rsquo;une est responsable, l&rsquo;autre est coupable.</p>
<p>In fine, chaque projet produit une application différente du point de vue technique et les personnes chargées de la maintenance devront s’adapter à chacun de ces contextes, avec le risque de confusion que cela comporte. De toute manière, avec le temps, l&rsquo;activité de maintenance ignore ce qui s&rsquo;est passé pendant le développement initial : on a perdu l&rsquo;historique, les documents sont introuvables ou inexploitables et il arrive même qu&rsquo;on ne soit pas capable de retrouver le code source correspondant à l&rsquo;exécutable en production&#8230; Le flou de la phase projet a laissé place à un épais brouillard. Les bons développeurs fuient cette activité périlleuse : la maintenance est un exercice d&rsquo;équilibriste sans filet donné à des artistes de seconde zone. C&rsquo;est pourtant là qu&rsquo;il faudrait des prodiges !</p>
<p>Reste le management. Dans ce cauchemar, le chef de projet se trouve coincé entre des utilisateurs qui demandent l&rsquo;impossible et des techniciens qui le mènent en bateau. Il lui est difficile d&rsquo;évaluer des charges et d&rsquo;arbitrer sur des priorités. Comment identifier les points urgents et stratégiques quand l&rsquo;information est parcellaire, peu fiable, difficile à analyser dans son ensemble ? S&rsquo;en suivent des décisions arbitraires, des choix incohérents, des efforts mal ciblés. Cueilli à froid le manager aura du mal à détailler où en est son projet car il faut du temps pour préparer un reporting pertinent. Forcément, la réactivité s&rsquo;en ressent et les dérapages sont corrigés tardivement, quand ils peuvent l&rsquo;être.</p>
<h1>Le rêve de l&rsquo;usine de développement</h1>
<p>Tous ces acteurs semblent bien inefficaces ! Pourtant, ce n&rsquo;est pas forcément dû à une incompétence individuelle. Chacun fait comme il peut dans le cadre qui lui est donné. Ne pourrait-on pas offrir aux projets un cadre plus favorable ?</p>
<p>Le cadre idyllique est fait d&rsquo;agilité, ce qui sous-tend une bonne communication et une grande réactivité. Dans ce rêve, on se donne les moyens de détecter tout écart dès qu&rsquo;il survient et de mettre en œuvre l&rsquo;action corrective au plus vite. Les problèmes ne sont pas niés mais tués dans l’œuf. Les décisions sont prises en toute connaissance de cause et tous les acteurs sont impliqués.</p>
<p>Ces pratiques s&rsquo;organisent via des méthodes de projet dites « agiles » telles que <a href="http://www.scrum.org">Scrum</a>. S&rsquo;y adjoignent des habitudes complémentaires, principalement issues du monde du logiciel libre. Ainsi la dispersion des acteurs, l&rsquo;esprit communautaire et bénévole du contexte open source ont paradoxalement aidé à rationaliser les processus des projets informatiques d&rsquo;entreprise.</p>
<p>La notion de « forge », partie de l&rsquo;idée de créer un site internet pour représenter les projets sur le réseau, prend finalement la forme d&rsquo;un portail collaboratif qui centralise toutes les informations, favorise les échanges et permet à tous les acteurs d’œuvrer dans le bon sens.</p>
<p>A l&rsquo;heure où la construction d&rsquo;une application exécutable ne se limite plus à une phase de compilation du code, l&rsquo;automatisation du « build » s&rsquo;est imposée et s&rsquo;étend à des pratiques que l&rsquo;on rassemble sous le terme d&rsquo;« intégration continue ».</p>
<p>Tous ces usages permettent d&rsquo;aboutir à une « industrialisation » des projets et on parle alors d&rsquo; « usine de développement » à l&rsquo;image de ce qui se passe dans l&rsquo;industrie. On met ainsi en place la « supply chain » de la production logicielle. Voilà une image rassurante mais en quoi consiste-t-elle finalement ?</p>
<p><a href="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/DevFactory-pt.jpg"><img class="aligncenter size-full wp-image-343" title="DevFactory-pt" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/DevFactory-pt.jpg" alt="" width="800" height="487" /></a></p>
<h2>La planification et le pilotage</h2>
<p>Pour commencer, il s&rsquo;agit de recueillir les demandes des utilisateurs, de les valider, puis de planifier leur prise en compte en définissant des priorités et des moyens.</p>
<p>Dans une forge de développement, les principes du « bug tracker » sont généralisés à toute demande nécessitant une action et un pilotage de celle-ci. Qu&rsquo;il s&rsquo;agisse d&rsquo;une anomalie à corriger, d&rsquo;une tâche à accomplir ou d&rsquo;une simple échange d&rsquo;information, on peut tout suivre. Les utilisateurs peuvent donc exprimer leurs attentes et leurs remarques, l&rsquo;équipe de réalisation y répondre et les managers superviser ces dialogues, décider des priorités, planifier les travaux et s&rsquo;assurer de leur aboutissement.</p>
<h2>L&rsquo;approvisionnement</h2>
<p>Le code source est stocké et partagé dans un référentiel, dont la fonction est assurée par un système dit de « gestion de configuration ». Ce dernier ne se contente pas de sauvegarder le code de certaines versions identifiées mais va jusqu&rsquo;à conserver la totalité des évolutions qui ont eu lieu de manière à pouvoir retracer toutes les transformations, en comprendre la logique et si besoin opérer des retours en arrière. Le code source constitue ainsi la matière première entrant dans notre usine. A ce titre, le développeur n&rsquo;est pas un ouvrier mais un fournisseur qui vient déposer ce qu&rsquo;il a produit dans cet entrepôt.</p>
<p>D&rsquo;ailleurs, comme les applications reposent souvent sur des briques externes au projet, à commencer par les frameworks open source, il convient aussi d&rsquo;en organiser l&rsquo;approvisionnement. On dispose ainsi d&rsquo;un référentiel de bibliothèques, sorte d&rsquo;entrepôt de pièces détachées. Les briques logicielles réutilisables y sont soigneusement stockées par fournisseur et par version pour pouvoir en faire usage le moment venu.</p>
<h2>La chaîne de fabrication</h2>
<p>Selon les principes de l&rsquo;intégration continue, le processus de « build », se compose de plusieurs étapes automatisées et standardisées, de la compilation au packaging. Même la production de documentation peut s&rsquo;y soumettre.</p>
<p>A la fin de cette étape, on dispose au minimum d&rsquo;un exécutable fraîchement constitué à partir du dernier état du code source et des dépendances définies envers des bibliothèques externes, tout ceci étant issu des référentiels. Peuvent s&rsquo;y adjoindre d&rsquo;autres artefacts, comme la documentation ou une extraction du code source qui a servi à cette fabrication.</p>
<h2>Le contrôle qualité</h2>
<p>Au sein de la chaîne se glissent des phases de tests automatisés : des tests unitaires qui valident le fonctionnement individuel des composants, des tests d&rsquo;intégration qui vérifient leur bonne cohabitation, des tests de montée en charge qui simulent des situations extrêmes auxquelles l&rsquo;application pourra être confrontée pour contrôler la fiabilité et les performances.</p>
<p>A cela s&rsquo;ajoutent des audits de qualité automatiques basés sur des métriques et des règles de développement prédéfinies. C&rsquo;est ainsi qu&rsquo;en plus de vérifier la réponse à certaines attentes fonctionnelles, on évalue la qualité de la production, de quoi mettre au rebut le produit s&rsquo;il n&rsquo;est pas satisfaisant&#8230; Évidemment, un rapport détaillé permettra d&rsquo;identifier les problèmes et d&rsquo;initier des actions correctives pour la prochaine fabrication.</p>
<h2>La distribution</h2>
<p>Il ne suffit pas de produire des livrables encore faut-il les livrer&#8230; Que le destinataire soit un client final, l&rsquo;équipe d&rsquo;exploitation ou celle de réalisation pour usage interne, l&rsquo;objectif est de pouvoir retrouver facilement les artefacts en sachant à quelle version ils correspondent.</p>
<p>C&rsquo;est ainsi que ceux-ci sont stockés et classés dans des zones dédiées, avec une distinction entre les fichiers binaires et les documents. En complément, on peut même envisager un déploiement automatisé sur un serveur pour que le produit soit opérationnel sans aucune intervention extérieure.</p>
<h2>Le support</h2>
<p>Le support prend avant tout la forme d&rsquo;un « service après-vente » proposé aux utilisateurs. Ceux-ci peuvent remonter leurs remarques et poser leurs questions. Mais l&rsquo;activité concerne aussi les échanges internes au sein de l&rsquo;équipe projet, un développeur pouvant lui-même signaler un problème ou demander assistance à ses collègues.. Dans tous les cas, le support se concrétise par différents moyens de communication complémentaires. Le premier d&rsquo;entre eux est le « bug tracker » puisqu&rsquo;il va recueillir les questions et remarques puis donner un cadre aux réponses qui y seront apportées.</p>
<p>Ensuite, il y a des canaux moins formels, comme les forums de discussions ou les systèmes de messagerie instantanée. Leur caractère moins structuré favorise les échanges, le foisonnement d&rsquo;idées. Enfin, le wiki et la base documentaire permettent de centraliser les informations durablement tout en fluidifiant leur mise à jour et ce, par un maximum d&rsquo;intervenants.</p>
<h2>Bénéfices</h2>
<p>On le comprend, l&rsquo;usine de développement, fortement basée sur l&rsquo;automatisation des tâches, le travail collaboratif et la centralisation des communications, permet d&rsquo;éviter de nombreux écueils.</p>
<p>L&rsquo;enchaînement des tâches de construction et de contrôle étant automatisé, on a tout intérêt à l&rsquo;exécuter quotidiennement de manière à vérifier au jour le jour la qualité du code produit et à réaliser si besoin les actions correctives nécessaires. Ces dernières se font alors sans douleur puisqu&rsquo;elles concernent des portions de code limitées, bien identifiées et écrites récemment.</p>
<p>Comme le livrable est reconstruit tous les jours selon le même procédé, on peut montrer l’application à tout instant, demander l&rsquo;avis des utilisateurs régulièrement et constater très concrètement le travail accompli. La finalisation avant livraison n&rsquo;est plus une épreuve stressante mais le simple constat que les travaux sont terminés. Sur ce principe, on peut diffuser des évolutions très rapidement tout en limitant les risques. On dispose ainsi des moyens concrets d&rsquo;application des méthodes agiles.</p>
<p>Enfin, la systématisation des principes du tracker permet de recueillir les exigences, d&rsquo;arbitrer sur les priorités, de planifier les travaux et de suivre leur exécution à travers des tableaux de bord exhaustifs. Le wiki et les forums assurent la pérennité d&rsquo;informations complémentaires.</p>
<h1>Retour à la réalité</h1>
<p>Évidemment, la réalité est moins rose&#8230; Mais supposons qu&rsquo;une entreprise vive plutôt le scénario du cauchemar, que peut-elle faire concrètement pour se rapprocher de celui du rêve ? Existe-t-il une usine de développement telle que nous l&rsquo;avons décrite ?</p>
<h2>Les outils open source</h2>
<p>Commençons par une bonne nouvelle : les outils décrits dans notre rêve existent bel et bien. Deuxième bonne nouvelle : beaucoup sont même disponibles en tant que logiciels libres et peuvent donc être évalués et adoptés sans passer par la case achat.</p>
<p>Il serait difficile de passer tous ces outils en revue, mais une petite liste, non exhaustive, s&rsquo;impose :</p>
<ul>
<li>pour les fonctions de tracker : Mantis, Trac, BugZilla, Flyspray, Codendi&#8230;</li>
<li>pour le gestionnaire de code source : CVS, Subversion, Mercurial, Git&#8230;</li>
<li>pour le référentiel de bibliothèques : Nexus, Artifactory, Archiva&#8230;</li>
<li>pour le processus de build : Ant, Maven associés à Continuum, CruiseControl, Hudson ou Jenkins&#8230;</li>
<li>pour l&rsquo;audit de code et la qualimétrie : XRadar, QALab, Maven Dashboard Report, Squale, Sonar&#8230;</li>
<li>pour les forums de discussion : phpBB, SMF, MyBB, Vanilla, vBulletin&#8230;</li>
<li>pour le wiki : XWiki, MoinMoin, DokuWiki, MediaWiki, PhpWiki&#8230;</li>
</ul>
<p>Bref, il y a de quoi trouver son bonheur. Malheureusement, on pressent que malgré l&rsquo;accès libre et gratuit à tous ces logiciels, un effort conséquent s&rsquo;avère nécessaire avant de disposer de l&rsquo;usine de développement dans son ensemble. En effet, il va falloir choisir les outils en veillant à ce qu&rsquo;ils puissent cohabiter, puis pour chaque outil l&rsquo;installer, le paramétrer et plus tard l&rsquo;administrer en réalisant les sauvegardes et les mises-à-jour. En outre, ces différents éléments vont avoir du mal à communiquer entre eux, ce qui va quand même limiter l&rsquo;efficacité de la démarche. Il suffit d&rsquo;imaginer que la création d&rsquo;un nouveau projet ou l&rsquo;enregistrement d&rsquo;un nouvel utilisateur va demander des actions dans une petite dizaine d&rsquo;outils pour comprendre qu&rsquo;on est loin de l&rsquo;idéal.</p>
<h2>Les solutions intégrées</h2>
<p>Avec le constat qui vient d&rsquo;être fait, le besoin d&rsquo;une solution globale apparaît évident. Celles-ci existent, en particulier chez les grands éditeurs : IBM Rational Team Concert, Microsoft Team Foundation Server, Oracle Team Productivity Center, Borland StarTeam&#8230;</p>
<p>Ce sont des solutions dites d&rsquo;ALM (« Application Lifecycle Management »). Évidemment, ce sont des outils monolithiques, spécifiques car fortement propriétaires et plutôt coûteux. Choisir une telle solution peut être pertinent mais c&rsquo;est un investissement lourd qui sous-entend un choix durable et généralisé, avec une dépendance forte envers l&rsquo;éditeur concerné. La marche est donc haute et elle n&rsquo;est probablement pas adaptée à tous les contextes. Force est de constater que les entreprises qui se sont dotées d&rsquo;une suite ALM de ce type sont encore très minoritaires.</p>
<h2>L&rsquo;approche pragmatique</h2>
<p>Le salut vient sans doute d&rsquo;une voie intermédiaire. Elle repose sur l’existence de solutions intégrées, elles-mêmes basées sur les outils open source déjà évoqués. Ainsi, il est possible d&rsquo;aborder des pratiques et des outils qui à défaut d&rsquo;être des standards sont tout de même très répandus. Cela permet de reprendre facilement un existant éventuel, de rester ouvert aux évolutions rapides de ces logiciels, aux futurs formats d&rsquo;échanges et à des outils complémentaires. Enfin, leur coût se révèle nettement moins élevé que les solutions lourdes des grands éditeurs.</p>
<p>On commence à voir apparaître de telles usines de développement clé en main. Dans ce cadre, l&rsquo;essentiel du produit est en open source mais on peut aussi bénéficier d&rsquo;un accompagnement professionnel notamment pour le support. On dispose ainsi d&rsquo;une solution qui permet une mise en place de l&rsquo;usine de développement avec « agilité », de manière progressive et ouverte. En complément, certains en proposent même l&rsquo;hébergement dans le cloud pour un accès en mode SAAS de manière à disposer des bienfaits sans avoir à supporter l&rsquo;infrastructure et les tâches d&rsquo;administration. Ainsi le rêve devient même abordable pour les sociétés aux moyens modestes. Bien sûr, l&rsquo;outillage ne règle pas tout. Pour être efficace, il doit être associé à une volonté et une organisation adaptées mais c&rsquo;est là la preuve qu&rsquo;on est bien dans le réel.</p>
<table>
<tr>
<td><em><strong>Improve Factory</strong> est la solution d&rsquo;usine de développement d&rsquo;Open Wide Technologies. Basée sur des outils reconnus tels que Redmine, Subversion, Maven, Hudson, Sonar, et Nexus, elle fait la part belle à l&rsquo;open source tout en proposant un niveau d&rsquo;intégration qui permet d&rsquo;être opérationnel très rapidement ainsi qu&rsquo;un accompagnement professionnel. <strong>Improve Factory</strong> est disponible en 3 offres : bundle installable, serveur infogéré et cloud. Pour en savoir plus : <a title="www.improve-foundations.com" href="http://www.improve-foundations.com">www.improve-foundations.com</a>.</em></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2012/06/29/%ef%bb%bfl%e2%80%99usine-de-developpement-du-cauchemar-a-la-realite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Panorama des moteurs BPM/workflow open source</title>
		<link>http://www.improve-technologies.com/2012/06/27/panorama-des-moteurs-bpmworkflow-open-source/</link>
		<comments>http://www.improve-technologies.com/2012/06/27/panorama-des-moteurs-bpmworkflow-open-source/#comments</comments>
		<pubDate>Wed, 27 Jun 2012 13:26:42 +0000</pubDate>
		<dc:creator>jdenanot</dc:creator>
				<category><![CDATA[Analyse et veille technologique]]></category>
		<category><![CDATA[Activiti]]></category>
		<category><![CDATA[Bonita]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Intalio]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jBpm]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/blog/?p=191</guid>
		<description><![CDATA[Dans cet article nous allons dresser un panorama du domaine BPM (Business Process Management) : les enjeux, les normes et les acteurs, en privilégiant les solutions open source. Après un premier tour d&#8217;horizon, nous comparerons certaines de ces solutions d&#8217;après <a href="http://www.improve-technologies.com/2012/06/27/panorama-des-moteurs-bpmworkflow-open-source/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dans cet article nous allons dresser un panorama du domaine BPM (Business Process Management) : les enjeux, les normes et les acteurs, en privilégiant les solutions open source. Après un premier tour d&rsquo;horizon, nous comparerons certaines de ces solutions d&rsquo;après une mise en oeuvre pratique. Il s&rsquo;agira ici de dégager une première impression, l&rsquo;article et le comparatif ne se voulant pas exhaustifs et étant implicitement guidés par nos besoins d&rsquo;intégration à la plate-forme <a title="Improve Foundations" href="http://www.improve-foundations.com">Improve Foundations</a>.<br />
<strong> </strong></p>
<p><strong>Historique et solutions</strong></p>
<p>Les solutions BPM, précédemment limitées au contexte BI, et donc à des applications types basées sur l&rsquo;affectation de tâches, s&rsquo;étendent aujourd&rsquo;hui à d&rsquo;autres domaines pour lesquels la notion de process est identifiable. Mais surtout, elles s&rsquo;intègrent à des offres plus larges, comportant ESB et portails.</p>
<p>On distingue deux approches parmi ces solutions :</p>
<ul>
<li>celles orientées développeur, avec un accès privilégié aux fonctionnalités du moteur BPM par programmation</li>
<li>celles orientées utilisateur fonctionnel, avec un accès limité au runtime et l&rsquo;utilisation d&rsquo;éditeurs propriétaires pour la définition et la gestion des processus.</li>
</ul>
<p>Dans les deux cas, des applications dédiée sont souvent proposées pour administrer les tâches créées par le moteur de workflow, cependant on préférera généralement l&rsquo;intégration directe dans une application métier (utilisation de formulaires personnalisés définis par cette application cible).</p>
<p>La solution open source de référence était jusqu&rsquo;à présent <em><strong><a title="jBpm" href="www.jboss.org/jbpm">jBPM</a></strong></em> de JBoss, dont les créateurs originaux sont cependant partis pour lancer une nouvelle solution, <em><strong><a href="http://activiti.org">Activiti</a></strong></em>. La version jBPM5 est donc davantage une nouvelle branche, jBPM4 étant lui directement à la base d&rsquo;Activti. A travers la nouvelle version de jBPM, JBoss tente de se différencier en promouvant l&rsquo;intérêt de l&rsquo;intégration de sa solution avec un moteur de règles (Drools), arguant qu&rsquo;une solution BPM sans cette fonctionnalité n&rsquo;est pas concevable. S&rsquo;ensuit une compétition sur plusieurs forums de discussion, dont celui-ci est représentatif :</p>
<p><a href="http://salaboy.com/2011/01/19/jbpm5-vs-activiti5-dumb-question/#more-1534">http://salaboy.com/2011/01/19/jbpm5-vs-activiti5-dumb-question/#more-1534</a></p>
<p><strong><em><a title="Bonita" href="http://fr.bonitasoft.com/">Bonita</a></em></strong>, initialement développé par Bull et à présent proposé par la nouvelle société Bonita Soft, est logiquement à mi chemin entre open source et commercial, préférant contraindre à utiliser ses éditeurs graphiques (qui gèrent jusqu&rsquo;à la création des formulaires) et limiter l&rsquo;accès libre au runtime, afin d&rsquo;inciter à l&rsquo;utilisation de compléments qui ne sont pas en open source.</p>
<p>Enfin on trouve des solutions dont l&rsquo;orientation est plus fortement commerciale, comme <em><strong><a href="http://www.intalio.com">Intalio</a></strong></em>, dont la version gratuite community edition est particulièrement limitée. Une telle solution est finalement plus élégante que Bonita, mais chère comparée à Activiti et jBPM (à noter que JBoss cherche à intégrer jBPM à son offre de services globale, payante).</p>
<p>Comme elles représentent déjà un panel assez varié, nous nous sommes contentés d&rsquo;évaluer ces 4 solutions, même s&rsquo;il en existe d&rsquo;autres : Orchestra du consortium OW2, équivalent d&rsquo;Activiti mais orienté principalement vers le serveur Jonas, Enhydra Shark, plus limité dans sa version community (gratuite, LGPL) et proposé avec des extensions et outils supplémentaires dans une version payante par Together (se positionne commercialement entre Bonita et Intalio), et enfin Process Maker, en licence GPL et technologie PHP.</p>
<p><strong>Notion de tâche</strong></p>
<p>Un worklow BPM est basé sur deux types de tâches :</p>
<ul>
<li>des tâches automatiques : elles sont déclenchées lors du parcours de transitions du workflow (celui-ci peut comporter des conditions et des branchements – exécutions en parallèles et jonctions). Les étapes consistent typiquement en l&rsquo;appel de services métiers. Elles correspondent au principe d&rsquo;un automate.</li>
<li>des tâches utilisateur : il s&rsquo;agit d&rsquo;étapes nécessitant une action d&rsquo;un utilisateur (soumission d&rsquo;informations, choix). Ces étapes suspendent donc l&rsquo;exécution (ou une branche) du workflow. Elles sont adaptées aux applications utilisant la notion de corbeille de tâches (réponse asynchrone).</li>
</ul>
<p>Afin d&rsquo;implémenter les tâches utilisateur, les moteurs de workflow sont souvent associés à un ESB, afin de disposer directement de connecteurs asynchrones.</p>
<p><strong>Normes et standards</strong></p>
<p>Le domaine BPM/workflow est basé sur des standards pour la définition de processus, d&rsquo;enchaînement de processus et pour l&rsquo;expression de tâches utilisateur (<em>user tasks</em>) :</p>
<p><span style="text-decoration: underline;">BPMN</span> : langage de description de processus (uniquement leur exécution). Les outils étudiés gèrent la norme BPMN 2.0.</p>
<p><span style="text-decoration: underline;">BPEL</span> : langage issu de WSFL (Web Services Flow Language) et XLANG permettant de décrire l&rsquo;enchaînement de services asynchrones, ici des webservices dont les actions issues de leur WSDL sont liées aux processus.</p>
<p><span style="text-decoration: underline;">XPDL</span> : format défini par le Workflow Management Coalition (WfMC) afin d&rsquo;échanger des définitions de processus/workflow (à la fois description de l&rsquo;exécution et description graphique des diagrammes contrairement à BPEL).</p>
<p><span style="text-decoration: underline;"><a href="http://incubator.apache.org/hise/WS-HumanTask_v1.pdf">WS-Human Task</a></span> : norme pour la définition des tâches utilisateur.</p>
<p><span style="text-decoration: underline;"><a href="http://docs.jboss.com/jbpm/pvm/article/">PVM</a></span> (Process Virtual Machine) définit un moteur de workflow indépendant du langage de description</p>
<p>L&rsquo;idée derrière PVM est de permettre le choix d&rsquo;un DSL (<em>Domain Specific Language</em>, langage adapté à une problématique particulière) pour chaque aspect (description de processus, description de navigation, mapping O/R, règles, grammaires).</p>
<p><strong>Comparatif</strong></p>
<p>Les informations issues des sites des projets et de divers forums utilisateurs permettent une première analyse, théorique, qui devra être confirmée par la pratique :</p>
<p><a href="http://www.improve-technologies.com/blog/wp-content/uploads/2012/04/comparatif.png"><img class="alignright size-large wp-image-207" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/04/comparatif-1024x604.png" alt="" width="610" height="359" /></a></p>
<p>De ces informations ont peut tirer la synthèse suivante  :</p>
<p><a href="http://www.improve-technologies.com/blog/wp-content/uploads/2012/04/comp_synthese1.png"><img class="alignright size-full wp-image-211" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/04/comp_synthese1.png" alt="" width="771" height="338" /></a></p>
<p>Notes : 1 (très limité), 2 (limité), 3 (moyen), 4 (bon), 5 (excellent)</p>
<p>Activiti, bien que récent, capitalise sur l&rsquo;expérience acquise avec les versions précédentes de jBPM. Il bénéficie d&rsquo;un intérêt plus soutenu de la part des utilisateurs du fait de son activité et de la renommée de ses créateurs dans le domaine. Enfin, contrairement à jBPM, son orientation purement open source est claire (pas de monétisation de solution de services).</p>
<p>Bonita, qui possède une longue expérience et des fonctionnalités/interopérabilité meilleures (comparé à jBPM et Activiti – mais de même niveau que Intalio), prend une orientation commerciale (limitations de la version community), mais évidemment pas encore au point d&rsquo;Intalio.</p>
<p><strong>En pratique : Activiti vs Bonita</strong></p>
<p>Afin d&rsquo;affiner le premier comparatif issu des caractéristiques et des divers retours trouvés sur internet, un prototype a été réalisé, en utilisant tout d&rsquo;abord Activiti (une version jBPM aurait été similaire, du fait qu&rsquo;Activiti est dérivé de jBPM 4, pour ce cas n&rsquo;utilisant pas de règles) puis Bonita (approche orientée métier et présenté comme utilisable sans licence commerciale).</p>
<p>L&rsquo;application prototype met en oeuvre un workflow de gestion d&rsquo;anomalies :</p>
<ul>
<li>soumission d&rsquo;une anomalie par un utilisateur du groupe <em>reporters</em> (soumission d&rsquo;un 	formulaire qui correspond à l&rsquo;étape initiale d&rsquo;une instance de processus).</li>
<li>accès à la liste de tâches de type <em>review </em>(analyse/pré-validation) des soumissions d&rsquo;anomalie, et 	validation (avec informations complémentaires) ou rejet par des utilisateurs du groupe <em>reviewer</em>.</li>
<li>accès à la liste des tâches de type <em>resolve </em>(anomalie à résoudre) et soumission d&rsquo;un formulaire pour clôturer un bug corrigé par les utilisateurs du groupe <em>developers </em>(les tâches pour ce groupe sont créées par la validation des tâches de type <em>review </em>par les utilisateurs du groupe <em>reviewers</em>).</li>
</ul>
<p style="text-align: center;"><a href="http://www.improve-technologies.com/blog/wp-content/uploads/2012/05/diagramme.gif"><img class="size-full wp-image-322 aligncenter" title="diagramme" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/05/diagramme.gif" alt="" width="771" height="183" /></a></p>
<p>Afin de tester la facilité d&rsquo;intégration des solutions avec des frameworks applicatifs existants (notamment pour les formulaires de saisie), les solutions <a href="http://struts.apache.org">Struts</a> et <a href="http://www.improve-technologies.org/struts-layout">Struts Layout</a> ont été utilisées (les objets ActionForm représentant les propriétés saisies dans les formulaires utilisateur<em> </em>).</p>
<p>L&rsquo;étude préalable a été volontairement réduite (lecture du premier chapitre de <a href="http://www.manning.com/rademakers2/">Activiti in action</a> et recherche dans quelques forums sur internet pour Activiti, documentation fournie et forums internet pour Bonita) afin d&rsquo;évaluer l&rsquo;intuitivité des deux approches et la présence d&rsquo;informations nécessaires pour accéder au runtime.</p>
<p><strong>Activiti</strong></p>
<p>Orienté développeur, Activiti propose des services techniques pour soumettre les propriétés de <em>user tasks forms</em> ou rechercher des tâches (créées par le moteur de workflow) à partir de critères (groupe d&rsquo;affectation, etc.) :</p>
<ul>
<li>RuntimeService : permet de créer une instance de processus d&rsquo;après son identifiant de définition (précisé dans le fichier xml à la norme BPMN 2), et rechercher des instances d&rsquo;un processus.</li>
<li>FormService :soumet les propriétés (valeurs des champs) du formulaire associé à l&rsquo;étape initiale (<em>start event</em>), ou soumet les propriétés d&rsquo;un formulaire associé à une <em>user task</em>.</li>
<li>TaskService : permet de recherche des tâches suivant des critères.</li>
</ul>
<p>Descripteur de processus</p>
<pre>&lt;process id="bugReport" name="Bug reporting process"&gt;

&lt;startEvent id="submitBugReport" activiti:formKey="submitBugReportForm"&gt;
 &lt;extensionElements&gt;
  &lt;activiti:formProperty id="project" /&gt;
  &lt;activiti:formProperty id="version" /&gt;
  &lt;activiti:formProperty id="summary" /&gt;
 &lt;/extensionElements&gt;
&lt;/startEvent&gt;

&lt;sequenceFlow sourceRef="submitBugReport" targetRef="reviewBugReport"/&gt;

&lt;userTask id="reviewBugReport" name="Review bug report" activiti:candidateGroups="reviewers" activiti:formKey="updateBugReportForm"&gt;
 &lt;extensionElements&gt;
  &lt;activiti:formProperty id="project" /&gt;
  &lt;activiti:formProperty id="version" /&gt;
  &lt;activiti:formProperty id="summary" /&gt;
  &lt;activiti:formProperty id="priority" /&gt;
  &lt;activiti:formProperty id="taskId" /&gt;
  &lt;activiti:formProperty id="result" /&gt;
 &lt;/extensionElements&gt;
&lt;/userTask&gt;

&lt;sequenceFlow sourceRef="reviewBugReport" targetRef="reviewResultExclusiveBranch"/&gt;

&lt;exclusiveGateway id="reviewResultExclusiveBranch" /&gt;
&lt;sequenceFlow sourceRef="reviewResultExclusiveBranch" targetRef="resolveBugReport"&gt;&lt;conditionExpression&gt;${result == 'accepted'}&lt;/conditionExpression&gt;
&lt;/sequenceFlow&gt;
&lt;sequenceFlow sourceRef="reviewResultExclusiveBranch" targetRef="theEnd"&gt;
 &lt;conditionExpression&gt;${result == 'rejected'}&lt;/conditionExpression&gt;
&lt;/sequenceFlow&gt;

&lt;userTask id="resolveBugReport" name="Resolve bug report" activiti:candidateGroups="developers" activiti:formKey="resolveBugReportForm"&gt;
 &lt;extensionElements&gt;
  &lt;activiti:formProperty id="project" /&gt;
  &lt;activiti:formProperty id="version" /&gt;
  &lt;activiti:formProperty id="summary" /&gt;
  &lt;activiti:formProperty id="priority" /&gt;
  &lt;activiti:formProperty id="resolution" /&gt;
 &lt;/extensionElements&gt;
&lt;/userTask&gt;

&lt;sequenceFlow sourceRef="resolveBugReport" targetRef="theEnd"/&gt;

&lt;endEvent id="theEnd"/&gt;

&lt;/process&gt;</pre>
<p><span style="text-decoration: underline;">Start event / process instances / tasks</span></p>
<p>Le start event, étape initiale d&rsquo;un worklfow Activiti, correspond à une tâche utilisateur particulière : celle-ci ne génère pas de tâche, mais suspend uniquement le workflow (en attente de soumission du formulaire correspondant). De plus l&rsquo;instance de processus n&rsquo;est créée qu&rsquo;au moment de la transition depuis cette étape (donc après soumission du formulaire initial, ici création d&rsquo;une entrée <em>bug report</em>) vers l&rsquo;étape suivante (via un service technique Activiti appelé dans l&rsquo;action Struts).</p>
<p><a href="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/submitBug.gif"><img class="alignright size-full wp-image-324" title="submitBug" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/submitBug.gif" alt="" width="771" height="183" /></a></p>
<p>L&rsquo;étape suivante, de type <em>user tasks</em>, crée une tâche (de type <em>review</em>) en mémoire pour l&rsquo;instance de process précédente, et suspend ce dernier jusqu&rsquo;à soumission du <em>review form</em> correspondant par un <em>reviewer </em>(après sélection de la tâche de type <em>review </em>en attente dans la liste des tâches de type review &#8211; voir ci-dessous) :</p>
<p><a href="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/bugReviews1.gif"><img class="alignright size-full wp-image-327" title="bugReviews" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/bugReviews1.gif" alt="" width="771" height="183" /></a></p>
<p>Le formulaire <em>review </em>permet au <em>reviewer </em>d&rsquo;ajouter des informations/préciser la demande et accepter (orienter le traitement vers l&rsquo;équipe développeurs) ou rejeter le bug report (on utilise des instructions conditionnelles dans la définition du workflow en fonction de paramètres résultats de la task form/données soumises – accès direct à l&rsquo;événement de fin du workflow si rejet).</p>
<p><a href="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/bugReview.gif"><img class="alignright size-full wp-image-328" title="bugReview" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/bugReview.gif" alt="" width="771" height="211" /></a></p>
<p>Si le <em>reviewer </em>valide le <em>bug report</em> (tâche <em>review </em>correspondante complétée et <em>user task form</em> terminée), la transition suivante déclenche/génère une instance de <em>user task resolve bug</em>, affectée au groupe <em>developers</em>.</p>
<p>La documentation trouvée est peu claire/précise sur la distinction entre définition de process (<em>process definition key</em>) et de tâches et instances de celles-ci. Il faut également bien considérer que par défaut les processus persistent en mémoire.</p>
<p>Deux problèmes ont été rencontrés lors du développement du prototype :</p>
<ul>
<li>création d&rsquo;instance de processus additionnelle lors de soumission de start form : un second process est listé dans la liste des taches bug review (l&rsquo;un avec les données saisies valorisées, l&rsquo;autre sans les données). En fait la soumission des propriétés d&rsquo;un formulaire associé au start event démarre un nouveau process, on ne doit pas démarrer explicitement le processus auparavant.</li>
<li>problème pour terminer une tâche : le taskService ne trouve pas la tâche dont on passe l&rsquo;id, récupéré pourtant via le service de recherche de tâches, et qui doit donc logiquement correspondre à un id d&rsquo;instance de tâche existante. Les tâches utilisateurs ne doivent en fait pas être terminées explicitement, elles le sont implicitement (passage à l&rsquo;étape suivante) lors de la soumission des propriétés du formulaire associé.</li>
</ul>
<p><strong>Bonita</strong></p>
<p>Le runtime Bonita fournit des services techniques similaires à Activiti :</p>
<ul>
<li>ManagementAPI : permet de lire et déployer une archive business (fichier BAR contenant une définition de processus créé et exporté depuis l&rsquo;éditeur Bonita Studio – voir plus loin).</li>
<li>RuntimeAPI :  	permet d&rsquo;instancier un processus depuis l&rsquo;id de sa définition dans l&rsquo;archive BAR (fichier process-def.xml de l&rsquo;archive), et renvoie l&rsquo;uuid de l&rsquo;instance de process créée. Permet également d&rsquo;affecter une tâche à un utilisateur et exécuter une tâche (pas automatique comme avec Activiti).</li>
<li>QueryRuntimeAPI : permet de récupérer des tâches selon leur état.</li>
</ul>
<p>Bonita ne fournit pas d&rsquo;informations détaillées sur la syntaxe de la définition de processus (fichier process-def.xml de l&rsquo;archive BAR), ce qui est logique du fait que le mode de développement prévu est d&rsquo;utiliser l&rsquo;éditeur Bonita Studio pour les définir. En tous les cas la syntaxe n&rsquo;est pas homogène avec celle d&rsquo;Activiti. On s&rsquo;attendait portant à une description normée, avec uniquement des extensions spécifiques à l&rsquo;éditeur pour la définition des propriétés des formulaires utilisateur.</p>
<p>Activiti étant orienté développeurs (même s&rsquo;il propose également des éditeurs) et Bonita étant orienté davantage utilisateurs (même si il propose donc des API runtime), on considérera que l&rsquo;étape d&rsquo;export du fichier BAR n&rsquo;est pas une limitation pour cette comparaison (même si elle a constitué un point de blocage initial dans la mise en oeuvre du prototype).</p>
<p>Dans la pratique (adaptation du prototype Activiti pour le runtime Bonita)  on note cependant les limites suivantes par rapport au runtime Activiti :</p>
<ul>
<li>La documentation et les discussions sur les forums sont plus limitées.</li>
<li>La user task/start event initiale (soumission de bug) n&rsquo;est pas créée automatiquement et le workflow ne génère pas de user task review après soumission de formulaire : il est en effet précisé que si on utilise le runtime Bonita uniquement (donc sans passer par l&rsquo;éditeur de formulaire de Bonita Studio) les tâches utilisateur doivent être démarrées explicitement via runtimeAPI.executeTask(taskId).</li>
</ul>
<p><a href="http://www.bonitasoft.org/blog/tutorial/building-your-applications-with-bonita-runtime-%E2%80%93-part-3/">http://www.bonitasoft.org/blog/tutorial/building-your-applications-with-bonita-runtime-%E2%80%93-part-3/</a></p>
<ul>
<li>pas de fonctionnalité/service runtime pour la soumission de données de formulaires associés à des user task (uniquement si définis via l&rsquo;éditeur de formulaire). L&rsquo;utilisation de variables d&rsquo;éxecution de processus est nécessaire.</li>
</ul>
<ul>
<li>possibilité de spécifier des URL externes pour les formulaires (sinon générés) depuis Bonita Studio ; cependant, en plus d&rsquo;être complexe, cette option redirectToUrl n&rsquo;est pas proposée dans la version community 5.6.2 mais seulement dans la version Teamwork subscription pack, payante :</li>
</ul>
<p><a href="http://www.bonitasoft.com/resources/documentation/bos-56/web-applications/use-process-instantiation-form">http://www.bonitasoft.com/resources/documentation/bos-56/web-applications/use-process-instantiation-form</a></p>
<p><a href="http://www.bonitasoft.com/resources/documentation/bos-56/web-applications">http://www.bonitasoft.com/resources/documentation/bos-56/web-applications</a></p>
<p><a href="http://www.bonitasoft.com/resources/documentation/bos-56/web-applications/redirect-form-page-external-url-sp">http://www.bonitasoft.com/resources/documentation/bos-56/web-applications/redirect-form-page-external-url-sp</a></p>
<p><a href="http://www.bonitasoft.com/products/product-comparison">http://www.bonitasoft.com/products/product-comparison</a></p>
<p>L&rsquo;orientation de BonitaSoft semble donc avoir évolué depuis cet article : <a href="http://jduchess.org/duchess-france/blog/soiree-bpm-au-lyon-jug-%E2%80%93-rencontre-avec-mickael-istria/">http://jduchess.org/duchess-france/blog/soiree-bpm-au-lyon-jug-%E2%80%93-rencontre-avec-mickael-istria/</a></p>
<p><em>« le BPM est généralement quelque chose d’onéreux, que les concurrents propriétaires vendent à coup des dizaines de milliers de dollars minimum. Si bien que Bonita offre aux organisations la possibilité d’évaluer gratuitement, simplement et sans engagement le BPM avant de se lancer dans l’aventure et d’investir pour obtenir un support professionnel et accéder à des fonctionnalités additionnelles de productivité et d’industrialisation des déploiements »</em></p>
<p>La réalisation de la version Bonita du prototype dans les mêmes conditions (réutilisation des formulaires Struts existants, pas de licence additionnelle) n&rsquo;a donc pas été possible.</p>
<p><strong>Conclusion</strong></p>
<p>Dans l&rsquo;ensemble l&rsquo;utilisation des solutions BPM/workflows étudiées n&rsquo;est pas homogène, alors qu&rsquo;on s&rsquo;attendait à une approche systématique grâce aux nombreuses normes et standards mis en oeuvre. De plus les notions d&rsquo;instances de processus et de tâches qui constituent les principes de base ne sont pas suffisamment expliqués, d&rsquo;autant que la terminologie retenue par les outils ne coule pas de source.</p>
<p>Activiti semble plus intuitif. Les exemples fournis et les APIs permettent de définir, gérer, et intégrer un workflow à une application existante de manière immédiate, et sans limitation. Il est donc bien orienté développeur, pour intégration notamment à un framework existant. Bonita peut être envisagé dans le cadre d&rsquo;une intégration plus large (moins spécifique) de l&rsquo;ensemble des outils fournis par BonitaSoft (pouvant alors justifier une souscription).</p>
<p>De manière générale les informations et discussions sur internet pour les deux solutions mises en oeuvre sont encore limitées et ne couvrent pas encore l&rsquo;ensemble des questions basiques, ce qui constitue un frein à leur adoption dans une approche pure open source.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2012/06/27/panorama-des-moteurs-bpmworkflow-open-source/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Improve Factory &#8211; Usine de développement Java</title>
		<link>http://www.improve-technologies.com/2012/06/22/usine-developpement-jav/</link>
		<comments>http://www.improve-technologies.com/2012/06/22/usine-developpement-jav/#comments</comments>
		<pubDate>Fri, 22 Jun 2012 13:03:31 +0000</pubDate>
		<dc:creator>David DUQUENNE</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[Improve Foundations]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[DSI]]></category>
		<category><![CDATA[forge de développement]]></category>
		<category><![CDATA[forge Java]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[Improve Factory]]></category>
		<category><![CDATA[intégration continue]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Factory]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[productivité]]></category>
		<category><![CDATA[Redmine]]></category>
		<category><![CDATA[simplicité]]></category>
		<category><![CDATA[socle applicatif]]></category>
		<category><![CDATA[socle technique]]></category>
		<category><![CDATA[stratégie]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[Tests unitaires]]></category>
		<category><![CDATA[usine de développement]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/blog/?p=306</guid>
		<description><![CDATA[Issue des meilleures pratiques de l’Open Source, Improve Factory est une forge de développement Java adaptée au contexte des DSI. Elle centralise les informations clefs du projet sous la forme de tableaux de bord et de référentiels de codes et <a href="http://www.improve-technologies.com/2012/06/22/usine-developpement-jav/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-310" title="Improve Factory" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/IFy-Logo1.jpg" alt="" width="187" height="64" /> <strong>Issue des meilleures pratiques de l’Open Source, Improve Factory est une forge de développement Java adaptée au contexte des DSI. Elle centralise les informations clefs du projet sous la forme de tableaux de bord et de référentiels de codes et de documents.</strong></p>
<p>La forge Improve Factory intègre aussi un processus d’intégration continue permettant de compiler, tester et déployer un ou plusieurs projets. Ce processus s’exécute chaque nuit afin de qualifier et d’intégrer les développements réalisés dans la journée. Elle permet aussi une gestion agile des projets en intégrant les outils respectant la méthode agile Scrum.</p>
<p>La forge Improve Factory se décline en plusieurs offres :</p>
<h3><strong>DevBundle</strong> : Une forge personnalisée</h3>
<p>Cette offre permet de télécharger la forge Improve Factory. Il est alors possible de personnaliser son installation sur ses propres serveurs de développement. Une souscription annuelle permet d’accéder à un support en ligne et aux mises à jour régulières.</p>
<h3><strong>DevServer</strong> : Une forge clef-en-main</h3>
<p>Cette offre propose de louer la forge Improve Factory pour la durée des projets (bail mensuel). La forge est installée dans ses locaux sur un serveur de développement dédié. Ce serveur est fourni clef-en-main et infogéré par l’équipe de support (à distance ou sur site).</p>
<h3><strong>DevCloud</strong> : Une forge mutualisée</h3>
<p>Cette offre propose d’utiliser, via un accès Internet sécurisé, une version mutualisée de la forge Improve Factory. Un abonnement mensuel (fonction du nombre de développeurs inscrits) permet d’héberger, sur les serveurs sécurisés d’Open Wide Technologies, les projets réalisés par des équipes réparties.</p>
<h2>A propos d’Open Wide Technologies</h2>
<p>Filiale du groupe Open Wide, un des leaders français du logiciel libre, la société Open Wide Technologies développe et distribue :</p>
<ul>
<li>La forge de développement <strong>Improve Factory</strong>, une intégration de solutions Open Source pour le pilotage et l’intégration continue des projets de développement d’applications en Java.</li>
<li>La plateforme <strong>Improve Foundations</strong>, une distribution opérationnelle de composants Open Source dédiée au développement et à l&rsquo;industrialisation de projets en langage Java.</li>
</ul>
<h2>Pour plus d’informations :</h2>
<p>http://www.improve-foundations.com/produits/improve-factory/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2012/06/22/usine-developpement-jav/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improve Foundations et EasySOA à Solutions Linux le 20 juin 2012</title>
		<link>http://www.improve-technologies.com/2012/06/15/improve-foundations-et-easysoa-a-solutions-linux-le-20-juin-2012/</link>
		<comments>http://www.improve-technologies.com/2012/06/15/improve-foundations-et-easysoa-a-solutions-linux-le-20-juin-2012/#comments</comments>
		<pubDate>Fri, 15 Jun 2012 17:16:48 +0000</pubDate>
		<dc:creator>David DUQUENNE</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[Improve Foundations]]></category>
		<category><![CDATA[Conférence]]></category>
		<category><![CDATA[industrialisation]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[productivité]]></category>
		<category><![CDATA[socle applicatif]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/blog/?p=294</guid>
		<description><![CDATA[Débats, retours d&#8217;expérience Improve Foundations et aperçu du futur EasySOA 0.4 à Paris &#8211; la Défense, le mercredi 20 juin 2012. Venez débattre sur l&#8217;avenir de l&#8217;Open Source aux Assises le matin, bénéficier des retours d&#8217;expérience de gouvernance et modernisation <a href="http://www.improve-technologies.com/2012/06/15/improve-foundations-et-easysoa-a-solutions-linux-le-20-juin-2012/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/06/logo_SLOS.gif" alt="" title="Solutions Linux" width="164" height="90" class="alignleft size-full wp-image-295" /><br /><strong>Débats, retours d&rsquo;expérience <a href="http://www.improve-foundations.com" target="_blank">Improve Foundations</a> et aperçu du futur <a href="http://www.easysoa.org/" target="_blank">EasySOA</a> 0.4 à Paris &#8211; la Défense, le mercredi 20 juin 2012.</strong></p>
<p></p>
<p>Venez <a href="http://www.solutionslinux.fr/animation_74_2456_2813_p.html?cid=1320" target="_blank">débattre sur l&rsquo;avenir de l&rsquo;Open Source aux Assises</a> le matin, bénéficier des <a href="http://www.solutionslinux.fr/animation_82_168_2460_p.html?cid=1355" target="_blank">retours d&rsquo;expérience de gouvernance et modernisation</a> avec <a href="http://www.improve-foundations.com" target="_blank">Improve Foundations</a> à midi et voir l&rsquo;après-midi dans le <a href="http://www.solutionslinux.fr/animation_2_2815_p.html?cid=1395" target="_blank">cycle OW2</a> un aperçu en avant-première du futur <a href="http://www.easysoa.org/" target="_blank">EasySOA</a> 0.4 et <a href="http://www.easysoa.org/2012/06/previewing-solutions-linux-2012/" target="_blank">encore plus</a> avec les experts Open Wide et leurs partenaires.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2012/06/15/improve-foundations-et-easysoa-a-solutions-linux-le-20-juin-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intégration Continue &amp; Qualité &#8211; Petit Déjeuner le 19 juin 2012</title>
		<link>http://www.improve-technologies.com/2012/05/24/integration_continue_et_qualite/</link>
		<comments>http://www.improve-technologies.com/2012/05/24/integration_continue_et_qualite/#comments</comments>
		<pubDate>Thu, 24 May 2012 15:23:07 +0000</pubDate>
		<dc:creator>David DUQUENNE</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/blog/?p=264</guid>
		<description><![CDATA[Inscrivez-vous gratuitement au petit déjeuner le mardi 19 juin 2012 de 8h30 à 11h chez Open Wide Technologies 23-27 rue Daviel &#8211; 75013 Paris. Malgré un environnement de développement Java devenu plus mature, déployer une chaîne d&#8217;intégration continue, organiser une <a href="http://www.improve-technologies.com/2012/05/24/integration_continue_et_qualite/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.improve-foundations.com/inscription/?utm_source=inscription&amp;utm_medium=blog&amp;utm_campaign=IFY"><img src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/05/if_inscription.jpg" alt="" title="Inscription gratuite" width="147" height="66" class="alignleft size-full wp-image-277" /></a><strong>Inscrivez-vous gratuitement au petit déjeuner <br />le mardi 19 juin 2012 de 8h30 à 11h chez <br />Open Wide Technologies <br />23-27 rue Daviel &#8211; 75013 Paris.</strong></p>
<p>Malgré un environnement de développement Java devenu plus mature, déployer une <strong>chaîne d&rsquo;intégration continue</strong>, organiser une <strong>gestion des tests unitaires</strong>, sécuriser le <strong>suivi des versions</strong> ou assurer une <strong>mesure continue de la qualité</strong> restent des opérations complexes.</p>
<p>Plus largement, les solutions d&rsquo;ALM (Application Lifecycle Management) ont pour vocation de proposer un processus continu de gestion du cycle de vie d&rsquo;une application en terme de gouvernance, de réalisation et de maintenance.</p>
<p>Les solutions qui proposent d&rsquo;outiller ce processus sont souvent complexes et coûteuses à mettre en œuvre. Au cours de ce petit déjeuner, nous vous présenterons la forge de développement Improve Factory, une solution de gestion du processus de développement simple, légère et économique reposant sur des solutions open source.</p>
<p><center></p>
<table border="1" cellspacing="0" cellpadding="5" width="50%" bgcolor="#EFEFEF">
<tbody>
<tr>
<td valign="top"><span style="color: #000000; font-family: Arial; font-size: small;"><br />
<strong>AGENDA</strong></p>
<p><strong>08h30</strong> : Accueil petit déjeuner</p>
<p><strong>09h00</strong> : Qui sommes-nous ?</p>
<p><strong>09h15</strong> : Industrialisation des développements</p>
<p><strong>09h45</strong> : Présentation <strong>Improve Factory</strong></p>
<p><strong>10h15</strong> : Démonstration de la plateforme</p>
<p><strong>10h45</strong> : Questions / Réponses</p>
<p></span></td>
</tr>
</tbody>
</table>
<p></center></p>
<p>Adresse : <strong>Open Wide Technologies &#8211; 23-27 rue Daviel &#8211; 75013 &#8211; Paris</strong><br />
Contact : <strong>technologies@openwide.fr &#8211; 01.42.68.28.14</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2012/05/24/integration_continue_et_qualite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open source : de la clandestinité à la gouvernance au sein du SI</title>
		<link>http://www.improve-technologies.com/2012/03/16/open-source-de-la-clandestinite-a-la-gouvernance-au-sein-du-si/</link>
		<comments>http://www.improve-technologies.com/2012/03/16/open-source-de-la-clandestinite-a-la-gouvernance-au-sein-du-si/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 09:40:48 +0000</pubDate>
		<dc:creator>David DUQUENNE</dc:creator>
				<category><![CDATA[Actualités]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/blog/?p=183</guid>
		<description><![CDATA[Les Echos publie un article très intéressant sur la montée en puissance de l&#8217;Open Source au coeur même de la stratégie des entreprises. Patrick Benichou, PDG du groupe Open Wide, un des leaders français du logiciel libre, décrit comment l&#8217;Open Source <a href="http://www.improve-technologies.com/2012/03/16/open-source-de-la-clandestinite-a-la-gouvernance-au-sein-du-si/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.improve-technologies.com/blog/wp-content/uploads/2012/03/PBE.jpg"><img class="alignleft size-full wp-image-184" title="Patrick Benichou" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/03/PBE.jpg" alt="Patrick Benichou - Pdg du groupe Open Wide" width="146" height="172" /></a><strong>Les Echos</strong> publie un article très intéressant sur la montée en puissance de l&rsquo;Open Source au coeur même de la stratégie des entreprises.</p>
<p><strong>Patrick Benichou</strong>, PDG du groupe <strong>Open Wide</strong>, un des leaders français du logiciel libre, décrit comment l&rsquo;Open Source et les logiciels libres ont pris une place de plus en plus importante dans les systèmes d&rsquo;information.</p>
<p>Des exemples concrets expliquent les différentes stratégies d&rsquo;adoption de ces solutions. Une description de l&rsquo;évolution des modèles économiques du logiciel libre permet aussi de mieux comprendre la contribution de l&rsquo;Open Source à la valeur de l&rsquo;entreprise.</p>
<p>Mais au-delà d&rsquo;un simple choix technique, Patrick Benichou explique pourquoi les solutions Open Source et les logiciels libres font désormais partie de la <strong>gouvernance du SI</strong> et sont devenus <strong>un chapitre important du schéma directeur</strong> défini par les DSI pour répondre aux enjeux de l&rsquo;économie numérique.</p>
<p>Pour lire l&rsquo;article :</p>
<ul>
<li><a title="Open Source : de la clandestinité àla gouvernance au sein du SI" href="http://bit.ly/AqYXjR" target="_blank">Open source : de la clandestinité à la gouvernance au sein du SI</a></li>
</ul>
<p>Pour plus d&rsquo;informations sur une plateforme opérationnelle dédiée à l&rsquo;intégration de solutions Open Source :</p>
<ul>
<li><a title="Improve Foundations - Stratégie Open Source pour les DSI" href="http://www.improve-foundations.com/?utm_source=Blog&amp;utm_medium=Article&amp;utm_campaign=Gouvernance" target="_blank">Improve Foundations &#8211; Stratégie Open Source pour les DSI</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2012/03/16/open-source-de-la-clandestinite-a-la-gouvernance-au-sein-du-si/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 règles pour passer un projet Métier en Open Source</title>
		<link>http://www.improve-technologies.com/2012/03/07/10-regles-pour-passer-un-projet-metier-en-open-source/</link>
		<comments>http://www.improve-technologies.com/2012/03/07/10-regles-pour-passer-un-projet-metier-en-open-source/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 12:22:11 +0000</pubDate>
		<dc:creator>David DUQUENNE</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[Analyse et veille technologique]]></category>
		<category><![CDATA[Improve Foundations]]></category>
		<category><![CDATA[Réflexions et débats]]></category>
		<category><![CDATA[Trucs et astuces]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/blog/?p=173</guid>
		<description><![CDATA[Le Journal du Net a publié récemment un article très intéressant sur son site au sujet des entreprises qui souhaitent passer leurs applications Métier en Open Source afin de mutualiser les coûts de maintenance. Les responsables des sociétés, leaders de <a href="http://www.improve-technologies.com/2012/03/07/10-regles-pour-passer-un-projet-metier-en-open-source/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.improve-technologies.com/blog/wp-content/uploads/2012/03/success.png"><img class="alignleft size-full wp-image-174" title="success" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/03/success.png" alt="" width="175" height="175" /></a>Le <strong>Journal du Net</strong> a publié récemment un article très intéressant sur son site au sujet des entreprises qui souhaitent passer leurs applications Métier en Open Source afin de mutualiser les coûts de maintenance.</p>
<p>Les responsables des sociétés, leaders de l&rsquo;Open Source en France (<strong>Open Wide</strong> et <strong>Alter Way</strong>), donnent quelques clefs pour aborder une telle stratégie.</p>
<p>Pour lire l&rsquo;article :</p>
<ul>
<li><a title="Pourquoi diffuser un développement en Open Source ?" href="http://bit.ly/FPcA7n" target="_blank">Pourquoi diffuser un développement en Open Source ?</a></li>
</ul>
<p>En complément, voici <span style="text-decoration: underline;"><strong>10 règles</strong></span> à retenir pour passer un projet Métier en Open Source :</p>
<ol>
<li>Diffuser un projet Métier en Open Source est une décision stratégique qui doit faire partie intégrante de la gouvernance IT et du schéma directeur de la DSI.</li>
<li>Le projet Métier doit être développé de manière générique en proposant soit de paramétrer les traitements fonctionnels en fonction du contexte d&rsquo;utilisation, soit d&rsquo;ajouter des modules spécifiques.</li>
<li>Il est important de distinguer les parties techniques et les parties fonctionnelles du code source (à l&rsquo;aide d&rsquo;une architecture applicative modulaire) afin de favoriser l&rsquo;ouverture du projet sur de nouveaux domaines et d&rsquo;améliorer le retour sur investissement.</li>
<li>Le soutien d&rsquo;un partenaire (si possible contributeur du projet), s&rsquo;engageant à réutiliser le projet pour ses propres besoins, est un atout important pour la crédibilité du projet.</li>
<li>L&rsquo;adhésion de plusieurs acteurs clefs (intégrateurs, SSII, éditeurs&#8230;) quant à l&rsquo;utilisation du projet est un point majeur, notamment pour éviter le désengagement technique des soumissionnaires lors des appels d&rsquo;offres.</li>
<li>La qualité du code source et de la documentation du projet représente un investissement nécessaire sans quoi le projet risque d&rsquo;être mort-né.</li>
<li>Il est nécessaire de contribuer régulièrement aux évolutions du projet pour maintenir sa notoriété et éviter son obsolescence.</li>
<li>L&rsquo;animation régulière de la communauté Open Source du projet est le meilleur moyen de garantir son adoption et d&rsquo;assurer sa pérennité.</li>
<li>Le passage d&rsquo;un projet Métier en Open Source représente un investissement initial plus important qu&rsquo;une réalisation spécifique. Le retour sur investissement se mesure dans la durée grâce notamment à la mutualisation de sa maintenance.</li>
<li>S&rsquo;appuyer sur un ou plusieurs projets Open Source existants est un bon moyen de réduire l&rsquo;investissement initial tout en capitalisant sur la notoriété et la visibilité de ces projets auprès d&rsquo;une communauté existante.</li>
</ol>
<p>Pour plus d&rsquo;information sur l&rsquo;utilisation d&rsquo;une architecture applicative modulaire Open Source :</p>
<ul>
<li><a title="Improve Foundations - Stratégie Open Source pour les DSI" href="http://www.improve-foundations.com/?utm_source=Blog&amp;utm_medium=article&amp;utm_campaign=10_regles_passage_open_source" target="_blank">Improve Foundations &#8211; Stratégie Open Source pour les DSI</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2012/03/07/10-regles-pour-passer-un-projet-metier-en-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IFv5.3 &#8211; Faites le plein de technologies</title>
		<link>http://www.improve-technologies.com/2012/02/01/ifv5-3-faites-le-plein-de-technologies/</link>
		<comments>http://www.improve-technologies.com/2012/02/01/ifv5-3-faites-le-plein-de-technologies/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 13:51:52 +0000</pubDate>
		<dc:creator>David DUQUENNE</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[Improve Foundations]]></category>
		<category><![CDATA[architecture applicative]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[DSI]]></category>
		<category><![CDATA[Forge]]></category>
		<category><![CDATA[industrialisation]]></category>
		<category><![CDATA[intégration continue]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Plateforme d'intégration]]></category>
		<category><![CDATA[productivité]]></category>
		<category><![CDATA[socle applicatif]]></category>
		<category><![CDATA[socle technique]]></category>
		<category><![CDATA[stratégie]]></category>

		<guid isPermaLink="false">http://www.improve-technologies.com/blog/?p=165</guid>
		<description><![CDATA[La nouvelle version de la plateforme Improve Foundations (IFv5.3) est disponible (http://www.improve-foundations.com ). Elle propose une distribution opérationnelle de plus de 190 frameworks Open Source pour homogénéiser et sécuriser la réalisation d&#8217;applications, y compris par des développeurs non experts en <a href="http://www.improve-technologies.com/2012/02/01/ifv5-3-faites-le-plein-de-technologies/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-167" title="IFv5.3" src="http://www.improve-technologies.com/blog/wp-content/uploads/2012/02/ifc.png" alt="" width="131" height="176" />La nouvelle version de la plateforme Improve Foundations (IFv5.3) est disponible (<a title="http://www.improve-foundations.com" rel="nofollow" href="http://www.improve-foundations.com/" target="_blank">http://www.improve-foundations.com</a> ).</p>
<p>Elle propose une distribution opérationnelle de plus de 190 frameworks Open Source pour homogénéiser et sécuriser la réalisation d&rsquo;applications, y compris par des développeurs non experts en Java.</p>
<p>Son principal atout est de réduire sensiblement le budget des projets Java en mutualisant les coûts techniques dans une plateforme partagée par une communauté d&rsquo;entreprises dont les principaux membres sont :</p>
<ul>
<li>Renault</li>
<li>Galeries Lafayette</li>
<li>Armée de Terre</li>
<li>Allianz</li>
<li>Monoprix</li>
<li>RSI</li>
<li>Mutualité de la Fonction Publique</li>
<li>Chorégie</li>
<li>Rectorat de Créteil</li>
</ul>
<p>La version Open Source de la plateforme (Open IF) est téléchargeable sur la forge de la plateforme ( <a title="http://www.improve-foundations.org" rel="nofollow" href="http://www.improve-foundations.org/" target="_blank">http://www.improve-foundations.org</a> )</p>
<p>N&rsquo;hésitez pas à nous contacter si vous souhaitez plus d&rsquo;informations :<br />
<a title="technologies@openwide.fr" rel="nofollow" href="mailto://technologies@openwide.fr" target="_blank">technologies@openwide.fr</a> &#8211; 01.42.68.28.14</p>
]]></content:encoded>
			<wfw:commentRss>http://www.improve-technologies.com/2012/02/01/ifv5-3-faites-le-plein-de-technologies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
