Maintenance des logiciels: Java, le nouveau Cobol ?

Un post de Nicolas Martignoles a récemment attiré mon attention sur un article comparant les coûts de maintenance des logiciels en fonction des langages

L’article évoque en substance des coûts élevés pour les applications Java (un facteur 4,3) par rapport aux applications Cobol. Le tout basé sur une étude de 745 applications. C# semble nager dans les mêmes eaux que Java (cela semble logique). Pire: C++ semble mieux loti que Java ! J’aime bien le C++, mais cela devient franchement troublant.

En réalité l’étude fait état d’une réalité sous-jacente bien différente.

La maturité d’une application est un facteur important !

Eh oui, une application “neuve” n’est pas forcément la meilleure sous seul prétexte qu’elle a été écrite à partir d’une feuille blanche ! Cette application est surtout plus “verte”. Je pense qu’il y a différents facteurs jouant sur l’aspect maturité:

  • Une application mature est souvent plus stable. On passe au bout d’un certain temps de demandes de changements de type évolutif à des correctifs ou de ajustements liés à des conditions d’utilisation métier qui ont évolué. Ce facteur va dans le sens d’une maintenance moins chère. Hélas ce facteur de stabilité est aussi souvent le signe d’une transition de l’application vers une phase de fin de vie.
  • Un refactoring applicatif intégrant une flexibilité liée aux évolution. Au delà du design initial d’une application parfois liminaire, les changements demandés sur une application peuvent amener les développeurs à raffiner la conception pour en rendre les changements moins douloureux. Cette approche va souvent de pair avec une amélioration de la couverture de tests. Cela ne concerne hélas qu’une minorité d’application car elle nécessite des développeurs chevronnés sensibles à ce facteur. La majorité des applications se trouve plutôt dans la seconde catégorie.
  • Une entropie des applications suite à des modifications / corrections successives. les applications qui ne sont pas vraiment sous contrôle en terme de tests ont tendance à faire l’objet de “patch”, de correctifs dits chirurgicaux sans en raffiner la conception. Au contraire cela augmente la fameuse “entropie du logiciel”, c’est à dire une dégradation de son design qui augmente la crainte des développeurs d’y toucher, augmentant à son tour les pratiques accélérant l’entropie du logiciel ! Cette spirale se termine finalement par une sclérose totale du code conduisant à la réécriture complète de celui-ci.

L’expérience des développeurs

L’article insiste à juste titre sur les pratiques managériales privilégiant une équation économique court terme. En clair: on embauche des développeurs inexpérimentés à bas salaires pour réduire les coûts. Advienne que pourra de la maintenance ultérieure !

Effectivement les équipes de développement Java sont des équipes jeunes. Il est rare d’y croiser des développeurs de plus de 10 ans d’expérience. On parle déjà de développeur sénior pour des jeunes ayant 5 ans de pratique professionnelles dans les pattes. Il est vrai que le développeur armé de 15 ans d’expérience est d’une part plus cher que son homologue Coboliste et d’autre part qu’il cherchera plutôt une position d’architecte, de team leader ou d’expert technique. Nous avons là deux cultures différentes.

En contrepartie, il n’existe probablement plus de développeur Cobol débutant. Il ne faut pas se leurre, Cobol n’est probablement pas le language le plus sexy, mais la communauté des développeurs n’est pas nécessairement formée d’idiots (en fait, il y a probablement la même proportion d’idiots chez les Cobolistes que chez les Javanais) et les 20 ou 30 ans d’expérience de ces développeurs s’ils ne sont pas un facteur linéaire de compétence les aident produire du logiciel de qualité.

java le nouveau  Cobol ?

Java est le langage majeur des nouvelles applications de gestion. Il absorbe une quantité très importante de la profession avec une disparité de qualification très importante et globalement une population peu expérimentée. A ce titre, il ressemble à ce qu’était Cobol dans les années 80. Il est d’ailleurs devenu un lieu commun de dire que Java est le Cobol des années 2000 (ou 2010 maintenant). L’article avance sans doute avec raison l’existence d’une population importante de développeur Java sans formation solide. C’est aussi ce que j’ai pu voir en entretien de recrutement.

Et C++ ?

