Un peu d’histoire…

Le mot ‘informatique’ a été créé en 1962 par Philippe Dreyfus, et vient de la contraction des deux mots ‘information’ et ‘automatique’.

La fin des années 1950 voit la création des premiers langages de programmation dont on pense qu’ils sont la solution aux problèmes du développement des applications informatiques.

À la fin des années 1960 éclate la « crise du logiciel », prise de conscience des difficultés que rencontre le développement des grands projets informatiques. De ce constat va naître une nouvelle discipline, le génie logiciel.

Le génie logiciel est la science de l’ingénieur qui s’intéresse aux procédés scientifiques : d’abord les programmes eux-mêmes, les fichiers et bases de données associés, les scripts, les spécifications des besoins et exigences des utilisateurs futurs, spécification de conception, tests, documentation, le support technique … Le but du génie logiciel est de maximiser la durée de vie et la qualité des logiciels, tout en minimisant les coûts et le délai.

Pendant les années 80-95, avec le déferlement de la micro-informatique, on prend de plus en plus conscience de la nécessité de maîtriser le développement de logiciels, alors que le prix du hardware diminue progressivement, le coût de l’informatique doit, quant à lui, non seulement prendre en compte les coûts de développement mais aussi les coûts de maintenance (corrective et évolutive).

L’industrie du logiciel se complique vite alors qu’elle n’en est qu’à ses balbutiements et les architectures N-Tiers apparaissent avec des serveurs d’applications au-delà des serveurs de données. Les ateliers de génie logiciel fleurissent pour masquer cette complexité et industrialiser les développements.

Mais, vers la fin des années 90 l’émergence d’Internet et des technologies Web dans les applications oblige à reconsidérer les architectures client-serveur établies quelques années plus tôt au profit d’architectures dites client-léger dont l’un des objectifs est d’éviter le cauchemar du déploiement et de la gestion des plates-formes client. Au niveau des applications, les exigences s’accroissent : les progiciels de gestion ERP ont fait leur apparition en parallèle, de même que les outils d’aide à la décision (business intelligence, puis datawarehouse, data mining) prémisses au big data, alors que les budgets diminuent et que la pression sur les temps de développement augmente, et que les systèmes à maintenir sont de plus en plus nombreux, avec la dette accumulée au fil des ans…

Dans le même temps, le génie logiciel peine à suivre pour garantir la maitrise sur des environnements de plus en plus complexes et multiples. Les approches pilotées par les modèles vers la fin des années 2000 rencontreront un succès limité à certains domaines spécialisés.

Qu’est-ce que le développement logiciel ?

Plusieurs milliards d’euros de budgets dépensés, plusieurs millions de développeurs dans le monde, des technologies toujours plus innovantes, des attentes accrues des utilisateurs et des clients…avec moins de délais et de budgets.

Le développement logiciel désigne l’ensemble du processus consistant à bâtir tout type d’applications informatiques fiables et performantes et va de l’étude du besoin du client, en passant par la conception, la mise en œuvre jusqu’à la maintenance de l’application. Ces diverses étapes sont possibles grâce à un langage informatique spécifique ou plutôt grâce à plusieurs langages… et à des développeurs maitrisant ces langages.

Les différentes étapes

Pour désigner les différentes étapes du développement d’un logiciel, de sa conception à sa fin de vie, on parle de « cycle de vie d’un logiciel ».

Ce cycle de vie est un ensemble de phases du développement du logiciel, en particulier :

  • Analyse des besoins du client,
  • Choix de l’architecture et des technologies,
  • Développement lié au stockage et à la manipulation des données
  • Développement du code spécifique métier et des services associés
  • Interfaces utilisateur
  • Intégration des développements
  • Interopérabilité avec un existant
  • Sécurisation du code
  • Tests (unitaires, intégration, montées en charge)
  • Correction des défauts détectés,
  • Documentation…

Il existe une multitude de réponses à chacun de ces aspects : modélisation du métier, architecture applicative, codage de chaque couche (et choix du nombre de couches pour un découpage optimal), technologie d’implémentation X ou Y, automatisation mais aussi méthodologies agiles et démarches DevOps, management des équipes… Choisir la bonne combinaison de réponses pour un projet constitue un réel enjeu et aura une influence sur ses chances de succès.

Les tendances actuelles

L’internétisation de toute la société a forcé les entreprises à s’adapter rapidement aux technologies les plus récentes (incluant le social media) et à ouvrir leurs systèmes vers l’extérieur, passant de quelques centaines à plusieurs millions d’utilisateurs de leur application.

