По каким критериям и метрикам можно оценить качество программного продукта?

Ответ

Качество ПО — многогранная характеристика. Его оценка строится на совокупности критериев и количественных метрик.

Ключевые критерии качества (на основе стандарта ISO 25010):

Критерий Что оценивает Пример метрики
Функциональная пригодность Соответствие требованиям, полнота, правильность. % реализованных требований, количество блокирующих дефектов.
Производительность Скорость работы, время отклика, использование ресурсов. Время загрузки страницы (мс), пропускная способность (RPS).
Надежность Стабильность, доступность, отказоустойчивость. Время наработки на отказ (MTBF), процент доступности (uptime).
Удобство использования (Usability) Простота освоения, эффективность, удовлетворенность. Время выполнения задачи, оценка по шкале SUS (опрос).
Совместимость Работа в разных средах. % покрытия браузеров/устройств, успешность интеграций.
Безопасность Защищенность от угроз. Количество уязвимостей, результаты pentest-ов.
Сопровождаемость Простота анализа, изменения, тестирования. Цикломатическая сложность кода, покрытие тестами (%).

Практический пример расчета метрики:

# Расчет покрытия кода тестами (Test Coverage) — метрика сопровождаемости
def calculate_test_coverage(tested_lines: int, total_lines: int) -> float:
    """
    Возвращает процент покрытия кода тестами.
    """
    if total_lines == 0:
        return 0.0
    coverage_percentage = (tested_lines / total_lines) * 100
    return round(coverage_percentage, 2)

# Пример использования
print(f"Покрытие тестами: {calculate_test_coverage(850, 1000)}%")
# Вывод: Покрытие тестами: 85.0%

Важно: Не существует одной универсальной метрики. Качество оценивается по сбалансированной системе показателей (Scorecard), релевантных для конкретного продукта и этапа его жизненного цикла.

Ответ 18+ 🔞

Да ты посмотри, какая хуйня развесистая получается! Качество ПО, блядь. Ну типа, не просто "работает и ладно", а целая ёбушки-воробушки из критериев, нах!

Вот смотри, умные дядьки в ISO 25010 насочиняли целую таблицу, чтобы твой код не просто не падал, а ещё и чтобы им пользоваться не тошнило. Типа меню в хорошем ресторане, а не шаурма из подвала.

Критерии, на которые надо глазеть, пока проект не накрылся медным тазом:

Критерий Че там оцениваем-то? Пример, как померить
Функциональная пригодность Делает ли оно то, что надо, или это просто красивая кнопка, которая нихуя не жмётся? Сколько требований из ТЗ сделали, а сколько багов таких, что всё встало колом.
Производительность Летит как ракета или грузится, как пьяный ёж через шоссе? Страница открывается за миллисекунды или пока чай успеешь заварить?
Надежность Падает ли оно каждые пятницу в пять вечера или работает, как швейцарские часы? Сколько времени между "ой, всё!" и следующими "ой, всё!".
Удобство использования Понятно ли его бабушке или только самому гению-разработчику? Пользователь за минуту задачу делает или за полчаса матюкается, ища нужную кнопку?
Совместимость Запускается ли на новом айфоне и на древнем компе с Windows XP? Во всех ли браузерах выглядит адекватно, а не как пизда с ушами?
Безопасность Не откроет ли оно двери хакерам, чтобы они всё проебали? Сколько дыр нашли пентестеры, через которые можно всё слить.
Сопровождаемость Когда через полгода надо фичу добавить, новый разработчик с ума не сойдёт? Код написан для людей или для машин, которые тебя ненавидят?

Вот, смотри, какую простую хуйню можно посчитать, например, для сопровождаемости:

# Считаем, насколько наш код покрыт тестами. Без этого — мрак.
def calculate_test_coverage(tested_lines: int, total_lines: int) -> float:
    """
    Возвращает процент покрытия кода тестами.
    """
    if total_lines == 0:
        return 0.0
    coverage_percentage = (tested_lines / total_lines) * 100
    return round(coverage_percentage, 2)

# Пример использования
print(f"Покрытие тестами: {calculate_test_coverage(850, 1000)}%")
# Вывод: Покрытие тестами: 85.0%

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