Développement logiciel informatique: cycle de vie, architecture et coûts

Réponse courte

Dans le développement logiciel informatique, attendez-vous à un cycle d'ingénierie systématique allant des exigences initiales aux déploiements multi-environnements en passant par les builds automatisés. Les équipes conçoivent le code à l'aide d'outils fondamentaux comme HTML, CSS et JavaScript, puis soumettent leurs commits pour déclencher des pipelines de tests automatisés. Les versions progressent généralement à travers au moins 3 environnements (développement, test ou QA, et production) avant d'atteindre les utilisateurs finaux. Tout au long de ce processus, les développeurs concilient rapidité de livraison et gestion de la dette technique pour garantir la maintenabilité à long terme des architectures.

Photographie éditoriale illustrant le développement logiciel informatique
Repaying architectural technical debt increased class connectivity in open-source systems, raising FAN-IN by an average of 57.5% and FAN-OUT by 26.7%. — arxiv.org

“The problem is that software engineering does not have an adequate set of proven principles for defining quantifiable metrics.”

National Institute of Standards and Technology, Federal Agency

Le développement de logiciels informatiques d'entreprise sépare les opérations durables des dépenses d'investissement incontrôlées grâce à une discipline d'ingénierie structurée.

Principes fondamentaux et portée du développement de logiciels informatiques#

Des principes d'ingénierie rigoureux régissent le développement à travers les technologies d'interface et les normes formelles des systèmes.

Portée du développement Web et technologies fondamentales#

Le développement Web se concentre sur les points de contact client et les couches d'interface. Plus précisément, le développement Web implique la conception de l'apparence des sites Web, de la navigation et de l'organisation du contenu (Eicc). Les professionnels utilisent des langages de codage d'interface côté client tels que HTML, CSS et JavaScript pour gérer les graphiques, les applications interactives et le contenu du site (Eicc).

Le développement d'entreprise ne peut pas s'arrêter aux seules couches de présentation. Traiter le code de présentation comme l'intégralité d'un programme logiciel informatique revient à ignorer la fiabilité du système sous-jacent, l'intégrité de la base de données et les exigences opérationnelles en aval.

Normes formelles de génie logiciel#

Le développement de logiciels informatiques d'entreprise exige une conformité rigoureuse avec les normes opérationnelles établies. L'IEEE définit le génie logiciel comme l'application d'une approche systématique, disciplinée et quantifiable au développement, à la maintenance et à l'exploitation de logiciels (Nvlpubs).

Envisager le développement à travers des disciplines d'ingénierie formelles évite aux équipes d'adopter des correctifs ad hoc non validés. Cela garantit que la maintenance du système et les opérations quotidiennes restent aussi quantifiables et disciplinées que la création initiale des fonctionnalités.

Cycles de vie du développement logiciel et cadres de livraison#

Engineer gesturing during a discussion with a coworker by a standing counter in a modern software office.

La sélection d'un cadre de livraison nécessite d'équilibrer les exigences de planification structurée avec l'automatisation rapide des pipelines et les capacités du personnel. Le modèle traditionnel en cascade (Waterfall) impose de recueillir des exigences complètes au début d'un projet et n'autorise que peu ou pas de changements pendant le développement et les tests du logiciel (Ieeexplore). Lorsque les calendriers de livraison exigent une automatisation continue, les équipes mettent plutôt en œuvre des pipelines d'intégration et de déploiement continus.

Les systèmes d'intégration continue (CI) permettent aux développeurs de créer des branches de code distinctes, de prendre des instantanés du code source et de pousser le code vers des systèmes automatisés qui exécutent des scripts pour compiler et tester les modifications (IBM). Ces flux de travail reposent sur des pipelines d'automatisation multi-étapes structurés pour garantir la stabilité du logiciel :

Continuous Delivery Pipeline
  1. Developer commit
  2. Automated build & static analysis
  3. Independent development deployment
  4. QA validation
  5. Manual approval gate
  6. Production release

Pendant l'étape de compilation (build), le système CI/CD compile le code source en artefacts tout en exécutant des vérifications préalables à la compilation telles que le linting du code et l'analyse statique (Circleci). Un pipeline de build fonctionne entre le commit de code d'un développeur et la création d'un package ou d'un artefact déployable dans le cadre de l'intégration continue (Octopus). Les flux de travail (workflows) fonctionnent comme une couche d'orchestration au sein des pipelines CI/CD qui définit les séquences d'exécution, les règles de dépendance et les conditions de déclenchement des tâches (Circleci).

