À propos du projet
AutoFFF est un utilitaire basé sur Python conçu pour générer automatiquement des définitions de fonctions factices FFF (Fake Functions Framework) pour les fichiers d'en-tête d'API C, répondant à un problème récurrent dans les tests unitaires de code C embarqué.
Le problème central qu'il résout est que tester du code C embarqué sur une machine hôte est souvent impossible, car l'architecture de l'hôte diffère de celle de la plateforme cible, et les environnements embarqués ne prennent généralement pas en charge l'édition de liens dynamique, tandis que le langage C ne dispose pas de capacités de réflexion intégrées à l'exécution pour manipuler le code testé au runtime. La simulation des API de la plateforme cible en liant le code testé à des implémentations factices résout ce problème, mais la rédaction manuelle des définitions factices pour les fonctions d'API est fastidieuse, gourmande en main-d'œuvre et sujette aux erreurs, les en-têtes de test maintenus manuellement étant sujets à la « pourriture du code » à mesure que les API d'origine évoluent.
AutoFFF automatise ce processus en analysant les fichiers d'en-tête d'API C et en générant des en-têtes de test prêts à l'emploi avec des définitions factices compatibles FFF. Il suit la philosophie de simulation par « enveloppement » : les en-têtes de test générés incluent l'en-tête d'API d'origine pour hériter de toutes ses déclarations de types, variables et fonctions, en ajoutant uniquement les définitions factices nécessaires. Cette approche est bien plus maintenable que la stratégie alternative d'« interdiction », qui nécessite de redéclarer manuellement tous les éléments d'API et est plus sujette à la désynchronisation avec les en-têtes d'origine.
L'outil inclut une solution de contournement intégrée pour les fonctions définies directement dans les fichiers d'en-tête, qui causeraient normalement des erreurs de redéfinition lorsqu'elles sont simulées. Cette solution de contournement utilise le routage par macro pour rediriger les appels vers la fonction présente dans l'en-tête d'origine vers la factice générée, à condition que l'en-tête de test soit inclus avant le code testé dans les fichiers de test.
AutoFFF prend en charge le travail avec des bibliothèques disposant de politiques d'inclusion strictes (telles que FreeRTOS ou CMSIS) via des options en ligne de commande permettant d'injecter les en-têtes requis ou de définir des macros de préprocesseur lors de l'analyse. Il propose plusieurs options d'intégration : il peut être exécuté en tant que module en ligne de commande autonome, utilisé comme package Python dans des scripts personnalisés, ou intégré dans des systèmes de construction comme Make via les fichiers Make d'exemple fournis.
Il propose deux modes de génération : le BareFakeGenerator ne produit que des définitions de macro FFF brutes sans le code d'en-tête standard associé pour les utilisateurs souhaitant ajouter un traitement personnalisé, tandis que le SimpleFakeGenerator génère des en-têtes de test viables minimum, compilables, avec des gardes d'inclusion et les inclusions requises prêtes à l'emploi.
AutoFFF est distribué sous licence MIT, disponible via PyPI, et nécessite la collection d'en-têtes fake_libc_include du projet pycparser pour l'analyse C, qui n'est pas incluse dans la version pip et doit être obtenue séparément depuis le dépôt du projet pycparser.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.