COCOMO 448683 31439216 2008-07-09T15:13:54Z Sanao 3079 revert (vandalisme) {{ébauche|informatique}} '''COCOMO''' ([[acronyme]] de l'[[anglais]] ''COnstructive COst MOdel'') est un modèle permettant de définir une estimation de l'effort à fournir dans un développement [[logiciel]] et la durée que ce dernier prendra en fonction des ressources allouées. Le résultat de ce modèle n'est qu'une estimation, il n'est en rien infaillible et parfaitement exact. ==Histoire== Conçu dans les [[années 1970]] par [[Barry Boehm]], COCOMO est une méthode basée sur les résultats de 63 projets de développements informatiques (allant de 2&nbsp;000 à 100&nbsp;000 lignes de code). Elle se base donc sur des [[statistique]]s. Aujourd'hui, il existe également le modèle COCOMO II, plus adapté à l'aspect ré-utilisation des composants. ==Principe== COCOMO est divisé en trois modèles, qui affinent l'estimation en prenant en compte de plus en plus de paramètres : * le ''modèle de base'' effectue un simple calcul de l'effort et de la durée en fonction du nombre d'instructions que l'application doit contenir et la complexité de cette dernière. Une ventilation est également possible, permettant de déterminer le temps de développement et l'effort nécessaire pour chaque partie du cycle de développement. * le ''modèle intermédiaire'' reprend l'effort et la durée du modèle de base, en appliquant cette fois-ci des coefficients prenant en compte des facteurs de coût (compétence de l'équipe, complexité de l'environnement technique, etc.). * le ''modèle détaillé'' reprend les données du modèle intermédiaire en affinant notamment les facteurs de coût en fonction de chaque phase du cycle de développement. Ce modèle n'est véritablement nécessaire que pour de très gros projets. ===Complexité=== Les complexités des applications à développer peuvent être de trois types : * ''S'' (en [[anglais]] ''organic'') : Ce sont des applications simples, n'ayant que peu de cas particuliers et de contraintes. Elles sont parfaitement [[Déterminisme|déterministes]]. * ''P'' (en anglais ''semidetached'') : Ce sont des applications intermédiaires, plus complexes que les applications de type S, elles restent tout de même déterministes, bien que le nombre de cas particuliers et de tests doivent être plus important que pour les applications de type S * ''E'' (en anglais ''embedded'') : Ce sont des applications très complexes, que se soit au niveau de leurs contraintes (comme un [[système temps réel]]) ou au niveau des données saisies (comme certaines [[Interface graphique|interfaces graphiques]] où l'on ne peut envisager toutes les possibilités de saisies qu'un utilisateur pourrait effectuer). Elles ne sont pas déterministes. La catégorisation d'une application dans un type de complexité reste une des choses la plus compliqué à définir dans le modèle de base de COCOMO. En cas de doute et pour ne pas avoir de surprise (comme une sous-estimation de l'effort et donc du temps de développement), il vaut mieux surestimer la complexité d'une application, sans tomber dans l'excès... En fonction de la complexité de l'application, on utilisera différents coefficients prenant en compte les différentes complexités et forcément les efforts différents à fournir. ===Modèle de base=== {| class="wikitable" |+ '''Formules''' ! Complexité ! Effort (en homme mois) ! Temps de développement (en mois) |- | S | <math>Effort = 2,4 * KLS ^ {1,05}</math> | <math>TDev = 2,5 * Effort ^ {0,38}</math> |-{{ligne grise}} | P | <math>Effort = 3 * KLS ^ {1,12}</math> | <math>TDev = 2,5 * Effort ^ {0,35}</math> |- | E | <math>Effort = 3,6 * KLS ^ {1,2}</math> | <math>TDev = 2,5 * Effort ^ {0,32}</math> |} KLS (pour Kilo Ligne Source) représente le nombre de milliers d'instructions que contiendra l'application. Le plus complexe est de déterminer le nombre de KLS. A première vue, on peut se dire que c'est une chose impossible ou avec une très grande marge d'erreur. Cependant, pour être valable le modèle COCOMO ne doit être utilisé que lorsque la phase de conception est déjà bien avancé, de manière à avoir une idée assez précise du travail à réaliser. De plus, l'expérience de la personne utilisant le modèle est déterminante, car il sera ainsi en mesure de s'approcher au plus près du bon nombre de KLS. ====La ventilation==== Comme nous l'avons vu plus haut, la ventilation, aussi appelé distribution par phase, permet de déterminer le temps de développement et l'effort nécessaire pour chaque phase du cycle de développement. COCOMO divise en 4 grandes phases le cycle de développement : * Expression des besoins et planification (''Plans et requirements) * Conception générale (''Product design'') * Programmation (''Programming'') ** Conception détaillée (''Detailed design'') ** Programmation et tests unitaires (''Code and unit test'') * Tests et intégration (''Integration and test'') Selon la complexité et la taille (en KLS) de l'application, l'effort et le temps de développement varie sur chacune des phases. Le modèle COCOMO exprime cela sous la forme d'un coefficient représentant le pourcentage d'effort a réaliser et le temps passé. =====Coefficients de l'effort===== {| class="wikitable" |+ '''Distribution par phase de l'effort''' ! Complexité ! Phase ! Taille de 2 KLS ! Taille de 8 KLS ! Taille de 32 KLS ! Taille de 128 KLS ! Taille de 512 KLS |- | bgcolor="#EFEFEF" rowspan="6" align="center"| '''S''' | ''Expression des besoins et planification'' | 6 | 6 | 6 | 6 | rowspan="6" | |-{{ligne grise}} | ''Conception général'' | 16 | 16 | 16 | 16 |- | ''Programmation'' | 68 | 65 | 62 | 59 |-{{ligne grise}} | style="text-indent: 2em" | ''Conception détaillée'' | style="text-indent: 2em" | 25 | style="text-indent: 2em" | 25 | style="text-indent: 2em" | 24 | style="text-indent: 2em" | 23 |- | style="text-indent: 2em" | ''Programmation et tests unitaires'' | style="text-indent: 2em" | 42 | style="text-indent: 2em" | 40 | style="text-indent: 2em" | 38 | style="text-indent: 2em" | 36 |-{{ligne grise}} | ''Tests et intégration'' | 16 | 19 | 22 | 25 |- | rowspan="6" align="center"| '''P''' | ''Expression des besoins et planification'' | 7 | 7 | 7 | 7 | 7 |-{{ligne grise}} | ''Conception général'' | 17 | 17 | 17 | 17 | 17 |- | ''Programmation'' | 64 | 61 | 58 | 55 | 52 |-{{ligne grise}} | style="text-indent: 2em" | ''Conception détaillée'' | style="text-indent: 2em" | 27 | style="text-indent: 2em" | 26 | style="text-indent: 2em" | 25 | style="text-indent: 2em" | 24 | style="text-indent: 2em" | 23 |- | style="text-indent: 2em" | ''Programmation et tests unitaires'' | style="text-indent: 2em" | 37 | style="text-indent: 2em" | 35 | style="text-indent: 2em" | 33 | style="text-indent: 2em" | 31 | style="text-indent: 2em" | 29 |-{{ligne grise}} | ''Tests et intégration'' | 19 | 22 | 25 | 28 | 31 |- | bgcolor="#EFEFEF" rowspan="6" align="center"| '''E''' | ''Expression des besoins et planification'' | 8 | 8 | 8 | 8 | 8 |-{{ligne grise}} | ''Conception général'' | 18 | 18 | 18 | 18 | 18 |- | ''Programmation'' | 60 | 57 | 54 | 51 | 48 |-{{ligne grise}} | style="text-indent: 2em" | ''Conception détaillée'' | style="text-indent: 2em" | 28 | style="text-indent: 2em" | 27 | style="text-indent: 2em" | 26 | style="text-indent: 2em" | 25 | style="text-indent: 2em" | 24 |- | style="text-indent: 2em" | ''Programmation et tests unitaires'' | style="text-indent: 2em" | 32 | style="text-indent: 2em" | 30 | style="text-indent: 2em" | 28 | style="text-indent: 2em" | 26 | style="text-indent: 2em" | 24 |-{{ligne grise}} | ''Tests et intégration'' | 22 | 25 | 28 | 31 | 34 |} Ainsi, la somme de l'effort nécessaire aux phases de conception générale, de programmation et de tests et intégration fait 100, ce qui correspond à 100% de l'effort du développement d'une application. On remarquera que l'effort de l'expression des besoins et planification est mis à part et doit être ajouté pour avoir l'effort total. =====Coefficients du temps de développement===== {| class="wikitable" |+ '''Distribution par phase du temps de développement''' ! Complexité ! Phase ! Taille de 2 KLS ! Taille de 8 KLS ! Taille de 32 KLS ! Taille de 128 KLS ! Taille de 512 KLS |- | bgcolor="#EFEFEF" rowspan="4" align="center"| '''S''' | ''Expression des besoins et planification'' | 10 | 11 | 12 | 13 | rowspan="4" | |-{{ligne grise}} | ''Conception général'' | 19 | 19 | 19 | 19 |- | ''Programmation'' | 63 | 59 | 55 | 51 |-{{ligne grise}} | ''Tests et intégration'' | 18 | 22 | 26 | 30 |- | rowspan="4" align="center"| '''P''' | ''Expression des besoins et planification'' | 16 | 18 | 20 | 22 | 24 |-{{ligne grise}} | ''Conception général'' | 24 | 25 | 26 | 27 | 28 |- | ''Programmation'' | 56 | 52 | 48 | 44 | 40 |-{{ligne grise}} | ''Tests et intégration'' | 20 | 23 | 26 | 29 | 23 |- | bgcolor="#EFEFEF" rowspan="4" align="center"| '''E''' | ''Expression des besoins et planification'' | 24 | 28 | 32 | 26 | 40 |-{{ligne grise}} | ''Conception général'' | 30 | 32 | 34 | 36 | 38 |- | ''Programmation'' | 48 | 44 | 40 | 36 | 32 |-{{ligne grise}} | ''Tests et intégration'' | 22 | 24 | 25 | 28 | 30 |} =====Utilisation===== {{...}} ====Les modules==== {{...}} ===Modèle intermédiaire=== Le modèle intermédiaire introduit des facteurs de coût supplémentaires pour affiner les résultats, tels que : * la fiabilité requise * la taille de la [[base de données]] (s'il y en a une) * la complexité du produit * les contraintes concernant le temps d'exécution et la taille mémoire disponible * l'instabilité du logiciel de base si c'est une évolution * l'expérience du personnel concernant le domaine * les qualifications des développeurs * la familiarité de l'équipe de développement avec logiciel de base si c'est une évolution * l'expérience de l'équipe de développement concernant le [[Langage informatique|langage]] utilisé * l'utilisation de technologies ou/et méthodes récentes, l'équipe de développement manque donc d'expérience et de recule * l'utilisation d'outils d'aide à la programmation (comme les générateur de code) * les contraintes de délai de livraison du projet ===Modèle détaillé=== L'inconvénient des modèles COCOMO simplifié ou intermédiaire est qu'ils considèrent que le produit logiciel est un tout auquel ils appliquent des multiplicateurs. En réalité, les grands systèmes sont très rarement homogènes (certains peuvent être organiques, d'autres intégrés). Le COCOMO complet tient compte de cette diversité. En effet, l'évaluation de l'effort se fait de la maniere suivante : * identification des differents sous-projets relatifs à une classe * calcul de l'effort simplifié pour chaque sous-projet en tenant compte de la classe à laquelle il appartient. * appliquer les facteurs qui influent sur chaque sous-projet et déduire l'effort intermédiaire pour chacun d'eux. * l'effort global sera équivalent à la somme des efforts calculés. Cette approche permet de reduire des erreurs de l'estimation finale de l'effort. ==Voir aussi== * [[Génie logiciel]] * [[Points-fonction]] ==Lien externe== * {{fr}} [http://www.essi.fr/~hugues/GL/COCOMO/cocomo.html Estimation des coûts et délais par la méthode COCOMO] {{Portail informatique}} [[Catégorie:Génie logiciel]] [[Catégorie:Méthode d'évaluation]] [[ar:طريقة كوكومو]] [[de:COCOMO]] [[en:COCOMO]] [[es:COCOMO]] [[it:COCOMO]] [[pl:COCOMO]] [[pt:Método COCOMO]] [[sv:Cocomo]]