# Cycle en V

Le cycle en V (« V model » ou « Vee model » en anglais) est un modèle d'organisation des activités d'un projet qui se caractérise par un flux d'activité descendant qui détaille le produit jusqu'à sa réalisation, et un flux ascendant, qui assemble le produit en vérifiant sa qualité. Ce modèle est issu du modèle en cascade dont il reprend l'approche séquentielle et linéaire de phases.
Il l'enrichit cependant d'activités d'intégration de système à partir de composants plus élémentaires, et il met en regard chaque phase de production successive avec sa phase de validation correspondante, lui conférant ainsi la forme d'un V.
Issu de l'ingénierie système (en français : ingénierie des systèmes), le cycle en V est souvent considéré comme un cycle de projet, alors qu'ingénierie système et gestion de projet sont complémentaires. L'ingénierie système va se focaliser sur le développement du produit, alors que la gestion de projet va se concentrer sur l'atteinte des bénéfices attendus par le client ou l'utilisateur. Le cycle en V n'est donc pas un cycle de projet.

## Historique

Issu du monde de l'industrie, le cycle en V est devenu un standard de fait dans l'industrie du logiciel depuis les années 1980$^,$. Avec l'apparition de l'ingénierie des systèmes, c'est devenu un standard conceptuel dans de nombreux domaines de l'industrie.
Ce modèle s'est établi comme une alternative plus réaliste au modèle en cascade, en raison de sa prise en compte d'étapes supplémentaires lors de la validation pour distinguer les tests unitaires, les tests d'intégration et les tests systèmes, ce qui s'avère plus adapté aux systèmes complexes faits de plusieurs composants.
En 1991, sous l'égide du NCOSE (devenu depuis le INCOSE), le gouvernement américain développe le cycle en V pour un programme de satellites nécessitant des systèmes complexes. Le modèle retenu distingue le système, qui peut être composé de plusieurs segments, eux-mêmes composés d'éléments de configuration qui peuvent être matériels, logiciels ou organisationnels. Les éléments de configuration peuvent eux-mêmes être un assemblage de composants fait de parties plus élémentaires. Le modèle précise en détail une cinquantaine d'étapes (dont certaines suivent des chemins parallèles). Le modèle a depuis été repris par certaines agences de l'état fédéral telles que le Département des Transports.
En 1992, de façon indépendante mais concomitante, les autorités allemandes ont adopté le cycle en V, sous l'appellation « V-Modell », comme référence pour les développements informatiques du ministère de la défense. Depuis 1996 son utilisation devient la règle pour les projets de systèmes d'information de l'état fédéral. Il a été remplacé en 2005 par le « V-Modell XT », conçu pour une plus grande flexibilité (le suffixe XT signifiant « eXtreme Tailoring », c'est-à-dire « flexibilité extrême » en anglais). Il a été enrichi pour mieux prendre en charge l'intégration de systèmes et est de plus appuyé par un outil informatique. Ce modèle couvre une dizaine d'étapes pour le cycle en V mais également une dizaine d'activités plus générales. Il est donc conçu comme un cadre de référence intégré pour la gestion de projet et le cycle de vie d'un système complexe avec une répartition des rôles et responsabilités.
De nombreux domaines industriels ont depuis adopté le cycle en V dans les pratiques ou normes sectorielles, comme l'aéronautique$^,$.

## Principes
### Vue d'ensemble

