Cet article est le premier d’une suite sur le sujet et se concentre sur l’histoire du développement logiciel avec un focus sur la manière dont sont construits nos applications des années 60 à aujourd’hui.
👉 1.Définition
L’usine logicielle est un concept qui s’inspire de la notion d’usine dans le monde réel, du domaine de l’industrie. L’usine est découpée comme une chaîne de production, en mettant en œuvre des techniques d’automatisation et des procédures cadrées et reproductibles.
Après plusieurs recherches, voici la meilleure définition de l’usine logicielle que je peux vous proposer :
Tout d’abord, je parle d’approche. Quand on parle usine logicielle, il est important de voir l’usine dans son ensemble et pas seulement l’aspect technique. C’est une approche globale qui prend en compte les besoins de l’entreprise et pas seulement de l’équipe de développement. Cette approche est organisée. En effet, l’usine logicielle doit proposée une organisation claire et précise, elle se doit d’être documentée, tracée et suivie. Ensuite, je parle d’équipe, soit, les utilisateurs de l’usine logicielle. Cela prend en compte les équipes de développement, mais aussi les équipes métiers, conceptions, tests, marketing, etc. Ensuite, j’aborde le tryptique de l’usine logicielle: infrastructure, outils et méthodes. Ce sont les 3 éléments que doit mettre à disposition une usine logicielle moderne pour fonctionner efficacement. On en reparle dans la partie “histoire”.Une « usine logicielle » est une approche organisée du développement logiciel qui fournit aux équipes de conception et de développement une infrastructure, des outils et une méthode reproductible et bien définie pour créer et mettre à jour des logiciels.
Enfin, l’usine logicielle doit permettre de créer et mettre à jour des logiciels. Cette phrase est importante, car derrière la notion de mise à jour se cache beaucoup de sous-éléments comme la maintenance, la gestion des évolutions, etc. L’application doit être à jour techniquement mais pas seulement. Elle doit également l’être par rapport aux attentes du marché. Pour illustrer cette définition, remontons le temps et examinons notre histoire…
👉2 – Histoire des usines logicielles
Le terme “logiciel” est apparu à la fin des années 50. A cette époque, les logiciels étaient développés par les rares personnes qui avaient accès à un ordinateur et pour des besoins très spécifiques. Pour des raisons de pertinences vis-à-vis du sujet de cet article, démarrons l’histoire dans les années 60.
👉 3. Années 60–70 : Génèse
Car oui, tout commence dans les années 60, avec les premières grandes avancées en terme d’électronique et d’informatique, les premiers langages haut niveau se substituent à l’assembleur. A cette époque, un événement va marquer le monde du logiciel : la première conférence sur l’ingénierie logicielle (NATO Software Engineering Conference). L’objectif était d’analyser la “crise du logiciel” de l’époque. Les développeurs n’arrivaient pas à suivre les évolutions hardware. On prend alors conscience des difficultés que rencontre les entreprises dans les projets de développement et on cherche des solutions. La conférence a permis de faire avancer le milieu en établissant des guidelines et des bests practices pour le développement logiciel. On assiste à la naissance du génie logiciel. Moment marquant
Ci-dessus, une photo que vous avez forcément déjà vu passer sur les réseaux. Il s’agit de Margaret Hamilton. Elle a développé les programmes des ordinateurs de navigation et de pilotage qui ont permis à l’homme de marcher sur la lune. A une époque où toutes les recherches sont focalisées sur les avancées en terme de matériel, la mission Appollo 11 est un grand tournant dans le monde du développement logiciel. Margaret Hamilton pose les bases de la qualité, la fiabilité et le test logiciel, qui sont des éléments prépondérant dans les usines logicielles modernes.
Dans les années 70, l’arrivée de langage comme le Pascal ou le C viennent apporter de la structure au code. Elles marquent l’arrivée du système Unix, qui a peut-être été le plus gros impact dans le monde du logiciel à ce jour, mais aussi les premières ventes d’ordinateurs dans les entreprises.
A ce moment de l’histoire, l’informatique et le logiciel sont un marché de niche. Le matériel est rare et les cas d’applications restent du domaine de la recherche ou du militaire. Les méthodologies appliquées sont expérimentales, avec un développement en cascade. Le logiciel n’a, à ce moment, pas vocation à être vendu au grand public, même si certains acteurs commencent à se préparer au futur.
👉 4- Années 80 : Démarrage
Dans les années 80, la programmation orientée objet fait son apparition avec des langages comme Ada et le très connu C++, qui reste encore très populaire de nos jours. L’accès et l’utilisation d’internet commencent à se populariser dans les milieux scientifiques et militaires. Le tout-un-chacun commence à accéder à l’ordinateur (IBM, Apple, etc). C’est l’invention des périphériques modernes comme la souris, mais aussi des premières interfaces graphiques. Des systèmes comme MS-DOS offrent l’opportunité de créer des logiciels pour les particuliers (Multi-Tool Word) et l’utilisation dans les entreprises prend de plus en plus d’ampleur.
Moment marquant
Les années 80 marquent l’apparition des virus informatiques avec notamment le virus Brain qui est considéré comme la première épidémie virale (sur les IBM PC). En réponse à cette épidémie, les premiers antivirus sortent en 1988 et les bases de la sécurité logicielle commencent à se mettre en place.
Au niveau méthodologie, les années 1980 marque l’apparition du cycle en V qui vient modifier notre façon de créer un logiciel. L’utilisation dans les entreprises se généralise. L’approche n’est plus scientifique, elle est portée par un ensemble de passionnés de la tech qui ont une vision pour le futur. Au niveau des outils, la disquette facilite le partage mais les développements restent spécifiques à un système, sur une machine.
👉 5- Années 90 : Internet
Les années 90 marquent un vrai tournant avec la popularisation d’internet. C’est cette année que Tim Berners-Lee créa le premier navigateur web, le protocole HTTP ainsi que le W3C. Pendant ce temps, l’utilisation de l’ordinateur se généralise. Les systèmes comme Windows 95 ou le lancement du Power Macintosh permettent au grand public de découvrir ce monde jusqu’alors réserver à l’élite et aux professionnels. En 1996, 10 millions d’ordinateurs sont connectés à internet.
Moment marquant
Le programme informatique Deep Blue bat le grand maître d’échec Garry Kasparov. C’est la première fois que l’homme est battu par la machine. Le grand public comprend alors que l’intelligence artificielle, et notamment le traitement de la donnée, peut faire de grandes choses.
Au niveau usine logicielle, l’approche est poussée par le challenge technologique. Le business voit en l’informatique et le logiciel une mine d’or. Les architectures 3 tiers se généralisent, on commence à utiliser les serveurs distants. L’apparition de l’outil CVS facilite le développement collaboratif. Au niveau méthodologie, le cycle en V prédomine mais quelques équipes expérimentent…
👉 6- Années 2000 : Agilité
En 1999, une méthodologie vient définir ce qui marquera les années 2000 : Extreme Programming. La première version du manifeste Agile est publiée en 2001. La méthodologie Scrum prend de l’ampleur. Jusqu’à présent, les logiciels étaient développés en suivant le monde de l’industrie et les innovations étaient technologiques. Sur cette décennie, on met l’accent sur la méthodologie et la réponse au besoin de l’utilisateur, l’adaptation aux changements.
Mais les années 2000, c’est aussi la bulle internet. De nombreuses entreprises voient le jour pour exploiter le filon. Une bulle spéculative se crée et s’effondre aussi rapidement qu’elle est apparue. Seuls quelques acteurs ont survécu et font aujourd’hui parti des entreprises les plus puissantes, tous secteurs confondus : Google, Amazon, Facebook.
Moment Marquant
Le lancement de l’iPhone en 2007 change tous les paradigmes de développement logiciel. Suivi de près par les tablettes, les entreprises doivent penser mobile, responsive design, portabilité. On entre dans une nouvelle ère.
Au niveau des usines logicielles, le support change. Le web est devenu the place to be. Au niveau des serveurs, les machines virtuelles permettent d’instancier des machines rapidement et la virtualisation devient un standard. Au niveau des outils, SVN sort en 2001 mais est rapidement suivi par GIT en 2004 qui va révolutionner la façon dont sont construits nos logiciels. Concernant la méthodologie, ce sont les années de l’agilité avec des méthodes comme XP, Scrum, KANBAN.
👉 7- Depuis 2010 : Innovation
Enfin, les années 2010 marquent un nouveau tournant. C’est l’explosion des nouvelles technologies. Parmi les innovations marquantes, on retrouve le Cloud Computing. La demande croissante en Software As A Service (SAAS) change notre manière de développer les logiciels. Les approches Mobile-First et le responsive design ouvre une nouvelle ère dans le développement. L’approche micro-service accélère le développement et ouvre la voie à de nouveaux cas d’usages. Nous entrons dans l’ère de la donnée et des objets connectés. Les outils de développements permettent aux startups de proposer des services clé-en-main de plus en plus rapidement, avec une scalabilité et une capacité à mettre à jour très rapidement.
On parle de 4ème révolution industrielle.
Moment marquant (ou pas)
Difficile de nommer un événement marquant sur la décennie car tout a explosé d’un coup ! Quand je pense à ceux qui disent “depuis l’iPhone, il n’y a pas eu d’innovation marquante”… L’apparition des objets connectés, les offres full cloud / SAAS (comme O365, Google Workspace, etc), le Big Data, l’intelligence artificielle, la blockchain, etc. Tout va très vite ! (Trop vite ?) Et c’est en grande partie grâce aux usines logicielles modernes qui permettent de réduire drastiquement le time to market (TTM) !
L’usine logicielle devient globale. Elle devient un socle de l’entreprise et elle permet de mettre à disposition une solution en mode SAAS. Les nouvelles technologies comme l’Infra As Code, le Cloud Computing, la conteneurisation facilite la gestion serveur. Les outils comme Gitlab, SonarQube, Jenkins, et beaucoup d’autres, permettent d’automatiser toutes les tâches répétitives. Au niveau méthodologique, on ressent les limites de l’agilité mais elles sont repoussées avec la généralisation des principes DevOps.
Conclusion
Comme on peut le constater, le développement logiciel a beaucoup évolué depuis sa naissance à la fin des années 50. Cependant, les plus grandes avancées concernant l’usine logicielle se concentrent sur ces dix dernières années. Développer un logiciel n’a jamais été aussi facile. Nous n’avons jamais eu autant de personnes formées, d’outils adaptés, et la technologie n’a jamais été aussi abordable.
Ce n’est malheureusement pas sans contre partie. Il apparaît évident que la multiplication exponentielle des nouvelles technologies peut désorienter. L’obsolescence technologique est de plus en plus rapide et il est difficile pour les entreprises de suivre le rythme.
Le réel challenge aujourd’hui est-il finalement technologique, ou plutôt humain ?
Dans le prochain article, nous reviendrons en détail sur les caractéristiques de l’usine logicielle moderne, avec des exemples et des pratiques apportées par les meilleurs dans le domaine.