Borsalino

 
 

 

Borsa

Informatique de gestion : où en sommes-nous ?
Choix techniques
Choix méthodologiques
Etape suivante: Borsalino - "Manifeste" 2, 14 décembre 1999


Pour approfondir

Erlang.org
Comptabilité
Club-Compt@ble

Sites utiles

Linux-France
Open Source.org
Slashdot
Freshmeat.net


Copyright © 1999-2000
Mickaël Rémond

Choix techniques

L'architecture

L'essentiel est d'assurer une stricte séparation entre le moteur et l'interface utilisateur. En d'autres termes, séparer le fond de la forme est la seule chance de préserver la simplicité du moteur et de lui permettre d'évoluer. Pour assurer cette stricte séparation, il faut dresser une couche entre le moteur et l'interface utilisateur qui assurera la stabilité du tout. Le moteur et l'interface pourront évoluer chacun de leur côté, tandis que la couche centrale évoluera plus lentement.

Parce que cette couche centrale est celle qui devra être la plus constante par la suite, c'est la conception de cette couche qu'il faudra dans un premier temps privilégier.

Le langage de développement

Trois langages ont été préselectionnés en fonction des affinités des participants au projet : Java, Perl et Erlang.

Un certain nombre de critères vont être envisagés pour réaliser ce choix :

Le caractère Open Source du langage

Perl et Erlang sont sans ambiguïté Open Source. Perl est disponible selon les termes de l' Artistic Licence. Erlang est depuis peu distribué suivant les termes de l' Erlang Public Licence, une adaptation de la licence de Netscape (NPL) à la législation suédoise.

Cette liberté assure une grande pérennité à ces deux langages, puisque qu'il est possible de disposer des sources et d'effectuer des modifications pour corriger des bugs ou bien améliorer les performances du langage. Par exemple, un groupe de développeurs peut développer un compilateur plus performant et cela de manière indépendante du projet principal.

Depuis peu, le statut de Java s'est clarifié et ce langage est maintenant clairement Open Source.

L'envergure du projet

C'est un des critères les plus décisifs, car la principale difficulté d'un projet de développement en gestion résulte dans le volume du code à gérer, lors du développement et surtout lors de la maintenance de l'outil.

Pour assurer la pérennité du projet, il faut un langage "structurant" qui incite à produire du code lisible et maintenable.

Sur ce point le caractère objet du langage Java le rend adapté à un développement de grande envergure. Il permet une bonne division du travail entre les développeurs grâce au principe de l' encapsulation. Des projets relativement volumineux sont envisagée dans ce langage (ERP: Movex Next Generation) sans qu'aucun résultat ne soit cependant visible pour le moment.

En revanche, la simplicité de Perl incite rapidement au quick and dirty. Il permet de faire des corrections ou des améliorations très rapidement, mais le volume du code est l'ennemi principal de ce langage. C'est a fortiori le cas pour une équipe de programmeurs bénévoles et éparpillés géographiquement (difficulté de coordination).

Erlang est utilisé sur d'énormes projets de développement dans le domaine des télécommunications. On dispose donc de la preuve de sa capacité à gérer de gros projets.

De plus, le caractère fonctionnel du langage et sa grande capacité d'expression lui permette de réduire le nombre de lignes de code nécessaires. Toutefois, cette compacité donne parfois un aspect peu lisible au code. Un peu d'habitude permet cependant de d'appréhender plus facilement un programme car ce sont souvent les mêmes schémas ("patterns") que l'on retrouve.

Facilité de développement distribué

En matière de réseau, Perl est essentiellement utilisé comme CGI (Computer Generated Interface). Cette utilisation se caractérise par une très forte centralisation des programmes, de l'information et des traitements sur une machine serveur, accessible par des clients légers. Il ne s'agit pas réellement d'une conception distribuée du développement.

Java dispose des RMI (Remote Method Invocation) pour mettre en place des techniques de développement distribué. Leur utilisation est lourde. La conception d'un programme monoposte diffère beaucoup de celle d'un réseau distribué.

La conception d'Erlang, à l'inverse, permet d'envisager la parallélisation des taches de manière simple. L'approche objet est utilisable, même si le langage n'offre pas tous les mots-clés. Un développement structuré dans ce langage pourra dès lors être distribué par nature. Il pourra même intégrer des techniques de répartition de charge entre différents serveurs dans le système.

L'accès aux bases de données

Le langage Java dispose de nombreux outils d'accès aux bases de données, grâce à l'interface JDBC et à l'existence de drivers pour toutes les bases de données relationnelles.

Il dispose de bibliothèques commerciales permettant d'asseoir le projet sur une conception objet pure et de déléguer les problèmes de stockage des objets à ces bibliothèques ("persistance"). Le problème est que ces outils sont commerciaux et que le développement de produits de substitution libre mobiliserait la totalité des développeurs du projet pendant une très longue durée. L'objectif du projet serait ainsi complètement détourné par des considérations techniques, ce qui limiterait l'implication des gestionnaires.

