L’ou­til d’ana­lyse se dote de la cou­ver­ture de code MC/DC ba­sée sur la trace

Avec cette nou­velle fonc­tion­na­li­té, l’ou­til Trace32 de Lau­ter­bach sup­porte dé­sor­mais les prin­ci­pales mé­thodes de cou­ver­ture de code au ni­veau de la source.

Electronique S - - Sommaire - CÉ­DRIC LARDIÈRE

Lors du dé­ve­lop­pe­ment de sys­tèmes à sé­cu­ri­té cri­tique, l’ana­lyse de cou­ver­ture de code est sou­vent uti­li­sée pour dé­mon­trer que le lo­gi­ciel a été tes­té in­té­gra­le­ment et de ma­nière com­pré­hen­sive. L’al­le­mand Lau­ter­bach pro­pose de­puis des an­nées, dans son lo­gi­ciel Trace32, les prin­ci­pales mé­thodes de cou­ver­ture de code ba­sée sur la trace, mé­thodes qui per­mettent de dé­mon­trer les me­sures de cou­ver­ture des ins­truc­tions (Sta­te­ment Co­ve­rage), de cou­ver­ture des bran­che­ments (Branch Co­ve­rage) et de cou­ver­ture condi­tion­nelle et dé­ci­sion­nelle. « Même si Trace32 pro­pose des mé­thodes de cou­ver­ture de code ba­sée sur la trace, en plus des fonc­tions de dé­bogue, de pro­fi­ling, etc., il nous man­quait tou­te­fois la cou­ver­ture de code MC/DC ( Mo­di­fied Con­di­tion/ De­ci­sion Co­ve­rage), pour cou­ver­ture con­di­tion/ dé­ci­sion mo­di­fiée, ba­sée sur la trace. Une fonc­tion­na­li­té qui nous était d’ailleurs de­man­dée de­puis des an­nées », rap­pelle Jean-Pierre Pa­ra­di­so, res­pon­sable des ventes chez Lau­ter­bach France. Les dé­ve­lop­peurs ont sou­vent pen­sé que les tests de cou­ver­ture de code de bran­che­ments pou­vaient rem­pla­cer une me­sure de cou­ver­ture de code MC/DC au ni­veau source. « Mais l’in­dus­trie avio- nique (avec la norme DO-178C) ré­fute cette af­fir­ma­tion et, avec l’avè­ne­ment des vé­hi­cules au­to­nomes, nous per­ce­vons aus­si une de­mande », in­dique-t-il. Contrai­re­ment à d’autres ou­tils dis­po­nibles sur le mar­ché, Trace32 per­met de gé­né­rer une cou­ver­ture de code MC/ DC sans que le dé­ve­lop­peur ait be­soin de mo­di­fier une seule ligne de son code source. Pour im­plé­men­ter une telle me­sure sans ins­tru­men­ter le code, tout en connais­sant la struc­ture et la po­si­tion du dé­ci­sion­nel dans le code source, des in­for­ma­tions sup­plé­men­taires sont né­ces­saires sur la struc­ture de ce der­nier. « Mais ces in­for­ma­tions ne font pas par­tie des in­for­ma­tions de dé­bogue stan­dard gé­né­rées par le com­pi­la­teur. Il faut aus­si s’as­su­rer que le com­pi­la­teur gé­nère un code ob­jet res­pec­tant l’exi­gence sui­vante : dans le même temps, chaque con­di­tion dans le code source doit être re­pré­sen­tée au ni­veau du code ob­jet par un saut condi­tion­nel ou une ins- truc­tion condi­tion­nelle, et non par une re­pré­sen­ta­tion arith­mé­tique de la con­di­tion », pré­cise Jean-Pierre Pa­ra­di­so.

Une option dans les com­pi­la­teurs

Lau­ter­bach pro­pose ain­si l’ou­til de com­mande en ligne « t32­cast », pré­sen­té pour la pre­mière fois sur le sa­lon MtoM & Ob­jets connec­tés-Em­bed­ded Sys­tems. À par­tir de l’en­re­gis­tre­ment d’une trace temps réel, l’ou­til gé­nère, comme ré­sul­tat, toutes les in­for­ma­tions sur la struc­ture de dé­ci­sion né­ces­saires à la cou­ver­ture de code MC/DC et ce­la pour chaque fi­chier source. Étant in­dé­pen­dant du com­pi­la­teur, t32­cast peut donc être in­sé­ré très fa­ci- le­ment dans un pro­cess de build, qui doit tou­te­fois être ajus­té pour in­té­grer la gé­né­ra­tion des in­for­ma­tions sur la struc­ture de dé­ci­sion. « Dès que l’uti­li­sa­teur lance une me­sure MC/DC, Trace32 charge au­to­ma­ti­que­ment tous les fi­chiers *.eca gé­né­rés par l’ou­til t32­cast et est en­suite ca­pable de map­per les dé­ci­sions sur le code source C/C++ via le code ob­jet grâce aux in­for­ma­tions de dé­bogue. Pen­dant ce pro­ces­sus, l’uti­li­sa­teur doit néan­moins s’as­su­rer que le com­pi­la­teur sé­lec­tion­né re­pré­sente chaque con­di­tion dans le code source par un saut condi­tion­nel ou une ins­truc­tion condi­tion­nelle au ni­veau du code ob­jet, voire par désac­ti­va­tion des op­ti­mi­sa­tions », ex­plique Jean-Pierre Pa­ra­di­so. À no­ter que la cou­ver­ture de code MC/DC dis­po­nible dans Trace32 peut être uti­li­sée in­dé­pen­dam­ment du com­pi­la­teur et de l’ar­chi­tec­ture du pro­ces­seur. Mais la li­mite est l’im­pos­si­bi­li­té de ré­duire l’op­ti­mi­sa­tion pour les me­sures de trace MC/DC dans les ap­pli­ca­tions où les op­tions d’op­ti­mi­sa­tion du code ne peuvent pas être aban­don­nées, même dans l’im­plé­men­ta­tion de sys­tèmes de sé­cu­ri­té cri­tique. « Cette nou­velle fonc­tion­na­li­té, qui a né­ces­si­té trois ans de dé­ve­lop­pe­ment et qui peut être dis­po­nible sous la forme d’une option dans les com­pi­la­teurs, ap­porte un gain de temps si­gni­fi­ca­tif, du fait de l’ab­sence d’ins­tru­men­ta­tion et de l’exé­cu­tion de la to­ta­li­té sur un run », conclut Jean-Pierre Pa­ra­di­sio.

< À par­tir de l’en­re­gis­tre­ment d’une trace temps réel, l’ou­til de com­mande en ligne « t32­cast » de Lau­ter­bach gé­nère toutes les in­for­ma­tions sur la struc­ture de dé­ci­sion né­ces­saires à la cou­ver­ture de code MC/ DC et, ce­la, pour chaque fi­chier source C/ C++.

Newspapers in French

Newspapers from France

© PressReader. All rights reserved.