URL: https://linuxfr.org/users/goeb/journaux/reqflow Title: Reqflow Authors: goeb Date: 2014年03月06日T21:54:27+01:00 License: CC By-SA Tags: libxml2, exigences et génie_logiciel Score: 22 # Reqflow Reqflow est un outil open-source 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é. ## 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 aval couvrent les exigences 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. 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. ## 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 amont sont couvertes par des exigences aval. Pour fonctionner, on a besoin de placer dans les documents des marqueurs d'exigence. Exemple : ``` PRINTF_01 La commande `printf --help` doit afficher un message d'aide et se terminer. ``` Ensuite dans le plan de test on doit référencer cette exigence : ``` T_PRINTF_01 - lancer la commande `printf --help` - vérifier qu'un message d'aide s'affiche. - vérifier que la commande se termine avec un code retour zéro Ref: PRINTF_01 Ref: PRINTF_03 ``` Reqflow indique ensuite: - les exigences de la spécification qui ne sont pas prises en compte dans les tests - les erreurs (exigences en double, références vers des exigences inexistantes, etc.) - les matrices de traçabilité entre exigences et entre 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, j'ai utilisé la bibliothèque [Poppler](http://poppler.freedesktop.org/), qui est utilisé 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 sur 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. ## Conclusion J'utilise Reqflow dans mon travail, pour tracer 750 exigences de 8 documents de spécification 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

AltStyle によって変換されたページ (->オリジナル) /