Значения метрик кода
Область применения:Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Повышенная сложность современных приложений программного обеспечения также повышает сложность обеспечения надежности и обслуживания кода. Метрики кода представляют собой набор оценок программного обеспечения, которые дают разработчикам более глубокое представление о разрабатываемом коде. Используя преимущества метрик кода, разработчики могут понять, какие типы и методы следует переработать или более тщательно протестировать. Команды разработчиков могут определить потенциальные риски, понять текущее состояние проекта и отслеживать ход разработки программного обеспечения.
Разработчики могут использовать Visual Studio для создания данных метрик кода, которые измеряют сложность и удобство обслуживания управляемого кода. Данные метрик кода можно создать для всего решения или одного проекта.
Сведения о создании данных метрик кода в Visual Studio см. в статье «Практическое руководство. Создание данных метрик кода».
Измерения программного обеспечения
В следующем списке показаны результаты метрики кода, вычисляемые Visual Studio:
- Индекс доступности — вычисляет значение индекса от 0 до 100, представляющее относительную простоту поддержания кода. Высокое значение означает лучшую поддержку. Цветные закодированные оценки можно использовать для быстрого выявления проблемных мест в коде. Зеленый рейтинг составляет от 20 до 100 и указывает, что код имеет хорошую поддержку. Желтый рейтинг составляет от 10 до 19 и указывает, что код является умеренным. Красный рейтинг — это рейтинг от 0 до 9 и указывает на низкую поддержку. Дополнительные сведения см. в разделе «Диапазон индексов поддержки» и «Значение».
- Цикломатическая сложность — измеряет структурную сложность кода. Он создается путем вычисления количества различных путей кода в потоке программы. Программа, которая имеет сложный поток управления, требует больше тестов для достижения хорошего покрытия кода и менее поддерживается. Дополнительные сведения см. в разделе «Цикломатическая сложность».
- Глубина наследования — указывает количество различных классов, наследуемых друг от друга, вплоть до базового класса. Глубина наследования аналогична связыванию классов, что изменение базового класса может повлиять на любой из унаследованных классов. Чем выше это число, тем глубже наследование и чем выше потенциал для изменений базового класса, что приведет к критическому изменению. Для глубины наследования низкая ценность хороша, и большое значение плохо. Дополнительные сведения см. в разделе «Глубина наследования».
- Объединение классов — измеряет связь с уникальными классами с помощью параметров, локальных переменных, возвращаемых типов, вызовов методов, универсальных или шаблонных экземпляров, базовых классов, реализаций интерфейса, полей, определенных во внешних типах и оформлении атрибутов. Хороший дизайн программного обеспечения диктует, что типы и методы должны иметь высокую сплоченность и низкую связь. Высокая связь означает дизайн, который трудно использовать и поддерживать из-за его многочисленных взаимозависимостей по другим типам. Дополнительные сведения см. в разделе «Связь классов».
- Строки исходного кода — указывает точное количество строк исходного кода , присутствующих в исходном файле, включая пустые строки. Эта метрика доступна начиная с Visual Studio 2019 версии 16.4 и Microsoft.CodeAnalysis.Metrics (2.9.5).
- Строки исполняемого кода — указывает приблизительное количество строк или операций исполняемого кода . Это количество операций в исполняемом коде. Эта метрика доступна начиная с Visual Studio 2019 версии 16.4 и Microsoft.CodeAnalysis.Metrics (2.9.5). Значение обычно близко соответствует предыдущей метрике, строкам кода, которая является метрикой на основе инструкций MSIL, используемой в устаревшем режиме.
Анонимные методы
Анонимный метод — это просто метод , который не имеет имени. Анонимные методы чаще всего используются для передачи блока кода в качестве параметра делегата. Результаты метрик кода для анонимного метода, объявленного в элементе, например методе или методе доступа, связаны с элементом, объявляющим метод. Они не связаны с членом, который вызывает метод.
Созданный код
Некоторые средства программного обеспечения и компиляторы создают код, добавленный в проект, и что разработчик проекта либо не видит, либо не должен изменяться. В основном метрики кода игнорируют созданный код при вычислении значений метрик. Это позволяет значениям метрик отражать то, что разработчик может видеть и изменять.
Код, созданный для Windows Forms, не игнорируется, так как это код, который разработчик может видеть и изменять.
Следующие шаги
- Практическое руководство. Создание данных метрик кода
- Использование окна результатов метрик кода
Количество кода (в строках или символах)
Подсчитать, сколько в трёх различных строках буквенных символах, а сколько цифровых
Ребят, помогите пожалуйста написать програмку. Кого просил никто не может. Подсчитать, сколько.

