Ну, краткий ответ "нет". Надежность может означать много вещей, но лучшее определение, которое я могу придумать, это «правильно работать в любой ситуации». Если вы отправите неверный HTTP-заголовок на надежный веб-сервер, он не должен аварийно завершить работу. Он должен возвращать точно правильный вид ошибки и должен регистрировать событие где-то, возможно, настраиваемым способом. Если надежный веб-сервер работает очень долго, его объем памяти должен оставаться прежним.
Многое, что делает систему надежной, - это обработка крайних случаев. Хорошие модульные тесты являются частью этого, но вполне вероятно, что не будет модульных тестов ни для одной из проблем, с которыми сталкивается система (если бы эти проблемы были известны, разработчики, вероятно, исправили бы их и только потом добавили тест) .
К сожалению, практически невозможно измерить надежность произвольной программы, потому что для этого вам необходимо знать, что эта программа должна делать. Если у вас есть спецификация, вы можете написать огромное количество тестов, а затем запустить их для любого клиента в качестве теста. Например, посмотрите на тест браузера Acid2. Он тщательно измеряет, насколько хорошо данный веб-браузер соответствует стандарту простым и воспроизводимым образом. Это примерно настолько близко, насколько это возможно, и люди указали на многие недостатки такого подхода (например, является ли программа, которая аварийно завершает работу, но делает ли еще одну дополнительную вещь согласно спецификации более надежной?)
Тем не менее, существуют различные проверки, которые можно использовать в качестве приблизительной численной оценки работоспособности системы. Покрытие модульных тестов является довольно стандартным, как и его братья и сестры, покрытие филиалов, покрытие функций, покрытие операторов и т. Д. Еще один хороший выбор - программы «lint», такие как FindBugs. Это может указывать на потенциальные проблемы. Проекты с открытым исходным кодом часто оцениваются по тому, как часто и в последнее время принимаются коммиты или выпускаются релизы. Если в проекте есть система ошибок, вы можете измерить, сколько ошибок было исправлено и процент. Если есть конкретный экземпляр программы, которую вы измеряете, особенно с большой активностью, MTBF (среднее время между сбоями) является хорошим показателем надежности (см. Ответ Филиппа )
Эти измерения, тем не менее, на самом деле не говорят вам, насколько надежна программа. Это просто способы угадать это. Если бы было легко определить, является ли программа надежной, мы бы просто сделали проверку компилятором.
Удачи с тезисом! Я надеюсь, что вы придумали новые классные измерения!