Какие метрики для оценки качества программного продукта вы знаете?

Ответ

Метрики качества продукта помогают количественно оценить его состояние, эффективность процессов разработки и удовлетворённость пользователей. Их можно разделить на несколько категорий:

Метрики, связанные с дефектами:

  • Плотность дефектов (Defect Density): Количество обнаруженных дефектов на единицу размера кода (например, на 1000 строк кода — KLOC). Низкая плотность может указывать на лучшее качество кода.
    def calculate_defect_density(defect_count, lines_of_code):
        return (defect_count / lines_of_code) * 1000
  • Среднее время до обнаружения (Mean Time To Detection — MTTD): Среднее время, которое проходит с момента внесения дефекта в код до его обнаружения.
  • Среднее время до восстановления (Mean Time To Recovery — MTTR): Среднее время, необходимое для устранения дефекта и восстановления работы системы после сбоя.
  • Частота отказов (Failure Rate): Количество сбоев системы за определённый период времени.

Метрики тестового покрытия:

  • Покрытие кода (Code Coverage): Процент строк кода, ветвей или условий, выполненных тестами (Unit, Integration). Измеряется инструментами вроде pytest-cov, JaCoCo.
    pytest --cov=my_project --cov-report=html tests/

Метрики эффективности тестирования:

  • Процент успешных тест-кейсов (Pass Rate): (Количество пройденных тестов / Общее количество тестов) * 100%.
  • Процент автоматизации (Automation Percentage): Доля автоматизированных тест-кейсов от общего их числа.

Метрики удовлетворённости пользователей:

  • Оценка удовлетворённости клиентов (Customer Satisfaction Score — CSAT): Измеряется через опросы (например, по шкале от 1 до 5).
  • Индекс готовности рекомендовать (Net Promoter Score — NPS): Показывает лояльность пользователей.

Ответ 18+ 🔞

А, ну вот, опять эти ваши метрики, блядь! Сидят менеджеры, чешут репу, и думают: "А как бы нам качество продукта измерить, чтобы цифры красивые были, а не просто на глазок, как обычно?" Ну что ж, давайте разбираться, пока не начали пиздеть про agile и спринты.

Смотри, есть у нас, например, плотность дефектов. Это когда ты пишешь код, а потом считаешь, сколько косяков на тысячу строк наковыряли. Формула проще некуда, вот, смотри, даже на питоне:

def calculate_defect_density(defect_count, lines_of_code):
    return (defect_count / lines_of_code) * 1000

Получается цифра. Если она низкая — все радуются, типа код качественный. А если высокая — ну, значит, писали его, прости господи, в полном отрубе, на коленке, между делом. Но тут, блядь, парадокс: если тестировщики — ленивые жопы и багов не нашли, то плотность будет низкая, а продукт — говно нерабочее. Так что эта метрика сама по себе — как хуй в пальто, смотри в оба.

Дальше идут всякие средние времена. MTTD — сколько дефект в коде сидит, как таракан за плинтусом, пока его не найдут. MTTR — сколько времени вся команда бегает, как ошпаренная, чтобы этот дефект починить. Чем эти цифры меньше, тем лучше, это и ежу понятно. А то бывает, ошибка всплыла, а её чинить уже некому — тот программист год как в другом отделе сидит, или вообще на фрилансе. Пиздец, короче.

Ну и частота отказов — это просто счётчик, сколько раз система легла и показала всем свою жопу за месяц. Как в старом анекдоте: "У вас система часто падает?" — "Нет, раз в неделю, но метко!".

А вот это моё любимое — покрытие кода. О, ёпта, священная корова всех тимлидов! "У нас coverage 95%!" — гордо заявляют они, а продукт всё равно работает через жопу. Потому что можно написать тысячу тестов, которые проходят, но нихуя не проверяют. А чтобы цифру посчитать, команду какую-нибудь в консоль вбить:

pytest --cov=my_project --cov-report=html tests/

И будет тебе красивая html-страничка, где зелёным покрашено. Душа радуется, начальство довольное. А потом приходит пользователь, делает то, до чего тестировщик не додумался, и — бац! — всё падает. Удивление пиздец.

Эффективность тестирования — это вообще отдельный цирк. "Процент успешных тест-кейсов" — ну, если тесты проходят, это хорошо. А если не проходят — плохо. Глубокомысленно, блядь. Процент автоматизации — вот это показатель. Чем он выше, тем меньше тестировщикам надо руками тыкать в кнопки перед каждым релизом. Они, конечно, будут ныть, что "автоматы не всё ловят", но это потому, что им вручную работать лень, хитрая жопа!

И наконец, самое важное — удовлетворённость пользователей. Можно иметь coverage 100% и zero defects, но если интерфейс сделан для даунов, а функционал никому не упал, то все эти метрики — хуй с горы. CSAT и NPS — вот что по-настоящему решает. Пользователь поставил тебе единицу и написал "продукт — говно"? Вот тебе и вся метрика, ебать мои старые костыли. Все графики и отчёты можно сразу в печь.

Короче, метрики — это инструмент. Как молоток. Можно гвоздь забить, а можно себе по ебалу получить. Главное — не забывать, для кого и зачем мы всё это делаем. А то бывает, так увлекутся подсчётами, что про сам продукт забывают. Вот тогда и начинается настоящий пиздец.