Quel logiciel puis-je utiliser pour mesurer le LLOC, les points de fonction et la complexité cyclomatique des scripts Bash?

Arseni Mourzenko

Quel logiciel puis-je utiliser pour mesurer le LLOC, les points de fonction et la complexité cyclomatique des scripts Bash?


Je souhaite rassembler quelques données statistiques sur un référentiel pour le comparer dans le temps. L’objectif est de savoir comment l’utilisation de langues spécifiques a évolué au fil du temps, et comment la complexité et la taille des différents projets ont augmenté ou diminué.

Il existe un excellent outil appelé cloc qui mesure les lignes de code dans différents langages. C’est un bon début, mais la mesure LOC n’est pas très représentative. Je voudrais rassembler de meilleures mesures telles que, pour commencer, des lignes logiques de code et des points de fonction, et éventuellement la complexité cyclomatique.

Il existe également des outils pour cela:

  • Python possède une excellente bibliothèque de radon qui donne les LLOC, la complexité cyclomatique, etc., et permet de déterminer indirectement le nombre de points de fonction.

  • C # possède, évidemment, les métriques de code de Visual Studio qui fournissent également des informations détaillées, y compris ILLOC qui, contrairement à LOC, est assez représentatif de la taille d’un projet, ainsi que de la complexité cyclomatique.

  • JavaScript a un complexity-report qui permet également de calculer le nombre de points de fonction, ainsi que le LLOC et la complexité cyclomatique.

  • PHP semble également avoir un outil qui donne à la fois LLOC et le nombre de points de fonction, ainsi que la complexité cyclomatique et d’autres informations.

Ce que je ne trouve pas, c’est un outil similaire pour Bash. Il existe un outil d’analyse statique ShellCheck bien connu, mais ce n’est pas ce que je veux: ShellCheck recherche plutôt les problèmes possibles avec le code, de manière similaire à jslint de JavaScript et à l’analyse de code C #.

Donc:

  • Existe-t-il un outil qui, comme cloc , affiche le LLOC, les points de fonction et la complexité cyclomatique pour des dizaines de langues?

  • Ou existe-t-il un tel outil spécifiquement pour les scripts Bash?


Remarque: je suis intéressé par un outil gratuit qui peut être utilisé à partir d’un terminal Linux, pas de produits payants, ni de services en ligne ou d’API.


Arseni Mourzenko

@SteveBarnes: bien qu’il soit légèrement plus pertinent que cloc et, plus important encore, ajoute une complexité cyclomatique, il manque LLOC et les points de fonction. D’un autre côté, il n’est pas clair pour moi si LLOC est vraiment beaucoup plus pertinent que LOC pour Bash, et les points de fonction peuvent ne pas être pertinents non plus (par exemple pour les gros scripts ne contenant aucune fonction). Je suggère que nous attendions quelques jours pour d’autres réponses, et s’il n’y en a pas, fermez ma question en double.

Réponses


 Ira Baxter

[2 mois et aucune réponse. Je fournis une réponse commerciale car aucune autre réponse ne semble venir.]

Notre moteur de recherche de code source (SCSE) est utilisé pour rechercher de grands référentiels contenant de nombreux langages (sans doute des dizaines) pour des idiomes de code intéressants. Il est rapide car il indexe la base de code selon la syntaxe lexicale de chacune des langues; il existe un lexer spécifique à la langue qu’il utilise pour chaque langue. (Il s’agit d’un produit Windows, mais il a été explicitement empaqueté pour permettre également le fonctionnement avec Wine, avec des scripts shell qui le rendent natif sous Linux).

Remarquablement, un effet secondaire du processus d’indexation est la production de diverses mesures au niveau des fichiers avec SLOC, des lignes de code non vides, des lignes vides, la complexité cyclomatique et des mesures halstead . Il ne fait pas de points de fonction (vous auriez besoin de numéros de backfiring pour chaque langue, puis vous pourriez facilement calculer cela). Les métriques sont en fait produites sous forme de fichier XML; un script trivial le convertit en un tableau HTML comme celui illustré.

Cela couvrirait les langues de votre base de code, à l’exception de Bash. (Pas standard, mais SCSE a obtenu ce qu’il est en ayant un processus pour définir de tels lexers, et il serait possible de définir un lexer précis pour Bash). Cependant, l’un des lexers disponibles concerne quelque chose que nous appelons AdhocText, qui est destiné à être le langage de programmation que vous trouvez dans un livre de programmation informatique aléatoire, il contient donc tous les lexèmes classiques que vous attendez de trouver dans un langage générique. Cela fonctionne mieux que ce à quoi vous pourriez vous attendre sur un langage de programmation aléatoire.

Un problème compliqué avec une grande base de code consiste à classer les fichiers en fonction des langues, pour associer chaque fichier à son lexeur de langue correspondant. Nous avons un autre outil d’ inventaire de fichiers , qui peut être pointé sur un ensemble de répertoires, classe les fichiers en fonction de l’extension et des indications de contenu, puis revalide la classification en utilisant les mêmes lexers utilisés par le SCSE. L’exécution de cet outil prend essentiellement un ensemble de répertoires complètement désorganisé, classe les fichiers selon les types, identifie les doublons et génère les fichiers de configuration pour exécuter SCSE.

Sommaire:

  • SCSE est un outil qui calcule les fichiers XML contenant LLOC, complexité cyclomatique pour des dizaines de langues
  • Il utilise des lexers précis pour traiter les fichiers source, selon le type de langue
  • Il peut gérer Bash (ou d’autres langages qui lui sont inconnus) en tant que texte ad hoc; alternativement, il serait possible de définir un lexer linguistique précis pour Bash
  • Un outil FileInventory peut classer un grand ensemble de fichiers en vue d’une utilisation avec SCSE
  • SCSE ne calcule pas les points de fonction
  • Fonction « supplémentaire » gratuite: recherche interactive rapide sur la base de code

 

-bash:, #de, #et, #la, #pour, complexité, cyclomatique, des, fonction, Le, Les, LLOC,, Logiciel, mesurer, points, Puis-je, Quel, scripts, utiliser

 

wiki

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *