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