Количество отрицательных элементов, кратных 3 или 5, в строках матрицы
Помогите решить задачу пожалуйста! Дан двумерный массив размерностью 4×5, заполненный целыми.

Написать функцию, которая возвращает количество нулевых бит в символах строки
Есть срочная задача: написать функцию, которая возвращает количество нулевых бит в символах строки.
Ввести с клавиатуры строку. Определить во введенных символах количество гласных и согласных букв
Задание: Ввести с клавиатуры строку. Определить во введенных символах количество гласных и.
Wanna be serious
586 / 473 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
В старших версиях Visual Studio есть функционал по подсчёту количества строк кода в проекте.
Если у Вас Visual Studio версии Community, можно обойтись подручными средствами. Заходите в PowerShell, переходите в каталог с исследуемым проектом с помощью команды cd , и применяете затем команду (gci -include *.cs -recurse | select-string .).Count . Результатом будет как раз таки количество строк кода в проекте.
3314 / 2354 / 666
Регистрация: 02.08.2011
Сообщений: 6,441

Сообщение было отмечено bidjason как решение
Решение
Bespridelschic, ну select-string вытаскивает все подряд строки, я бы не брал в расчет подключение пространств имен. И в VS2015, и в VS2017 имеется функция Analyze->Calculate Code Metrics.
Добавлено через 14 минут
Ну разве что если передать маску, исключающую using.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Определить, что больше сумма элементов в четных строках или произведение элементов в нечетных строках матрицы
Ребята, помогите пожалуйста кто может, код программы нужен. Заранее огромное спасибо Дан.

Найдите ошибку в 10 строках кода
#include <stdio.h> #include <string.h> int main (void) < char str; printf("string");.
Найти ошибку в трех строках кода
В каких (какой) строчке допущена ошибка Выберите по крайней мере один ответ: #include iostream.
Ошибка в строках кода (расчетная программа)
using System; using System.Collections.Generic; using System.Text; namespace аппроксимация
В каких строках кода нет синтаксических ошибок?
$10. В каких строках кода нет синтаксических ошибок: (обоснуйте ответ) int main() < long char c.
Как узнать количество строк кода в проекте?
Дано: Проект, состоящий из множества файлов (например *.java и *.xml ). Задача: Подсчитать сколько строк кода во всех этих файлах. Исключая комменты и пустые строки. Вопрос: Пилить свой велосипед или я не первый кто этим интересуется?
Отслеживать
задан 26 янв 2016 в 19:32
69.8k 9 9 золотых знаков 66 66 серебряных знаков 122 122 бронзовых знака
А зачем это может понадобиться?
26 янв 2016 в 19:34
@PavelParshin, ну, например, для обоснования длительности внесения изменений в код. Или для хвастовства.
26 янв 2016 в 19:35
Ещё для оценки (очень приблизительной) прогресса в решении к-л (сферической) задачи (сферическим) кодером.
26 янв 2016 в 20:03
@PavelParshin, вот, на вики даже статья есть на тему зачем: Количество строк кода
27 янв 2016 в 11:45
Я вас понял, спасибо)
27 янв 2016 в 11:49
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Решение задачи, в общих чертах, должно выглядеть так:
- Собираем список всех файлов в проекте, пробежавшись по всем его папкам.
- Считываем файл и считаем в нём кол-во строк
- Регулярками (например) выкидываем из общего числа строк файла пустые строки и закомментированные строки (в зависимости от типа файла и ЯП, определяем как именно выглядит коммент)
И да, есть готовые решения. Например, вот на гитхабе: Count Lines of Code
Вкратце алгоритм такой (для масдая):
- Скачиваем *.exe .
- Запускаем его из командной строки
- Указываем папку с исходниками.
- Получаем результат подобного вида:

P.S.
У Count Lines of Code есть множество ограничений. Например «/*» тут n строк кода «*/» будут восприняты как n строк комментов. Также подсчёт идёт не логических строк кода, а непустых строк, содержащих то, что программа определяет как код, а не комменты.
Обратите внимание на приведённый в README проекта список альтернативных решений.
Метрики программного обеспечения в Visual Studio

![]()
04.08.2015
![]()
3492
Рейтинг: 5 . Проголосовало: 1
Вы проголосовали:
Для голосования нужно авторизироваться

Введение
Метрика программного обеспечения (англ. Software metric) – это некая мера определенного свойства программного обеспечения или же его спецификаций. Как известно, мера – это средство измерения. Важно понять, что мера — это числовое значение. Таким образом, метрика программного обеспечения будет показывать некое числовое значение определенного свойства ПО.
Мы не будем углубляться в теорию, так как ее можно найти в свободном доступе довольно легко. Мы займемся практической частью данного вопроса. А именно: как нам использовать метрики для улучшения кода?

