FR 2982970 A1 20130524 FR 1160704 A 20111123 B11-3342FR 1 Procédé de mesure de l'évolution de la taille fonctionnelle d'un logiciel L'invention concerne la mesure de l'évolution de la taille fonctionnelle d'un logiciel. Dans les systèmes actuels, de plus en plus de fonctionnalités sont réalisées à partir de logiciels embarqués. Les coûts de développement de ces logiciels peuvent fortement augmenter, notamment en fonction du nombre de versions des logiciels. En effet, de façon générale, la conception d'un logiciel résulte de la modification d'une version existante du logiciel et il est actuellement difficile de quantifier l'évolution de la taille fonctionnelle du logiciel. Par ailleurs, il est difficile d' estimer la charge de développement de l'évolution d'un logiciel. La charge de développement correspond au rapport entre le temps de développement et le nombre de personnes affectées à ce développement. Elle peut également correspondre au temps de validation du logiciel ou aux délais du développement, notamment aux coûts du développement. En outre, il est intéressant de connaître la configuration des ressources nécessaires d'un système d'implémentation destiné à faire fonctionner le logiciel, telle que, la taille des mémoires pour stocker le logiciel, la taille et le type de processeur pour exécuter le logiciel... En effet, une version ultérieure d'un même logiciel utilisé dans un système constant, c'est-à-dire dont les paramètres ne sont pas modifiés, peut ne plus fonctionner comme les versions précédentes. Il est donc intéressant de mesurer l'évolution de la taille d'un logiciel afin d'estimer les modifications éventuelles à apporter au système d'implémentation pour faire fonctionner toutes les versions d'un même logiciel. Il est en outre intéressant de maîtriser les coûts de développement pour garantir la compétitivité des entreprises qui développent ces logiciels. Une solution pour connaître le type de ressources nécessaires au fonctionnement d'un logiciel et pour maîtriser ces coûts de développement peut consister à mesurer la taille fonctionnelle de chaque version du logiciel, puis de calculer la différence de taille fonctionnelle entre les deux versions. Mais ce calcul ne permet pas d'identifier de façon suffisamment précise le type de ressources nécessaires au fonctionnement du logiciel et les coûts de développement pour élaborer une version ultérieure d'un logiciel. On entend par taille fonctionnelle d'un logiciel, une valeur qui traduit la structure de ses fonctionnalités. Par exemple, on peut citer le document « Méthode COSMIC Version 3.0.1 Manuel de mesure », publié en août 2009 sous la référence « Le Guide COSMIC d'implémentation pour ISO/IEC 19761 : 2003 », qui décrit une méthode normalisée de mesure de la taille fonctionnelle d'un logiciel, et qui permet de calculer une taille exprimée dans une unité CFP (Cosmic Function Points, ou Points de Fonction Cosmic). Cette unité CFP est une unité de mesure propre à la méthode de mesure COSMIC. Cette méthode exige de définir une correspondance entre des éléments définis par la méthode elle-même et les éléments du logiciel dont on veut mesurer la taille. En outre, la méthode COSMIC comporte des définitions et règles qui sont génériques et qui ne donnent aucune indication sur la façon de mesurer la taille fonctionnelle d'une version d'un logiciel. En outre, pour un type de logiciel donné, les mesures réalisées par différents utilisateurs de la méthode COSMIC pourront être différentes. Par exemple, la méthode COSMIC est utilisée pour des logiciels de type spécifique, tels que les logiciels temps réel ou les logiciels orientés objet mais qui ne sont pas temps réels. La demande de brevet japonais JP 2008077449 divulgue une méthode pour mesurer la taille fonctionnelle de logiciels orientés objets de type UML (Unified Modelling Language en langue anglaise, ou langage de modélisation objet unifié), à partir de la méthode COSMIC, qui tient compte de la structure des données et utilise un coefficient d'ajustement pour le calcul de la taille. La demande internationale WO 2004/090721 divulgue une méthode pour mesurer la taille fonctionnelle et la complexité d'un logiciel à partir de mots-clés. Mais ces utilisations ne sont pas adaptées pour tous les logiciels. La demande de brevet américain US2005/0210442 décrit une méthode d'estimation de la taille fonctionnelle en se basant sur la structure du logiciel, et non une mesure de sa taille fonctionnelle. Il existe également des outils qui permettent d'établir des différences entre deux spécifications, mais ces outils ne tiennent pas compte des différences de fonctionnalité entre les spécifications et ne permettent pas non plus de quantifier de manière précise la taille fonctionnelle des versions des logiciels. Il est donc proposé une méthode pour mesurer l'évolution de la taille fonctionnelle d'un logiciel de façon précise. En particulier, il est proposé une méthode pour identifier la configuration nécessaire du système d'implémentation pour faire fonctionner n'importe quelle version d'un logiciel. Selon un aspect de l'invention, il est proposé un procédé de mesure de l'évolution de la taille fonctionnelle d'un logiciel, le logiciel comprenant plusieurs versions élaborées respectivement à partir de plusieurs spécifications, chaque spécification comprenant des zones mémoires pour stocker des données, et plusieurs modules, chaque module implémentant une fonctionnalité du logiciel et comprenant au moins une entrée pour recevoir une donnée et au moins une sortie pour transmettre une donnée. Le procédé comprend une élaboration d'une première liste de modules appartenant à une première spécification, une élaboration d'une deuxième liste de modules appartenant à une deuxième spécification, une identification de paires de modules, chaque paire ayant un premier module appartenant à la première liste et un deuxième module appartenant à la deuxième liste et implémentant une fonctionnalité identique à celle du premier module, et un calcul d'entrées/sorties comportant : - un calcul du nombre d'entrées et de sorties des modules supplémentaires de la deuxième liste par rapport aux modules des paires de modules identifiées ; et - un calcul du nombre d'entrées et de sorties des modules supplémentaires de la première liste par rapport aux modules des paires de modules identifiées ; le procédé comprenant en outre un calcul (S5) d'un paramètre d'évolution de la taille fonctionnelle du logiciel à partir d'une somme des nombres d'entrées et de sorties calculés. Ainsi, on fournit une méthode de mesure simple et précise. Par ailleurs, le paramètre ainsi déterminé est différent d'un simple calcul de différence de taille fonctionnelle entre deux versions successives du logiciel qui tiendrait compte uniquement des modules ajoutés dans la version ultérieure du logiciel, sans tenir compte des modules supprimés. Par exemple, deux versions du logiciel ayant la même taille fonctionnelle peuvent avoir des modules qui ont des structures internes différentes et qui engendrent des coûts de développement non négligeables. La prise en compte des modules qui sont supprimés dans la version ultérieure permet, en outre, de prendre en compte les modifications structurelles nécessaires du logiciel pour effectuer ces suppressions sans générer d'erreurs. Ces modifications structurelles peuvent comprendre la suppression des liens avec ces modules fonctionnels supprimés, par exemple supprimer les appels de fonctions supprimées inclus dans d'autres fonctions dites « appelantes ». Par ailleurs, en tenant compte des modules supprimés, on peut simplifier certains éléments qui font partie de l'environnement du logiciel, par exemple en supprimant certaines mémoires du système qui ne sont plus utilisées, ou en supprimant les microprocesseurs des circuits intégrés destinés à faire fonctionner ces modules supprimés. Chaque module peut comprendre plusieurs blocs, chaque bloc implémentant une partie de la fonctionnalité associée au module et comprenant au moins une entrée et au moins une sortie, chaque liste comprenant des modules états parmi les modules de ladite liste, chaque module état comprenant uniquement des blocs conditionnels parmi lesdits blocs du module état, chaque bloc conditionnel comprenant au moins une sortie pour transmettre une donnée dont la valeur est fonction d'au moins une condition remplie par une donnée reçue par au moins une entrée du bloc conditionnel. Chaque liste peut comprendre des modules systèmes parmi les modules de ladite liste, chaque module système comportant au moins un bloc élémentaire parmi lesdits blocs du module système, chaque bloc élémentaire comprenant au moins une sortie pour transmettre une donnée dont la valeur correspond au résultat d'une fonction mathématique de base appliquée à une donnée reçue par au moins une entrée du bloc élémentaire. Le calcul d'entrées/sorties peut comprendre en outre pour chaque paire de modules identifiée : - une identification de paires de blocs, chaque paire de blocs ayant un premier bloc appartenant au premier module et un deuxième bloc appartenant au deuxième module et implémentant une partie de fonctionnalité identique à celle du premier bloc ; - un calcul du nombre d'entrées et de sorties du deuxième module qui sont couplées à des blocs supplémentaires du deuxième module par rapport aux blocs des paires de blocs identifiées ; et - un calcul du nombre d'entrées et de sorties du premier module qui sont couplées à des blocs supplémentaires du premier module par rapport aux blocs des paires de blocs identifiées. On peut ainsi prendre en considération les modules qui ont subi une modification structurelle entre deux versions du logiciel, et améliorer la précision de la mesure de l'évolution de la taille fonctionnelle du logiciel. Le calcul d'entrées/sorties peut comprendre en outre pour chaque paire de blocs identifiée : - un calcul de la différence entre le nombre d'entrées du premier module couplées au premier bloc et le nombre d'entrées du deuxième module couplées au deuxième bloc ; et - un calcul de la différence entre le nombre de sorties du premier module couplées au premier bloc et le nombre de sortie du deuxième module couplées au deuxième bloc. Par ailleurs, le calcul d'entrées/sorties peut comprendre en outre pour chaque paire de blocs identifiée : - un calcul d'un nombre d'entrées modifiées du deuxième module qui satisfont, pour chacune des entrées modifiées, les conditions suivantes : - une entrée équivalente du premier module est couplée au premier bloc de la paire de blocs identifiée ; et - l'entrée modifiée est couplée au deuxième bloc de la paire de blocs identifiée et reçoit une donnée dont la dimension ou le type est différent de celui d'une donnée reçue par l'entrée équivalente. Le calcul d'entrées/sorties peut comprendre en outre pour chaque paire de blocs identifiée : - un calcul d'un nombre de sorties modifiées du deuxième module qui satisfont, pour chacune des sorties modifiées, les conditions suivantes : - une sortie équivalente du premier module est couplée au premier bloc de la paire de blocs identifiée ; et - la sortie modifiée est couplée au deuxième bloc de la paire de blocs identifiée et transmet une donnée dont la dimension ou le type est différent de celui d'une donnée transmise par la sortie équivalente. Le calcul d'entrées/sorties peut comprendre en outre pour chaque paire de blocs identifiée : - un calcul d'un nombre de sorties changées du deuxième module qui satisfont, pour chacune des sorties changées, les conditions suivantes : - une sortie associée du premier module est couplée à un bloc élémentaire inclus dans une première chaîne de blocs élémentaires ; - la sortie changée est couplée à un bloc élémentaire inclus dans une deuxième chaîne de blocs élémentaires ; - la deuxième chaîne comprend au moins un bloc élémentaire qui implémente une partie de fonctionnalité différente de celles qui sont implémentées par les blocs élémentaires de la première chaîne. Au moins une entrée d'un module peut être couplée à au moins une entrée d'un bloc dudit module, et être configurée pour recevoir une donnée transmise par une zone mémoire ou par un autre module. Au moins une sortie d'un module peut être couplée à au moins une sortie d'un bloc dudit module, et être configurée pour transmettre une donnée vers une zone mémoire ou vers un autre module. Le procédé peut également comprendre une élaboration des spécifications à partir d'un logiciel de modélisation de système à langage non orienté objet. On entend ici par logiciel de modélisation de système, un logiciel permettant d'élaborer des modules fonctionnels correspondant respectivement aux fonctionnalités du système. En outre, on entend ici par logiciel non orienté objet, un logiciel fonctionnant à partir d'un langage basé sur un ensemble d'instructions, telles que des équations mathématiques ou machines à état. En particulier, le langage non orienté objet ne comprend ni la notion de classes, ni celle d'encapsulation, qui sont propres aux langages orientés objet. A l'aide d'un logiciel de modélisation de système à langage non orienté objet, on peut élaborer une spécification suffisamment complète tout en offrant une meilleure rapidité des traitements des données. Selon un autre aspect de l'invention, il est proposé un produit programme d'ordinateur chargeable directement dans une mémoire d'un système informatique, comprenant des portions de code de logiciel pour l'exécution du procédé défini ci-avant lorsque ledit programme est exécuté sur ledit système informatique. Selon encore un autre aspect de l'invention, il est proposé un support lisible par un système informatique, ayant des instructions exécutables par ordinateur adaptées pour provoquer l'exécution par le système informatique du procédé défini ci-avant. D'autres avantages et caractéristiques de l'invention apparaîtront à l'examen de la description détaillée de modes de mise en oeuvre, nullement limitatifs, et des dessins annexés sur lesquels : - la figure 1, illustre de façon schématique les principales étapes d'un procédé de mesure de l'évolution de la taille d'un logiciel selon un mode de mise en oeuvre de l'invention ; - les figures 2 et 3, illustrent de façon schématique des exemples de modules systèmes et états ; - la figure 4, illustre de façon schématique un exemple de mise en oeuvre d'un calcul d'entrées/sorties. Sur la figure 1, on a représenté schématiquement les principales étapes d'un procédé de mesure de l'évolution de la taille d'un logiciel, par exemple un logiciel de contrôle d'un système 1. Le logiciel de contrôle est élaboré à partir de spécifications Spl,...,Spn comprenant, chacune, les caractéristiques techniques du logiciel. De manière générale, une spécification Spl,...,Spn comporte, en particulier, des zones mémoires 2 pour stocker des données, et des modules 3, notés également modules fonctionnels, qui réalisent des traitements sur les données. Les zones mémoires 2 sont destinées à être implémentées dans les mémoires physiques du système 1. Une zone mémoire permet en outre de stocker des données, considérées comme des données persistantes, de façon que les données peuvent être utilisées (en lecture et en écriture) par tous les modules fonctionnels de la spécification. Un module fonctionnel 3 est destiné à implémenter une fonctionnalité du logiciel, par exemple un traitement mathématique qui modifie les valeurs des données, telle une fonction d'addition, une opération logique, etc. Un module fonctionnel 3 comporte au moins une entrée pour recevoir une donnée, et au moins une sortie pour transmettre une donnée dont la valeur a été modifiée en fonction de la fonctionnalité associée au module. Les données peuvent être, par exemple, des tableaux à une ou plusieurs dimensions. Une spécification peut être élaborée sous la forme d'un programme d'ordinateur ou sous toute autre forme. Le procédé comprend une étape initiale SO dans laquelle on élabore les spécifications Spl,...,Spn destinées à être utilisées pour réaliser les différentes versions du logiciel. Une version ultérieure du logiciel correspond à un logiciel modifié par rapport à une version antérieure, et ayant, par exemple, des fonctionnalités ajoutées, et/ou supprimées, et/ou modifiées. On peut, par exemple, élaborer les différents modules fonctionnels d'une spécification Spl,...,Spn à partir d'un logiciel de modélisation. Plusieurs logiciels de modélisation peuvent être utilisés. De préférence, on utilise un logiciel à langage non orienté objet, par exemple le logiciel SIMULINK® qui est un environnement de simulation et de conception par modélisation destiné aux systèmes dynamiques et embarqués et permet de générer des modules à partir d'un environnement graphique interactif. Le procédé comporte une première étape Si dans laquelle on élabore une première liste L1 de modules fonctionnels 4,5,6, appartenant à une première spécification Spl, et une deuxième étape S2 dans laquelle on élabore une deuxième liste L2 de modules fonctionnels 4,7,8, appartenant à une deuxième spécification Spn. La deuxième spécification Spn n'est pas forcément consécutive à la première spécification Spl. De préférence, lorsqu'on élabore une liste de modules d'une spécification, on identifie tous les modules fonctionnels de la spécification. Après les étapes S1, S2 d'élaboration des deux listes L1,L2, on effectue une troisième étape S3 dans laquelle on compare les modules fonctionnels des deux listes L1,L2 entre eux. En particulier, on compare les fonctionnalités du logiciel implémentées par les modules fonctionnels des deux listes entre elles. Au cours de l'étape de comparaison S3, on identifie des paires de modules, chaque paire ayant un premier module appartenant à la première liste Ll et un deuxième module appartenant à la deuxième liste L2. En outre, pour chaque paire identifiée, le deuxième module de la deuxième liste implémente une fonctionnalité identique à celle du premier module de la paire identifiée. Lors de l'étape de comparaison S3, on identifie les modules fonctionnels ajoutés (ou supplémentaires) dans la deuxième liste L2, par rapport aux modules des paires de modules identifiées, en d'autres termes des modules qui sont présents uniquement dans la deuxième liste L2 et qui ne sont, ni présents dans la première liste Ll, ni présents dans les paires de modules identifiées. On note également qu'une fonctionnalité additionnelle d'un module ajouté de la deuxième liste peut être identique ou différente d'une fonctionnalité d'un module de la première liste. On identifie également les modules fonctionnels supprimés dans la deuxième liste L2, ou supplémentaires dans la première liste Ll par rapport aux modules des paires de modules identifiées, en d'autres termes des modules qui sont uniquement présents dans la première liste Ll et qui ne sont, ni présents dans la deuxième liste L2, ni présents dans les paires de modules identifiées. On note également qu'une fonctionnalité additionnelle d'un module supprimé peut être identique ou différente d'une fonctionnalité d'un module de la deuxième liste. Par ailleurs, on identifie les modules fonctionnels modifiés dans la deuxième liste L2, c'est-à-dire les modules qui implémentent une même fonctionnalité qu'un module de la première liste et qui ont une structure différente. Après avoir comparé S3 les deux listes L1,L2, on calcule, lors d'une quatrième étape S4, un nombre d'entrées et de sorties considérées comme pertinentes pour estimer l'évolution de la taille fonctionnelle du logiciel. Lors de la quatrième étape S4, on effectue les étapes suivantes : - pour chaque module fonctionnel ajouté, on calcule le nombre d'entrées et de sorties dudit module fonctionnel ajouté ; - pour chaque module fonctionnel supprimé, on calcule le nombre d'entrées et de sorties dudit module fonctionnel supprimé. La quatrième étape S4 comporte en outre une étape S41 dans laquelle on identifie des paires de blocs, ou blocs fonctionnels, implémentant une partie d'une fonctionnalité du logiciel, pour comparer entre eux les deux modules de chaque paire afin d'identifier les modules fonctionnels modifiés. En effet, les modules comprennent des blocs fonctionnels qui implémentent respectivement des parties de la fonctionnalité associée à un module, et on peut ainsi différencier deux modules implémentant la même fonctionnalité. Dans l'étape S41, on identifie des paires de blocs fonctionnels et on compare les blocs d'une paire de blocs entre eux afin de déterminer les entrées/sorties pertinentes pour estimer l'évolution de la taille fonctionnelle du logiciel. Puis on calcule le nombre d'entrées/sorties pertinentes du module modifié, ce calcul sera décrit ultérieurement. Par ailleurs, on considère que deux modules fonctionnels sont identiques, s'ils implémentent la même fonctionnalité et s'ils ont la même structure. Pour les modules fonctionnels identiques, on ne prend pas en compte leur nombre d'entrées et de sorties pour estimer l'évolution de la taille fonctionnelle du logiciel. Puis on calcule, au cours d'une cinquième étape S5, un paramètre d'évolution de la taille fonctionnelle du logiciel à partir d'une somme des nombres d'entrées et de sorties calculés. On a illustré schématiquement sur la figure 1, un exemple de mise en oeuvre de l'étape S4 de calcul du nombre d'entrées et de sorties. Dans cet exemple, la première liste Ll comprend trois modules fonctionnels 4,5,6, un premier module fonctionnel 4 implémentant une première fonctionnalité, par exemple un contrôle d'une machine électrique. La première liste L1 comporte également un deuxième module fonctionnel 5 implémentant une deuxième fonctionnalité, par exemple une comparaison de deux températures de la machine électrique, et un troisième module fonctionnel 6 implémentant une troisième fonctionnalité, par exemple une commande d'accélération de la machine électrique. On note que les trois fonctionnalités précitées sont différentes les unes des autres. Par ailleurs, le premier module 4 comporte une entrée EM1 et trois sorties SM1,SM2,SM3, le deuxième module 5 comporte deux entrées EM2,EM3, et une sortie SM4, et le troisième module 6 comporte quatre entrées EM4,EM5,EM6,EM7 et trois sorties SM5, SM6,SM7. La deuxième liste L2 comprend, quant à elle, trois modules fonctionnels 4,7,8, dont un quatrième module 4 identique au premier module de la première liste Ll. La deuxième liste L2 comporte un cinquième module fonctionnel ajouté 7 implémentant une autre fonctionnalité différente de celles des modules fonctionnels de la première liste Ll, par exemple une comparaison de deux vitesses de la machine électrique. En outre, la deuxième liste L2 comprend un sixième module fonctionnel modifié 8 implémentant la même fonctionnalité que celle du troisième module 6, et ayant une structure différente. Le deuxième module fonctionnel 5 de la première liste Ll implémente une fonctionnalité qui n'est pas présente dans la deuxième liste L2, il correspond alors à un module fonctionnel supprimé. Le cinquième module 7 comporte deux entrées EM8,EM9, et une sortie SM8 et le sixième module 8 comporte quatre entrées EM10,EM11,EM12,EM13 et quatre sorties SM9,SM10,SM11,SM12. D'après cet exemple, on identifie une première paire de modules comprenant le premier module 4 de la première liste Ll et le quatrième module 4 de la deuxième liste L2, ainsi qu'une deuxième paire de modules comprenant le troisième module 6 de la première liste Ll et le sixième module 8 de la deuxième liste L2. Par comparaison des modules des listes Ll, L2 avec les modules des paires de modules identifiées, on identifie que le deuxième module 5 est un module supprimé et que le cinquième module 7 est un module ajouté. On peut ainsi calculer un premier paramètre d'évolution de la taille fonctionnelle du logiciel, en particulier, on utilisera l'unité CFP pour calculer ce paramètre. On définit alors 1 CFP égal à une entrée, ou une sortie d'un module fonctionnel. Le premier paramètre est égal au nombre d'entrées et de sorties du deuxième module supprimé 5 (3 CFP), ajouté au nombre d'entrées et de sorties du cinquième module ajouté 7 (3 CFP). Le premier paramètre est égal à 6 CFP. Pour identifier les entrées/sorties pertinentes pour estimer l'évolution de la taille fonctionnelle du logiciel, on identifie plusieurs types de modules fonctionnels et les types d'entrées et de sorties pour chacun d'eux. De manière générale, un module fonctionnel 3 peut comporter deux types distincts de blocs, ou blocs fonctionnels, comme des blocs fonctionnels élémentaires BE1,BE2, dont deux exemples sont illustrés à la figure 2, et des blocs fonctionnels conditionnels BC1,BC2, dont deux exemples sont illustrés à la figure 3. Chaque bloc, élémentaire ou conditionnel, implémente une partie de la fonctionnalité du module auquel il appartient. On distingue alors deux types distincts de modules fonctionnels, les modules fonctionnels systèmes MFS, dont un exemple est illustré à la figure 2, et les modules fonctionnels états MFE, dont un exemple est illustré à la figure 3. Un module fonctionnel état MFE comprend au moins un bloc fonctionnel conditionnel BC1,BC2, et de préférence, uniquement des blocs fonctionnels conditionnels. Un module fonctionnel système MFS comporte, quant à lui, au moins un bloc fonctionnel élémentaire BE1,BE2, et peut en outre comprendre un ou plusieurs blocs fonctionnels conditionnels BC1,BC2. Un bloc fonctionnel élémentaire BE1,BE2, correspond à une fonction mathématique de base, comme par exemple une multiplication, une addition, une opération de gain, une opération d'inversion, ou encore une fonction mathématique logique de base, comme par exemple une fonction logique « OU », « ET » bien connue de l'homme de l'art, cette liste n'étant pas exhaustive. On considère qu'un bloc fonctionnel élémentaire BE1,BE2, effectue un traitement mathématique à partir d'au moins une donnée reçue sur une de ses entrées, et qu'il transmet le résultat obtenu avec une donnée sur une de ses sorties. Pour un bloc fonctionnel élémentaire BE1,BE2, la donnée en sortie est mise à jour quelle que soit la valeur de la donnée en entrée. A la différence, un bloc fonctionnel conditionnel BC1,BC2, correspond à un ensemble conditionnel comprenant au moins une condition que doit satisfaire au moins une donnée en entrée du bloc, et qui transmet au moins une donnée en sortie du bloc. Un bloc fonctionnel conditionnel BC1,BC2, met à jour la valeur d'une donnée en sortie du bloc si la donnée en entrée satisfait à la condition du bloc. Afin de calculer les nombres d'entrées et de sorties des modules fonctionnels systèmes ou états, on calcule ces nombres en fonction de la configuration de leurs blocs fonctionnels élémentaires ou conditionnels. En particulier, on identifie une entrée d'un module fonctionnel, système MFS ou état MFE, comme étant une entrée couplée à une entrée d'un de ses blocs fonctionnels, élémentaire BE1,BE2 ou conditionnel BC1,BC2, configurée pour recevoir une donnée transmise par une zone mémoire 2, ou par un autre module fonctionnel, système ou état. On identifie également une entrée d'un module fonctionnel comme étant une entrée couplée à un élément extérieur aux spécifications du logiciel, comme par exemple une sortie d'un module fonctionnel d'une spécification d'un autre logiciel, ou un élément matériel du système 1 tel un capteur, un clavier de saisie, un actionneur, etc. En particulier, on compte 1 CFP (comme une seule entrée) pour une entrée d'un module fonctionnel, système MFS ou état MFE, qui est couplée aux entrées de plusieurs blocs dudit module. On identifie, par ailleurs, une sortie d'un module fonctionnel, système MFS ou état MFE, comme étant une sortie couplée à une sortie d'un de ses blocs fonctionnels, élémentaire BE1,BE2 ou conditionnel BC1,BC2, configurée pour transmettre une donnée vers une zone mémoire 2, ou vers un autre module fonctionnel, système ou état. On identifie également une sortie d'un module fonctionnel comme étant une sortie couplée à un élément extérieur aux spécifications du logiciel, comme par exemple une entrée d'un module fonctionnel d'une spécification d'un autre logiciel, ou un élément matériel du système 1 tel un capteur, un clavier de saisie, un actionneur, etc. Sur la figure 2, on a illustré un exemple de module fonctionnel système MFS. Le module fonctionnel système MFS implémente, par exemple, la fonctionnalité logicielle décrite par l'équation (1) suivante : C=A.(Cl+B) (équation 1) où A : est une première donnée en entrée du module fonctionnel système MFS ; B : est une deuxième donnée en entrée du module fonctionnel système MFS ; C : est une troisième donnée en sortie du module fonctionnel système MFS ; et Cl : est une quatrième donnée en entrée du module fonctionnel système MFS. Le module fonctionnel système MFS comprend deux blocs fonctionnels élémentaires BE1, BE2. Le premier bloc fonctionnel élémentaire BE1 comporte une première entrée El pour recevoir la première donnée A, une deuxième entrée E' pour recevoir le résultat du deuxième bloc fonctionnel élémentaire BE2 et une première sortie Dl pour transmettre la troisième donnée C en sortie du module fonctionnel système MFS. Le deuxième bloc fonctionnel élémentaire BE2 comprend une troisième entrée E2 pour recevoir la quatrième donnée Cl, une quatrième entrée E3 pour recevoir la deuxième donnée B et un sortie E" pour émettre le résultat au premier bloc fonctionnel élémentaire BEI. Dans cet exemple, la quatrième donnée Cl est stockée dans une zone mémoire 2 de la première spécification logicielle Spl. En particulier les données A, B en entrée du module fonctionnel système MFS proviennent d'autres modules fonctionnels systèmes ou états. En outre, la troisième donnée C en sortie du module fonctionnel système MFS est transmise en direction d'autres modules fonctionnels systèmes ou états, ou encore vers la zone mémoire 2. On notera également que dans cet exemple, le premier bloc fonctionnel élémentaire BE1 correspond à la fonction élémentaire de multiplication, tandis que le deuxième bloc fonctionnel élémentaire BE2 correspond à la fonction élémentaire d'addition. En ce qui concerne le nombre d'entrées et de sorties du module fonctionnel système MFS, celui-ci comprend trois entrées correspondant à 3 CFP, et une sortie correspondant à 1 CFP. Le nombre d'entrées et de sorties du module fonctionnel système MFS est donc égale à 4 CFP. En particulier, on notera que la sortie E" du deuxième bloc élémentaire BE2, qui transmet le résultat vers le premier bloc élémentaire BE1, n'est pas considérée comme étant une sortie du module fonctionnel système MFS, et n'est donc pas prise en compte dans le calcul. Le résultat transmis par la sortie E" du deuxième bloc élémentaire BE2 est considérée comme étant une donnée locale au module fonctionnel système MFS. On considère en outre qu'une donnée locale est transitoire, c'est-à-dire non permanente, car elle utilisée (transmise ou reçue) à l'intérieur d'u module fonctionnel, en d'autres termes elle n'est ni stockée en mémoire, ni utilisée par un autre module fonctionnel. Sur la figure 3, on a illustré un exemple de module fonctionnel état MFE. Le module fonctionnel état MFE correspond à la fonctionnalité logicielle qui consiste à mettre à jour une première donnée E, en sortie du module fonctionnel état MFE, en fonction de la validité de deux conditions : condition 1, condition 2. Le module fonctionnel état MFE comprend deux blocs fonctionnels conditionnels BC1, BC2. Le premier bloc fonctionnel conditionnel BC1 comporte une première entrée E4 pour recevoir une deuxième donnée D, une première sortie D2 pour transmettre une troisième donnée F en direction du deuxième bloc fonctionnel conditionnel BC2, et une deuxième sortie D3 pour transmettre la première donnée E. Pour le premier bloc fonctionnel conditionnel BC1, la première donnée E et la troisième donnée F sont mises à jour si la deuxième donnée D satisfait la première condition 1. Le deuxième bloc fonctionnel conditionnel BC2 comprend une deuxième entrée E5 pour recevoir la troisième donnée F, une quatrième sortie D4 pour transmettre une quatrième donnée C2 vers une zone mémoire 2 de la première spécification logicielle Spl, et une cinquième sortie D5 pour transmettre la première donnée E en sortie du module fonctionnel état MFE. En particulier la deuxième donnée D en entrée du module fonctionnel état MFE provient d'autres modules fonctionnels systèmes ou états. En outre, la première donnée E en sortie du module fonctionnel état MFE est transmise en direction d'autres modules fonctionnels systèmes ou états, ou encore vers la zone mémoire 2. En ce qui concerne le nombre d'entrées et de sorties du module fonctionnel état MFE, celui-ci comprend une entrée correspondant à 1 CFP, et trois sorties correspondant à 3 CFP. Le nombre d'entrées et de sorties du module fonctionnel état MFE est donc égale à 4 CFP. En particulier, on notera que la première sortie D2 du premier bloc conditionnel BC1, qui transmet la troisième donnée F vers le deuxième bloc conditionnel BC2, n'est pas considérée comme étant une sortie du module fonctionnel état MFE, et n'est donc pas prise en compte dans le calcul. La troisième donnée F est considérée comme étant une donnée locale au module fonctionnel état MFE. Afin de préciser le calcul du paramètre d'évolution de la taille fonctionnelle du logiciel, on identifie S41, pour chacune des paires de modules identifiées, les paires de blocs ayant la même partie de fonctionnalité, et on compare les blocs des modules de la paire avec les blocs des paires de blocs identifiées. A partir de l'identification des paires de blocs, on détermine des blocs ajoutés dans le deuxième module, c'est-à-dire des blocs qui sont présents uniquement dans le deuxième module, et des blocs supprimés, c'est-à-dire des blocs qui sont présents uniquement dans le premier module. On note en outre que la partie de fonctionnalité implémentée par un bloc ajouté peut être identique ou différente d'une partie de fonctionnalité implémentée par un bloc du premier module. Par ailleurs, on note que la partie de fonctionnalité implémentée par un bloc supprimé peut être identique ou différente d'une partie de fonctionnalité implémentée par un bloc du deuxième module. En particulier, on compare les structures internes des modules, et notamment les blocs fonctionnels de chacun des modules. L'étape d'identification S41 permet d'identifier les entrées/sorties pertinentes pour calculer le paramètre d'évolution, à savoir, les entrées/sorties ajoutées, les entrées/sorties supprimées, les entrées/sorties modifiées et certaines sorties changées du deuxième module. De manière générale, les deux modules d'une même paire qui implémentent une même fonctionnalité associée à la paire peuvent comporter des blocs fonctionnels, élémentaires ou conditionnels, qui implémentent des parties de la fonctionnalité associée qui sont différentes. Par exemple, le premier module de la paire peut comporter un bloc fonctionnel élémentaire qui implémente une fonction « addition » et le deuxième module peut comporter un bloc fonctionnel élémentaire implémentant une fonction « multiplication ». On identifie les entrées/sorties pertinentes suivantes : - une entrée ajoutée dans le deuxième module est considérée comme étant une entrée du deuxième module qui est couplée à un bloc, élémentaire ou conditionnel, qui est présent uniquement dans le deuxième module, en d'autres termes un bloc qui n'est pas présent dans le premier module; - une sortie ajoutée dans le deuxième module est considérée comme étant une sortie du deuxième module qui est couplée à un bloc, élémentaire ou conditionnel, qui est présent uniquement dans le deuxième module ; - une entrée supprimée dans le deuxième module est considérée comme étant une entrée du premier module qui est couplée à un bloc, élémentaire ou conditionnel, qui est présent uniquement dans le premier module, en d'autres termes un bloc qui n'est pas présent dans le deuxième module; - une sortie supprimée dans le deuxième module est considérée comme étant une sortie du premier module qui est couplée à un bloc, élémentaire ou conditionnel, qui est présent uniquement dans le premier module ; - une entrée du deuxième module est considérée comme étant une entrée modifiée si une entrée équivalente du premier module est couplée à un bloc fonctionnel, élémentaire ou conditionnel, implémentant une partie de fonctionnalité de référence, si l'entrée modifiée est couplée à un bloc fonctionnel, élémentaire ou conditionnel, du deuxième module implémentant une partie de fonctionnalité identique à la partie de fonctionnalité de référence, et si l'entrée modifiée reçoit une donnée dont la dimension ou le type est différent de celui d'une donnée reçue par l'entrée équivalente ; - une sortie du deuxième module est considérée comme étant une sortie modifiée si une sortie équivalente du premier module est couplée à un bloc fonctionnel, élémentaire ou conditionnel, implémentant une partie de fonctionnalité de référence, si la sortie modifiée est couplée à un bloc fonctionnel, élémentaire ou conditionnel, du deuxième module implémentant une partie de fonctionnalité identique à la partie de fonctionnalité de référence, et si la sortie modifiée transmet une donnée dont la dimension ou le type est différent de celui d'une donnée transmise par la sortie équivalente ; - une sortie du deuxième module est considérée comme étant une sortie changée si une sortie associée du premier module est couplée à un bloc élémentaire inclus dans une première chaîne de blocs élémentaires, si la sortie changée est couplée à un bloc élémentaire inclus dans une deuxième chaîne de blocs élémentaires, et si la deuxième chaîne comprend au moins un bloc élémentaire qui implémente une partie de fonctionnalité différente de celles qui sont implémentées par les blocs élémentaires de la première chaîne. Les entrées et sorties ajoutées dans le deuxième module sont des entrées et sorties couplées à des blocs ajoutés (ou supplémentaires) du deuxième module par rapport aux blocs des paires de blocs identifiées. Les entrées et sorties supprimées dans le deuxième module sont des entrées et sorties couplées à des blocs supprimés du premier module par rapport aux blocs des paires de blocs identifiées. On notera qu'une chaîne de blocs peut contenir qu'un seul bloc fonctionnel élémentaire. Sur la figure 4, on a représenté schématiquement un exemple de calcul d'entrées/sorties pertinentes des deux modules 6,8 décrits à la figure 1 qui sont inclus dans une paire 10. Les deux modules 6,8 correspondent à respectivement deux modules fonctionnels systèmes qui implémentent la même fonctionnalité, correspondant à une commande d'accélération de la machine électrique, et ont des structures différentes. Le premier module fonctionnel système 6 comporte un premier bloc fonctionnel conditionnel BF1 qui implémente, par exemple une fonction « amplification », un deuxième bloc élémentaire BF2 qui implémente une fonction « inversion de signe », un troisième bloc élémentaire BF3 qui implémente une fonction « inversion de signe » identique à celle du deuxième bloc, et une chaîne de blocs élémentaires 11. La chaîne de blocs élémentaires 11 comprend un quatrième bloc élémentaire BF4 qui implémente une fonction « addition », un cinquième bloc élémentaire BF5 qui implémente une fonction « soustraction », et un sixième bloc élémentaire BF6 qui implémente une fonction « multiplication ». Le premier bloc conditionnel BF1 comporte une première entrée couplée à l'entrée EM4 du premier module 6, une deuxième entrée couplée à la sortie du deuxième bloc élémentaire BF2 et une sortie couplée à la sortie SM5 du premier module 6. Le deuxième bloc élémentaire BF2 comporte une entrée couplée à l'entrée EM5. Le troisième bloc élémentaire BF3 comprend une entrée couplée à l'entrée EM6 et une sortie couplée à la sortie SM6. Le quatrième bloc BF4 comporte une entrée couplée à l'entrée EM7, une sortie couplée à l'entrée du cinquième bloc BF5, ce dernier ayant une sortie couplée à l'entrée du sixième bloc BF6, et le bloc BF6 a une sortie couplée à la sortie SM7 du premier module 6. Le deuxième module fonctionnel système 8 comporte, quant à lui, un septième bloc fonctionnel conditionnel BF7 qui implémente la même fonction « amplification » que celle du premier bloc BF1 du premier module 6, un huitième bloc élémentaire BF8 qui implémente une autre fonction « amplification » identique à celle des premier et septième blocs, un neuvième bloc élémentaire BF9 qui implémente la même fonction « inversion de signe » que celle du troisième bloc BF3, et une chaîne de blocs élémentaires 12. La chaîne de blocs élémentaires 12 comprend un dixième bloc élémentaire BF10 qui implémente la même fonction « addition » que celle du quatrième bloc BF4, un onzième bloc élémentaire BF11 qui implémente une fonction « division », et un douzième bloc élémentaire BF12 qui implémente la même fonction « multiplication » que celle du sixième bloc BF6. Le septième bloc conditionnel BF7 comporte une entrée couplée à l'entrée EM10 du deuxième module 8 et une sortie couplée à la sortie SM9 du deuxième module 8. Le huitième bloc élémentaire BF8 comporte une entrée couplée à l'entrée EM11 et une sortie couplée à la sortie SM10. Le neuvième bloc élémentaire BF9 comprend une entrée couplée à l'entrée EM12 et une sortie couplée à la sortie SM11. Le dixième bloc BF10 comporte une entrée couplée à l'entrée EM13, une sortie couplée à l'entrée du onzième bloc BF11, ce dernier ayant une sortie couplée à l'entrée du douzième bloc BF12, et le bloc BF12 a une sortie couplée à la sortie SM12 du deuxième module 8. Lors de l'étape S41, et pour chaque paire de modules identifiée à l'étape précédente S3, on identifie des paires de blocs fonctionnels, chaque paire de blocs comprend un premier bloc appartenant au premier module de la paire de modules et un deuxième bloc appartenant au deuxième module de la paire de modules et implémentant une partie de fonctionnalité identique à celle du premier bloc. D'après l'exemple illustré à la figure 4, on identifie une première paire de blocs comprenant le premier bloc BF1 et le septième bloc BF7, et une deuxième paire de blocs comprenant le troisième bloc BF3 et le neuvième bloc BF9. On identifie également une troisième paire de blocs comprenant le quatrième bloc BF4 et le dixième bloc BF10, ainsi qu'une quatrième paire de blocs comprenant le sixième bloc BF6 et le douzième bloc BF12. Les huitième BF8 et onzième BF11 bloc sont considérés comme des blocs ajoutés et les deuxième BF2 et cinquième BF5 blocs comme des blocs supprimés. L'entrée EM11 et la sortie SM10 du deuxième module 8 sont des entrées ajoutées, et on calcule 2 CFP. L'entrée EM5 du premier module 6 est une entrée supprimée et on calcule 1 CFP. On note que les entrées/sorties du cinquième bloc BF5 et du onzième bloc BF11 ne sont pas couplées à des entrées/sorties des modules qui les contiennent et ne rentrent pas en compte dans le calcul des entrées/sorties. Pour chaque paire de blocs identifiée, le nombre d'entrées/sorties sont identiques et on ne compte aucune entrées/sorties ajoutées ou supprimées pour les paires de blocs identifiées. La sortie SM12 est considérée comme une sortie changée et on calcule 1 CFP. En outre, la sortie SM9 est considérée comme une sortie changée et on calcule 1 CFP. Par ailleurs, le type de la donnée reçue par l'entrée EM12 du deuxième module est un entier, et le type de la donnée reçue par l'entrée EM6 du premier module est un réel, l'entrée EM12 est donc considérée comme une entrée modifiée et on calcule 1 CFP. La somme des entrée/sorties pertinentes de la paire 10 est donc égale à 6 CFP, et on calcul un deuxième paramètre égal à 6 CFP. Le paramètre d'évolution total de la taille fonctionnelle du logiciel est donc égal à 6 CFP (égal au résultat du calcul du premier paramètre décrit à la figure 1) + 6 CFP (égal au résultat du calcul du deuxième paramètre décrit ici à la figure 4) = 12 CFP. Le procédé qui vient d'être décrit peut être mis en oeuvre de façon logicielle, ou également à partir de circuits logiques, embarqués dans un ordinateur ou dans un microprocesseur. Grâce au procédé précédemment décrit, on offre une méthode simple et précise pour estimer l'évolution de la taille fonctionnelle d'un logiciel, à partir de ses spécifications successives. REVENDICATIONS1. Procédé de mesure de l'évolution de la taille fonctionnelle d'un logiciel, le logiciel comprenant plusieurs versions élaborées respectivement à partir de plusieurs spécifications (Spl à Spn), chaque spécification comprenant des zones mémoires (2) pour stocker des données, et plusieurs modules (3), chaque module implémentant une fonctionnalité du logiciel et comprenant au moins une entrée pour recevoir une donnée et au moins une sortie pour transmettre une donnée, caractérisé en ce qu'il comprend une élaboration (S1) d'une première liste (L1) de modules appartenant à une première spécification (Spi), une élaboration (S2) d'une deuxième liste (L2) de modules appartenant une deuxième spécification (Spn), une identification (S41) de paires de modules, chaque paire ayant un premier module appartenant à la première liste (L1) et un deuxième module appartenant à la deuxième liste (L2) et implémentant une fonctionnalité identique à celle du premier module, et un calcul (S4) d'entrées/sorties comportant : - un calcul du nombre d'entrées et de sorties des modules supplémentaires de la deuxième liste par rapport aux modules des paires de modules identifiées ; et - un calcul du nombre d'entrées et de sorties des modules supplémentaires de la première liste par rapport aux modules des paires de modules identifiées ; le procédé comprenant en outre un calcul (S5) d'un paramètre d'évolution de la taille fonctionnelle du logiciel à partir d'une somme des nombres d'entrées et de sorties calculés. 2. Procédé selon la revendication 1, dans lequel chaque module comprend plusieurs blocs, chaque bloc implémentant une partie de la fonctionnalité associée au module et comprenant au moins une entrée et au moins une sortie, chaque liste comprenant des modules états (MFE) parmi les modules de ladite liste, chaque module état (MFE) comprenant uniquement des blocs conditionnels (BC1,BC2) parmi lesdits blocs du module état, chaque bloc conditionnel (BC1,BC2)comprenant au moins une sortie pour transmettre une donnée dont la valeur est fonction d'au moins une condition remplie par une donnée reçue par au moins une entrée du bloc conditionnel (BC1,BC2). 3. Procédé selon la revendication 2, dans lequel chaque liste comprend des modules systèmes (MFS) parmi les modules de ladite liste, chaque module système (MFS) comportant au moins un bloc élémentaire (BE1,BE2) parmi lesdits blocs du module système, chaque bloc élémentaire (BE1,BE2) comprenant au moins une sortie pour transmettre une donnée dont la valeur correspond au résultat d'une fonction mathématique de base appliquée à une donnée reçue par au moins une entrée du bloc élémentaire (BE1,BE2). 4. Procédé selon la revendication 2 ou 3, dans lequel le calcul (S4) d'entrées/sorties comprend en outre pour chaque paire de modules identifiée : - une identification (S41) de paires de blocs, chaque paire de blocs ayant un premier bloc appartenant au premier module et un deuxième bloc appartenant au deuxième module et implémentant une partie de fonctionnalité identique à celle du premier bloc ; - un calcul du nombre d'entrées et de sorties du deuxième module qui sont couplées à des blocs supplémentaires du deuxième module par rapport aux blocs des paires de blocs identifiées ; et - un calcul du nombre d'entrées et de sorties du premier module qui sont couplées à des blocs supplémentaires du premier module par rapport aux blocs des paires de blocs identifiées. 5. Procédé selon la revendication 4, dans lequel le calcul (S4) d'entrées/sorties comprend en outre pour chaque paire de blocs identifiée : - un calcul de la différence entre le nombre d'entrées du premier module couplées au premier bloc et le nombre d'entrées du deuxième module couplées au deuxième bloc ; et - un calcul de la différence entre le nombre de sorties du premier module couplées au premier bloc et le nombre de sortie du deuxième module couplées au deuxième bloc. 6. Procédé selon la revendication 4 ou 5, dans lequel le calcul (S4) d'entrées/sorties comprend en outre pour chaque paire de blocs identifiée : - un calcul d'un nombre d'entrées modifiées du deuxième module qui satisfont, pour chacune des entrées modifiées, les conditions suivantes : - une entrée équivalente du premier module est couplée au premier bloc de la paire de blocs identifiée ; et - l'entrée modifiée est couplée au deuxième bloc de la paire de blocs identifiée et reçoit une donnée dont la dimension ou le type est différent de celui d'une donnée reçue par l'entrée équivalente. 7. Procédé selon l'une des revendications 4 à 6, dans lequel le calcul (S4) d'entrées/sorties comprend en outre pour chaque paire de blocs identifiée : - un calcul d'un nombre de sorties modifiées du deuxième module qui satisfont, pour chacune des sorties modifiées, les conditions suivantes : - une sortie équivalente du premier module est couplée au premier bloc de la paire de blocs identifiée ; et - la sortie modifiée est couplée au deuxième bloc de la paire de blocs identifiée et transmet une donnée dont la dimension ou le type est différent de celui d'une donnée transmise par la sortie équivalente. 8. Procédé selon l'une des revendications 4 à 7, dans lequel le calcul (S4) d'entrées/sorties comprend en outre pour chaque paire de blocs identifiée : - un calcul d'un nombre de sorties changées du deuxième module qui satisfont, pour chacune des sorties changées, les conditions suivantes : - une sortie associée du premier module est couplée à un bloc élémentaire inclus dans une première chaîne de blocs élémentaires ;- la sortie changée est couplée à un bloc élémentaire inclus dans une deuxième chaîne de blocs élémentaires ; - la deuxième chaîne comprend au moins un bloc élémentaire qui implémente une partie de fonctionnalité différente de celles qui sont implémentées par les blocs élémentaires de la première chaîne. 9. Procédé selon l'une des revendications 2 à 8, dans lequel au moins une entrée d'un module est couplée à au moins une entrée d'un bloc dudit module, et est configurée pour recevoir une donnée transmise par une zone mémoire ou par un autre module. 10. Procédé selon l'une des revendications 2 à 9, dans lequel au moins une sortie d'un module est couplée à au moins une sortie d'un bloc dudit module, et est configurée pour transmettre une donnée vers une zone mémoire ou vers un autre module. 11. Procédé selon l'une des revendications 1 à 10, comprenant une élaboration (SO) des spécifications (Spl à Spn) à partir d'un logiciel de modélisation de système à langage non orienté objet. 12. Produit programme d'ordinateur chargeable directement dans une mémoire d'un système informatique, comprenant des portions de code de logiciel pour l'exécution du procédé selon l'une des revendications 1 à 11 lorsque ledit programme est exécuté sur ledit système informatique. 13. Support lisible par un système informatique, ayant des instructions exécutables par ordinateur adaptées pour provoquer l'exécution par le système informatique du procédé selon l'une des revendications 1 à 11.