FR 2977955 A1 20130118 FR 1156318 A 20110712 B 11-1897FR 1 Procédé de détermination de la taille d'une partie d'un logiciel L'invention concerne la détermination de la taille d'une partie d'un logiciel, en particulier la taille fonctionnelle du logiciel. Dans les systèmes actuels, de plus en plus de fonctions sont réalisées à partir de logiciels embarqués. Les coûts de développement des logiciels embarqués peuvent fortement augmenter, notamment en fonction de la taille du logiciel. Il est donc nécessaire de maîtriser ces coûts pour garantir la compétitivité des entreprises qui développent ces logiciels. Une solution possible pour maîtriser ces coûts de développement est de mesurer la taille des logiciels sur la base de leurs spécifications. Par exemple, on peut utiliser la méthode de mesure « COSMIC » de la taille fonctionnelle Version 3.0.1, publiée en mai 2009 sous la référence « Measurement manual (the COSMIC Implementation Guide for ISO/IEC 19761 : 2003), en langue anglaise », 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). 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 permettent pas de mesurer directement des tailles de logiciels avec suffisamment de précision. 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. 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. I1 est donc proposé une méthode pour mesurer la taille d'un logiciel qui soit plus précise et qui donne une même taille de logiciel pour une même spécification. Ainsi, il est proposé un procédé de détermination de la taille d'une partie d'un logiciel élaboré à partir d'une spécification logicielle, la spécification logicielle comprenant des zones mémoire pour stocker des données et plusieurs blocs fonctionnels comprenant des entrées pour recevoir des données et des sorties pour transmettre des données. Le procédé comprend une identification d'un premier ensemble de blocs états comportant, chacun, au moins un bloc fonctionnel conditionnel comprenant au moins une entrée et 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 en entrée, une identification d'un deuxième ensemble de blocs systèmes comportant, chacun, au moins un bloc fonctionnel élémentaire distinct d'un bloc fonctionnel conditionnel et comprenant au moins une entrée ou au moins une sortie, et une détermination d'une taille fonctionnelle partielle de la partie du logiciel à partir d'un calcul du nombre d'entrées et de sorties des premier et deuxième ensembles de blocs. Ainsi, on fournit une méthode de mesure simple et précise. Selon un mode de mise en oeuvre, la spécification logicielle comprend un ensemble ajouté de blocs fonctionnels ayant une taille fonctionnelle prédéterminée, et le procédé comprend en outre une détermination d'une taille fonctionnelle structurelle de la partie du logiciel à partir de la somme entre la taille fonctionnelle prédéterminée et la taille fonctionnelle partielle déterminée. On peut donc calculer facilement une taille fonctionnelle partielle qui permette de déterminer la charge de développement du logiciel, et une taille fonctionnelle structurelle qui détermine, notamment, la taille qu'il faut allouer dans une mémoire pour stocker le logiciel, ou encore la charge d'un microprocesseur destiné à exécuter le 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. Une entrée d'un bloc système correspondant à une entrée d'un bloc fonctionnel élémentaire du bloc système peut être configurée pour recevoir une donnée transmise par une zone mémoire, ou par un bloc fonctionnel d'un autre bloc système ou état. Une sortie d'un bloc système correspondant à une sortie d'un bloc élémentaire du bloc système peut être configurée pour transmettre une donnée vers une zone mémoire, ou vers un bloc fonctionnel d'un autre bloc système ou état. Une entrée d'un bloc état correspondant à une entrée d'un bloc fonctionnel conditionnel du bloc état peut être configurée pour recevoir une donnée transmise par une zone mémoire, ou par un bloc fonctionnel d'un autre bloc état ou système. Une sortie d'un bloc état correspondant à une sortie d'un bloc fonctionnel conditionnel peut être configurée pour transmettre une donnée vers une zone mémoire, ou vers un bloc fonctionnel d'un autre bloc état ou système. Le procédé peut également comprendre une élaboration de la spécification logicielle à 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 fonctionnalités logicielles correspondant 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 logicielle suffisamment complète tout en offrant une meilleure rapidité des traitements des données. 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 détermination de la taille d'une partie d'un logiciel selon un mode de mise en oeuvre de l'invention ; - la figure 2, illustre de façon schématique un exemple de mise en oeuvre d'une identification d'un premier ensemble de blocs systèmes ; et - la figure 3, illustre de façon schématique un exemple de mise en oeuvre d'une identification d'un deuxième ensemble de blocs états. Sur la figure 1, on a représenté schématiquement les principales étapes d'un procédé de détermination de la taille fonctionnelle d'une partie d'un logiciel, par exemple un logiciel de contrôle d'un système. Le logiciel de contrôle est élaboré à partir d'une spécification 1 comprenant les caractéristiques techniques du logiciel, notée spécification logicielle. La spécification logicielle 1 est une liste d'instructions mathématiques, ou logiques, et de zones mémoires destinées à être implémentées dans les mémoires physiques du système, cette liste peut être élaborée sous la forme d'un programme d'ordinateur ou sous toute autre forme. Le procédé peut comprendre une étape initiale SO dans laquelle on élabore la spécification logicielle 1. On peut, par exemple, élaborer la spécification logicielle à partir d'un logiciel de modélisation. Plusieurs logiciels de modélisation peuvent être utilisés. Préférentiellement, 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 blocs fonctionnels à partir d'un environnement graphique interactif. Le logiciel de modélisation permet d'élaborer une liste de caractéristiques à partir d'un système réel 2. De manière générale, la spécification logicielle 1 comporte, en particulier, des zones mémoires 3 pour stocker des données, et des blocs fonctionnels 4 qui réalisent des traitements sur les données. Les blocs fonctionnels correspondent aux fonctionnalités du logiciel de contrôle à élaborer. Les blocs fonctionnels 4 sont, par exemple, des traitements mathématiques qui modifient les valeurs des données. Un bloc fonctionnel 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 du traitement du bloc fonctionnel. Les données peuvent être, par exemple, des tableaux à une ou plusieurs dimensions. La spécification comporte deux types distincts de blocs fonctionnels 4, dont des blocs fonctionnels conditionnels 5 et des blocs fonctionnels élémentaires 6. Un bloc fonctionnel élémentaire 6 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 6 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 6, 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 5 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. Le bloc fonctionnel conditionnel 5 met à jour la valeur d'une donnée en sortie du bloc si la donnée en entrée satisfait à la condition du bloc. Le procédé comporte une première étape S1 d'identification de blocs. L'étape S1 comporte une première identification d'un premier ensemble d'un ou plusieurs blocs états et une deuxième identification d'un deuxième ensemble d'un ou plusieurs blocs systèmes. Un bloc état comporte au moins un bloc fonctionnel conditionnel, et de préférence, uniquement des blocs fonctionnels conditionnels. Un bloc système comporte au moins un bloc fonctionnel élémentaire, et peut en outre comprendre un ou plusieurs blocs fonctionnels conditionnels. Par ailleurs, la spécification fonctionnelle 1 peut en outre comprendre un ensemble ajouté 7 de blocs fonctionnels qui a déjà été utilisé pour élaborer une partie du logiciel de contrôle. Après l'étape d'identification de blocs S1, on effectue une deuxième étape S10 de détermination d'une taille du logiciel. Lors de la deuxième étape S10, on calcule une taille fonctionnelle partielle S2 et une taille fonctionnelle structurelle S3. Pour calculer ces tailles, on détermine le nombre d'entrées et de sorties de chaque bloc état et de chaque bloc système. Puis on détermine la somme de toutes les entrées et de toutes les sorties des blocs systèmes. En particulier, on utilisera l'unité CFP pour calculer ces tailles. On définit alors 1 CFP égal à une entrée, ou une sortie, d'un bloc état, ou d'un bloc système. Selon un premier mode de mise en oeuvre, la spécification logicielle 1 ne comporte pas d'ensemble ajouté 7 de blocs fonctionnels. Dans ce cas, on identifie un premier ensemble d'un ou plusieurs blocs états, on identifie un deuxième ensemble d'un ou plusieurs blocs systèmes, puis on détermine la taille fonctionnelle partielle des premier et deuxième ensembles identifiés. La taille fonctionnelle partielle correspond ainsi à la charge de développement et à la place mémoire nécessaire pour stocker la partie du logiciel élaborée à partir de cette spécification. Dans ce premier mode de mise en oeuvre, la taille fonctionnelle structurelle est égale à la taille fonctionnelle partielle. Selon un deuxième mode de mise en oeuvre, la spécification logicielle 1 comporte, des ensembles de blocs fonctionnels destinés à élaborer une partie du logiciel et un ensemble ajouté 7 de blocs fonctionnels. Dans ce cas, l'ensemble ajouté 7 a une taille fonctionnelle prédéterminée, et on détermine la taille fonctionnelle partielle des ensembles destinés à élaborer une partie du logiciel à partir des étapes décrites dans le premier mode de mise en oeuvre. Puis, on détermine la taille fonctionnelle structurelle qui est égale à la somme entre la taille prédéterminée et la taille fonctionnelle partielle. La taille fonctionnelle structurelle correspond ainsi à la place mémoire nécessaire pour stocker la partie du logiciel élaborée à partir de cette spécification. On peut noter que la taille fonctionnelle prédéterminée de l'ensemble ajouté 7 peut être déterminée, préalablement à la détermination de la taille fonctionnelle structurelle S3, à partir des étapes décrites dans le premier mode de mise en oeuvre. En d'autres termes, l'ensemble ajouté 7 de blocs fonctionnels est pris en compte lors du calcul de la taille fonctionnelle structurelle du logiciel, car il correspond à des fonctionnalités du logiciel de contrôle qui sont destinées à être stockées en mémoire. Cependant, l'ensemble ajouté 7 de blocs n'est pas pris en compte lors du calcul de la taille fonctionnelle partielle, car il ne correspond à aucune charge de développement étant donné que les fonctionnalités du logiciel ont déjà été développées. Quel que soit le mode de mise en oeuvre, pour un bloc système identifié, on calcule le nombre d'entrées et de sorties du bloc système en fonction de la configuration de ses blocs fonctionnels élémentaires. En particulier, on identifie une entrée d'un bloc système comme étant une entrée d'un de ses blocs fonctionnels élémentaires configurée pour recevoir une donnée transmise par une zone mémoire, ou par un bloc fonctionnel d'un autre bloc système ou d'un autre bloc état. On identifie, par ailleurs, une sortie d'un bloc système comme étant une sortie d'un de ses blocs fonctionnels élémentaires configurée pour transmettre une donnée vers une zone mémoire, ou vers un bloc fonctionnel d'un autre bloc système ou d'un autre bloc état. Concernant les blocs états identifiés, on calcule également le nombre d'entrées et de sorties du bloc état en fonction de la configuration de ses blocs fonctionnels conditionnels. On identifie alors une entrée d'un bloc état comme étant une entrée d'un de ses blocs fonctionnels conditionnels configurée pour recevoir une donnée transmise par une zone mémoire, ou par un bloc fonctionnel d'un autre bloc état ou d'un autre bloc système. En outre, on identifie une sortie d'un bloc état comme étant une sortie d'un de ses blocs fonctionnels conditionnels configurée pour transmettre une donnée vers une zone mémoire, ou vers un bloc fonctionnel d'un autre bloc état ou d'un autre bloc système. Sur la figure 2, on a illustré un exemple d'identification d'un bloc système BS1. Le bloc système BS1 correspond à la fonctionnalité logicielle décrite par l'équation (1) suivante : C=A-(C1+B) (équation 1) où - A : est une première donnée en entrée du bloc système BS1 ; - B : est une deuxième donnée en entrée du bloc système BS1 ; - C : est une troisième donnée en sortie du bloc système BS1 ; et - Cl : est une quatrième donnée en entrée du bloc système BS1. Le bloc système BS1 comprend deux blocs fonctionnels élémentaires BEl, BE2. Le premier bloc fonctionnel élémentaire BEl comporte une première entrée E l 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 D l pour transmettre la troisième donnée C en sortie du bloc système BS1. Le deuxième bloc fonctionnel élémentaire BE2 comprend une deuxième entrée E2 pour recevoir la quatrième donnée Cl, une troisième entrée E3 pour recevoir la deuxième donnée B et un sortie pour émettre le résultat au premier bloc fonctionnel élémentaire BEl. Dans cet exemple, la quatrième donnée Cl est stockée dans une zone mémoire 3 de la spécification logicielle. En particulier les données A, B en entrée du bloc système BS1 proviennent d'autres blocs, systèmes ou états. En outre, la troisième donnée C en sortie du bloc système BS1 est transmise en direction d'autres blocs, systèmes ou états, ou encore vers la zone mémoire 3. On notera également que dans cet exemple, le premier bloc fonctionnel élémentaire BEl 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 bloc système BS1, celui-ci comprend trois entrées correspondant à 3 CFP, et une sortie correspondant à 1 CFP. La taille fonctionnelle de la partie du logiciel associée au bloc système BS1 est donc égale à 4 CFP. En particulier, on notera que l'émission de la sortie du deuxième bloc élémentaire BE2 vers le premier bloc élémentaire BEl n'est pas considérée comme étant une entrée, ni une sortie, du bloc système BS1, et n'est donc pas prise en compte dans le calcul de la taille fonctionnelle. Sur la figure 3, on a illustré un exemple d'identification d'un bloc état BE. Le bloc état BE correspond à la fonctionnalité logicielle qui consiste à mettre à jour une première donnée E en sortie du bloc état BE en fonction de la validité de deux conditions, conditionl, condition2. Le bloc état BE 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 C2 en sortie du bloc état BE, et une deuxième sortie 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 C2 sont mises à jour si la deuxième donnée D satisfait la première condition conditionl. Le deuxième bloc fonctionnel conditionnel BC2 comprend une deuxième entrée E5 pour recevoir la troisième donnée C2, une quatrième sortie D4 pour transmettre la troisième donnée C2 et une cinquième sortie D5 pour transmettre la première donnée E en sortie du bloc état BE. Dans cet exemple, la troisième donnée C2 est stockée dans une zone mémoire 3 de la spécification logicielle. En particulier la donnée D en entrée du bloc état BE provient d'autres blocs, systèmes ou états. En outre, la première donnée E en sortie du bloc état BE est transmise en direction d'autres blocs, systèmes ou états, ou encore vers la zone mémoire 3. En ce qui concerne le nombre d'entrées et de sorties du bloc système BE, celui-ci comprend deux entrées correspondant à 2 CFP, et quatre sorties correspondant à 4 CFP. La taille fonctionnelle de la partie du logiciel associée au bloc état BE est donc égale à 6 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 la taille d'un logiciel, à partir de sa spécification. En outre, une telle détermination de la taille fonctionnelle structurelle des logiciels permet, par exemple de pouvoir comparer les logiciels entre eux, notamment en comparant les rapports entre le nombre de défauts et leur taille fonctionnelle structurelle afin de comparer leurs comportements. REVENDICATIONS1. Procédé de détermination de la taille d'une partie d'un logiciel élaboré à partir d'une spécification logicielle (1), la spécification logicielle (1) comprenant des zones mémoire (3) pour stocker des données et plusieurs blocs fonctionnels (5,6) comprenant des entrées pour recevoir des données et des sorties pour transmettre des données, caractérisé en ce qu'il comprend une identification (Si) d'un premier ensemble de blocs états comportant, chacun, au moins un bloc fonctionnel conditionnel (5) comprenant au moins une entrée et 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 en entrée, une identification (Si) d'un deuxième ensemble de blocs systèmes comportant, chacun, au moins un bloc fonctionnel élémentaire (6) distinct d'un bloc fonctionnel conditionnel (5) et comprenant au moins une entrée ou au moins une sortie, et une détermination (S2) d'une taille fonctionnelle partielle de la partie du logiciel à partir d'un calcul du nombre d'entrées et de sorties des premier et deuxième ensembles de blocs. 2. Procédé selon la revendication 1, dans lequel la spécification logicielle (1) comprend un ensemble ajouté de blocs fonctionnels ayant une taille fonctionnelle prédéterminée, et le procédé comprend en outre une détermination (S3) d'une taille fonctionnelle structurelle de la partie du logiciel à partir de la somme entre la taille fonctionnelle prédéterminée et la taille fonctionnelle partielle déterminée. 3. Procédé selon la revendication 1 ou 2, dans lequel une entrée d'un bloc système correspond à une entrée d'un bloc fonctionnel élémentaire (6) du bloc système configurée pour recevoir une donnée transmise par une zone mémoire (3), ou par un bloc fonctionnel (5,6) d'un autre bloc système ou état. 4. Procédé selon l'une des revendications 1 à 3, dans lequel une sortie d'un bloc système correspond à une sortie d'un bloc fonctionnel élémentaire (6) du bloc système configurée pour transmettre unedonnée vers une zone mémoire, ou vers un bloc fonctionnel (5,6) d'un autre bloc système ou état. 5. Procédé selon l'une des revendications 1 à 4, dans lequel une entrée d'un bloc état correspond à une entrée d'un bloc fonctionnel conditionnel (5) du bloc état configurée pour recevoir une donnée transmise par une zone mémoire (3), ou par un bloc fonctionnel (5,6) d'un autre bloc état ou système. 6. Procédé selon l'une des revendications 1 à 5, dans lequel une sortie d'un bloc état correspond à une sortie d'un bloc fonctionnel conditionnel (5) configurée pour transmettre une donnée vers une zone mémoire (3), ou vers un bloc fonctionnel (5,6) d'un autre bloc état ou système. 7. Procédé selon l'une des revendications 1 à 6, comprenant une élaboration (SO) de la spécification logicielle à partir d'un logiciel de modélisation de système (2) à langage non orienté objet.