Oblicz złożoność Cyklomatyczną dla Javascript [zamknięty]

Czy są dostępne jakieś narzędzia do obliczania złożoności Cyklomatycznej w Javascript?

Uznałem go za bardzo pomocny w przeszłości podczas pracy nad kodem po stronie serwera i chciałbym móc go używać dla JavaScript po stronie klienta, który piszę.

Author: Karl, 2008-09-19

8 answers

Pracowałem nad narzędziem do analizy statycznego kodu JavaScript, które nie zawiera caclulate cyclomatic complexity dla JavaScript. Możesz wypróbować wersję online jsmeter tutaj: http://jsmeter.info

 19
Author: iandotkelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-31 19:47:53

Pomogłem napisać narzędzie do analizy złożoności oprogramowania w projektach JavaScript:

Złożoność-raport

Raportuje kilka różnych wskaźników złożoności: linie kodu, liczba parametrów, złożoność cyklomatyczna, gęstość cyklomatyczna, miary złożoności Halsteada, wskaźnik konserwowalności, gęstość pierwszego rzędu, koszt zmiany i rozmiar rdzenia.

Jest wydany na licencji MIT i zbudowany przy użyciu Node.js i Esprima JavaScript parser. Można go zainstalować poprzez npm, tak:

npm i -g complexity-report
 17
Author: Phil Booth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-21 15:48:33

Dla kompletności odpowiedzi, Szukałem tego samego narzędzia jakiś czas temu i nie znalazłem niczego, co dobrze działało do wizualizacji, więc napisałem

Przykładowe raporty dla:

Wykorzystuje złożoność raportu Phila (wspomnianą powyżej), a także agreguje dane z jshint (i ostatecznie innych).

 10
Author: jsoverson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-08 06:58:24

Ponieważ złożoność cyklomatyczna jest obliczana licząc liczbę słów kluczowych "if, switch, while for break" itp.. każde narzędzie, które współpracuje z C, wykona to zadanie, jak sourcemonitor: http://www.campwoodsw.com/sourcemonitor.html

Właściwie, na javascript im bardziej próbujesz modulizować swój kod, tym bardziej go spowolnisz, więc weź go z przymrużeniem oka;)

Edytuj: Ja [7]} naprawdę [8]} nie mogę zrozumieć co się dzieje na tej odpowiedzi, dostaję kolejny downvote, gdy w moim odpowiedź mówię dobre narzędzie do obliczania złożoności cyklomatycznej w javascript, a to w szczególności działa bardzo dobrze.

Dla drugiego twierdzenia, mój jest komentarz, który pochodzi z doświadczenia, nigdy nie mówię nie modulizuj swój kod js, mówię tylko zwróć uwagę na to, ponieważ często jest kompromis z prędkością, a kiedy mówię o prędkości, mam na myśli, że mogą się zdarzyć 2 różne spowolnienia: w Czas pobierania i w Czas wykonania (i w wolne urządzenie, takie jak pda / smartphone jest to ważne).

Ponieważ takie narzędzia często skłaniają programistów do pisania większej ilości kodu, próbując gonić mniejszy indeks, ale w js więcej kodu niestety oznacza, że spowolnienia mogą się zdarzyć, a nadużywanie tych narzędzi jest złe. Z pewnością te narzędzia mogą dać ci wskazówki gdzie Twój kod można poprawić, ale musisz opanować, jak korzystać z narzędzia, a nie ślepo polegać na nim.

Więc jeśli jeszcze raz mnie odrzucisz, proszę napisz komentarz, w którym wyjaśniasz dlaczego to robisz, dyskusja może tylko z tego skorzystać, dziękuję i przepraszam za odpowietrzenie.

 7
Author: kentaromiura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 06:32:54

JSHint ostatnio dodał obsługę do obliczania metryk kodu. Możesz ustawić maksymalne wartości dla liczby dopuszczalnych parametrów formalnych (maxparams), jak głęboko zagnieżdżone powinny być bloki kodu (maxdepth), liczba dozwolonych poleceń na funkcję (maxstatements ), a także maksymalna złożoność cyklomatyczna (maxcomplexity ).

Maksymalna liczba parametrów formalnych dozwolone dla funkcji

/*jshint maxparams:3 */

function login(request, onSuccess) {
  // ...
}

// JSHint: Too many parameters per function (4).
function logout(request, isManual, whereAmI, onSuccess) {
  // ...
}

Maksymalna liczba zagnieżdżonych bloków kodu dozwolona dla jednej funkcji

/*jshint maxdepth:2 */

function main(meaning) {
  var day = true;

  if (meaning === 42) {
    while (day) {
      shuffle();

      if (tired) { // JSHint: Blocks are nested too deeply (3).
          sleep();
      }
    }
  }
}

Maksymalna liczba poleceń dozwolonych dla funkcji

/*jshint maxstatements:4 */

function main() {
  var i = 0;
  var j = 0;

  // Function declarations count as one statement. Their bodies
  // don't get taken into account for the outer function.
  function inner() {
    var i2 = 1;
    var j2 = 1;

    return i2 + j2;
  }

  j = i + j;
  return j; // JSHint: Too many statements per function. (5)
}
 5
Author: daniellmb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 15:38:41

Nowa wersja http://jshint.com jest obecnie i ma bardzo dobry kalkulator złożoności cyklomatycznej

 4
Author: rizwaniqbal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-07 08:01:09

Możesz użyć narzędzia ccm z http://www.blunck.info/ccm.html .

Robi java-script, c / C++ i c#. Jest darmowy, działa na Windows (może być uruchomiony również na Linuksie i Mac OS X-używając frameworka mono).

 2
Author: Arne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-06 18:12:24

Teraz jest też miara: https://github.com/calmh/yardstick

Próbuje obliczyć złożoność cyklomatyczną dla idiomatycznego Javascript, obsługując więcej przypadków niż na przykład jscheckstyle.

 2
Author: Jakob Borg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-28 08:20:10