Je persiste à dire que C++ a un coût de développement, donc de maintenance potentiellement plus élevé que Java:

  • Le langage est difficile, beaucoup plus difficile et piégeux.
  • Le langage est de bas niveau et ne possède pas l’écosystème de librairies et frameworks s’assemblant rapidement pour adresser certaines problématiques. Pour ne pas parler des outillages et de la communauté open-source…

Mais voilà, beaucoup de développeurs “moyen” ont déserté C++ dans les années 2000, la population C++ est essentiellement constituée de développeurs aguerris, expérimentés sur le langage, voir d’amoureux de ce langage ! Bref la communauté s’est professionnalisée ! Il n’est pas étonnant de constater que la qualité des conceptions et du code produit en C++ soit supérieure, moins sujette au bugs. Cela n’a rien à voir directement avec le langage, mais avec la communauté.

Un jour peut-être…

L’article est trompeur sur son affirmation, mais pas sur son contenu. Les deux facteurs premiers avancés sont réels:

  • Réécrire sans cesse les applications n’est pas une solution. Une application “verte” est toujours plus baguée. De bonne pratiques de maintenance incluant une couverte de tests unitaires et une utilisation agressive du refactoring étendent de manière très importante la durée de vie des applications jusqu’à leur réelle obsolescence technologique (au lieu de la limite de sclérose).
  • L’expérience et la compétence sont des facteurs clé. Ils prédominent largement les aspects de contexte technologiques. On le sait depuis longtemps, mais le management classique reste imperméable à ces assertions.

Ma conclusion n’est pas que Java est un mauvais langage. Sans doute en existe-t-il de meilleurs et je sais qu’il il y en a de moins bon. En fait, peu importe. Je conclue surtout que les valeurs agiles et le Software Craftmanship vont dans la bonne direction: du logiciel de qualité développé avec rigueur et compétence.

Note de lecture : Test Driven, practical TDD and acceptance TDD for Java developers par Lasse Kolkela

Note : 6 ; Infatigable bavard!

Lasse Kolkela est un fervent pratiquant de l’extreme programming, c’est dans cet esprit qu’il nous livre cet opuscule. Le texte est long (hélas, vraiment long) de 470 pages hors annexes, et ne compte que 12 chapitres, chacun étant donc également assez long. Ces 12 chapitres sont eux-mêmes regroupés en 3 parties qui forment comme on le verra une progression assez logique dans le texte.

La première partie, intitulée « primer » est une introduction au TDD, tel que l’on peut en voir par ailleurs. Les 4 chapitres qui composent les 150 pages de cette première partie ne sont ni meilleurs, ni moins bons que ce que l’on peut voir par ailleurs. En fait, 3 de ces quatre chapitres sont même carrément longs, l’auteur ayant visiblement beaucoup de difficulté à exprimer son propos avec concision. Cela rend la lecture franchement pénible.

La seconde partie, consacrée à l’application de TDD à différentes technologies est sans contestation la meilleure. Elle sauve le livre. L’auteur nous montre comment on peut effectivement avoir une approche TDD dans des environnements complexes (applications Web, accès aux bases de données, programmation multi-threads et développement Swing). Là où beaucoup d’auteurs (y compris Kent Back) se contentent de nous donner des exemples triviaux, Lasse Kolkela nous expose « par a + b » comment faire du TDD dans la vraie vie, avec des problématiques réelles. Les exemples sont pertinents, bien expliqués avec une progression logique.

La troisième partie est consacrée à « acceptance TDD » et tourne autour de FIT. Si le propos est intéressant, quoique trop raccroché à XP à mon goût, la verbosité de l’auteur rend de nouveau la lecture peu plaisante.

En conclusion : il y a de la matière, et l’on trouvera plus spécialement utile la seconde partie. Mais j’aurais d’avantage apprécié le livre (et donc mieux noté) si il avait comporté 150 pages de moins !

test-driven

Référence complète : Test Driven, practical TDD and acceptance TDD for Java developers – Lasse Kolkela – Manning 2008 – ISBN : 1-932394-85-0 ; EAN13 : 978 1932394856

Test Driven: Practical TDD and Acceptance TDD for Java Developers

