184
систем некоторые ошибки могут быть исправлены путем повторных
вычислений после устранения причин их появления. Но ошибки в так
называемых встроенных компьютерных системах (ядерная область,
воздушное движение, автомобили и другие), в системах,
использующих транзакции в реальном времени, являются
необратимыми и могут вызвать разрушения, человеческие жертвы,
необратимые финансовые потери. Объективной причиной
возникновения
ошибок является то, что размер РВС, ПВС очень
быстро растет. Большие системы могут в итоге содержать такое
количество ошибок, что они не смогут успешно работать. Некоторые
большие программные проекты продемонстрировали это. Статистика
показывает, что более 70% времени создания системы затрачивается
на её отладку. Ошибки, найденные после начала эксплуатации, могут
привести к перепроектированию
системы, что, в свою очередь, ведет к
задержкам в её маркетинге.
Важно отметить несоответствие темпов роста сложности систем и
темпов роста методов их проектирования, гарантирующих
правильность работы. Как показывает анализ, в подавляющем
большинстве случаев ошибки сделаны на стадии проектирования
алгоритмов работы систем. Это объясняется тем, что разработка
алгоритмов работы вычислительных
систем, содержащих
параллельные процессы, является очень сложной задачей. Одна из
причин сложности проектирования заключается в том, что, как
правило, здесь нельзя использовать ранее апробированное стандартное
программное обеспечение. Для обеспечения эффективной работы
таких систем нужно разрабатывать специализированное программное
обеспечение. Другой причиной сложности при создании алгоритмов
работы подобных систем является человеческий фактор (мышление
человека по своей природе последовательно), потому что здесь нужно
учесть вопросы надежности работы системы, обеспечиваемые
решениями, принятыми на алгоритмическом уровне (должна быть
полностью реализована заданная функциональность, обработаны все
исключительные ситуации), так и производительности всей системы.
Производительность системы будет определяться не только
эффективностью полученного исполняемого кода для отдельного её
узла, но
и обеспечением минимального простоя (холостого хода) узлов
системы в ожидании продолжения вычисления. Решение такой задачи
даже для однопроцессорных систем было непросто, а сложность их
решения при проектировании распределенных и параллельных систем