Cтраница 2
Программные ошибки являются собственно ошибками программирования, и именно они не дают возможности получить правильный результат, несмотря на отсутствие алгоритмических ошибок. Поскольку программные ошибки обусловлены особенностями программирования, можно указать пути их устранения. [16]
При оценке надежности ИПО АСУП основными факторами, приводящими к снижению надежности программных массивов, следует считать ошибки системного характера, обусловленные отклонением условий функционирования алгоритмов в реальной системе, алгоритмические ошибки, связанные с неполным формированием необходимых условий решения задачи из-за неконкретной их постановки и ошибки программирования. [17]
Как было указано ранее, применение методов автоматического программирования позволяет существенно уменьшить время программирования и повысить качество разрабатываемых алгоритмов, поэтому программист получает возможность уделять больше внимания отладке программы и исправлению чисто алгоритмических ошибок. Технолог получает возможность больше времени затратить на разработку содержания алгоритма, а не на формальные методы его описания. [18]
Сообщение об ошибке при запуске программы из Delphi.| Сообщение об ошибке при запуске программы из Windows. [19] |
С алгоритмическими ошибками дело обстоит иначе. Компиляция программы, в которой есть алгоритмическая ошибка, завершается успешно. При пробных запусках программа ведет себя нормально, однако при анализе результата выясняется, что он неверный. Для того чтобы устранить алгоритмическую ошибку, приходится анализировать алгоритм, вручную прокручивать его выполнение. [20]
Обычно программа редко сразу начинает работать так, как надо, или работает правильно только на некотором ограниченном наборе исходных данных. Это свидетельствует о том, что в программе есть алгоритмические ошибки. Процесс поиска и устранение ошибок называется отладкой. [21]
Высокая эффективность ручных методов отладки достигается за счет сокращения затрат на трансляцию программ после исправления каждой ошибки, за счет уменьшения числа отладочных заданий и затрат на их исполнение на ЭВМ, а также за счет раннего обнаружения наиболее массовых и грубых ошибок. Экспериментально установлено, что в модулях ручными методами удается обнаруживать от 30 до 70 % программных и алгоритмических ошибок из общего числа ошибок, выявленных при отладке. При этом одновременно осуществляется доработка программ с целью улучшения их структуры, логики обработки данных и для снижения сложности последующего автоматизированного тестирования на ЭВМ. [22]
Еще более сложной представляется задача автоматизации процессов обнаружения алгоритмических и программных ошибок. В этой части имеются значительные результаты по автоматическому обнаружению ряда типов ошибок в записи программ. Что же касается автоматизации обнаружения алгоритмических ошибок, то в этой области пути только ищутся. Аналогичное положение имеется и в области автоматизации диагностики и локализации ошибок. Обнаружение и локализация алгоритмических ошибок осуществляются ручным способом и пока являются искусством проектировщиков. [23]
В практике исследований по динамике маневренных ЛА часто разделяют эту систему на быструю и медленную части с точки зрения процесса интегрирования ОДУ. Быстрая часть уравнений интегрируется в отдельном блоке с меньшим шагом, результаты передаются в другой блок, интегрирующий медленные уравнения с большим шагом. Этот подход, несмотря на явное предпочтение с точки зрения быстродействия программного кода, имеет существенный недостаток: обе подсистемы являются зависимыми друг от друга, и такое разделение может привести к неустойчивости получаемого решения и дополнительной алгоритмической ошибке. Тот факт, что различные уравнения в этой расширенной системе должны интегрироваться с различной точностью, находит отражение в масштабировании вычисляемой локальной ошибки на шаге в соответствии с т.н. вектором масштабных коэффициентов. Очевидно, что компоненты вектора подобраны таким образом, чтобы обеспечить лучшую необходимую точность вычислений для компонент вектора состояния, соответствующих быстрому движению. [24]
Сообщение об ошибке при запуске программы из Delphi.| Сообщение об ошибке при запуске программы из Windows. [25] |
С алгоритмическими ошибками дело обстоит иначе. Компиляция программы, в которой есть алгоритмическая ошибка, завершается успешно. При пробных запусках программа ведет себя нормально, однако при анализе результата выясняется, что он неверный. Для того чтобы устранить алгоритмическую ошибку, приходится анализировать алгоритм, вручную прокручивать его выполнение. [26]
Алгоритмические ошибки значительно труднее поддаются обнаружению методами формализованного автоматического контроля, чем предыдущие типы ошибок. К алгоритмическим следует отнести прежде всего ошибки, обусловленные некорректной постановкой функциональных задач, когда в спецификациях не полностью оговорены все условия, необходимые для получения правильного результата. Эти условия формируются и уточняются в значительной части в процессе тестирования и выявления ошибок в результатах функционирования программ. Ошибки, обусловленные неполным учетом всех условий решения задач, являются наиболее частыми в этой группе и составляют до 70 % всех алгоритмических ошибок или около 30 % общего количества ошибок на начальных этапах проектирования. [27]
Еще более сложной представляется задача автоматизации процессов обнаружения алгоритмических и программных ошибок. В этой части имеются значительные результаты по автоматическому обнаружению ряда типов ошибок в записи программ. Что же касается автоматизации обнаружения алгоритмических ошибок, то в этой области пути только ищутся. Аналогичное положение имеется и в области автоматизации диагностики и локализации ошибок. Обнаружение и локализация алгоритмических ошибок осуществляются ручным способом и пока являются искусством проектировщиков. [28]
Количество программных ошибок, прежде всего, зависит от квалификации специалистов-разработчиков, от степени автоматизации программирования, от общего объема программ, от сложности логического и информационного взаимодействия отдельных блоков алгоритма и от ряда других факторов. К сожалению, разработчики мало занимаются анализом статистики ошибок и такие данные опубликованы только в единичных работах [6.2], [6.3], однако и они достаточно характерны. Подобный же процент ошибок ( - 6 %) выявлен одним из авторов при отладке математической модели объемом около 18 тыс. команд. При этом следует отметить, что приведенные данные не содержат системных ошибок, так как программы не предназначались для работы по управлению объектами в реальном масштабе времени. Алгоритмические ошибки в приведенных оценках присутствуют в небольшом количестве, однако их трудно отделить от программных ошибок. [29]
Однако под правильностью в первую очередь понимаются вопросы, связанные с содержанием математического аппарата, с его способностью давать достаточно хорошую модель процесса. К надежности алгоритма прямое отношение имеет и формальная сторона построения алгоритма. Материализация заключается в изображении модели с помощью алгоритмического языка ( алгоритмических языков) в форме алгоритма. При этом даже правильная ( мыслимая) модель может быть изображена с ошибками в форме алгоритма. Таким образом, помешать алгоритму правильно выполнять функции могут алгоритмические ошибки, источником которых является автор. Для линейных алгоритмов, в которых все операции ( действия) обязательно выполняются при любом наборе исходных данных, отыскание подобных ошибок является достаточно простой задачей. Большинство алгоритмов реализуют сложные, ветвящиеся вычислительные процессы. Количество йозможных путей вычислений в зависимости от значений исходных данных чрезвычайно велико. Поэтому отыскание подобных алгоритмических ошибок несмотря на их формальный характер является сложной проблемой, так как из множества возможных вариантов ( нескольких миллионов) работы алгоритма неверными могут быть лишь несколько. [30]