Un pipeline de déploiement complet se déclenche automatiquement via un webhook ou une intégration intégrée lorsqu'un développeur pousse du code vers un système de contrôle de version (Octopus). Ce pipeline commence lorsque le code est validé (committed) et se termine lorsqu'une version atteint les mains des utilisateurs, englobant la validation du code, les tests, la compilation (build), l'empaquetage (packaging) et le déploiement à travers différents environnements (Octopus). Le déploiement indépendant déploie des artefacts compilés et testés vers des environnements de développement qui reflètent idéalement l'infrastructure de production pour les tests fonctionnels (BMC).

Une structure d'environnements de déploiement minimale promeut couramment les versions à travers au moins 3 environnements : développement, test ou QA, et production (Octopus). De plus, les workflows CI/CD peuvent intégrer des étapes d'approbation manuelle pour exiger un examen humain avant d'exécuter des tâches spécifiques telles que les déploiements (Circleci).

La compétence technique d'un ingénieur logiciel nécessite une connaissance pratique des frameworks et des bibliothèques, de la gestion de bases de données et des systèmes de contrôle de version pour développer et maintenir des applications logicielles (Coursera). Pour évaluer et organiser ces compétences au sein des équipes, les entreprises utilisent des modèles de compétences structurés.

Composant du framework Métrique ou catégorie Portée opérationnelle
UComGSP Competency Gate 62 Hard, 63 Soft, 25 Essential Competencies (Sciencedirect) Catégorise les capacités d'ingénierie et identifie les exigences professionnelles de base
UComGSP Satisfaction Tiers Basic, Performance, Delighter (Sciencedirect) Évalue les niveaux de satisfaction des parties prenantes lors des évaluations de compétences
Engineering Skill Matrix IC1 through IC6 Levels (Sprad) Définit les attentes, les exemples comportementaux et la portée à travers 6 niveaux de contributeurs individuels

Évaluation des coûts de maintenance et de la dette technique#

La dette technique dans une base de code comprend des éléments structurels qui contribuent à accumuler des coûts d'exploitation et de maintenance accrus s'ils ne sont pas retravaillés (SEI). La dette technique architecturale trouve sa source dans des problèmes liés à l'architecture et à la conception, ainsi que dans le travail de réusinage causé par ces problèmes (SEI).

Lorsque les raccourcis architecturaux sont ignorés, le coût de réparation des défauts ultérieurs augmente considérablement. Dans les architectures d'entreprise, les composants centraux fortement couplés coûtent nettement plus cher à maintenir en termes d'activités liées aux défauts que les composants périphériques faiblement couplés (HBS). Les composants système centralisés présentant de lourdes dépendances génèrent une part disproportionnée de l'effort total de maintenance au cours de leur durée de vie opérationnelle.

Total Component Coupling = FAN-IN + FAN-OUT

Dans cette formule, FAN-IN représente le nombre de dépendances entrantes qui appellent un composant architectural, tandis que FAN-OUT mesure le nombre de composants externes que le composant appelle.

Les variations dans les dépendances de couplage indiquent que la résorption de la dette architecturale peut centraliser les dépendances et accroître la complexité structurelle des composants restants, même tout en éliminant des défauts de conception spécifiques (Arxiv).

Pour préserver la stabilité du système à long terme, les organisations d'ingénierie devraient auditer leur architecture cette semaine :

  1. Cartographier les modules système à haut risque en extrayant les métriques FAN-IN et FAN-OUT au niveau des classes dans l'ensemble des dépôts internes.
  2. Signaler les composants centraux fortement couplés qui entraînent un retravail disproportionné pour corriger les défauts lors des sprints de maintenance hebdomadaires.
  3. Mettre en place des barrières de qualité (quality gates) automatisées au sein des pipelines CI afin de bloquer les commits de code qui augmentent le couplage entre les modules critiques.
Comparaison directe des périmètres de pipelines automatisés dans la livraison continue de logiciels
Type de pipelineDéclencheur initial / Limite de départLimite de finPrincipales étapes inclusesPratique associée
Pipeline de buildCommit de code par le développeurCréation d'un artefact ou package déployableCompilation du code, tests, création d'artefactsIntégration continue (CI)
Pipeline de déploiementPush du développeur déclenchant un webhook ou une intégration nativeMise en production entre les mains des utilisateursCommit de code, tests, build, packaging et promotion à travers les environnementsIntégration continue et déploiement continu (CI/CD)
Caractéristiques de couplage structurel et impacts architecturaux sur les composants du système
Composant / Type de detteNiveau de couplageImpact observé sur la maintenanceImpact de la remédiation de la dette
Composants centraux / CoreFortement couplésGénère une activité liée aux anomalies et des coûts de maintenance nettement plus élevésCentralise les dépendances ; augmente le FAN-IN (+57.5% en moyenne) et le FAN-OUT (+26.7% en moyenne) après remboursement
Composants périphériquesFaiblement couplésGénère une proportion plus faible de l'activité globale de maintenance correctiveSert de logique périphérique à faible coût avec une concentration minimale de dépendances

Sources