URL: https://linuxfr.org/news/sortie-de-reqflow-pour-tracer-vos-exigences Title: Sortie de Reqflow pour tracer vos exigences Authors: goeb BAud, palm123, bubar🦥, tuiu pol et Benoît Sibaud Date: 2014年03月06日T22:00:46+01:00 License: CC By-SA Tags: génie_logiciel et exigences Score: 31 Reqflow est un outil open-source, sous licence GPL v2+, de traçabilité d'exigences entre documents. Ce genre de traçabilité s'avère utile dès que la taille d'un projet devient conséquente : plusieurs centaines d'exigences. J'avais plusieurs fois cherché et mentionné le besoin d'un tel outil open-source et, ne trouvant rien, je l'ai réalisé. NdM : merci à goeb pour son journal. ---- [Journal à l'origine de la dépêche](http://linuxfr.org/users/goeb/journaux/reqflow) [Page web de Reqflow](http://goeb.github.io/reqflow) [Code source sur Github](http://github.com/goeb/reqflow) ---- # Reqflow # Le concept d'exigence Pour résumer le concept d'exigence à ceux qui n'en ont pas l'habitude, une exigence (_requirement_ en anglais) est typiquement une fonctionnalité, décrite en quelques lignes. De cette exigence peuvent découler : - des exigences plus fines, décrivant comment on va réaliser la fonctionnalité - des tests, qui décrivent comment la vérifier sur le produit fini. On dit que les exigences en aval couvrent les exigences en amont. L'intérêt de décrire un système par exigences est de fragmenter la complexité en portions de dimensions réduites, plus faciles à maîtriser humainement (comprendre, discuter, vérifier, tester). Cela oblige également à synthétiser les documents de spécifications. On a trop souvent vu des documents de plusieurs centaines de pages verbeux, imprécis, et confus. Pour bien travailler avec les exigences, il faut que ceux qui écrivent les spécifications aient dès le début une approche par exigence, ce qui n'est malheureusement pas toujours le cas. La manière de travailler ensuite peut grossièrement se résumer ainsi : on vérifie qu'on n'a oublié aucune exigence en réalisant le système. Les entreprises industrielles qui conçoivent de gros systèmes (véhicules, avions, etc.) utilisent la fragmentation en exigences pour définir et réaliser leurs systèmes. ## Exemple de spécification Prenons l'exemple d'un [logiciel de navigation Internet qui souhaite se conformer à la norme CSS2](http://www.w3.org/TR/CSS2/text.html) (dans la vraie vie, les navigateurs web ne s'encombrent pas de traçabilité d'exigences, car c'est un procédé coûteux qui n'est pas justifié pour ce genre de logiciel non critique). Le document de [spécification est donc la norme CSS2, extrait](http://www.w3.org/TR/CSS2/fonts.html) : ``` 15.6 Font boldness: the 'font-weight' property 'font-weight' Value: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit The 'font-weight' property selects the weight of the font. The values '100' to '900' form an ordered sequence, where each number indicates a weight that is at least as dark as its predecessor. The keyword 'normal' is synonymous with '400', and 'bold' is synonymous with '700'. ``` Ici, il n'y a pas de marqueur d'exigence dédié. Donc, on prend le numéro du paragraphe "15.6" pour cet exemple (mais ce n'est pas une manière très rigoureuse de procéder et il va être difficile pour l'outil de traçabilité de capturer les exigences). Et on code le navigateur web, avec ses petites mains. Pendant ce temps un testeur va écrire le plan de test, comme ceci : ## Exemple de plan de test ``` T_FONT_01 1. écrire une page HTML utilisant un mot avec font-weight 'normal' 2. vérifier que le navigateur affiche ce mot avec un poids 400. Ref: 15.6 Font boldness: the 'font-weight' property T_FONT_02 1. écrire une page HTML utilisant un mot avec font-weight 'bold' 2. vérifier que le navigateur affiche ce mot avec un poids 700. Ref: 15.6 Font boldness: the 'font-weight' property ``` Ensuite la méthode va consister à dérouler les activités suivantes : * on exécute le logiciel de traçabilité : * pour vérifier si aucune exigence de la spécification n'a été oubliée; * pour générer la matrice de traçabilité (utile aux étapes suivantes). * quelqu'un va ensuite vérifier pour chaque exigence de la spécification, si les tests indiqués par la matrice de traçabilité, couvrent effectivement l'exigence dans son intégralité. C'est une étape manuelle et fastidieuse pendant laquelle la matrice de traçabilité générée est une aide précieuse car elle sert de support au suivi de l'avancement (on coche les exigences que l'on vérifie au fur et à mesure, jour après jour. * ensuite quelqu'un effectue les tests à partir du plan de test. Mais ce n'est plus du domaine de la traçabilité des exigences. * si tous les tests sont OK, alors le logiciel est conforme à la spécification. # Principe de Reqflow Reqflow est un outil en ligne de commande. Il analyse les fichiers d'entrée (au format Open XML, Open Document, etc.), capture les exigences, capture les liens entre exigences, et génère un rapport (format texte, CSV ou HTML), indiquant si toutes les exigences en amont sont couvertes par des exigences en aval. Pour fonctionner, on a besoin de placer dans les documents des marqueurs d'exigence, comme dans l'exemple CSS ci-dessus. Et via des expressions régulières on indique comment capturer les exigences : ``` -req [1-9][0-9]*\..* ``` Et pour le plan de test : ``` -req T_.* -ref "Ref: .*" ``` Reqflow indique ensuite : - les exigences de la spécification qui ont été oubliées dans les tests - les erreurs (exigences en double, références vers des exigences inexistantes, etc.) - les matrices de traçabilité entre exigences et documents Exemple de rapport HTML : http://goeb.github.io/reqflow/reqReport.html ## Analyse des PDF Pour analyser les fichiers d'entrée au format PDF, Reqflow utilise la bibliothèque [Poppler](http://poppler.freedesktop.org/), que l'on retrouve dans plusieurs lecteurs PDF open-source. Autant pour analyser les fichiers HTML, texte, ODT, DOCX, c'est relativement simple (bibliothèque [libxml2](http://www.xmlsoft.org/) et analyse manuelle), autant pour le PDF c'est compliqué. Car le format PDF, s'il est bien pour transférer un document en gardant le rendu visuel, n'est pas du tout adapté pour être traité informatiquement. En effet les mots que l'on voit se suivre sur l'écran ne sont pas toujours consécutifs dans le fichier. Et ils peuvent même être inversés. Je crois (mais ne suis pas certain) que Poppler est capable de remettre les mots dans l'ordre en se basant sur leur emplacement dans la page. ## Expressions Régulières J'avais commencé avec la bibliothèque POSIX regex. Puis je me suis réorienté vers la bibliothèque PCRE car elle me paraissait plus conviviale (pas besoin d'échapper les parenthèses notamment). Heureusement, la bibliothèque PCRE fournit une interface identique à la lib regex (libpcreposix), donc je n'ai pas eu à changer mon code source. # Autres outils du marché D'autres outils propriétaires dominent sur le marché. **Reqtify**, outil graphique et qualifié selon certaines normes de développement aéronautique (DO178-B je crois), présente une interface graphique assez pratique. Reqtify capture les exigences des documents par des expressions régulières, ou par les styles Word. Il a une fonctionnalité intéressante : cliquer sur une exigence, dans son interface graphique, provoque l'ouverture du document Word ou Excel associé et le positionnement au paragraphe de cette même exigence. **DOORS** (IBM® Rational® DOORS®) ne capture pas les exigences à partir des documents, mais possède les exigences dans une base de données et a une interface graphique. Il peut toutefois importer des documents externes dans sa base de données. Ensuite DOORS peut génèrer les matrices de traçabilité et éventuellement les documents (au format Word par exemple) pour échanger avec d'autres parties prenantes qui ne possèderaient pas DOORS. En comparaison de ces outils, Reqflow est très petit, très rustique car il a moins de convivialité, moins d'ergonomie, moins de fonctionnalités. Mais Reqflow a les atouts suivants : * il est simple * il est possible de générer les matrices de traçabilité par un bête script shell ou batch * il est gratuit et open-source et a tout le temps devant lui pour s'améliorer * il est en ligne de commande, et greffer une interface graphique au-dessus est possible # Conclusion J'utilise Reqflow dans mon travail, pour tracer 750 exigences de 8 documents de spécifications en amont, et il me rend bien service. Page web de Reqflow: http://goeb.github.io/reqflow Code source sur Github: http://github.com/goeb/reqflow