Nos méthodologies

Les méthodologies nous permettent d'optimiser la gestion de projet tout au long du cycle de vie. Les cycles de réalisation des systèmes d'information peuvent devenir rapidement complexes. C'est pour cela que l'élaboration et la définition de méthodes sont nécessaires, dans le but d'obtenir une valeur ajoutée aux développements logiciels.
Durant les différentes phases d'un projet informatique, nous nous appuyons sur des méthodes éprouvées qui garantissent des livrables de qualité et nous permettent de mener à bien le projet depuis l'expression des besoins des utilisateurs jusqu'à la mise en production définitive.
Dans le cadre de la gouvernance des SI au sein de grandes entreprises, l'urbanisation devient une discipline incontournable pour faire évoluer son système en garantissant une cohérence vis-à-vis des objectifs et du métier de l'entreprise.
Les enjeux de l'urbanisation des SI.

2TUP UML MDA
RIA refresh COO
SOA J2EE POO

Présentons maintenant les méthodes que nous avons choisi d'appliquer suite à notre expérience dans la gestion et la réalisation de projets informatiques.


La gestion de projet

La gestion de projet (ou conduite de projet) est une démarche visant à organiser de bout en bout le bon déroulement d'un projet. Lorsque la gestion de projet porte sur un ensemble de projets concourant à un même objectif, on parle de gestion de programme.

Le Processus Unifié

Processus Unifié (PU ou UP en anglais pour Unified Process) est une méthode générique de gestion du cycle de vie d'un projet de développement logiciel. Basé sur l'approche orientée Objet et utilisant UML comme support, la méthode UP affiche les caractéristiques suivantes, exigences fondamentales préconisées par les créateurs d'UML :

  • itérative est incrémentale
  • pilotée par les cas d'utilisation
  • centrée sur l'architecture

UP est une méthode générique qui établi des préceptes. Ceux-ci sont "implémentés" dans les méthodologies concrètes comme RUP ou 2TUP.

Pour en savoir plus :

RUP

Créée par IBM, RUP (Rational Unified Process) est l'une des plus célèbres et des plus utilisées des implémentations du Processus Unifié. Elle définit un cadre de base complètement fonctionnel et est prévue pour être facilement personnalisée afin de s'adapter au mieux au contexte de son emploi.

Pour en savoir plus :

Scrum

Scrum est, avec XP (eXtreme Programming), une des méthodes Agiles les plus connues et répandues. Une méthode Agile met en avant 4 valeurs fondamentales :

  • Les individus et leurs interactions plus que les processus et les outils,
  • Des logiciels opérationnels plus qu'une documentation exhaustive,
  • La collaboration avec les clients plus que la négociation contractuelle,
  • L'adaptation au changement plus que le suivi d'un plan.

Scrum implique et place le client au centre du projet. Un Product backlog définit et priorise les exigences/fonctionnalités du produit. Le développement est itératif et incrémental suivant une stratégie de Sprint (en général de 2 à 4 semaines). Avant chaque sprint, les tâches à réaliser (User stories) sont spécifiées à partir du product backlog. Pendant le sprint, l'équipe n'est plus "ouverte au changement". A la fin du sprint, un produit embarquant les nouvelles fonctionnalités est livré et un retour est effectué par le client.

Ainsi, cette méthode permet de spécifier le produit au fil de l'eau et est particulièrement adaptée dans un contexte changeant ou non stabilisé. Elle a l'avantage d'impliquer le client dans le pilotage du projet avec une vraie possibilité d'action et de rentabiliser au maximum la productivité de l'équipe.

Pour en savoir plus :


Les spécifications fonctionnelles et techniques

Les spécifications fonctionnelles et techniques permettent d'élaborer une solution répondant aux exigences du clients. Elles vont décrire précisément les fonctionnalités du futur système d'information avec les différents cas à envisager ainsi que les spécificités techniques à respecter ou à mettre en œuvre.

UML

UML (Unified Modeling Language) est un langage de modélisation graphique utilisé dans la description de systèmes d'information avec une approche orientée Objet. Il fournit divers diagrammes permettant de spécifier les concepts, les interactions, les cas d'utilisation et leur scénarios... UML n'est pas une méthode de développement ou de de gestion de projet. Ce langage sert de base en MDA (Model Driven Architecture).

Merise

Merise est une méthode d'analyse et de conception généralement utilisée avec la méthodologie SDMS. Elle permet de décrire séparément mais en parallèle les données traitées et les traitements réalisés. Elle implique une étude de l'existant avant l'élaboration de la solution. Elle fournit également un certains nombre de modèles. Aujourd'hui, nous n'utilisons généralement de merise plus que le MPD (Modèle Physique de Données) qui permet de modéliser les schémas de bases de données.