Метрики в Visual Studio
Стоит заметить сразу, что метрики подвергаются критике. Это, как минимум, поверхностно и неточно. Мы вернемся к этому после того, как поймем о чем речь. Рассматривать мы будет все на примере Visual Studio 2015 RC. Сперва, откроем проект для изучения.

Далее, мы можем видеть вкладку Analyze

В этой вкладке мы видим Calculate Code Metrics for .
Это нам и нужно. Разница лишь в том, что будет анализироваться. Или же выбранные проекты в Solution Explorer, или же сразу весь Solution. После нажатия придется немного подождать. Время зависит от конфигурации Вашего компьютера. Когда анализ будет завершен, Вы увидите внизу окно
Тема связана со специальностями:

Здесь будет видна иерархия всего Solution. В моем случае это отдельная dll библиотека и проект. Когда развернем библиотеку, мы увидим следующий уровень иерархии, и так далее

Теперь давайте разберемся со столбцами дальше.
1. Maintainability Index – это комплексный показатель качества кода. Эта метрика рассчитывается по следующей формуле:
MI = MAX(0, (171 — 5.2 * ln(HV) — 0.23 * CC — 16.2 * ln(LoC)) * 100 / 171)
- HV – Halstead Volume, вычислительная сложность. Чем больше операторов, тем больше значение этой метрики;
- CC – Cyclomatic Complexity (Эта метрика описана ниже);
- LoC – количество строк кода (Эта метрика описана ниже).
2. Cyclomatic Complexity – показывает структурную сложность кода. Иными словами, количество различных ветвей кода. Считается на основе операторов в Вашем коде, строя графы переходов от одного оператора к другому. К примеру, оператор if-else увеличит эту метрику, потому что здесь будут разные ветви выполнения.
3. Depth of Inheritance – глубина наследования. Для каждого класса эта метрика показывает, насколько глубоко он в цепочке наследования.
4. Class Coupling – указывает на зависимость классов друг от друга. Проект с множеством зависимостей очень трудно и дорого поддерживать.
5. Lines of Code – количество строк кода. Напрямую используется редко. В наши дни, с множеством разнообразных как подходов к программированию, так и языков, эта метрика дает нам мало полезной информации. Если брать во внимание отдельный метод, то можно разбить его на несколько методов поменьше.
Видео курсы по схожей тематике:


How to C# Углубленный

Что нового в C# 6.0-7.0
Использования метрик
Изначально стоит обращать внимание на Maintainability Index. Старайтесь придерживать его около 70-90. Это значительно облегчит сопровождения кода как Вами, так и другими программистами. Иногда стоит оставить его на уровне 50-60, так как переписать некоторые участки кода бывает очень затратным. Оценивайте здраво как код, так и Ваши возможности с затратами.
Стоит также уделить много внимания Class Coupling. Эта метрика должна быть как можно меньшей. Ведь она так же способствует поддержке кода. Для оптимизации возможно придется пересматривать дизайн проекта и некоторые архитектурные решения.
Теперь стоит уделить внимание Cyclomatic Complexity. Эта метрика показывает сложность кода, а это так же влияет на поддержку кода в будущем. Иногда приходится переписывать куски кода, которые писали до Вас другие люди, так как Вы просто не можете понять, что, как и зачем в этом методе. Конечно, этому еще способствует стиль кода и идея, но не забывайте о Cyclomatic Complexity при рефакторинге.
Критика
А теперь вернемся к критике. Вы, наверняка, заметили, что мы использовали на практике не все метрики, но они могут быть частью остальных, как в случае с Maintainability Index. Но стоит понимать, что оценивать качество работы программиста, исходя из метрик, нельзя. Это очень неточно и поверхностно. Иногда просто нет другого способа решения задачи, а иногда это бывает затратным. Также есть человеческий фактор, о котором не стоит забывать. Метрики бывают искаженными, ведь программист может стремится написать не эффективное и правильно решение, а оптимизировать показатели этих же метрик.
Вывод
С таким инструментом в руках Вы можете быстро и относительно легко сделать review проекта и найти его уязвимые места. Также можно постоянно мониторить метрики и делать даже некие выводы об усталости работника или его отношении к работе. Более того, можно увидеть динамику роста качества кода каждого программиста. Но здесь стоит отчетливо понимать все детали так, как мы говорили об этом в критике.
Бесплатные вебинары по схожей тематике:

Карта специальности .NET разработчик.

Как стать C# разработчиком в 2021 году. .NET или .NET Core

Как стать Full-Stack разработчиком
Ну и одно из самых важных, следить за недопустимыми значениями, при которых хорошо было бы провести рефакторинг кода.
