22 novembre 2019

5min

Développement IT

Que ce soit dans nos téléphones, nos télévisions, nos voitures, nos électroménagers ou les jouets de nos enfants, le logiciel s’est immiscé dans tous les aspects dans notre vie quotidienne. L’industrie du développement logiciel est l’une des plus dynamiques aujourd’hui.

Le logiciel est partout.

Les développeurs logiciels sont en demande partout dans le monde. Le « développement logiciel » désigne, quant à lui, le processus global de prise en charge d’un projet logiciel, de sa conception à sa livraison en production.

Les technologies évoluent rapidement. Chaque année, de nouveaux concepts apparaissent. Cadres d’application, méthodologies, architectures… ce qui est à la mode aujourd’hui sera peut-être obsolète l’an prochain. Dans ce contexte de transformations rapides, l’avantage concurrentiel est primordial pour un éditeur de logiciel. La satisfaction client et la qualité du code sont tout aussi importantes à prendre en compte que les traditionnelles mesures de rapidité et de vélocité. Plusieurs tendances émergent pour répondre à ces enjeux.

Les architectures de Microservices en remplacement des monolithes

Les monolithes sont des applications massives, fortement couplées, difficilement évolutives et essentiellement constituées de trois blocs :

• L’interface utilisateur

• La base de données

• L’application (côté serveur)

Chaque développeur doit avoir l’application complète dans son environnement de programmation. Ainsi, développer de nouveaux services ou de nouvelles fonctionnalités contraint le développeur à modifier en tout ou en partie l’application, ce qui conduit souvent à des erreurs qu’il est difficile d’anticiper, d’identifier et d’analyser.

Ces inconvénients nous amènent à repenser les modules comme des services et l’application comme une gamme de services. D’où l’existence d’une architecture dite de « microservices ». Chaque service est indépendant. Il peut être écrit dans différents langages de programmation et, surtout, réalisé par différentes équipes. Il sera déployé indépendamment. L’application, ainsi séparée en modules, sera moins complexe, et il sera plus facile de maintenir ses modules tels quels, et donc de faire évoluer l’application.

Les plateformes d’intégration et de livraison continues industrialisent la qualité des développements

Dans le domaine des technologies, l’utilisateur s’attend aujourd’hui à ce que tout se mette à jour très vite. Un produit qui n’évolue pas sera vite obsolète et remplacé.

Problème. Car la plupart des équipes de développement ne peuvent livrer leurs services aussi rapidement et fréquemment. De longues phases de recettes manuelles demeurent indispensables. Les essais unitaires sont encore trop peu fréquents, et les processus manuels sont longs et source d’erreurs. À cela s’ajoute le manque d’automatisation – ou le manque d’efficacité – des processus de conception et de déploiement.

Les pratiques d’intégration et de livraison continues sont des solutions qui permettent aux équipes de livrer des produits logiciels de qualité, fréquemment et automatiquement, jusqu’à la production. Ainsi, les équipes obtiennent et transmettent la rétroaction donnée par les utilisateurs plus rapidement quand ils disposent d’une solution d’intégration et de livraison continues, tout en déclarant moins d’anomalies à la livraison..

Les équipes de développement et d’exploitation comblent les lacunes des systèmes en ces domaines

Les équipes, à mi-chemin entre le développement logiciel et l’exploitation des systèmes, adoptent, dans son sens le plus large, une philosophie ou une culture favorisant une meilleure communication entre techniciens et développeurs.

Cette approche s’applique, dans le domaine des technologies, à des collaborateurs ayant des compétences pour travailler à la fois en tant que développeur et qu’ingénieur système. Ils mettent à disposition des outils et des processus permettant d’accélérer et d’automatiser le développement, l’intégration et le déploiement.

La philosophie de développement et d’exploitation est donc une suite logique dans l’application des valeurs et des principes agiles, au-delà de l’équipe de développeurs. Mais comme tout changement et toute transformation, l’adoption réussie des pratiques de développement et d’exploitation au sein d’une équipe ou d’une entreprise est un défi difficile qui perturbe les processus établis, les définitions de rôle, les systèmes de récompense, et les modèles de gouvernance et de déploiement.

Propulsées par le nuage, les architectures sans serveur font leur apparition

La montée en puissance des infrastructures hébergées dans le nuage a ouvert la porte à de nombreuses possibilités. Au-delà des architectures de microservices, du développement et de l’exploitation, et des conteneurs, un nouveau type d’architecture fait son apparition : les architectures sans serveur.

À l’instar de nombreuses tendances en matière de logiciel, l’architecture « sans serveur » n’a pas de définition unique. L’appellation englobe en fait deux domaines différents qui se chevauchent :

• Elle peut définir des applications qui s’appuient massivement ou totalement sur des services gérés par des fournisseurs de services infonuagiques, composées de nombreuses bases de données accessibles dans le nuage (Parse, Firebase), de services d’authentification (Auth0, Amazon Web Services, Amazon Cognito) et d’autres services.

• Elle peut également définir un modèle dans lequel le fournisseur de services infonuagiques (Amazon Web Services, Azure ou Google Cloud) est responsable de l’exécution d’un morceau de code en distribuant de manière dynamique les ressources. Le code est généralement exécuté dans des conteneurs sans état pouvant être déclenchés par divers événements, notamment des requêtes http, des événements de base de données ou des services de file d’attente. Le code envoyé au fournisseur de services infonuagiques pour l’exécution se présente la plupart du temps sous la forme d’une fonction. On parle alors de « Function as a Service » (FaaS) : fonction en tant que service. Chaque fournisseur de services infonuagiques dispose de son implémentation : Amazon Web Services Lambda, Azure Functions et Google Cloud Functions.

Ces pratiques ont été adoptées par les éditeurs de logiciels qui ont eu le plus de succès. Comprendre comment les équipes peuvent utiliser ces pratiques pour accélérer le développement donne un avantage concurrentiel.