De manière simplifiée, le cycle en V comprend les grandes étapes que l'on retrouve, pour la plupart, dans le modèle en cascade :
* Une première série d'étapes, le flux descendant, vise à détailler le produit jusqu'à sa réalisation. Il comprend l'expression des besoins, l'analyse, la conception, puis la mise en œuvre. Pour un logiciel, la mise en œuvre correspond essentiellement à la programmation. Pour le matériel c'est la réalisation d'un équipement. Pour des mesures organisationnelles, la mise en œuvre correspond à la rédaction de manuels de procédure.
* Une deuxième série d'étapes, le flux ascendant, vise à valider le produit jusqu'à sa « recette », c'est-à-dire son acceptation par le client. Il comprend principalement une série de tests jusqu'à pouvoir valider que le produit répond au besoin et aux exigences.
Toutefois, le cycle en V apporte une dimension supplémentaire, qui est celle du système. Le produit du projet est alors considéré comme un « système » fait de plusieurs éléments qui sont des modules ou composants. Ceci requiert dans le flux descendant de distinguer une conception générale du système dans son ensemble, et une conception détaillée de chaque composant. La mise en œuvre se fait alors composant par composant. Dans le flux ascendant, il convient de la même façon d'effectuer des tests unitaires de chaque composant, d'intégrer le système (c'est-à-dire d'assembler ses composants), puis de faire un test d'integration.
Le cycle en V apporte également une plus grande attention sur la vérification et la validation. Les tests unitaires et les tests d'intégration vérifient que les composants et le système fonctionnent conformément à la conception. Le cycle en V enrichit ces étapes avec un test de validation du système, qui confirme non seulement que le système répond à la conception, mais qu'il répond aux exigences.
Le niveau de décomposition n'est pas figé. Certains modèles de cycle en V décomposent les systèmes en sous-systèmes avant de les décomposer en composant. Pour chaque niveau de complexité supplémentaire, s'ajoute alors un étage dans le V.

### Synthèse des étapes

Les étapes du modèle sont alors :
* Exigences : les exigences font l'objet d'une expression des besoins. Le cas échéant, une étude de faisabilité peut être conduite avant d'engager les travaux;
* Analyse : il s'agit, à partir de l'expression de besoin, d'établir le cahier des charges fonctionnel ou les spécifications fonctionnelles;
* Conception générale, aussi appelé conception architecturale ou conception préliminaire: il s'agit de concevoir le système qui doit répondre aux exigences et de définir son architecture, et en particulier les différents composants nécessaires;
* Conception détaillée: il s'agit de concevoir chaque composant, et la manière dont ils contribuent à la réponse aux besoins;
* Mise en œuvre: il s'agit de réaliser chaque composant nécessaire. Pour les composants et systèmes logiciels, l'activité est essentiellement le codage;
* Test unitaire: il s'agit de vérifier le bon fonctionnement et la conformité de chaque composant à sa conception détaillée;
* Intégration et test d'intégration: il s'agit d'assembler le système à partir de tous ses composants, et de vérifier que le système dans son ensemble fonctionne conformément à sa conception générale;
* Test système (anciennement « tests fonctionnels ») : vérification que le système est conforme aux exigences;
* Test d'acceptation (également appelés « recette » dans le contexte de la sous-traitance) : validation du système par rapport à sa conformité aux besoins exprimés.
Une des différences entre la recette usine et la recette finale est essentiellement contractuelle. Aussi, il n'est pas rare que le maître d'ouvrage délègue la validation auprès d'un organisme de validation, cet organisme étant bien souvent constitué d'experts afin de diminuer les erreurs de validation.
Au niveau de la gestion de projet, les différentes étapes peuvent donner lieu à des phases distinctes sur l'axe horizontal du temps. Plusieurs étapes successives peuvent toutefois être regroupées au sein d'une phase plus large.

## Rôles

