Enfin un atelier de développement .NET 100% gratuit !

ujourd'hui, mettre en place un atelier de développement totalement gratuit de bout en bout avec .NET n'est plus de l'ordre du rêve. Non seulement la communauté libre a réalisé ces derniers mois un travail énorme pour tenter de concurrencer l'indéboulonnable Visual Studio .NET sur ses terrains favoris, mais dans le même temps, Microsoft nous sort de son chapeau magique WebMatrix, un éditeur ASP.NET WYSIWYG totalement gratuit qui va sans nul doute créer la surprise en ce début d'été. 

C'est donc, en cette période de profond bouleversement au niveau des outils de développements que DotNetGuru se propose de vous présenter un atelier entièrement gratuit basé sur le duo de choc SharpDevelop et WebMatrix. Si l'un excelle dans l'édition et la compilation de codes C# et VB.NET, l'autre s'illustre par ses étonnantes fonctionnalités d'édition WYSIWYG pour la conception de pages ASP.NET.

Lorsque nous avons découvert cet heureux concours de circonstances, il nous est apparu évident de vous le faire partager. Vous n'êtes pas aux bouts de vos surprises, accrochez-vous !

Un IDE surprenant : SharpDevelop 

L'atelier de développement que nous vous proposons dans cet article est bâti autour de l'outil Open Source SharpDevelop. Si vous n'avez pas encore eu l'occasion de tester cet IDE, nous ne pouvons que vous encourager à le faire. Même si aujourd'hui SharpDevelop est encore un produit très jeune, il apparaît plus que jamais prédit à un bel avenir. Créé par Mike Krueger, son noyau est entièrement écrit en C#. D'ailleurs, c'est l'un des premiers outils à avoir joué le rôle de proof of concept pour la plate-forme .NET. 

SharpDevelop s'appuie sur une licence GPL ouvrant la voie à d'éventuelles améliorations de la part de la communauté .NET.  Son originalité principale réside dans son ouverture lui permettant de s'interfacer avec des outils externes tels que Nunit ou Nant. Suivant le principe des environnements Java, SharpDevelop offre une indépendance totale entre l'éditeur de code et l'environnement d'exécution. C'est pourquoi, il vous est nécessaire d'installer le Framework .NET avant de pouvoir utiliser l'outil.

Quant aux fonctionnalités offertes par l'éditeur, elles sont équivalentes aux autres produits de la même famille, à savoir :

- la coloration syntaxique et la complétion de code

- l'intégration de multiples langages : .NET mais aussi Java

- L'intégration avec les outils de gestion de configuration et de tests unitaires 

- La génération de documentation et l'export au format HTML des sources

- La gestion de projets ou solution contenant divers types de fichiers (sources, ressources, ...) 

Les défauts de SharpDevelop sont essentiellement liés à la jeunesse du produit. Excepté quelques bugs ici ou là, l'outil ne propose aucune fonctionnalité WYSIWYG nécessaire à la conception des interfaces graphiques en client léger ou client lourd. Tout comme l'absence de connecteurs externes vers des Bases de données ou messageries asynchrones. Malgré tout, le développeur lambda ayant l'habitude d'utiliser ce type d'outil gratuit y trouvera sans aucun doute son compte.  

Enfin, SharpDevelop propose quelques petits "extras" tels que la génération de documentation ou l'explorateur de fichiers et de classes. 

Maintenant que vous connaissez l'éditeur, attardons nous un peu plus sur les fonctionnalités offertes par le produit dans le cadre d'un vrai atelier de génie logiciel, à savoir :

La gestion de configuration avec CVS.NET : nCVS

 A l'heure où les processus de développement commencent à prendre une place de plus en plus importante dans notre vie de tous les jours, il apparaît plus que jamais nécessaire de s'entourer d'outils aptes à répondre à des exigences de plus en plus strictes au niveau du partage des sources et du travail collaboratif

Existe t-il aujourd'hui dans le monde .NET des outils permettant de travailler en équipe à travers un outil de gestion de configuration ? 

Pour répondre à cette question il convient de bien dissocier dans l'outil la partie serveur de la partie cliente. Aujourd'hui, il n'existe pas, à proprement parler, de serveur écrit en .NET. En revanche, les interfaces clientes dans cette plate-forme commencent à pointer le bout de leur nez.  

