--- title: "PdP: Introduction aux processus de développement logiciel" date: 2024-01-24 tags: ["besoins", "analyse", "developpement logiciel"] categories: ["Projet de programmation", "Cours"] --- Le génie logiciel a pour finalité de permettre au logiciel développé: * d'avoir plus de chance d'être **adéquat à la demande**: analyse des besoins, fonctionnalités, services, performances, documentation; * d'avoir plus de chance de **fonctionner**: spécifications, tests, outils d'analyse, technique de programmation; * d'avoir plus de chance de **durer**: code lisible, analysable, déboggable, extensible, documenté etc.; * soit développé dans de **bonnes conditions** et de **manière efficiente**: processus de développement, outils adaptés et encore une fois *documentation*. Le génie logiciel permet donc le passage à l'échelle là où le bricolage ne suffit plus. D'après le théorème de Rice: > Toute propriété non triviale d'un programme est indécidable. En conséquence, la plupart des propriétés de fonctionnement des logiciels sont indécidable. Si le matériel informatique évolue vite (loi de Moore), les technique de développement logicielle le font lentement! Pour information, les technique de programmation orientée objet **ont été conçue dans les années 60**. Il est aussi difficile d'automatiser lorsqu'il s'agit de génie logiciel. Ce qui explique les efforts pour inclure des techniques d'apprentissage automatique (*machine learning*) et l'IA générative dans le génie logiciel. ## Les processus de développement Ce processus inclut en général : * une phase de spécification comprenant: * une analyse des besoins * son énonciation * une modélisation et conception * une mise en œuvre/implémentation * une validation/vérification et des tests Il existe plusieurs modèles de développement logiciels classique. Il doit être choisis en fonction des propriétés du logiciels (type, taille de l'équipe ...). Ces modèles se divises en deux parties: * les processus séquentiels; * les processus incrémentaux et itératifs (agiles). ### Processus séquentiels #### Le processus en cascade Les phases de développement sont effectuées de manière séquentielle. Il est inspiré des industries manufacturières et de la construction. Il en existe plusieurs variantes. Il est cependant impossible de revenir en arrière dans ce modèle de base. Si les exigence du départ son mal exprimées ou erronés alors il est possible que le projet soit intégralement à re-développer. Cette méthode manque aussi de retours (*feedback*) entre les étapes. C'est aussi un modèle rigide. #### Le cycle en V C'est une évolution du modèle en cascade pour intégrer des tests de vérifications et de validation pour chacune des phases. Là aussi des variantes existent, surtout au niveau des *feedback* (destination, qualification). #### Conclusion sur les modèles séquentiels Chacune des phase de développement sont clairement distinctes les unes des autres avec les différentes responsabilités des acteurs. Chacune des phases incluent une vision et des spécifications globale du logiciel. Ces modèles sont adaptés aux gros projets ou chacune des étapes peut être assignée à une équipe différente. Cependant le commencement d'une étape nécessite que les précédentes soient terminées. Il est aussi difficile de revenir en arrière (vers des phases précédentes), les modifications / améliorations sont difficilement réalisable qui plus est quand les problèmes surviennent. Les vérifications globales ne se font que sur les phases finales. Il existe **des adaptations moins séquentielles** de ces méthodes avec l'accent sur les tests et les retours facilité. ### Processus de développement agiles C'est l'autre grande famille de processus de développement. Ici les phases sont cycliques avec des retours en arrières possibles (processus itératif). C'est lié à la notion d'*Xtreme Programing*. Le processus est plus réactif / flexibles. Le client / demandeur est partie intégrante du processus ( et / ou les futurs utilisateurs). Cependant les phases manque de profondeur dans les phases de conceptions et de spécification.L es méthodes agiles ne sont pas adaptées à de gros projet. Mais des alternatives, ou plutôt des dérivés comme le *Scrum of Scrum* et d'autres processus *Meta Agile* et une organisation hiérarchique de plusieurs équipes.