Le cycle en V définit des étapes sans en définir les rôles ou les responsabilités. Toutefois certaines applications du modèle définissent une répartition des rôles entre l'organisme décideur (maitre d'ouvrage) et le sous-traitant ayant la charge de réaliser le projet (maitre d'œuvre).
Dans le contexte des projets de grande envergure ont émergé des rôles pour partager et désigner les responsabilités :
* Maîtrise d'ouvrage (MOA) qui regroupe les fonctions suivantes :
** le maître d’ouvrage stratégique (MOAS) ;
** le maître d’ouvrage délégué (MOAD) ;
** le maître d’ouvrage opérationnel (MOAO) ;
** l’assistant à maîtrise d’ouvrage (AMOA ou AMO) ;
** l’expert métier ;
** enfin l’utilisateur, au service duquel se trouvent toutes les autres fonctions.
* Maîtrise d'œuvre (MOE)
** Maîtrise d'œuvre déléguée (MOED)
** l'équipe architecturale
** l'équipe de développement
** Titulaire de marché
* Comité de pilotage: Pour améliorer le suivi du projet sur le plan de l'observation et des choix à effectuer, il se constitue généralement une équipe transversale au projet : le comité de pilotage. Ce comité de pilotage est généralement constitué d'un membre de chaque catégorie de rôle. Ce comité joue en quelque sorte le rôle de gaine de protection autour du V. Ce comité analyse les métriques issues des activités de chaque phase afin de réaliser la jonction entre la MOE et la MOA.
Répartition des rôles en fonction des étapes :
| Niveau de Détail | Rôles | Besoins et Faisabilité | Spécification | Conception Architecturale | Conception Détaillée | Codage | Tests unitaires | Tests d'intégration | Tests fonctionnels | Tests d'acceptation (recette) |
| Fonctionnel | MOA + AMOA | X | | | | | | | | X |
| Système | MOE + MOED + AMOA | | X | | | | | | X | |
| Technique et Métier | Équipe Architecturale | | | X | | | | X | | |
| Composant | Équipe de Développement | | | | X | X | X | | | |
On retrouve dans ce découpage le V, d'où le nom de ce modèle.

## Documents par phase

Pour une bonne communication entre les différents partenaires du projet, il est nécessaire d'établir des documents de référence.
Documents en fonction des étapes :
| Besoins et Faisabilité | Spécification | Conception Architecturale | Conception Détaillée | Codage | Tests unitaires | Tests d'intégration | Tests fonctionnels | Tests d'acceptation (Recette) |
| Spécification des Besoins UtilisateurCahier des charges | | | | | | | | Rapport de Recette |
| | Spécifications GénéralesSpécification Technique des Besoins | | | | | | Procès-verbal de Validation | |
| | | Dossier de Définition du LogicielDossier d'Architecture TechniquePlan de Tests | | | | Rapport de Tests d'Intégration | | |
| | | | Rapport de Conception Détaillée | | Rapport de Tests Unitaires | | | |
| | | | | Code source | | | | |

## Risques inhérents au cycle en V

Il y a un risque important de se rendre compte au cours de la mise en œuvre que les spécifications initiales étaient incomplètes, fausses, ou irréalisables. Il y a également un risque de voir de nouvelles fonctionnalités requise par les clients (risque de dérive des objectifs), ainsi que d'autres risques évoqués dans l'ouvrage « Le Mythe du mois-homme ». C'est principalement pour cette raison que le cycle en V n'est pas toujours adapté à un développement logiciel. Si les projets longue durée sont adaptés à ce mode de gestion de projet, ce sont également souvent eux qui risquent de ne plus « coller » aux besoins qui évoluent dans le temps.
D'autres modèles permettent plus facilement des modifications (parfois radicales) de la conception initiale à la suite d'une première mise en œuvre ou série de mises en œuvre. Voir par exemple à ce sujet : Développement rapide d'applications ou Méthode agile de gestion de projet. Par contre, ces méthodes manquent parfois de traçabilité ce qui nécessite d'impliquer le client à la fois en termes de conception et également en termes juridiques : avec un cycle en V, le client est censé recevoir ce qu'il a commandé alors qu'avec des méthodes « agiles », le client devient co-développeur et intervient donc au niveau du projet. Cette nuance peut avoir une importance en cas de désaccord entre le client et l'exécutant, notamment si le désaccord est porté devant un tribunal.
Un compromis consiste à appliquer un cycle en V le plus court possible et à faire évoluer le projet sous forme de versions, prenant ainsi en compte le fait que le projet ne sera pas parfait et qu'il sera amélioré au fil des versions. Cela permet également de bénéficier du retour d'expérience des versions précédentes. Ce compromis est particulièrement formateur au sein d'un projet, pour les équipes des phases « amont » consacrées à l'étude du besoin, aux spécifications et à la conception (la « théorie »), qui seront ainsi confrontées aux résultats concrets (la « pratique »). À noter que la société Microsoft pratique ce compromis depuis plusieurs décennies : maîtriser la traçabilité et les délais à l'aide d'une succession de cycle en V les plus courts possibles, quitte à diffuser ultérieurement les mises à jour… Par exemple tous les systèmes d'exploitation Microsoft depuis Windows 2000).

## Critiques

Le cycle en V est issu du modèle en cascade et en hérite les défauts liés à l'approche séquentielle et linéaire de phases. Ainsi, le cycle de vie dépend d'exigences identifiées en début de projet, qui peuvent être de qualité insuffisante ou instables et avoir un impact sur la qualité et les coûts des phases en aval. On peut également lui reprocher la rigidité qu'engendre la séparation de phases par activité : dans le domaine du logiciel il est ainsi difficile en pratique, voire impossible, de totalement détacher la conception d'un projet de sa réalisation.
Le cycle en V est reconnu pour son approche rigoureuse de développement de produit à partir d'exigences. Mais sa vue séquentielle et linéaire est réductionniste car elle ne tient pas suffisamment compte des interdépendances entre les éléments du système, en particulier pour les systèmes requérant une forte intégration. Il est donc nécessaire de remédier à ces limitations d'une part par une approche interdisciplinaire de l'architecture, et d'autre part par des pratiques métiers assurant la cohérence des exigences et de la conception à travers les différentes étapes.
Par ailleurs, certains auteurs constatent que dans le domaine de l'ingénierie des systèmes, les itérations sont la règle et non l'exception. Ils suggèrent que la planification devrait en tenir compte, par exemple en prévoyant une étape de prototypage permettant de valider les principes de la conception (une idée déjà proposée par Royce en 1970 pour l'approche en cascade). Cette analyse est confirmée par des études dans le domaine du génie logiciel qui tendent à démontrer des performances supérieures pour les méthodes incrémentales et itératives.

## Évolutions

Des évolutions récentes cherchent à remédier à ces critiques par :
* une approche incrémentale du cycle en V: La méthodologie « V-Modell XT » adoptée par le gouvernement allemand en 2005, prévoit ainsi la possibilité de choisir, parmi plusieurs stratégies de pilotage de projet, une approche incrémentale. Celle-ci permet alors de concevoir le projet sous forme de succession de projets partiels car la livraison finale ne pouvant se faire qu'après validation.
* Cycle en V avec prototypage virtuel (1 et 2) et itérations basées sur la mise en œuvre des composants (3) et l'intégration des composants (4).des techniques de réduction de risques : on cherche alors à réduire les incertitudes et facteurs d'instabilité aussi tôt que possible dans le cycle. Plusieurs stratégies sont envisageables, par exemple une étude comparative des solutions potentielles en amont, un prototype pour valider les idées de la conception, des itérations pour la production (éventuellement incrémentale) des composants, voire, une phase pilote avant l'acceptation finale. Une approche particulière consiste à recourir pour la conception à des modèles permettant par des simulations à éprouver celle-ci (technique dit du « prototype virtuel »). On obtient ainsi plusieurs itérations de conception avant de passer à la mise en œuvre.
* une variation de cette approche consiste en un double ou un triple V qui prévoit de tester toutes les étapes du flux descendant sur la base de modèles conceptuels.
Une autre évolution consiste à interpréter les activités du modèle en V non plus comme des étapes distinctes strictement séquentielles, mais comme des processus interdépendants. Cette approche est utilisée par exemple dans les normes IEC 62304 relative aux logiciels de dispositifs médicaux et IEC 82304-1 relative aux exigences générales pour la sécurité des logiciels de santé: celles-ci sont souvent comprise comme imposant le cycle en V, alors qu'elles ne font qu'imposer des exigences de processus sans en fixer la chronologie$^,$.
Enfin, des praticiens recommandent en outre de combiner le cycle en V avec des pratiques agiles (par exemple: exprimer les exigences sous forme de récit utilisateur, programmer en binôme ou encore adopter le « TDD », cette dernière pratique pouvant être vue comme une approche de programmation se substituant à la planification des tests prévue dans le cycle en V).