La conception

La conception va permettre, à partir des spécifications fonctionnelles et techniques, d'imaginer le système d'information capable de répondre au besoins du client. C'est dans cette phase que l'on va modéliser le système.

Le concept objet et la programmation orientée objet

L'approche orientée Objet permet de voir le système d'information comme un ensemble d'objets interagissant et travaillant ensemble à rendre le service demandé. Elle permet de concevoir directement le système avec les notions du domaine fonctionnel du client.

Les Design Pattern

Les Design Patterns (ou patrons de conception), sont des modèles de conception objet éprouvés répondant à des problèmes récurrents dans les systèmes informatiques. Connus de tous les "concepteurs objets", ils permettent de gagner du temps en conception et développement ainsi qu'en qualité du code en évitant les solutions atypiques.

MDA

La démarche MDA (Model Driven Architecture) permet de modéliser le système d'information en incluant les spécificités techniques (plate-forme, langage de programmation) le plus tard possible, le but étant de se focaliser sur la problématique métier. Elle permet de générer automatiquement un certain nombre d'éléments comme le code ou la documentation.

SOA

La SOA (Service Oriented Architecture) est une architecture orientée services. Elle permet de concevoir une application comme un système consommant un ensemble de services. Ces services peuvent être rendu accessibles aux autres systèmes. Ainsi, les applications partagent des services plutôt que de les ré-implémenter à chaque fois, les services étant listés dans un catalogue. Cette architecture s'inscrit dans une logique d'urbanisation, car elle limite les dépendances (la mise à jour d'un service est automatiquement répercutée sur toutes les applications l'utilisant).


La qualité du code

La qualité du code permet de :

  • faciliter la maintenance et les évolutions
  • assurer la fiabilité et la robustesse du système
  • la montée en compétence rapide de nouveaux développeurs

Plusieurs éléments participent à la qualité du code, comme la mise en place d'une norme de programmation, les revues de code, la gestion des erreurs...

Les normes de programmation

Mise en place en début de projet et partagée par l'ensemble des développeur de l'équipe, la norme de programmation est composée d'un ensemble d'exigences. Ces exigences ont comme objectif la maintenabilité, la fiabilité ou encore la rentabilité. Elles permettent de faciliter la lecture et la modification du code, d'éviter les constructions à risque, de diminuer l'utilisation des ressources, d'optimiser les temps de réponse...

Les revues de code

Les revues de code ont pour objectifs de :

  • vérifier l'application des normes de programmation et l'uniformité du code
  • évaluer la complexité du code et la comparer aux seuils d'acceptabilité
  • détecter les structures à risque
  • s'assurer de la gestion des erreurs
  • proposer des optimisations du code

La réversibilité

En s'appuyant sur des standards, en utilisant des frameworks opensource, en documentant le projet avec UML, l'équipe de développement contribue à la réversibilité de la prestation. Ainsi, en cas de changement de prestataire, le produit est facilement récupérable et les coûts du projet faiblement impactés.


Les tests

Afin de s'assurer de la conformité, de la fiabilité et de la pérennité du système au fil des évolutions, des tests sont élaborés et réalisés. On distingue notamment :

Les tests unitaires

Mis en place par les développeurs, ce sont des tests de bas niveau permettant de s'assurer du bon fonctionnement et de la conformité des différentes parties du code composant l'application.

Les tests de montée en charge

Les tests de montée en charge permettent de vérifier la robustesse et les temps de réponse du système lors des périodes de "stress" comme une forte affluence sur un site pas exemple.


La gestion de versions

Un système de gestion de versions permet de stocker et de gérer les différentes versions d'un ensemble de fichiers. Ceci est particulièrement utile en développement logiciel afin de partager le code source et de suivre ses modifications. Outre le fait de gérer les différentes versions d'un fichier, les outils de gestion de version permettent de gérer des tags (équivalant à une photo de l'ensemble des fichiers à un instant T) ainsi que des branches (des dérivés du code source principal). Les branches servent, par exemple, à faire une correction de bug et une évolution en parallèle.

Il existent deux grandes familles de gestion de version :

  • la gestion de version centralisée : un dépôt unique contient toutes les versions des fichiers, les développeurs n'ayant en local qu'une copie de travail d'une version précise.
    Nous utilisons Subversion (SVN) comme système de gestion de version centralisée.
  • la gestion de version décentralisée : chaque développeur possède son dépôt contenant toutes les versions et le système propose un mécanisme de "synchronisation". Ceci permet une gestion de version sans avoir besoin d'un serveur.
    Nous utilisons Git comme système de gestion de version décentralisée.

Pour en savoir plus :