http://www.goodreads.com/book/add_to_books_widget_frame/1932394850?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

Note de lecture: Liferay in Action par Richard Sevoz Jr

Une bonne introduction au développement d’application sur Liferay avec les outils Liferay.

Ce genre d’ouvrage destiné à décrire le « how to » d’une plateforme spécifique est souvent un livre de commande, et par conséquent d’un style sinon laborieux du moins peu enthousiasmant. La bonne surprise est que ce n’est pas le cas ici. Richard Sevoz sait écrire et son style contribue grandement à rendre agréable une lecture qui serait sinon d’un style assez aride.

Un autre point aussi assez important : on n’en prend pas pour trop cher ici ! Le livre se limite à 300 pages auxquelles il faut rajouter les 50 pages d’annexes. Celles-ci fourmillent de matière intéressante sur les API, l’IDE, etc… Le texte en lui-même est découpé en 10 chapitres regroupés en 3 parties.

La première partie « working with Liferay and Portlets » est constituée de 2 chapitres et couvre 60 pages. Cela couvre la découverte de la plateforme Liferay (au chapitre 1) à la réalisation d’une Portlet « hello world » au chapitre 2. Ce faisant on découvre comment Liferay structure un site et la mise en place de l’environnement de travail. C’est simple et progressif, mais certains aspects (surtout sur la structure du portail) sont passés un peu rapidement !

La seconde partie « writting applications on Liferay’s plateform » couvre 5 chapitres totalisant 140 pages. C’est le cœur de l’ouvrage. Le chapitre 3 se focalise sur l’écriture d’une Portlet « data driven » en utilisant les outils et frameworks spécifiques à Liferay. Au chapitre 4 on met en place un MVC qui est là aussi un Framework spécifique Liferay. Le chapitre 5 consacré aux Layouts et Thèmes est à mon avis raté : il est confus et rentre peu dans la matière. A mon avis cela aurait mérité une partie spécifiquement consacré à cela, quitte à réduire sur d’autres aspects. Le chapitre 6 consacré à l’interfaçage avec des sites sociaux est asse original, même si les exemples ne sont guère convaincants. Cette seconde partie se conclue par un chapitre consacré aux API de collaboration : discussions, rating et assets. Le sujet est couvert un peu rapidement mais on moins on met le pied à l’étrier !

La troisième partie « customizing Liferay » est longue de 100 pages couvrant 3 chapitres. Elle adresse les aspects avancés de Liferay, et n’est donc pas un aspect obligatoire : Le chapitre 8 couvre les « hooks permettant de personnaliser le comportement par défaut de Liferay. Un aspect qui nécessite la plus grande vigilance ! Le chapitre 9 traite des « ext » plugins. C’est un aspect que l’on préfèrera certainement éviter, mais il est utile de savoir que c’est là et qu’on peut l’utiliser ! Enfin le chapitre 10 propose de faire le tour des API Liferay les moins utilisées afin de ne pas rater certaines des possibilités méconnues de la plateforme.

Le focus de ce livre est clairement de développer sur Liferay avec les outils et frameworks de Liferay et uniquement cela. C’est intéressant car complémentaire dans l’approche avec le « Portlet in Action » sorti au même moment. D’un autre côté beaucoup des outils et frameworks présentés semblent d’un autre âge : le MVC semble assez pathétique, pour ne pas parler du Velocity qui se marrie avec un Javascript qui nous plonge 10 ans dans le passé ! Et je parle même pas du build avec Ant ! Sur ce point d’ailleurs, l’auteur semble … disons conservateur car une chaine de build avec Maven semble exister !

En conclusion : on ne perd pas son temps avec ce livre. C’est une très bonne introduction à Liferay et en connaître les outils est utile, quitte à les abandonner. Pour aller plus loin, on préfèrera le « Portlet in Action » et on s’intéressera globalement aux frameworks et outils de build plus au goût du jour !

liferay-in-action-manning

Référence complète : Liferay in Action – Richard Sevoz Jr – Manning 2011 – ISBN : 978-1-935182-82-5

Liferay in Action: The Official Guide to Liferay Portal Development


http://www.goodreads.com/book/add_to_books_widget_frame/193518282X?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on