Criticitรฉ et sรปretรฉ des applications logicielles
Dรฉfinitions
โข Un systรจme critique est un systรจme dans lequel une panne peut avoir des consรฉquences dramatiques, tels des morts ou des blessรฉs graves, des dommages matรฉriels importants, ou des consรฉquences graves pour lโenvironnement ou lโรฉconomie.
โข Un logiciel critique est un composant dโun systรจme critique. Son dysfonctionnement mettrait en pรฉril la sรฉcuritรฉ de personnes ou aurait dโautres consรฉquences graves.
โข On parle de sรปretรฉ de logiciels ou de logiciels sรปrs quand on veut sโassurer quโils ne se comportent pas de maniรจre non conforme aux attentes (e.g., arrรชt intempestif, calculs erronรฉs).
Remarque. La sรฉcuritรฉ des logiciels se base sur lโรฉtude de sa vulnรฉrabilitรฉ et sa capacitรฉ ร rรฉsister aux attaques. Cโest un domaine qui nโest pas traitรฉ dans cette thรจse et quโil ne faut pas la confondre avec la sรปretรฉ des logiciels.
Dรฉveloppement dโun logiciel critique
Les dรฉveloppements de logiciels critiques suivent des pratiques plus contraignantes que ceux pour des logiciels non critiques, aVn dโobtenir le meilleur niveau de qualitรฉ et de sรปretรฉ. On rappelle quโune dรฉfaillance dโun logiciel critique causant la mort de personnes pourrait avoir des coรปts sans limite. Lโavionique civile est le domaine qui impose les processus de dรฉveloppement les plus stricts et contraignants. Le ferroviaire possรจde des normes similaires avec toutefois un contexte de dรฉploiement diUรฉrent. Le guide DO-178B[73] donne probablement la plus connue des pratiques de dรฉveloppement de logiciels critiques actuellement, notamment du fait de sa rigueur. Cโest un guide destinรฉ au domaine des logiciels utilisรฉs dans lโavionique civile. Un logiciel dรฉveloppรฉ pour un avion ร usage civil doit rรฉpondre aux exigences de ce document. La version DO-178C[74], publiรฉe en dรฉcembre 2011, commence ร remplacer la DO-178B. En eUet, dโune part la technologie รฉvolue. On veut introduire de nouvelles techniques de dรฉveloppement de logiciels, mais aussi et surtout de vรฉriVcation. Dโautre part, les besoins รฉvoluent aussi. On nโattend pas la mรชme chose dโun avion aujourdโhui quโon en attendait il y a vingt ansย .
Certifications, tests et preuves formellesย
Dรฉfinition. Un certificat est un document qui atteste du suivi et du respect dโune certaine quantitรฉ dโexigences. Il peut รชtre un contrรดle de savoirs ou savoir-faire. Il peut รชtre la dรฉclaration de possession dโun bien matรฉriel. Ou encore il peut attester du respect dโun processus de production. En gรฉnรฉral, un certiVcat doit รชtre vรฉriVable, en ce sens quโil doit exister une dรฉmarche permettant de le vรฉriVer.
ร propos de la notion de ยซ certiVcat ยป
Voici quelques exemples de certiVcats dans des contextes trรจs diUรฉrents.
โ un certiVcat dโaptitude professionnelle (C.A.P.) ;
โ un certiVcat dโimmatriculation (ex-carte grise) ;
โ un certiVcat dโagriculture biologique ;
โ un certiVcat SSL/TLS (Secure Sockets Layer/Transport Layer Security).
Pour les logiciels critiques, un certiVcat est dรฉlivrรฉ pour un logiciel dont le dรฉveloppement a suivi un cahier des charges prรฉcis et rigoureux. Un certiVcat nโa alors de valeur que si le cahier des charges est pertinent et que lโautoritรฉ de certiVcation est de conVance et compรฉtente. Parmi les quelques exemples de certiVcats dโautres domaines prรฉsentรฉs plus haut, cโest le certiVcat dโagriculture biologique qui en est le plus analogue.
Activitรฉs de tests
Les activitรฉs de tests font partie de la plupart des processus de certiVcation des logiciels. Selon Myers [62], leur premier but est de trouver les erreurs, si bien quโun ensemble de tests ne mettant aucune erreur en รฉvidence est a priori considรฉrรฉ en รฉchec. Il sโagit de vรฉriVer que pour certaines entrรฉes, on obtient bien les sorties attendues, mais surtout il sโagit de chercher et trouver les scรฉnarios oรน les sorties attendues ne correspondent pas aux sorties obtenues. Ces activitรฉs permettront รฉgalement de vรฉriVer quโon nโa pas รฉcrit de code inatteignable. Leur second but est de montrer quโon a bien envisagรฉ tous les cas de Vgure et quโon les a testรฉs, pour ne pas avoir de mauvaise surprise lors de la mise en production. Si le dรฉveloppeur peut faire ses propres tests pour dรฉnicher ses propres erreurs, au Vnal le testeur doit prรฉfรฉrablement รชtre une autre personne aVn de ne pas biaiser les tests. Le testeur vรฉriVe ainsi le travail du dรฉveloppeur, donc la conformitรฉ de la production du dรฉveloppeur par rapport aux spรฉciVcations du cahier des charges. La plupart du temps, le testeur nโa pas accรจs au code produit par le dรฉveloppeur. Il doit produire ses tests dโaprรจs les spรฉciVcations, et non dโaprรจs le code du dรฉveloppeur. Le coรปt des activitรฉs de tests est grand par rapport au coรปt total du dรฉveloppement dโun logiciel. Mais il est gรฉnรฉralement prรฉfรฉrable de payer ce coรปt le plus tรดt possible pour รฉviter les mauvaises surprises une fois le produit mis en production. Cependant, devant la part importante du coรปt du test, dรฉcoule rapidement une volontรฉ de rรฉduire ce coรปt sans altรฉrer la qualitรฉ du produit. De plus, les logiciels devenant de plus en plus complexes, que ce soit ร cause de leurs tailles ou des fonctionnalitรฉs intrinsรจques, les coรปts de dรฉveloppement et de tests augmentent.
Certificats et preuves
Vis-ร -vis de la sรปretรฉ de fonctionnement, un certiVcat nโest pas une preuve au sens mathรฉmatique ou formel du terme. Ainsi, un logiciel certiVรฉ nโest gรฉnรฉralement pas un logiciel dont le fonctionnement et lโimplantation ont รฉtรฉ entiรจrement prouvรฉs mathรฉmatiquement. Cependant, une preuve mathรฉmatique peut รชtre un certiVcat, en partie ou entiรจrement. En eUet, les avancรฉes dans les mรฉthodes formelles sont tout ร fait intรฉressantes. Par exemple, le projet CompCert[51] propose un compilateur ciblant un assembleur PowerPC pour un grand sousensemble du langage C, dont la majeure spรฉciVcitรฉ est de fournir la preuve mathรฉmatique des diffรฉrentes transformations de langage eUectuรฉes par le compilateur. Cela signiVe que la propriรฉtรฉ de conservation de la sรฉmantique du programme, lors des traductions dโun langage ร un autre langage, est prouvรฉe. Sans aller jusquโร une certiVcation totale dโun logiciel par la preuve, son utilisation partielle a รฉtรฉ validรฉe dans le domaine de lโavionique civile. Notamment, CAVEAT, un prouveur pour programmes รฉcrits en langage C et dรฉveloppรฉ au Commissariat ร lโรnergie Atomique, a รฉtรฉ utilisรฉ dans le processus de vรฉriVcation dโun logiciel critique destinรฉ ร lโavionique civile par Airbus [79]. Les preuves servent ร montrer et ร garantir des propriรฉtรฉs de sรปretรฉ. Cependant les tests ne pourront probablement jamais รชtre remplacรฉs entiรจrement par les preuves, car on veut sโassurer avec les tests que les spรฉciVcations sont bien implantรฉes mais aussi quโelles expriment eUectivement ce que leurs auteurs pensent quโelles expriment. Ce sera nรฉcessaire tant que les langues naturelles exprimeront des propos sujets ร interprรฉtation et interviendront dans la conception des logiciels. Dโautre part, actuellement, il est techniquement plus facile de faire des tests que de faire des preuves dรจs que les programmes deviennent complexes. La phrase suivante de Donald Knuth illustre la situation de la preuve face au test : ยซ Beware of the above code ; I have only proved it correct, not tried it. ยป.
Normes ou guides de dรฉveloppement de logiciels critiques
Lโavionique civile en tant que domaine critique
Avant lโarrivรฉe des logiciels critiques, il y avait de maniรจre plus gรฉnรฉrale les systรจmes critiques qui nโembarquaient pas de logiciels. Les premiers avions de ligne civils datent des environs de 1920. Ils permettaient de transporter une dizaine de personnes. Aprรจs la seconde guerre mondiale, sont apparus les avions de ligne transportant une centaine de personnes (e.g., Boeing 377). Aujourdโhui, les avions de ligne transportent jusquโร plus de 800 passagers (e.g., Airbus A380) et surtout, ils embarquent des logiciels de plus en plus nombreux et complexes. Pour quโun logiciel critique puisse รชtre utilisรฉ, il faut obtenir lโaval de lโautoritรฉ de rรฉgulation. Pour lโavionique civile, aux รtats-Unis, il sโagit de la Federal Aviation Administration (FAA) . Son homologue europรฉen est lโAgence Europรฉenne de la Sรฉcuritรฉ Aรฉrienne (AESA). Dans le contexte des systรจmes critiques, ces agences sont chargรฉes de promouvoir le plus haut niveau possible de sรฉcuritรฉ pour les passagers. Ces agences exigent que les systรจmes critiques soient conรงus de la maniรจre la plus sรปre possible. Pour les logiciels, tout comme pour le matรฉriel (au sens large, cโest-ร -dire incluant le matรฉriel mรฉcanique et le matรฉriel รฉlectronique), elles recommandent le suivi de normes ou de guides. Aux รtats-Unis, la Radio Technical Commission for Aeronautics (RTCA, Inc.)ย est lโorganisation chargรฉe de dรฉvelopper des guides techniques pour les autoritรฉs gouvernementales et industrielles servant ร lโavionique, et la FAA est son principal soutien. En 1980, la RTCA a formรฉ un comitรฉ (SC-145) pour รฉtablir un guide pour le dรฉveloppement des logiciels destinรฉs ร lโavionique, cโest lui qui a produit le document ยซ Software Considerations in Airborne Systems and Equipment CertiVcation ยป, รฉditรฉ en janvier 1982 sous la rรฉfรฉrence DO-178 [46]. Un autre comitรฉ a รฉtรฉ formรฉ pour produire une premiรจre rรฉvision du document, ce qui a donnรฉ en 1985 la publication de la DO-178A [72]. En 1989, un nouveau comitรฉ a รฉtรฉ formรฉ pour travailler sur une nouvelle version aVn de traiter de nouvelles problรฉmatiques dont la qualiVcation des outils, ce qui a donnรฉ en 1992 la publication de la version la plus connue ร ce jour qui est la DO-178B [73]. En dรฉcembre 2011, la DO-178C tant attendue arrive et complรจte la DO-178B en rรฉpondant ร de nouvelles demandes dont lโintroduction des ยซ mรฉthodes formelles ยป [74]. Celles-ci avaient cependant dรฉjร รฉtรฉ employรฉes dans le cadre de dรฉveloppements DO-178B [80]. La nouvelle rรฉvision DO-178C remplacera peu ร peu son prรฉdรฉcesseur DO-178B ; mais il faut du temps pour que la transition se fasse notamment en raison des projets qui ont dรฉmarrรฉ avant sa publication. Dans cette thรจse, on fera par dรฉfaut rรฉfรฉrence ร la version DO-178B. La plupart du temps, ce qui fait rรฉfรฉrence dans cette thรจse ร la DO-178B reste valide pour la DO-178C .
|
Table des matiรจres
I Introduction
Objectifs de cette thรจse
Contributions de cette thรจse
Plan du manuscrit
II Dรฉveloppement de logiciels critiques et tests de couverture structurelle
II.1 Criticitรฉ et sรปretรฉ des applications logicielles
II.1.1 Dรฉveloppement dโun logiciel critique
II.2 CertiVcations, tests et preuves formelles
II.2.1 Activitรฉs de tests
II.2.2 CertiVcats et preuves
II.3 Normes ou guides de dรฉveloppement de logiciels critiques
II.3.1 Lโavionique civile en tant que domaine critique
II.3.2 Normes pour dโautres domaines critiques
II.4 Cycle de vie dโun logiciel et processus de dรฉveloppement
II.4.1 La vie dโun logiciel
II.4.2 Agencement de la vie dโun logiciel
II.4.3 Lโimportance du processus de dรฉveloppement pour un logiciel critique
II.5 Documentation et traรงabilitรฉ pour les logiciels critiques
II.6 Processus de certiVcation (ou de qualiVcation)
II.7 Activitรฉs de tests
II.8 รvolution des activitรฉs de tests
II.8.1 รvolution des coรปts
II.8.2 รvolution des techniques
II.9 Couverture de code
II.9.1 Objectifs
II.9.2 Outils pour la couverture de code
II.9.3 Un exemple de couverture de code
II.10 Conclusion du chapitre
III Le Langage mCaml et la couverture structurelle des expressions
III.1 Le langage mCaml
III.1.1 Grammaire informelle des expressions du langage mCaml
III.1.2 Sรฉmantique opรฉrationnelle du langage mCaml
III.1.3 Arbre dโรฉvaluation
III.2 SpรฉciVcation de la couverture des expressions pour mCaml
III.2.1 Rรจgles formelles de couverture des expressions pour mCaml
III.2.2 Taux de couverture
III.3 Conclusion du chapitre
IV Couverture des conditions et des dรฉcisions pour mCaml
IV.1 Critรจres de couverture pour les expressions boolรฉennes
IV.1.1 Couverture des conditions (CC)
IV.1.2 Couverture des dรฉcisions (DC)
IV.1.3 Couverture des conditions/dรฉcisions (C/DC)
IV.1.4 Couverture des conditions multiples (MCC)
IV.1.5 Couverture des conditions/dรฉcisions modiVรฉe (MC/DC)
IV.1.6 Autres critรจres de couverture pour les expressions boolรฉennes
IV.2 Conditions et dรฉcisions pour mCaml : quatre sรฉmantiques formelles
IV.2.1 Notations
IV.2.2 Sรฉmantique 1 : repรฉrage syntaxique aux branchements conditionnels
IV.2.3 Sรฉmantique 2 : sรฉmantique intermรฉdiaire, gรฉnรฉralisation aux opรฉrateurs boolรฉens
IV.2.4 Sรฉmantique 3 : une extension de la sรฉmantique 2, gรฉnรฉralisation aux applications ร retour boolรฉen
IV.2.5 Sรฉmantique 4 : gรฉnรฉralisation aux expressions boolรฉennes
IV.3 Choix de la sรฉmantique
IV.4 Fonction de comptage des conditions dโune expression
IV.5 Conclusion du chapitre
V Conclusion
Tรฉlรฉcharger le rapport complet