Perl offre des bibliothèques classiques d'accès aux bases de données relationnelles. L'accès aux bases de données libres (PostgreSQL) ou gratuites (MySQL) est possible. Mais ces bibliothèques sont relativement lourdes à mettre en oeuvre. L'accès aux bases de données en Perl est plutôt adapté à des taches d'administration système qu'à du stockage de données très structurées.

Erlang dispose d'une base de données libre intégrée à sa distribution. Elle est utilisé essentiellement pour un traitement des données en mémoire. Elle est donc peu adaptée à des modes de fonctionnement demandant des accès fréquents au disque. Les temps de réponse sont toutefois très faibles une fois la base montée en mémoire. Le langage dispose également d'une bibliothèque d'accès à Oracle, qui permettrait de prendre le relais pour le stockage de certaines données sur le disque. Une solution mixte Mnesia/Oracle est envisageable dans un premier temps. Par la suite, un portage de l'interface vers une base de données libre pourra être envisagé.

La fiabilité

Le choix de Java reste encore de ce point de vue problématique, en raison notamment de l'importance de la version du JDK utilisé.

Le choix de Perl est relativement neutre. La fiabilité dépend de la qualité de la programmation, mais on a vu que celle-ci risquait de décroître fortement avec l'augmentation de la taille du projet.

Le choix d'Erlang permet une conception tendant vers un très haut niveau de fiabilité. Notamment, il dispose d'outils pour gérer une hiérarchie de processus de supervision contrôlant le déroulement de processus productifs. De manière sous-jacente au langage, il existe un framework permettant de mettre en place des systèmes à forte disponibilité (24h/24, 7j/7).

Il permet également de mettre en place des solutions temps réel, qui peuvent être un atout pour le développement de certains aspects, liés par exemple à la logistique, à la prise de commande, etc. C'est le cas en particulier pour les tâches qui nécessitent la surveillance de valeurs seuil (par exemple, signal au service achat lorsque les stocks d'un produit descendent sous un certain seuil).

Le partage de code avec d'autres projets

Le projet Linux Kontor est le seul projet similaire existant. Il est développé en Java, en utilisant RMI comme méthode de développement distribué.

Le choix de Java permettrait de partager du code avec ce projet, voire de fusionner les deux initiatives. Cependant, ce projet vise essentiellement à copier des produits existants sans prendre en compte les attentes des utilisateurs de la prochaine génération d'outils de gestion. Son choix en terme de langage et d'architecture devrait rendre très difficile les évolutions du projet. Linux Kontor se trouve donc ancré dans ses choix initiaux et les possibilités offertes par le langage Java pour s'en écarter sont minces.

Pour faire ce choix de l'ouverture, il faut pouvoir utiliser du code disponible dans plusieurs langages et pas seulement du code Java. Dans ces conditions, le choix de Erlang est également un bon choix puisqu'il permet d'utiliser du code Java ou C et de les gérer comme un processus classique.

En outre la grande capacité d'expression d'Erlang et son caractère très modulaire en font non seulement un langage de production mais également un langage adapté au prototypage. Refaire certains modules qui auraient pu être mal conçus à l'origine n'est pas un frein majeur. Un projet de développement en gestion s'entend nécessairement sur la durée et doit prendre en compte des facteurs encore inconnus.

Le caractère multiplateforme

Les trois langages sont théoriquement multiplateformes. En pratique, le caractère Open Source du langage resurgit ici. Perl et Erlang étant réellement Open Source voient leur portage vers d'autres plates-formes facilité. Perl fonctionne sur des plates-formes très variées. Erlang est restreint pour le moment aux Unix et à Windows NT. Java fonctionne sur Linux, Solaris et les Windows 32-bits. La machine virtuelle java, jusqu'ici très fermée est cependant en train de s'ouvrir (Annonces de Sun, Annonce de Netscape sur le sujet).

On peut noter que Perl est disponible sur de nombreuses plates-formes et permet un accès via à un browser Web à ses programmes CGI. En revanche, le serveur Web utilisé doit supporter l'intégration de Perl. Ce n'est pas forcément le cas de tous les serveurs fonctionnant sous Windows NT.

Facilité d'installation

Perl a l'avantage d'être disponible en standard sur Linux. Un simple script permet ensuite de mettre en place le code du projet. Il faut cependant compter avec la nécessité de mettre en place un serveur Web et de configurer les CGI.

Java reste problématique du côté de l'installation. Les problèmes de version de JDK sont encore prégnants.

Erlang est relativement simple à compiler à partir de ses sources. C'est un système conçu pour être embarqué. Il dispose donc de procédures de «boot» qui facilitent le démarrage de l'application et de ses services.

La facilité d'administration

L'administration d'un système Erlang peut-être centralisée, alors même que l'exécution de ses programmes va être distribuée. Mettre en place les mêmes facilités en Java avec plus d'un serveur risque d'être relativement compliqué. En Perl, il en est de même et l'administration de plus d'une machine jouant office de serveur rend la tache assez complexe.

