Первое правило метрик - «будьте осторожны с тем, что вы измеряете». Вы просите подсчет утверждений, вот что вы получите. Как вы заметили, эта цифра, возможно, не соответствует действительности.
Если вас интересуют другие меры, например, насколько «сложный» код, рассмотрите другие метрики кода, например, циклометрическую сложность.
http://en.wikipedia.org/wiki/Cyclomatic_complexity
ОБНОВЛЕНИЕ: Re: ваш комментарий
Я согласен, что "делать слишком много" - интересная метрика. Мое эмпирическое правило заключается в том, что один оператор должен иметь один побочный эффект (обычно это «локальный» побочный эффект, такой как изменение локальной переменной, но иногда видимый побочный эффект, такой как запись в файл), и поэтому «количество операторов» должно быть примерно коррелирует с тем, сколько метод «делает» с точки зрения количества побочных эффектов.
На практике, конечно, никто, включая мой собственный код, фактически не встречает эту планку все время. Вы могли бы рассмотреть метрику для «того, сколько метод делает», чтобы посчитать не только операторы, но и, скажем, вызовы метода.
На самом деле, чтобы ответить на ваш вопрос: я не знаю ни одного отраслевого стандарта, который бы определял, что такое «количество утверждений». Спецификация C # определенно определяет, что такое «оператор», но, конечно, вам нужно сделать некоторую интерпретацию для подсчета. Например:
void M()
{
try
{
if (blah)
{
Frob();
Blob();
}
}
catch(Exception ex)
{ /* eat it */ }
finally
{
Grob();
}
}
Сколько утверждений в М? Ну, тело M состоит из одного утверждения, try-catch-finally. Так ответ один? Тело try содержит один оператор, оператор if. Следствие «если» содержит одно утверждение - помните, блок - это утверждение. Блок содержит два оператора. Наконец, содержит одно утверждение. Блок catch не содержит операторов - блок catch block не является оператором , лексически, но он, безусловно, очень важен для работы метода!
Так сколько всего это утверждений? Можно обоснованно обосновать любое число от одного до шести, в зависимости от того, считаете ли вы блоки «реальными» операторами, считаете ли вы дочерние операторы дополнением к их родительскому утверждению или нет, и так далее. Нет органа по стандартизации, который бы регулировал ответ на этот вопрос, о котором я знаю.