Dans le domaine du gratuit, CVS fait office de leader incontestable et incontesté. Jusqu'ici il existait bien une version serveur sous Windows appelée CVSNT, mais aucune n'avait encore réellement approché la plate-forme .NET. C'est aujourd'hui chose faite avec NCvs, un portage du client WinCVS réalisé en C# par la même équipe que l'éditeur SharpDevelop. Les fonctionnalités offertes par nCVS sont :

 Cependant, certains tests ont mis en lumière quelques lacunes en terme d'intégration. Alors que nous pourrions nous attendre à un menu contextuel directement dans l'explorateur de projet, nous devons nous contenter de l'affichage d'une fenêtre intermédiaire réalisant les tâches de Check In et Check Out. Espérons que les versions suivantes apporteront une vraie valeur ajoutée à nCVS car, dans cette configuration, l'intérêt d'un client .NET est relativement faible.

Pour résumer, il est possible d'ores et déjà d'entrevoir des possibilités de travail collaboratif à travers SharpDevelop associé à nCVS dans un avenir proche. 

Le test unitaire avec nUnit 

Dans le cadre des processus dit "agiles", eXtreme Programming met l'accent sur les tests unitaires à travers un outil ayant gagné sa notoriété dans le monde Java et OpenSource : JUnit. Aujourd'hui, le portage de JUnit vers .NET est totalement finalisé sous l'appellation NUnit. Vous trouverez la distribution complète en téléchargement à l'adresse suivante : http://nunit.sourceforge.net/ .  

Mais qu'est-ce qu'un outil de test unitaire "à la" JUnit ?

Et bien, habituellement une manière de tester son code peut consister à simplement faire appel à des expressions dynamiques directement dans un Debugger. Pour ce faire, il suffit de tester une méthode avec une valeur de paramètre quelconque puis d'effectuer une série de tests en modifiant le paramètre jusqu'à tomber sur un bug. Malheureusement, dans ce cas, une intervention humaine est nécessaire pour adapter les tests en fonction des résultats obtenus. Or, dans le cadre d'une application complexe, cette démarche s'avère totalement inadaptée et pose des problèmes lorsque :

Sans compter qu'il n'est pas envisageable de réaliser plusieurs tests en parallèle manuellement. 

Bref, tout l'intérêt d'un outil tel que NUnit est d'automatiser ces tâches complexes pour mieux exploiter les résultats obtenus.  Pour ce faire, il vous suffit simplement d'implémenter dans votre code des TestCase (test unitaire) en fonction de votre plan de test. Les TestCase représentent des  scénarios d'exécution susceptibles de générer une erreur lorsque les spécifications ne sont pas respectées ou que l'application présente un bug.

Nous n'entrerons pas dans le détail des TestCase de NUnit mais sachez qu'ils sont supportés à travers un Framework de classes techniques contenues dans l'Assembly NUnitCore.dll.

SharpDevelop propose en standard une intégration étroite entre l'éditeur et NUnit, il suffit simplement de sélectionner dans les menus contextuels l'entrée Tester. L'outil lance alors l'interface graphique de NUnit chargée d'exécuter l'ensemble des TestCase définis à l'intérieur de votre programme.  Du grand Art !

Déploiement avec Nant 

Après les tests, l'application est prête à être déployée. Alors que Visual Studio .NET intègre un générateur de package MSI et .CAB (archives .NET), aucun équivalent n'est proposé dans le monde du gratuit. Malgré cela, les développeurs .NET ne sont pas en reste avec le portage du célèbre outil Java de déploiement en OpenSource : Ant porté sous .NET avec l'appellation Nant. Cet outil permet de reproduire simplement le mode de fonctionnement d'un Makefile en XML afin d'automatiser les tâches de déploiement mais aussi de compilation.

SharpDevelop intègre Nant de manière très sommaire, les menus contextuels comprennent l'entrée "Deployer" générant un appel au fichier de construction (build) Ant spécifié dans la configuration du projet.

Gageons qu'à l'avenir, SharpDevelop proposera l'ajout de cible (target) de déploiement de manière graphique. 

