Prises de Note 2023-2024 Genie Logiciel
Prises de Note 2023-2024 Genie Logiciel
Prises de Note 2023-2024 Genie Logiciel
Maxime AYI
Notes de Génie Logiciel
1 Introduction
1.1 Qu'est-ce qu'un logiciel ?
Un logiciel est un ensemble de programmes informatiques (du code) mais également un certain
nombre de documents se rapportant à ces programmes et nécessaires à leur installation, utilisation,
développement et maintenance : spécifications, schémas conceptuels, jeux de tests, mode
d'emploi, ... https://perso.liris.cnrs.fr/christine.solnon/agl.html
Exemple de logiciel : Application sur téléphone, site web, jeux vidéo, programme s’exécutant dans
un microcontrôleur embarqué dans une voiture, un train ou un avion
Le développeur ou Maître d’œuvre : celui qui va écrire le code source du logiciel et le rendre
exécutable
Dans un contrat informatique ou un projet informatique, c’est la personne (généralement un
éditeur de logiciels ou une SSII) qui est chargée de la réalisation de la solution informatique,
objet du contrat conclu avec maître d'ouvrage.
https://www.baumann-avocats.com/definition/moe.php
Le propriétaire ou Maître d’ouvrage : va payer le développeur et va fournir le logiciel aux
utilisateurs (gratuitement ou contre de l’argent)
C’est, dans un contrat informatique ou un projet informatique, la personne qui est à l'origine
du projet. Le MOA (propriétaire) est donc l'entité juridique, qui confie la réalisation du projet
informatique à un ou plusieurs prestataires informatiques (développeurs).
https://www.baumann-avocats.com/definition/moa.php
L’utilisateur : celui qui va exploiter le logiciel
Pour être utiles, les exigences doivent remplir des conditions. Elles doivent être :
- Claires : c’est-à-dire concrète et rédiger dans un langage accessible à tous, sans jargons
inexpliqués.
- Non ambiguës : lors de l’écriture des exigences, s’assurer que les formulations ne pourraient
pas être males interprétées.
- Cohérentes : en effet, les exigences ne doivent pas se contredire et être réalisables
- Prioritisées : Pour implémenter les fonctionnalités les plus importantes d’abord, il faut
assigner des priorités aux exigences. L’acronyme MOSCOW représente une méthode de
prioritisassions. Les consonnes de ce mot correspondent à :
o Must : fonctionnalités jugées nécessaires au succès du projet. Elles doivent être
inclues dans la version courante du logiciel
o Should : fonctionnalités importantes à inclure dès que possible
o Could : fonctionnalités qui pourraient être omises et intégrées dans les versions
suivantes du logiciel. Tout dépendra du temps disponible
o Won’t : fonctionnalités optionnelles, pour lesquelles l’utilisateur est d’accord de
l’intégration dans d’autres versions du logiciel.
- Testable : les exigences doivent être précises et vérifiables
Une application donnée dispose de plusieurs exigences qui peuvent être regroupées dans différentes
catégories. Mise à part le premier bénéfice de la catégorisation qui est le classement des exigences,
le second et principal avantage de la catégorisation est leur utilisation en vue de vérifier que tous les
types d’exigences ont été rédigées. Ainsi, lors de la rédaction des exigences, on peut identifier des
exigences manquantes en passant en revue les catégories. L’acronyme anglais FURPS+ représente
une méthode de catégorisation. Voici les catégories qu’il définit :
- Functionality : Cette catégorie regroupe les exigences qui décrivent les fonctionnalités
générales du logiciel (ce que fait le logiciel, ses interfaces avec d’autres applications, la
sécurité, …).
- Usability : Ces exigences décrivent ce à quoi devrait ressembler le logiciel. Ce sont les
fonctionnalités orientées utilisateurs comme : l’apparence générale de l’application, sa
facilité d’utilisation, les méthodes de navigation, et sa responsivité.
- Reliability : Inclut les exigences traitant de la fiabilité du logiciel. Par exemple, quand le
système devrait être disponible (12 heures par jour de 7h00 à 19h00), à quelle fréquence le
système peut faillir (3 fois par an, et pas plus d'une heure à chaque fois), et sa précision
(marge d’erreur sur un calcul).
- Performance : Ces exigences parlent de l’efficacité et de la performance du système (vitesse
de l’application, consommation mémoire, utilisation du disque, et capacité de la base de
données)
- Supportability : Ces exigences traitent de la facilité à maintenir l’application, à la tester, et à
la configurer (paramétrage pour y intégrer de la souplesse).
- Design constraints : Ce sont des contraintes sur la conception et le design du system qui sont
motivées par d'autres facteurs tels que la plate-forme matérielle, la plate-forme logicielle, les
caractéristiques du réseau ou la base de données. Par exemple, pour des raisons de fiabilité,
on peut exiger que le projet utilise une base de données miroir qui stocke chaque transaction
effectuée, pour qu’en cas de panne de la base de données principale, on ait accès aux
données.
- Implementation requirements : Ce sont des exigences sur la manière dont le logiciel est
construit. Par exemple, le respect de la norme ISO 9000, …
- Interface requirements : Ce sont les exigences liées à l’interfaçage avec les autres systèmes.
Elles indiquent quels autres systèmes échangeront des données avec celui qui est construit.
Elles décrivent des choses comme les types d'interactions qui auront lieu, quand elles se
produiront et le format des données qui seront échangées.
- Physical requirements : Ce sont des exigences physiques qui sont des contraintes sur le
matériel et les périphériques physiques que le système utilisera. Par exemple, ils peuvent
nécessiter une quantité minimale de puissance de traitement, une puissance électrique
maximale, une portabilité aisée (comme une tablette ou un smartphone), écrans tactiles ou
des caractéristiques environnementales (doit fonctionner dans des conditions de chaleurs
extrêmes).
https://businessanalysttraininghyderabad.wordpress.com/2014/08/05/what-is-furps/
De ce point de vue, la conception de haut niveau est la première étape du processus de hachage. Le
but est de diviser le système en morceaux suffisamment autonomes pour être donnés à des équipes
différentes pour implémentation.
La seconde étape du processus de hachage est la conception bas niveau. Elle consiste à affiner les
éléments conçus lors de la conception haut niveau, afin d’avoir une image détaillée du code à écrire
lors de l’implémentation.
Ceci dit la frontière en la conception de haut et bas niveau, n’est pas étanche.
2.2.1.1 Sécurité
Le plus évident signe de la sécurité d’une application est l’écran de login. Mais la conception de haut
niveau doit identifier et répondre aux autres besoins en termes de sécurité qui sont par exemple :
2.2.1.2 Matériels
Ici, on spécifie le matériel nécessaire à l’exécution de l’application. Il s’agit non seulement des
ordinateurs (mainframes, ordinateurs de bureau, ordinateurs portables, tablettes et téléphones),
mais aussi d’autres matériels comme :
- Les imprimantes
- Les composants réseaux (routeurs, modems, câbles, …)
- Les serveurs (de bases de données, web, et d’application)
- Les instruments spéciaux (microscopes, module GPS, …)
- Les matériels Audios et vidéos (webcams, casques et VOIP)
Les détails des interfaces seront définis lors de la conception bas niveau.
2.2.1.6 Architecture
L'architecture d'une application décrit comment ses éléments s'emboîtent au niveau le plus élevé.
Les développeurs choisissent parmi les nombreux types d'architectures qui existent, celle qui
convient le mieux, au problème posé. Voici certaines des architectures les plus courantes :
- Monolithique : Dans une architecture monolithique, un seul programme fait tout. Il affiche
l'interface utilisateur, accède aux données, traite les commandes des clients, imprime les
factures, et fait tout autre chose que devrait faire l'application. Cette architecture présente
des inconvénients importants. En particulier, les pièces du système sont liées étroitement
ensemble, de sorte qu'il ne donne pas beaucoup de flexibilité. Cependant, les architectures
monolithiques présentent certains avantages. Parce que tout est intégré dans un seul
programme, il n'y a pas besoin de communication compliquée à travers les réseaux. Aussi,
elle est utile pour de petites applications développées par un seul programmeur, ou une
seule équipe.
- Client/serveur et multi-tier : Une architecture client/serveur sépare les éléments du système
qui doivent utiliser une fonction particulière (clients) des parties du système qui fournissent
ces fonctions (les serveurs). Cette dissociation permet aux développeurs de travailler sur
l'application séparément. Exemple : architectures à 2, 3 ou plusieurs niveaux (2-tier, 3-tier,
etc. ...)
- Architecture orientée services (ou SOA, Service-Oriented Architecture) : elle peut être
définie comme une façon de bâtir une application logicielle en assemblant plusieurs
composantes logicielles autonomes. Un système logiciel bâti suivant ce modèle est
essentiellement une collection de services qui communiquent entre eux. La communication
peut impliquer une simple transmission de données entre deux services ou la coordination
d'une activité par plusieurs services. Un service SOA est une unité discrète de fonctionnalités
accessibles à distance, exploitée et mise à jour de manière indépendante. Autrement dit,
c’est une composante d’un système informatisé qui met à disposition de ses consommateurs
un accès centralisé à une ou plusieurs fonctions d’affaires. Les consommateurs peuvent être
des acteurs humains, du matériel ou des logiciels qui interviennent dans le processus
d’affaires que supporte ce service. https://www.lesmicroservices.com/2020/05/limites-soa-
esb.html
Ainsi, l’application est conçue avec des capacités de partage, généralement à l’aide d’une API
bien définie. Un aspect important de l’architecture SOA est l’utilisation d’ESB (Entreprise
Service Bus) qui est une famille de produit conçue pour servir d’intermédiaire entre le client
et les services, et entre les services eux-mêmes. Ainsi, lors de la création d’un nouveau
service ayant besoin des données d’un autre service préexistant dans une entreprise, on n’a
pas besoin de toucher à l’ancien code, on a qu’a s’abonner à ce service pour échanger.
Pour plus d’informations lire : https://www.ibm.com/fr-fr/cloud/learn/soa
- Architecture Distribuée : Dans une architecture distribuée, différentes parties de
l'application s'exécutent sur différents processeurs et peuvent tourner en même temps. Les
processeurs peuvent se trouver sur différents ordinateurs dispersés sur le réseau, ou il peut
s'agir de cœurs différents sur un même ordinateur. Les architectures orientées services et
multi-tiers sont souvent distribuées, avec différentes parties du système s'exécutant sur
différents ordinateurs. En général, les applications distribuées peuvent être extrêmement
confuses et difficiles à déboguer.
NB : Une application n'a pas besoin de s'en tenir à une seule architecture. Différentes parties de
l'application peuvent utiliser différentes approches de conception.
Voici quelques exemples de rapports pouvant être générés pour diverses applications :
Si notre choix se porte sur la base de données relationnelles, il faudra préciser quelle base de
données sera utilisée (Oracle, MySQL, Access, …), les tables qui la constitueront et leurs relations. Les
détails (champs, clés primaires, …) seront définis lors de la conception bas niveau.
NB : Les différents diagrammes UML seront utilisés pour modéliser les différents aspects de
l’application
La conception de bas niveau quant à elle, fournit des détails supplémentaires et nécessaires, avant
que les développeurs n’écrivent le code. Elle donne des indications plus précises sur la façon dont les
parties du système fonctionneront seules et ensemble. Elle affine la définition de la base de données,
les classes principales et les interfaces internes et externes.
Ceci dit, la frontière entre la conception de haut niveau et de bas niveau est souvent assez floue.
2.3 Codage
La phase de codage a pour objectif d’écrire le code source correspondant au design précédemment
conçu. Elle transforme des solutions proposées lors de la conception en un code opérationnel.
L’application prends ainsi vie. Pour réussir sa mission, le développeur a besoin de certains outils
comme :
Une fois les outils en place, le codage proprement dit démarre. Elle consiste à écrire le code
réalisant les taches identifiées lors de la phase de conception. Mais Pour les problèmes plus
compliqués, il y a une activité préalable qui consiste à rechercher des algorithmes possibles pour
résoudre le problème. Par exemple, un algorithme pour :
C’est seulement après, que le développeur écrit le code correspondant, en faisant attention à bien le
commenter.
2.4 Le test
L’objectif principal de la phase de test est d'étudier le code pour voir s'il répond aux exigences
(spécifications) et s'il fonctionne correctement en toutes circonstances (c’est-à-dire que le
programme fonctionne correctement avec n'importe quel ensemble d'entrées). Au cours de cette
activité, on identifie les comportements problématiques du logiciel (bugs), et on les corrige afin
d’améliorer sa qualité.
Il faut signaler qu’un logiciel à toujours des bugs et que si on veut livrer l’application à temps, on ne
pourra jamais finir de tous les éliminer. Il faut par contre essayer de corriger au maximum, ceux qui
irriteront le plus les utilisateurs.
Pour identifier un maximum de bug, le plus tôt possible, il existe plusieurs niveaux de test décits ci-
après.
NB : La différence entre les tests d’acceptation et les tests de validation, est que la première est
exécutée par la MOA, alors que la seconde est exécutée par la MOE.
- Tests exhaustifs : Dans certains cas, on pourra peut-être tester une méthode avec toutes les
entrées possibles. Example méthode avec 2 entrées baouléennes "oui" et "non". Même si ce
type de test exhaustif prouve de manière concluante qu'une méthode fonctionne
correctement dans toutes les circonstances, la plupart du temps, les méthodes demandent
trop de combinaisons de paramètres d'entrée pour qu'on puisse toutes les essayer.
- Test boîte noire (black box) : Avec cette technique, on prétend que la méthode, fonction ou
composant logiciel est une boîte noire à l'intérieur de laquelle on ne peut pas jeter un coup
d'œil. On sait ce qu'elle est censée faire, mais on a aucune idée de comment cela fonctionne.
On applique ensuite toutes sortes d'entrées sur la méthode pour vérifier son comportement.
o Même si on ne sait pas comment fonctionne la méthode, on peut essayer de deviner
des valeurs qui pourraient la perturber. En règle générale, celles-ci impliquent des
valeurs spéciales telles que 0 pour les nombres et vide pour les chaînes. Ils peuvent
aussi inclure les valeurs les plus grandes et les plus petites possibles. Pour les
chaînes, ça pourrait signifier une chaîne entièrement vide ou tous les caractères ∼.
o Enfin, regardez les valeurs limites. Si une méthode attend un paramètre à virgule
flottante compris entre 0,0 et 1.0, assurez-vous qu'il peut gérer ces deux valeurs.
- Tests boîte blanche (white box) : Avec cette technique, on peut connaître le fonctionnement
de la méthode, fonction, ou composant logiciel. On conçoit alors les tests pour essayer de
faire planter l'objet tester (méthode, fonction, … ).
- Tests boîte grise (gray box) : c'est une combinaison de tests boîte blanche et boîte noire. On
connaît certains éléments internes de la méthode testée. Cette connaissance partielle
permet de concevoir des tests spécifiques pour la vérifier.
2.5 Le déploiement
La phase de déploiement a pour objectif de déplacer le logiciel développé de l’environnement de
développement vers un environnement de production, de manière à ce que les utilisateurs puissent y
accéder.
Il est recommandé d’élaborer un plan de déploiement anticipant les problèmes qui pourraient se
poser, et de mettre en œuvre une stratégie de déploiement permettant de limiter les risques.
Ainsi la planification du déploiement commence par, un listing des étapes à suivre. Il s'agit, de décrire
en détail comment chaque étape est censée fonctionner. Ensuite, pour chaque étape, lister les
façons dont cette étape pourrait échouer. Décrire ensuite les mesures qu'on prendra si l'un de ces
échecs se produisait. Décrire les solutions de contournement ou les approches alternatives qu'on
pourrait utiliser.
Souvent, l'action qui détermine le point de non-retour consiste à migrer les utilisateurs vers le
nouveau système. On peut configurer des réseaux, installer de nouvelles imprimantes et des
ordinateurs, etc.…, mais tant que personnes utilisent la nouvelle application, il est relativement facile
de revenir en arrière. Comment faire migrer intelligemment les utilisateurs vers le nouveau
système ?
- Déploiement par étapes (staged deployment): il s’agit de créer une zone entièrement
fonctionnelle où on pourra résoudre tous les problèmes avant la migration réelle. Une fois
que l'installation fonctionne correctement, des utilisateurs choisis testent la nouvelle
application dans un environnement plus réaliste que celui utilisé par les développeurs. Ils
signalent les problèmes que les autres utilisateurs remarqueraient. Et lorsque tous les
nouveaux bugs sont corrigés, on peut dans la nuit déployer sur le PC de tous les utilisateurs.
- Transfert graduel (gradual cutover) : on installe la nouvelle application pour certains
utilisateurs pendant que d'autres utilisateurs continuent travailler avec leur système
préexistant. On intègre progressivement tous les autres utilisateurs. L'avantage de cette
approche est qu’on ne détruit pas la productivité de chaque utilisateur si quelque chose se
passe mal.
- Déploiement incrémentiel (incremental deployment) : on livre aux utilisateurs, les
fonctionnalités de l’application une à une. D’abord une première, puis lorsqu’ils y sont
habitués, une seconde. Ainsi de suite. Cette méthode ne fonctionne pas bien avec les
grandes applications monolithiques car on ne peut généralement pas installer seulement une
partie du système.
2.6 Maintenance
La phase de maintenance : a pour objectif de corriger les bugs et problèmes identifiés durant
l’utilisation du logiciel (après le déploiement). Elle intègre aussi les évolutions de fonctionnalité.
NB : Pour effectuer les tâches de maintenance avec succès, vous aurait besoin de suivre à nouveau,
les étapes du développement logiciel : recueil des exigences, conception de haut niveau, conception
de bas niveau, codage, tests et déploiement. (En fait, vous pouvez souvent abréger certaines de ces
étapes. Par exemple vous n'aurez probablement pas besoin d'une conception approfondie de de
haut niveau pour corriger un bug d'une seule ligne.)
Une façon de catégoriser les modèles de développement est la manière dont ils gèrent les exigences.
Il y des modèles prédictifs et des modèles adaptatifs.
Dans un modèle prédictif de développement, on prévoit à l'avance ce qui doit être fait, puis on le
fait. On utilise les exigences pour concevoir le système et on utilise la conception comme modèle
pour écrire le code. On teste le code, et on demande aux clients de vérifier que le logiciel fait
vraiment ce que la spécification dit qu'il devrait, puis on sabre le champagne.
Malheureusement, il est souvent difficile de prédire exactement ce qu'une application doit faire et
comment on devrait la construire. En effet, les besoins clients peuvent changer au cours du projet,
ou on peut ne pas être familier d’une technique de programmation et notre conception ne marchera
pas du premier coup.
Un modèle adaptatif vous permet de modifier les objectifs du projet si nécessaire au cours du
développement. Au lieu de choisir un design au départ et de s'acharner dessus même quand la
conception n'est plus pertinente, un modèle adaptatif vous permet de réévaluer et de décider
périodiquement si vous devez changer de direction.
L’inspecteur de police dans les séries, est une belle analogie du modèle adaptatif. Cela commence
par un meurtre. Son objectif est de trouver le tueur. Il sait certaines des choses qu’il doit faire
(interroger des témoins, vérifiez les enregistrements de téléphone portable, ...), mais il ne sait pas
exactement où l'affaire va le mener. Il suit le premier indice, qui le mène à un deuxième, puis à un
troisième, et ainsi de suite. Chaque fois qu’il trouve un nouvel indice, il met à jour la direction de
l'enquête.
On pourrait penser qu'un modèle adaptatif est toujours préférable à un modèle prédictif, mais il y a
des cas dans lequel un modèle prédictif fonctionne assez bien. Par exemple, les modèles prédictifs
fonctionnent bien lorsque le projet est relativement petit ; on sait exactement ce qu'on doit faire, et
le délai est suffisamment court pour que les exigences ne changent pas au cours du développement.
Dans la suite de ce cours nous verront plusieurs modèles prédictifs (Modèle en cascade, Modèle en
V) et plusieurs modèles adaptatifs (Modèles en spiral, Modèle Agile : Srum)
Le modèle en cascade peut fonctionner raisonnablement bien si toutes les hypothèses suivantes sont
satisfaites :
3.2 Modèle en V
Le modèle en V est essentiellement un modèle en cascade qui a été plié en forme de V au niveau du
codage.
Les tâches sur le côté gauche du modèle en V, décomposent l'application de son niveau conceptuel le
plus élevé en morceaux implémentables, c'est la décomposition.
Les tâches sur le côté droit du modèle en V, partent des morceaux finis d'application et tendent vers
des niveaux de plus en plus élevés d’abstraction. Au niveau le plus bas, les tests vérifient que le code
fonctionne. Au niveau suivant, la vérification confirme que l'application satisfait aux exigences, et la
validation confirme que l'application répond aux besoins des clients. Cette démarche de remontée
jusqu'au sommet conceptuel de l'application est appelée intégration. Chacune des tâches de gauche
correspond à une tâche de droite avec un niveau d'abstraction similaire.
Ce modèle améliore le modèle en cascade. En effet, au lieu d’attendre la 4ieme phase pour rédiger
les tests, on le fait au fur et à mesure de l’évolution de la spécification, au codage, en passant par la
conception. Chacune de ces phases à un ensemble de test qui lui correspond. Ainsi, un problème
détecté lors des tests unitaires sera résolu au niveau du code ; alors qu’un problème identifié lors des
tests d’intégration sera résolu au niveau de la conception du composant incriminé. Idem pour les
tests de validation.
On comprend donc que ce découpage des tests permet non seulement de détecter au plus vite les
bugs, et mais aussi de réduire les couts.
3.3.2 Particularité
Ce modèle est très orienté gestion des risques. De manière itérative, 1-on définit un premier objectif,
2-on identifie et résout les risques liés à celui-ci, puis 3-on développe et teste la solution retenue, et
enfin 4-on planifie l’itération suivante. Plus on évolue, plus on implémente des fonctionnalités et plus
grand est le projet. L’objectif de chaque itération, c’est de décider si on poursuit ou pas le
développement : Go or No Go
Ce modèle est adapté aux réalisations expérimentales, dont on se doute de la faisabilité sans en être
sûr à 100%.
Exemple : Par exemple, lors d’une première itération du cycle en spiral, on construit les spécifications
de l’application. L'équipe examine les alternatives, identifie les risques les plus importants (peut-être
les exigences de performance ne sont pas claires), résout les risques et construit un ensemble de
spécifications prototypes. Les membres de l'équipe analysent ensuite les exigences et vérifient
qu'elles sont correctes. À ce stade, les exigences vérifiées deviennent les exigences réelles.
4 Scrum
Scrum est un modèle de développement logiciel conforme aux principes agile. Dans un premier
temps, nous allons rappeler les éléments clés de l’agilité, puis nous allons introduire le modèle de
développement logiciel Scrum, qui se réfère à lui.
Mais avant, il faut noter ceci : si en résumant le génie logiciel à son niveau le plus fondamental, on dit
que ses objectifs sont simplement de produire des logiciels utiles le plus rapidement possible, alors
on peut dire que tous les modèles de développement logiciel décrits jusqu'à présent se concentrent
sur le premier de ces objectifs (produire des applications utiles. Ils essaient d'assurer que le résultat
soit conforme aux spécifications et que les spécifications spécifient en fait quelque chose d'utile).
Ainsi, Ces modèles ne se concentrent pas sur l’accélération de la vitesse de développement.
Les modèles comme Scrum, intègrent certaines des meilleures caractéristiques des modèles décrits
précédemment, ainsi que de nouvelles fonctionnalités qui aident les développeurs à produire
rapidement des livrables utiles à l'utilisateur final.
4.1.1 L’agilité
L’agilité est une philosophie, un ensemble de principes applicables qui permettent une certaine
rapidité et flexibilité dans le développement. Les modèles répondant aux principes agiles, permettent
de s’adapter aux évolutions constantes des problèmes que résolvent le logiciel en cours de
développement.
Ainsi les modèles agiles respectent entre autres les 4 valeurs suivantes :
Les personnes et leurs interactions sont plus importantes que les process et les outils : Les
équipes ont la possibilité de décider des outils et processus à utiliser. S’il y a un arbitrage à
faire, ce sera toujours en faveur de ce que les individus auront préférés et non de ce qu’une
procédure aura demandée
Un logiciel qui fonctionne prime sur de la documentation : l’objectif est d’arriver très vite à
un produit fini et opérationnel, sans trop passer du temps sur la documentation. Il y a
toujours de la doc à faire mais on ne passe pas trop de temps à la peaufiner.
La collaboration avec les clients est préférable à la négociation contractuelle : Le contrat
n’est pas abandonné, mais on préfère collaborer à arriver rapidement au résultat plutôt que
de renégocier le contrat à chaque fois.
La réactivité (réponse) au changement passe avant le suivi d’un plan : Si un problème
survient au cours du développement, il faut réagir vite plutôt que de se demander ce que le
plan à ou n’a pas prévu.
Satisfaire le client en livrant tôt et régulièrement des logiciels utiles, qui offrent une véritable
valeur ajoutée
Accepter les changements, même tard dans le développement
Livrer fréquemment une application qui fonctionne
Collaborer quotidiennement entre clients et développeurs
Bâtir le projet autour de personnes motivées en leur fournissant environnement et support,
et en leur faisant confiance
Communiquer par des conversations en face à face
Mesurer la progression avec le logiciel qui fonctionne
Garder un rythme de travail durable
Il faut signaler que les développeurs sont conscients du fait que les besoins utilisateurs peuvent
évoluer et qu’ils peuvent développer des fonctionnalités qui deviendront inutiles.
Incrémentale : Le logiciel est construit morceau par morceau au cours des sprints. Chaque
nouvelle partie venant s’ajouter à l’existant.
Itératif : développement par incréments de produit réalisé à l’issue de d’itérations (sprints)
qui constituent des périodes de temps dans lesquelles sont effectuées des activités qui
seront répétées dans les itérations suivantes (spécification, conception, codage, test)