|
 |
 |


|
 |
 |
Les microcontrôleurs 32 bits sont sous le charme des coeurs Arm
Les multimètres de table
Autosar et UML
Le marché classé de l'électronique
|
 |
|
|





 |
|
Abréviations, expression inédite, évolution du vocabulaire, le lexique d'Electronique International vous explique l'électronique et son environnement !
|
 > tout le lexique |
|
|
|
 |

Java, une solution pour moderniser les logiciels militaires
Dave Wood
[ LANGAGES DE PROGRAMMATION ]
Java, une solution pour moderniser les logiciels militaires
Java est aujourd'hui utilisé ou évalué dans des applications dites à « mission critique » pour l'avionique, les systèmes de combats navals, les drones, la télémétrie ou l'exploration
spatiale. Le choix d'une migration vers Java pour de tels systèmes vient de leur besoin de bénéficier de la productivité apportée par des technologies dites « sur étagères ».
Dave Wood
, Electronique Mensuel,
le 15/06/2007 à 10h00
Si Java est encore relativement nouveau dans le développement des systèmes embarqués temps réel, son utilisation dans ce domaine est aujourd'hui envisageable grâce aux efforts continus déployés depuis plusieurs années pour adapter
cette technologie, a priori généraliste, aux besoins très spécifiques des applications critiques. Ainsi, plusieurs applications militaires, larges et complexes, sont d'ores et déjà en cours de développement avec Java. On peut citer par exemple
l'ambitieux programmes américain
« Future combat system »
(FCS), le système américain de combat
« Aegis »
(guidage intégré de missile), le
« DDG-1000 »
(précédemment nommé DDX, destroyer multi-mission de prochaine génération de l'US Navy) ou encore le programme français
« Felin »
(équipement
du fantassin de demain).
Cette nécessité de moderniser les logiciels, au sein de ces programmes militaires, est largement dictée par l'évolution rapide des plates-formes matérielles. En effet, au cours des dernières décennies la puissance et la capacité
mémoire des cartes électroniques ont crû de manière exponentielle. Et si un logiciel embarqué était fortement contraint par les restrictions et le coût élevé du matériel il y a encore vingt ou trente ans, ce n'est plus le cas aujourd'hui. La
conséquence de cette évolution est que le logiciel, qui tire parti de l'accroissement de cette puissance matérielle, prend désormais une place prépondérante au sein des systèmes. Car si dans le passé, avec un matériel cher à l'achat et limité en
capacité, le coût du logiciel embarqué était presque anodin, aujourd'hui, le volume de code étant plus important, le coût du développement logiciel devient un élément qui peut conduire à l'impossibilité de réaliser un système ou à l'absence de
maîtrise de la durée d'un projet.
Face à cette évolution, toute amélioration de la productivité logicielle, aussi minime soit-elle, aura un large impact sur la réduction des coûts, l'accroissement des fonctionnalités et le respect des délais. Dans cette optique, Java
peut se prévaloir aujourd'hui d'une solide réputation en termes d'amélioration de la productivité et de qualité des développements. D'où le rôle majeur qu'il est en train de prendre au sein des développements logiciels dans le domaine
militaire.
Le C/C++ porte en lui des défauts rédhibitoires
En raison de l'importance prise par le logiciel au sein des équipements militaires, on constate d'une part une augmentation de la fragilité des systèmes et d'autre part une explosion des coûts de développement et de maintenance. Or,
aujourd'hui, quel que soit le type de développement, les langages de programmation les plus utilisés sont le C et le C++ qui représentent près de 90 % des développements logiciels dits à
« mission
critique »
. Malheureusement, les caractéristiques du C et du C++ présentent des obstacles majeurs pour l'adaptation des systèmes aux défis liés à l'accroissement de leur complexité. Ainsi, des ressources importantes sont
dépensées pour chasser des bogues qui pourraient être évités ; pour réinventer des fonctions déjà réalisées, alors que la réutilisation est une approche plus productive et plus fiable, ou encore pour maintenir des architectures logicielles
fragiles contre leur tendance à se dégrader au cours du temps.
Les problèmes inhérents au C et au C++ sont bien connus. Certes, il y a vingt ans, quand la plupart des systèmes temps réel étaient développés en assembleur sur cible nue, l'arrivée du langage C a permis un réel progrès, en offrant un
premier niveau d'abstraction s'éloignant du matériel. Au cours du temps, C a évolué en C++, ajoutant la notion informatique d'objet (on dit que le C++ est un langage orienté objets) et d'autres améliorations, même si on peut constater qu'un nombre
important de développeurs qui utilisent les compilateurs C++ continuent à se confiner au sous-ensemble C du langage.
Cependant, les améliorations apportées par C++, par rapport au C, n'incluent pas de mécanismes permettant de résoudre les principaux problèmes générateurs d'erreurs de programmation liés à ce langage, comme les typages incertains ou
la gestion mémoire qui peut facilement être corrompue. Il est toujours possible de pallier ces inconvénients en mettant en place des techniques de programmation et des règles de codage qui évitent ou limitent ce type de problèmes. Dans le cas des
applications à mission critique, de telles techniques font souvent partie du processus de développement. Mais leur mise en place est coûteuse et rarement compatible avec le besoin de faire évoluer les applications par enrichissements successifs.
Automatiser les techniques qui permettent d'assurer la fiabilité est un bien meilleur moyen d'obtenir que le talent des ingénieurs soit focalisé sur les spécifications et la conception de l'application, plutôt qu'à son débogage.
On peut donc affirmer que continuer à utiliser, pour la réalisation d'applications complexes, des méthodes et des outils adaptés aux développements de faible volume est la voie assurée vers un échec. Pour les systèmes à mission
critique, ce problème est d'autant plus sensible que les applications nécessitent des niveaux de fiabilité et de longévité très élevés.
L'émergence de technologies Java hautement performantes pour l'embarqué temps réel, et même pour les systèmes certifiables, signifie qu'à terme il n'y aura plus aucune raison de planifier de nouveaux développements en C++ ou en C. Non
seulement Java est facile à introduire dans un existant C++ (grâce à un grand nombre de similarités en syntaxe et terminologie), mais Java assure également une combinaison et une intégration des composants logiciels, une portabilité, une sécurité
mémoire et une simplicité supérieures au C++.
Certes, Java n'est pas la seule technologie logicielle qui soit supérieure à C++ pour les développements critiques. Le langage Ada partage un grand nombre des bénéfices technologiques de Java et est utilisé avec succès dans beaucoup
de programmes à mission critique. Toutefois, son usage reste confiné à quelques niches dans lesquelles il va continuer à se maintenir. Java étant largement plus populaire commercialement, ses avantages sont plus contextuels que technologiques. Parce
que très utilisés, les environnements Java disposent aujourd'hui d'un ensemble très riche d'outils et de bibliothèques sur étagères (COTS) (photo). Enfin, il ne faut pas négliger non plus le fait qu'aujourd'hui quasiment tous les étudiants en
informatique sortent aujourd'hui de l'école avec une formation et une expérience en Java, alors que peu d'entre eux sont formés en Ada. C'est donc ce vivier de talents qui guide les futurs développements logiciels, et il est opportun d'orienter et
d'accélérer la modernisation des logiciels à mission critique en tenant compte de cette tendance (figure).
Certes, il existe différentes formes de modernisation, comme par exemple la simple traduction automatique d'une application existante dans un nouveau langage. Mais l'idée centrale ici est de présenter la modernisation de tout le
processus de développement, qui permet d'introduire des techniques réduisant les risques d'erreurs de programmation, et renforçant les possibilités d'évolution et d'accroissement des fonctionnalités grâce à la combinaison/intégration et la
réutilisation de composants. Dans tous les cas, qu'il s'agisse de faire migrer une application ou des composants, ou de moderniser un processus complet de développement, le choix du langage joue un rôle central dans la réussite de l'objectif
fixé.
Les gains en productivité, une réalité avec Java
Liée à la croissance rapide de la complexité du logiciel, l'importance de la productivité ne peut plus être sous-estimée. Continuer à développer en C++, c'est continuer à augmenter les coûts logiciels des systèmes militaires. Il
existe pourtant une alternative, puisque des études publiées et l'analyse d'expériences concrètes ont montré que la programmation en Java est deux fois plus productive que celle réalisée en C++, qu'elle est six fois moins génératrice d'erreurs et
qu'elle est plus facilement portable à travers des architectures matérielles différentes. En se basant sur des moyennes de productivité standard de l'industrie (tableau I), on constate que même de modestes améliorations de productivité peuvent
conduire à économiser des centaines de milliers de dollars, en coût de développement, et accélérer la mise sur le marché de plusieurs mois. Pour une application à mission critique de taille moyenne, cette économie peut se chiffrer en millions de
dollars, tout en permettant de délivrer une application plus fiable, plus facilement évolutive et plus rapide à déployer. Depuis une décennie, Java est ainsi devenu le langage et la plate-forme de choix des développements généralistes, web, ou des
applications mobiles ; remplaçant largement C et/ou le C++ dans ces domaines applicatifs. Cette émergence de Java conduit à de substantielles améliorations en termes de qualité et de productivité. Et comme, parallèlement, une large
disponibilité d'ingénieurs formés en Java et des milliers de composants standardisés existent sur étagères (tableau II), l'utilisation de Java autorise un déploiement rapide, tandis que la réutilisation devient une réalité pratique.
Java vers les applications à « missions critiques »
Dès 1997, le Nist (National institute of standards and technology) a coordonné les activités d'un groupe d'experts créé pour définir les exigences liées à une utilisation de Java dans les développements embarqués temps réel. Ce
groupe, incluant une cinquantaine de sociétés spécialisées dans les technologies logicielles de pointe telles que Sun, IBM, Microsoft, Wind River, Motorola, QNX ou encore Aonix, est parvenu à la conclusion que Java disposait des caractéristiques de
base qui pouvaient améliorer de manière significative la qualité des systèmes temps réel et la productivité des développeurs (encadré, page suivante).
Suivant la conclusion du Nist, plusieurs années de spécifications, de recherches et d'efforts de développement ont été entreprises par ces compagnies pour développer les premières solutions pour les développeurs Java temps réel. Une
implémentation doit tout d'abord répondre aux besoins de la communauté de l'embarqué temps réel, incluant plusieurs caractéristiques incontournables : une faible empreinte mémoire, des temps de réponses efficaces, une vitesse d'exécution
rapide, l'accès à des mécanismes de programmation bas niveau, la gestion d'applications à complexité croissante, la réduction du nombre d'erreurs et la facilité de détection et d'élimination des erreurs d'un programme.
Ces efforts ont permis l'émergence d'une variété de technologies sur étagères. Par exemple, l'introduction d'un
« garbage collector »
(ramasse-miettes) temps réel, prédictible, dans une
solution respectant la sémantique
« Java standard edition »
a permis d'appliquer avec succès les avantages modernes de Java à des applications à mission critique complexes.
Aujourd'hui, des travaux sont en cours via l'Open Group (*), pour définir les standards répondant aux besoins des applications embarquées, très contraintes en ressources, voire certifiables. A travers le Java community process, et
basées sur des profils spécialisés pour les spécifications Java pour le temps réel (RTSJ), les premières technologies de ce type arrivent sur le marché. Elles permettent de moderniser les applications critiques en créant un pont entre, d'une part,
les besoins de ces applications en termes d'empreinte mémoire et de performances et, d'autre part, la souplesse et la fiabilité de Java. Au fur et à mesure, tous les composants d'une application, même ceux proches du matériel, seront portés
directement en Java, sans perte de capacité ou de performance.
Les équipes de recherche et développement travaillant sur les futurs logiciels militaires voient dès maintenant en Java le moyen de combattre l'obsolescence de leurs systèmes. Elles modernisent à la fois le code existant et les
nouvelles applications en puisant dans un vaste réservoir de composants Java sur étagères, et en s'appuyant sur le flot d'ingénieurs formés sortant des universités. Accélérer cette tendance est un élément crucial pour relever le défi qui consiste à
délivrer des systèmes fiables, à des coûts abordables et dans des délais maîtrisés.
(*) L'Open Group est un consortium industriel, créé notamment par IBM, Sun et Hewlett-Packard, qui définit des normes informatiques, notamment en ce qui concerne les interfaces de programmation.
Les atouts de Java selon le Nist (*)
Un groupe d'experts piloté par le Nist a considéré que les caractéristiques de Java listées ci-dessous pouvaient apporter des gains de productivité et de qualité importants et motiver l'adhésion de la communauté temps
réel :
- Le haut niveau d'abstraction de Java accroît la productivité des développeurs.
- Java est plus facile à maîtriser que C++.
- Java est sûr et protège les composants logiciels (incluant la machine virtuelle elle-même) les uns des autres.
- Java permet de charger dynamiquement de nouvelles classes.
- Java est hautement dynamique, supportant la création d'objets ou de tâches à l'exécution.
- Java supporte la combinaison, l'intégration et la réutilisation de composants.
- Le processus de développement Java est un facteur de sécurité, utilisant des concepts et des techniques qui ont été vérifiés par la communauté logicielle.
- Le langage et les plates-formes Java permettent la portabilité des applications.
- Les technologies Java supportent les applications distribuées.
- Java fournit des sémantiques d'exécution bien définies.
(*) Source : d'après une publication du Nist (National institute of standards and technology), référencée Nist special publication 500-243.
|
|
 |
|