Оценка надёжности программного обеспечения

В середине семидесятых годов прошлого века была предложена первая модель роста надёжности, которая предназначалась для оценки надёжности программного обеспечения. Не то чтобы с этого всё началось, но с этого можно начать. За прошедшие с тех пор десятилетия было предложено множество моделей. Похожих и не очень. Все эти модели можно разделить на три типа.

Модели роста надёжности

Явление роста надёжности заключается в том, что в процессе тестирования в ПО вносятся исправления, код стабилизируется, число необнаруженных ошибок уменьшается, сбои случаются всё реже. Короче надёжность растёт.

Рост надёжностиИдея таких моделей в том, чтобы подобрать некоторую функцию, которая будет хорошо коррелировать с реальными данными о процессе обнаружения ошибок. Чаще всего в качестве такой функции выбирается экспонента

Экспоненциальная модельили логарифм

Логарифмическая модельЭти уравнения дают математическое ожидание числа обнаруженных ошибок в момент времени t. β0 и β1 — параметры моделей, которые оцениваются исходя из предыдущего опыта и первых результатов тестирования. Модель позволяет оценить количество необнаруженных ошибок, а эта информация может быть использована для принятия решения о завершении стадии тестирования и ответа на другие вопросы.

Регрессионные модели

Регрессионные модели похожи на модели роста надёжности. Они также дают оценки на основе аппроксимации реальных данных. Только модели роста надёжности в качестве исходных данных используют информацию о тестировании, а регрессионные модели используют различные метрики, такие как количество строк кода, цикломатическая сложность и т.п.

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

Наиболее широко используемый сценарий применения регрессионной модели — предсказание множества модулей (файлов) в системе, которые будут содержать  наибольшее число дефектов после релиза. Тут работает принцип Парето: 20% файлов будут содержать 80% дефектов. Эта информация может быть использована для распределения ресурсов тестирования, сокращения времени затраченного на тестирование, выбора оптимального момента для релиза и других задач.

Прочие модели

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