Outre l’importance des interfaces utilisateurs, l’arrivée en force des écrans tactiles dans le monde professionnel et la montée en puissance des appareils mobiles donnent de plus en plus d’importance à la digitalisation.

La virtualisation des serveurs ouvre la voie à leur externalisation et au cloud. C’est le début du déport de certaines applications vers de grands datacenters qui bien que complexe, permet aussi d’absorber des pics de trafic momentanés sans devoir revoir toute son infrastructure.

On constate enfin une forte émergence de l’intelligence artificielle. L’intelligence artificielle nécessite une puissance de calcul qui pourrait, dans un avenir pas si lointain, être limitée par nos architectures informatiques actuelles. L’informatique quantique, dont la suprématie semble enfin prouvée, serait-elle la nouvelle étape ?

Le développement logiciel aujourd’hui

Le logiciel est présent partout, sa taille et sa complexité augmentent de façon exponentielle, les exigences de qualité sont de plus en plus drastiques… la crise du logiciel apparue dans les années 70 n’est toujours pas franchement résolue même si de grands progrès ont été réalisés dans de nombreux domaines… Les sociétés les plus performantes s’en sortent parfois simplement à coup d’investissements humains colossaux.

Et pourtant, il existe des clés pour augmenter les chances de succès des développements logiciels.

Les hommes

Il n’est de richesse que d’hommes

d’après le philosophe Jean Bodin. Aucun projet, quel qu’il soit, ne peut aboutir sans le leadership d’au moins un ou deux hommes clé.

Deux rôles sont particulièrement critiques au succès d’un projet de développement : le responsable de projet et l’architecte.

  • Le premier doit avoir de réelles compétences en gestion de projet, et les qualités humaines pour piloter des équipes techniques. Il lui faudra cependant un minimum de répondant technique pour être crédible aux yeux des équipes. Son rôle est distinct de celui l’architecte, mais doit s’appuyer sur celui-ci pour effectuer les arbitrages et forger son avis sur la qualité des développeurs et leur engagement.
  • Le deuxième est sans doute le profil le plus difficile à trouver. Car l’architecte doit être capable de concevoir la solution technique dans sa globalité, choisir les technologies ou produits à mettre en œuvre et édicter les règles de développement. Compte tenu de l’évolution continue et rapide des technologies, c’est une réelle gageure que de trouver le mix optimal permettant d’optimiser l’équation du projet.

Les méthodes

Alors même que les projets se complexifient, que le rythme de renouvellement et d’évolution des applications web s’accélèrent, que la course contre la concurrence est un combat de tous les instants, l’entreprise doit tirer parti de toutes les méthodes, pour gagner en qualité et en productivité.

L’élément méthodologique fondamental est la coopération avec l’équipe fonctionnelle. C’est la raison pour laquelle la démarche DevOps devient incontournable, à l’instar de l’agilité qui s’est installée petit à petit et qui est devenue aujourd’hui incontestée.

Les outils d’aujourd’hui ne sont pas encore capables de traduire directement un besoin fonctionnel ou une mise à jour de ce besoin au niveau de l’implémentation.

Replay Qualité Logicielle - Bannière - SoftFLuent

Les outils

Les outils pour mener à bien un développement sont de plusieurs natures : outil de développement, outil de conception, tests, analyse de code, gestion du cycle de vie, composants, frameworks, librairies de code, référentiel ou usine logicielle.

Les bénéfices liés à l’industrialisation des développements et des processus associés sont multiples (industrialisation des processus et génération d’une partie du code). On pense bien évidemment à la réduction des temps de déploiement et donc des coûts des projets de développement. L’enjeu est également de réduire l’intervention humaine sur les tâches répétitives, de limiter les risques d’erreurs et, surtout, de permettre aux développeurs de se focaliser sur des tâches à plus haute valeur ajoutée.

Le développement de logiciel inclut de multiples étapes de la création, l’établissement du cahier des charges, en passant par la mise en œuvre jusqu’à l’amélioration continue. Plusieurs langages sont à maîtriser ainsi que leurs évolutions mais aussi l’optimisation des ressources et l’amélioration de la qualité. Il est plus que jamais primordial de se savoir s’entourer des bonnes personnes.

Ne ratez plus aucune actualité avec la newsletter mensuelle de SoftFluent

Newsletter SoftFluent