Conclusion

Le choix d'Erlang semble pour l'instant être le plus intéressant car il ne dispose pas de défaut rédhibitoire, mais offre en revanche des atouts uniques, notamment en ce qui concerne la programmation distribuée et la parallélisation des tâches.

Le choix d'un langage encore peu connu comme Erlang risque de rebuter un certain nombre de personnes. C'est cependant de moindre importance, si l'on considère le fort potentiel d'Erlang et sa relative facilité d'apprentissage.

D'autre part, le nombre ne fait pas la qualité. Vaut-il mieux attirer une dizaine de personnes compétentes et motivées ou bien un millier de contributeurs soumettant un nombre ingérable de petites modifications ?

Enfin, il faut bien être conscient que l'attirance de développeurs dépendra surtout du potentiel du projet et de la qualité technique et fonctionnelle des réponses qu'il apporte. C'est parce qu'il sera convaincu de la pérennité de son travail que le développeur pourra s'investir sans réserve dans le projet.

Questions / Réponses

Q: Le choix du langage est prématuré. Pourquoi ne pas poser le problème et choisir ensuite ?

R: Pour répondre à cette question, je m'appuyerais sur la méthode Merise. Le choix du langage peut intervenir très tôt dans le cycle de développement, au moment de l'étude préliminaire, à condition que ce choix puisse être considéré comme un choix stratégique pour l'ensemble du projet.

Envisager l'utilisation d'un langage de développement comme Erlang entre, je crois, pleinement dans ce cadre. Ce langage est suffisamment puissant, de haut niveau et dispose de suffisamment de bibliothèques pour permettre de réaliser les développements souhaités. Il est très expressif et permet ainsi de réduire le nombre de lignes de code dans le projet. C'est est point essentiel pour les projets en informatique de gestion où l'essentiel de la difficulté réside dans la manipulation d'un grand volume de code plus que dans la complexité des traitements à effectuer. Cette caractéristique laisse vraisemblablement entrevoir une maintenance facilitée. Erlang dispose de "comportements" standardisée permettant de structurer le développement et de construire des applications très fiables.

Enfin, un des éléments stratégiques les plus décisif est que ce langage permet de développer des applications distribuées de manière quasi-transparente pour le développeur et de manière très élégante.

De manière simplifiée, les premiers développements en gestion étaient basés uniquement sur les traitements. Il s'agissait de traiter des grandes masses d'information et de leur appliquer certains calculs de manière automatisée. Aujourd'hui, ce rôle est dévolu au système d'information se prolonge, mais la tendance est à l'intégration de fonctions "communiquantes". La tâche la plus importante dans le développement d'un système d'information n'est plus la réalisation des traitements, mais l'intégration de la notion de flux. Le problème n'est plus tant de savoir quel traitement de masse appliquer à tel ou tel type d'information, mais de modeler les flux d'information entre telle ou telle application ou entre tel et tel personne, etc. Cette modélisation des flux est de loin la tâche la plus complexe et pouvoir l'intégrer dans le développement est aujourd'hui indispensable. Pouvoir le faire au moindre coût en terme d'heure de développement est vital pour un projet libre, dont les ressources sont par nature très limitée.

Q: Pourquoi utiliser un langage dont la valeur stratégique apparait surtout sur d'énormes projets pour réaliser un petit module de rapprochement bancaire ?

R: Le délai de réaction d'une équipe de développement est parfois plus long que pour une société en terme de redéfinition des axes stratégiques. Pour assurer la pérénnité du projet, il est particulièrement important d'anticiper sur les futurs orientations et les futurs développement du projet.

Q: Avant de s'intéresser aux grosses PME et aux grandes entreprises, ne vaut-il pas mieux satisfaire les besoins des petites PME d'abord, puis ajuster nos ambitions ensuite et faire croître le projet ?

R: Lorsque l'on analyse l'offre et la politique commerciale des éditeurs, on constate que la différence entre un produit "light" (à destination des petites entreprises) et sa version "pro" (pour les plus grosses structures) réside en général dans la souplesse, la capacité d'évolution et de personalisation du comportement du produit.

Par conséquent, si l'on pense le projet comme directement modulaire et hautement paramétrables, il est possible de proposer un modèle de comportement standard satisfaisant les PME, tout en laissant de grande possibilité d'adaptation pour des besoins particuliers.

Cet aspect est rendu possible par la démarche originale du projet. Il ne s'agit pas de traiter de manière simplifiée toutes les fonctions informatiques à assurer par l'entreprise mais plutôt de ce concentrer d'abord sur certains de ces besoins et y répondre de manière complète. Il s'agit de développer des outils conformes à la philosophie Unix : Réaliser des programmes effectuant des tâches précises et capable de travailler sans problème avec d'autres outils conformément aux préférences de l'utilisateur.

 
 
 

Dernière modification : 23 Nov 2008