Фонд |
Неполнота тестирования27.10.2017 Давно подсчитано, что для полного тестирования одной одноадресной инструкции 64- разрядного процессора с производительностью 2 ГГц необходимо 250 лет. О том, сколько времени уйдет на то, чтобы проверить во всех возможных режимах самую простенькую программку, страшно и подумать. Даже если мы сможем выявить все режимы, что, учитывая фактор среды, практически невозможно. Вот и приходится проверять работоспособность приложения выборочно, предполагая, что в остальных случаях оно ведет себя “аналогично”. Иногда предположения оправдываются... Производительность компьютеров растет немыслимыми темпами. Но еще быстрее растет сложность ПО. Десятью мегабайтами машинного кода уже никого не удивишь, скоро не удивишь и сотней. Очевидно, что написать программу такого объема "с нуля” невозможно, большая часть кода заимствуется из других проектов или стандартных библиотек. Заимствуется как есть, изредка — с небольшой модификацией. Какой уж тут детерминизм, заставить бы работать хоть как-нибудь! Не можете вылечить псориаз? Лечение псориаза - реальные отзывы помогут вам. У экспоненциального роста сложности программ есть и другая сторона. Поскольку физических ресурсов вычислительных систем почти всегда оказывается недостаточно, приходится прибегать к разнообразным ухищрениям вроде виртуальной памяти или многоуровневого кэширования. В результате операции, которые выглядят элементарными для конечного пользователя, на самом деле весьма сложны. И какими бы прозрачными ни казались реализующие их механизмы, каждый из них обладает достаточным количеством побочных эффектов, не учитываемых в реальной жизни. Еще один неиссякаемый источник недетерминизма — обработка ошибок. Разумеется, каждый разработчик стремится, чтобы его программа обрабатывала все мыслимые и немыслимые ситуации, возникающие в процессе ее исполнения. И так же естественно, что его фантазия, время и бюджет никогда не позволяют получить стопроцентный результат. Поэтому в лучшем случае нештатные ситуации обрабатываются “пачками”, в худшем — игнорируются вовсе в расчете на то, что при правильной эксплуатации они возникать не должны. Вот только на “правильность эксплуатации” взгляды у программиста и пользователя обычно разные...
|