Conception et Exécution des pages ASP.NET avec WebMatrix (projet Saturn

En gestation depuis plusieurs mois dans les labos du géant de Redmond, WebMatrix de son nom est un éditeur de pages ASP.NET destiné à fournir aux développeurs d'applications Web toute la puissance des WebForms associée à la légèreté d'un outil gratuit. WebMatrix embarque avec lui un serveur web très léger écrit en C# et s'installant sur le port 8080. Il permet de tester des pages ASP.NET sans disposer du fameux serveur Web de Microsoft : Internet Information Server (IIS). Derrière cet outil se cache le désir à peine voilé de Microsoft de concurrencer la suite LAMP (Linux, Apache, PHP, MySql) afin de se positionner sur le marché des outils RAD WYISWYG, très en vogue aujourd'hui. 

Pour plus d'informations sur WebMatrix, nous vous conseillons de lire l'excellent article de Christophe Lauer ici : Le projet Saturn, ou directement le site officiel http://www.asp.net/WebMatrix mais voici un aperçu rapide des fonctionnalités proposées par l'outil :

Ce que WebMatrix ne fait pas :

Lorsque nous avons approché cet outil pour la première fois, il nous est apparu évident que SharpDevelop et WebMatrix étaient complémentaires. Rappelez vous les carences de SharpDevelop : L'édition de pages ASP.NET en mode WYSIWYG. Aujourd'hui, WebMatrix est là, prévu à cet effet et totalement gratuit !

Comment imaginer un rapprochement technique entre les deux outils ? Et bien SharpDevelop serait destiné à l'édition de classes (ou composants) C# et VB.NET, et WebMatrix à la conception de pages ASP.NET. Il se trouve que par le plus heureux des hasards SharpDevelop propose nativement une fonctionnalité permettant de faire appel à des éditeurs de code externes. Il suffit donc simplement de positionner le nom de l'exécutable WebMatrix dans la configuration de SharpDevelop et le tour est joué !. Une fois la manipulation effectuée, vous disposez d'un environnement totalement gratuit et permettant de reproduire en partie les fonctionnalités les plus importantes de Visual Studio .NET. Vous en rêviez, SharpDevelop l'a fait ...

A noter, que SharpDevelop doit être le principal chef d'orchestre de notre atelier. Il est donc préférable de créer dans cet outil la page ASPX d'origine qui sera ensuite modifiée par WebMatrix. Comment est-ce que cela se passe concrètement ? La solution vient de la conception d'un modèle (Template) ASPX dans SharpDevelop. L'opération est très simple, elle consiste à créer un fichier XML (reprenez les fichiers existants) spécifique au nouveau format et à y insérer l'extension ASPX.

Une fois l'opération réalisée, vous avez en votre possession un vrai atelier de développement pratiquement complet. Pour résumer :

  1. Créez un nouveau modèle de page ASPX dans SharpDevelop

  2. Personnalisez votre page par défaut avec des tags HTML de base (head, body, ...) 

  3. Réalisez le lien vers WebMatrix dans le menu outils. Au passage, remarquez aussi dans ce menu la présence du Browser de classes de Microsoft, un modèle du genre.


 

Une fois le lien effectué avec SharpDevelop, il ne nous reste plus qu'à sélectionner notre page ASPX et à lancer WebMatrix pour insérer des WebForms.

Le résultat est assez stupéfiant, notre page est éditée sans le moindre problème par l'outil de Microsoft, une fois la conception terminée, il suffit simplement de fermer l'application WebMatrix. Automatiquement lorsque vous ré-intégrez l'environnement SharpDevelop, l'outil détecte une modification de fichier externe et vous demande de le recharger. Bien entendu, cette opération ne vous interdit en aucun cas de modifier directement "à la main" le fichier ASPX dans SharpDevelop. Voilà pourquoi ce processus de développement s'avère intéressant, il est flexible à souhait.


Le schéma suivant nous illustre l'ensemble de l'atelier de développement préconisé dans cet article. Les deux outils étant très peu gourmand en mémoire, le fait de passer fréquemment d'une application à l'autre ne posera aucune réelle difficulté.

SharpDevelop fonctionne sur la plupart des plate-formes, y compris Windows 98. MatrixServer est prévu pour s'exécuter sur l'ensemble des systèmes d'exploitation de la gamme Microsoft. Vous avez donc un atelier de développement totalement gratuit, léger et qui plus est, universel.

Cassini et Apache

Si le serveur Web intégré MatrixWebserver (nom de code Cassini) est entièrement écrit en C#, il n'existe pour l'heure aucun benchmark concret permettant de se faire une idée précise des capacités de l'outil. Nous vous conseillons donc de limiter son utilisation dans un cadre très strict où la montée en charge n'est pas un critère décisif. IIS reste encore la référence en tant que serveur Web de production et MatrixWebServer n'est en aucun cas destiné à le remplacer.

Mais si vous vous posez la question de la faisabilité d'une association entre le célèbre serveur Web Apache et Cassini, alors la réponse est OUI. Dans le monde Java, le concurrent direct de Cassini est Tomcat pour l'exécution de pages JSP. La configuration habituelle de Tomcat et d'Apache consiste à :

Le mini serveur Web de Microsoft ne déroge pas à cette règle, le protocole AJP n'étant pas supporté, il suffit d'adopter la première ou la seconde solution en prenant soin de spécifier les extensions de type ASPX. 

Attention à la protection du loopback !

Il est très important de bien comprendre que WebMatrix ne peut s'exécuter dans un environnement où la requête cliente ne provient pas de la machine localhost, c'est à dire le poste local ou loopback. Dans ces conditions, toutes les remarques énoncées précédemment sont soumises à cette règle. Le duo Apache Cassini ne sera donc valable que localement. 

Toutefois, il est très simple de contourner cette limitation en passant par un Proxy local qui rendrait transparente la requête cliente à Cassini. Nous vous déconseillons bien évidemment cette manipulation. Cependant il est nécessaire d'en tenir compte du fait que certains développeurs, sous la pression, peuvent être amenés à mettre en production un tel serveur hybride. Espérons que les équipes de développement de WebMatrix travailleront à l'avenir vers une direction moins "strict" afin d'éviter ce genre de mésaventure. 

MySQL et Postgres comme base de données avec ODBC.NET

MySQL est l'une des bases de données les plus privilégiées du moment par la communauté OpenSource. Cette base pourrait très bien constituer la pierre angulaire de notre architecture tout gratuit à travers le provider ODBC.NET de Microsoft. Malheureusement, aujourd'hui, seule une connexion MSDE est livrée en standard avec WebMatrix limitant fortement son utilisation à travers l'outil RAD de Microsoft. Espérons que les prochaines versions apportent de réels solutions à ce problème. Pour télécharger ODBC.NET : Data Provider ODBC.NET

MySQL n'est cependant pas la seule base gratuite pouvant être utilisée dans le cadre d'un environnement .NET. Postgres fournit également un driver ODBC conformément à la philosophie des projets iodbc.org (plusieurs drivers odbc GPL destinés aux SGBD gratuits) lui permettant d'accepter des clients .NET. Il est très probable qu'à l'avenir de nouveaux drivers fassent leur apparition pour re-dynamiser ce marché avec l'arrivée de ce nouvel acteur.

L'alternative Eclipse

Dans la communauté Java, un autre outil de développement se retrouve sous les feux des projecteurs : Eclipse. Cet IDE se destine essentiellement aux environnements Java/J2EE avec une architecture bâtie autour de la notion de Plug-In. Le nombre de projets existants autour des Plug-in Eclipse est considérable. Pratiquement tous les outils et Framework sont représentés avec Struts, Ant, JUnit, ... 

Parmi ces Plug-In, un en particulier a attiré notre attention dans le cadre de notre article : l'excellent Plug-In C# conçu par la société Improve. Ce plug-In permet d'éditer et compiler un programme C# au sein de l'outil Eclipse. Cette démarche aurait pu constituer un grand pas en avant vers le .NET tout gratuit s'il n'existait pas certains freins d'ordre technique. En effet, Eclipse est une application presque entièrement écrite en Java. A ce titre, toute intégration n'a de sens que dans le cadre d'un environnement homogène. Or, le Plug-In C# d'éclipse, pour certaines actions particulières telles que la compilation, n'a pas d'autres choix que de réaliser un appel inter-processus pour lancer le compilateur csc.exe de Microsoft. Par ailleurs, lorsqu'il s'agit de gérer une autre fonctionnalité importante nécessitant une intégration plus étroite avec l'environnement cible : la complétion de code, l'approche est beaucoup plus complexe. En effet, il est nécessaire de charger en mémoire l'ensemble des bibliothèques associées à un programme donné : les archives Jar en Java, et les Asssembly avec .NET pour proposer les listes de méthodes et autres attributs d'une classe. Or, seul un domaine d'application .NET peut charger dans le même processus une Assembly. Difficile dans ce cas d'espérer qu'Eclipse interagisse avec les Assembly alors que l'outil est écrit essentiellement en Java. Tout le nœud du problème est là. 

public void run() {

        IFile fileToCompile = findCurrentCSharpFile();
        if (fileToCompile == null) {
                // should never happen
                System.err.println(\"Error : no file in the editor\");
                // should throw an exception
                return;
        }

        Runtime r = Runtime.getRuntime();

        try {

                String command = buildCommand(fileToCompile);

                String filePath = fileToCompile.getLocation().toOSString();
                String fileFolderPath =	filePath.substring(0, filePath.length() - fileToCompile.getName().length());

                // lance le compilateur csc.exe dans un autre processus
                Process p = r.exec(command.toString(), new String[] {}, new File(fileFolderPath));

                // gets the input stream to have the post-compile-time information
                InputStream stream = p.getInputStream();

                // and get the string from it
                String compilerOutput = getStringFromStream(stream);

                // prints out the information
                printResultInConsole(compilerOutput);

                // parse the buffer to find the errors and create markers

                createMarkers(compilerOutput, fileToCompile);

                // And refresh the compilation unit folder
                fileToCompile.getParent().refreshLocal(IResource.DEPTH_ONE, null);

Plug-In C# 

Si aujourd'hui des outils tels que Eclipse, JBuilder ou Forte sont efficaces en Java, cela est en partie lié au fait qu'ils s'appuient sur les APIs du SDK pour réaliser l'accès aux données, la compilation, les tests et le déploiement. Croire qu'un éditeur Java peut effectuer ces mêmes opérations avec une application .NET est un leurre. Même si les communications via des ponts (Bridging) ou des wrappers peuvent apporter une solution au problème, ils portent atteinte à l'homogénéité de l'IDE et entraînent un cloisonnement de l'outil (Visual Age écrit en SmallTalk). 

Malgré tout, mis à part ces quelques petits soucis techniques, Eclipse peut constituer sans aucun doute un excellent éditeur de code gratuit pour le développeur .NET peu exigeant et le Plug-In d'Improve est un excellent proof of concept. A ce titre, nous ne pouvons que vous le conseiller.

La modélisation n'est pas en reste avec nUML

La boucle ne serait pas bouclée sans un éditeur UML capable de concurrencer les immenses éditeurs Rational et TogetherSoft. Quelques initiatives font leur apparition ici ou là avec notamment le projet numl.sourceforge.net créé depuis peu par quelques aficionados de .NET. Pour l'heure, aucune implémentation n'est disponible mais l'avenir semble de plus en plus prometteur dans ce domaine de la modélisation objet.

Conclusion

Nous sommes en droit d'espérer que dans quelques temps des outils gratuits tels que ceux proposés dans cet article, seront capables de rivaliser avec le talentueux mais néanmoins payant Visual Studio .NET. Si aujourd'hui la volonté affichée par Microsoft n'est pas de concurrencer son outil fétiche, WebMatrix va sans nul doute semer le trouble dans l'esprit des développeurs. L'atelier de développement gratuit proposé dans ces colonnes parait séduisant mais il convient de prendre des précautions afin de vérifier qu'il réponde effectivement à vos attentes en terme de stabilité mais aussi d'ergonomie. SharpDevelop est en version bêta et n'est pas exempt de tout bug. Quant à WebMatrix, il est en début de vie et l'expérience nous a montré à plusieurs reprises qu'il ne fallait pas se lancer aveuglément dans les premières versions d'un outil. 

Enfin, dans cet article, il subsiste un léger regret, celui de ne pouvoir espérer un jour voir cet atelier de développement réunir l'ensemble des outils sous un seul et même produit. Il faudrait pour cela unifier l'ensemble des licences sous une seule et même forme restant à définir (OpenSource, GPL, Shared, ...) mais Microsoft avec WebMatrix n'y adhèrera sûrement pas ...

 

Auteur : Sami Jaber

Copyright : Juin 2002 - DotNetGuru ©

 

Ressources

SharpDevelop : http://www.icsharpcode.net/OpenSource/SD/default.asp

WebMatrix : http://ww.asp.net/webmatrix

Junit : http://www.junit.org

Ant : http://jakarta.apache.org

Plug-In C# pour Eclipse : http://www.improve-technologies.com/alpha/esharp

Article sur le projet Saturn : http://www.dotnet-fr.org/