Существующая библиотека для расчета сложности кода блока кода - PullRequest
1 голос
/ 29 апреля 2009

Мне дана строка, которая содержит произвольное количество кода. Я хочу вычислить число, которое представляет сложность кода этой строки. Что-то вроде:

int complexity = Lib.FindComplexity(someString);

Я понимаю, что есть много инструментов, которые сделают это для вас. Эти инструменты не будут работать для меня, потому что я хочу сделать это программно. Я бы хотел, чтобы библиотека была в C #, но на этом этапе будет работать с чем угодно.

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 29 апреля 2009

NDepend - отличный инструмент, хотя в то время, когда я на него смотрел, он был не дешевым. Если деньги не подходят, я бы рассмотрел использование отражения и http://en.wikipedia.org/wiki/Cyclomatic_complexity.. Они не соответствуют вашим требованиям с какой-либо строкой, но вы определенно можете протестировать созданные вами сборки.

1 голос
/ 29 апреля 2009

Вы также можете использовать отражатель и плагин метрик кода, доступный для него.

1 голос
/ 29 апреля 2009

Рассматривали ли вы использовать один из этих существующих инструментов и обернуть его в библиотеке? Например, вы можете использовать NDepend.Console.exe, вызвав его из вашего кода с нужными параметрами и проанализировав результат.

0 голосов
/ 10 июля 2009

Библиотека, подобная этой, должна иметь возможность анализировать произвольный язык фрагмент , а затем вычислить метрики сложности по проанализированному фрагменту. Большинство инструментов метрик имеют в лучшем случае парсер для всего языка, не просто фрагмент, так что вам, скорее всего, будет трудно найти много решений.

Существует одна система, которая может предоставить вам то, что вам нужно: наш инструментарий реинжиниринга программного обеспечения DMS. Предоставляет парсеры для многих языков (таких как Java и C #; неясно, на каком языке вы хотите анализировать). DMS уже используется для реализации таких метрик для нескольких языков (Java, C #, JavaScript, COBOL) и процесс выполнения этого является прямым. И DMS анализирует фрагменты языка , и, что удивительно, Реализация метрики фактически оперирует такими фрагментами. Вы можете настроить DMS для реализации именно того, что вы хотите. Смотри http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html и для инструментов производных метрик, http://www.semdesigns.com/Products/Metrics/index.html

...