Несовместимость программного обеспечения - это характеристика программных компонентов или систем, которые не могут удовлетворительно работать вместе на одном компьютере или на разных компьютерах, связанных компьютерной сетью . Они могут быть компонентами или системами, которые предназначены для совместной или независимой работы. Совместимость программного обеспечения - это характеристика программных компонентов или систем, которые могут удовлетворительно работать вместе на одном компьютере или на разных компьютерах, связанных компьютерной сетью. Возможно, что некоторые программные компоненты или системы могут быть совместимы в одной среде и несовместимы в другой.
Примеры
Тупиковые ситуации
Рассмотрим последовательные программы вида:
Запросить ресурс AЗапросить ресурс BВыполните действие, используя A и BОсвободить ресурс BОсвободить ресурс A
Конкретная программа может использовать принтер (ресурс A) и файл (ресурс B) для печати файла.
Если несколько таких программ P1, P2, P3 ... работают одновременно, то первая, которая будет выполнена , заблокирует другие, пока ресурсы не будут освобождены, и программы будут выполняться по очереди. Не будет проблем. Не имеет значения, используется ли однопроцессорная или многопроцессорная система, поскольку порядок выполнения определяется распределением ресурсов.
Обратите внимание, однако, что программисты , как правило, не ограничены в написании программ определенным образом, и даже если есть рекомендации, некоторые из них могут отличаться от рекомендаций. Вариантом предыдущей программы может быть:
Запросить ресурс BЗапросить ресурс AВыполните действие, используя A и BОсвободить ресурс AОсвободить ресурс B
Ресурсы A и B такие же, как в предыдущем примере, а не просто фиктивные переменные , поскольку в остальном программы идентичны.
Как и раньше, если есть несколько таких программ, Q1, Q2, Q3, которые работают одновременно с использованием ресурсов, как и раньше, проблем не возникнет.
Однако, если несколько P настроены на работу одновременно с несколькими Q, то может возникнуть состояние взаимоблокировки . Обратите внимание, что тупик может возникнуть не обязательно, но может.
P: запросить ресурс AQ: запросить ресурс BQ: запросить ресурс A (заблокирован P)P: запрос ресурса B (заблокирован Q)...
Теперь ни P, ни Q не могут продолжить 1 .
Это один из примеров несовместимости программ.
Несовместимость интерфейсов
Другой пример иного рода - это когда один программный компонент предоставляет услуги другому. Несовместимость может быть такой же простой, как изменение порядка параметров между программным компонентом, запрашивающим услугу, и компонентом, предоставляющим услугу. Это была бы несовместимость интерфейсов . Это можно считать ошибкой , но в некоторых системах ее очень трудно обнаружить. Некоторые несовместимости интерфейсов могут быть легко обнаружены на этапе сборки , особенно для строго типизированных систем, другие могут быть трудными для поиска и могут быть обнаружены только во время выполнения , в то время как другие могут быть почти невозможно обнаружить без подробного анализа программы.
Рассмотрим следующий пример:
Компонент P вызывает компонент Q с параметрами x и y. В этом примере y может быть целым числом.
Q возвращает желаемую f (x) и никогда не принимает ноль, и игнорирует y.
Вариант Q, Q 'имеет аналогичное поведение со следующими отличиями:
если y = 100, то Q 'не завершается.
Если P никогда не вызывает Q с y, равным 100, тогда использование Q 'вместо этого является совместимым вычислением . Однако, если P вызывает Q с y, равным 100, то использование Q 'вместо этого приведет к непрерывному вычислению.
Если предположить, что f (x) имеет числовое значение, то компонент Q '' определяется как:
Q ведет себя как Q, за исключением того, что если y = 100, то Q '' не завершается если y = 101, то Q '' возвращает 0,9 * f (x) если y = 102, то Q '' возвращает случайное значение если y = 103, то Q '' возвращает 0.
может вызвать проблемное поведение. Если P теперь вызывает Q '' с = 101, то результаты вычислений будут неверными, но не могут вызвать сбой программы. Если P вызывает Q '' с y = 102, тогда результаты непредсказуемы, и может возникнуть сбой , возможно, из-за деления на ноль или других ошибок, таких как арифметическое переполнение . Если P вызывает Q '' с y = 103, то в случае, если P использует результат в операции деления, может произойти сбой деления на ноль.
Этот пример показывает, как одна программа P1 всегда может быть совместима с другой Q1, но могут быть построены другие программы Q1 'и Q1' ', так что P1 и Q' иногда несовместимы, а P1 и Q1 '' всегда несовместимы.
Несовместимость производительности
Иногда программы P и Q могут выполняться на одном компьютере, и наличие одной снижает производительность другого. Это может особенно произойти, если компьютер использует виртуальную память . В результате может произойти перегрузка диска , и производительность одной или обеих программ значительно снизится. Эта форма несовместимости может возникнуть, если P и Q предназначены для сотрудничества, но также может возникнуть, если P и Q полностью не связаны, но просто выполняются одновременно. Примером может служить P - программа, которая производит большие выходные файлы, которые хранятся в основной памяти , а Q - антивирусная программа, которая сканирует множество файлов на жестком диске. Если кэш памяти используется для виртуальной памяти, то две программы могут взаимодействовать неблагоприятно, и производительность каждой из них будет резко снижена.
Для некоторых программ P и Q их совместимость по производительности может зависеть от среды, в которой они выполняются. Они могут быть в значительной степени несовместимы, если запускаются на компьютере с ограниченной основной памятью, однако их можно удовлетворительно запускать на машине с большим объемом памяти. Некоторые программы могут быть несовместимы по производительности практически в любой среде.
Смотрите также
Рекомендации
- К.М. Кришна, К.Г. Шин, Системы реального времени, МакГроу-Хилл, 1997 г.