Несовместимость программного обеспечения
![]() | Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( декабрь 2016 г. ) |
Эта статья в значительной степени или полностью опирается на один источник . ( март 2024 г. ) |
Несовместимость программного обеспечения — это характеристика программного обеспечения компонентов или систем , которые не могут удовлетворительно работать вместе на одном и том же компьютере или на разных компьютерах, связанных компьютерной сетью . Это могут быть компоненты или системы, предназначенные для совместной или независимой работы. Совместимость программного обеспечения — это характеристика компонентов или систем программного обеспечения, которые могут удовлетворительно работать вместе на одном и том же компьютере или на разных компьютерах, связанных компьютерной сетью. Вполне возможно, что некоторые программные компоненты или системы могут быть совместимы в одной среде и несовместимы в другой.
Примеры [ править ]
Тупики [ править ]
Рассмотрим последовательные программы вида:
Request resource A Request resource B Perform action using A and B Release resource B Release resource A
Конкретная программа может использовать принтер (ресурс A) и файл (ресурс B) для печати файла.
Если одновременно работают несколько таких программ P1,P2,P3..., то первая выполнившаяся остальные до заблокирует освобождения ресурсов, и программы будут выполняться по очереди. Не будет никаких проблем. Не имеет значения, используется ли однопроцессорная или многопроцессорная система, поскольку именно распределение ресурсов определяет порядок выполнения.
Однако обратите внимание, что программисты , как правило, не обязаны писать программы определенным образом, и даже если существуют рекомендации, некоторые из них могут отличаться от рекомендаций. Вариантом предыдущей программы может быть:
Request resource B Request resource A Perform action using A and B Release resource A Release resource B
Ресурсы A и B такие же, как и в предыдущем примере, а не просто фиктивные переменные , так как в остальном программы идентичны.
Как и прежде, если таких программ будет несколько, Q1, Q2, Q3, которые запускаются одновременно, используя ресурсы, как и раньше, проблем не возникнет.
Однако если несколько Ps настроены на работу одновременно с несколькими Q, может возникнуть взаимоблокировка . Обратите внимание, что тупиковая ситуация не обязательно должна возникнуть, но может возникнуть.
P: Request resource A Q: Request resource B Q: Request resource A (blocked by P) P: Request resource B (blocked by Q) ...
Теперь ни P, ни Q не могут продолжить 1 .
Это один из примеров, когда программы могут демонстрировать несовместимость.
Несовместимость интерфейса [ править ]
Другим примером другого рода может быть случай, когда один программный компонент предоставляет услуги другому. Несовместимость может заключаться в простом изменении порядка параметров между программным компонентом, запрашивающим услугу, и компонентом, предоставляющим услугу. Это будет своего рода несовместимость интерфейса . Это можно считать ошибкой , но в некоторых системах ее очень сложно обнаружить. Некоторые несовместимости интерфейсов можно легко обнаружить на этапе сборки , особенно для строго типизированных систем, другие бывает трудно обнаружить и их можно обнаружить только во время выполнения , а третьи практически невозможно обнаружить без детального анализа программы.
Рассмотрим следующий пример:
Component P calls component Q with parameters x and y. For this example, y may be an integer.
Q returns f(x) which is desired and never zero, and ignores y.
Вариант Q, Q' имеет аналогичное поведение со следующими отличиями:
if y = 100, then Q' does not terminate.
Если P никогда не вызывает Q со значением y, равным 100, то использование Q' вместо этого является совместимым вычислением . Однако если P вызывает Q со значением y, равным 100, то использование вместо этого Q' приведет к непрерывным вычислениям.
Если далее предположить, что f(x) имеет числовое значение, то компонент Q'' определяется как:
Q'' behaves as Q except that if y = 100 then Q'' does not terminate if y = 101 then Q'' returns 0.9 * f(x) if y = 102 then Q'' returns a random value if y = 103 then Q'' returns 0.
может вызвать проблемное поведение. Если P теперь вызовет Q'' с = 101, то результаты вычислений будут неверными, но это не может привести к сбою программы. Если P вызывает Q'' с y = 102, тогда результаты непредсказуемы, и может возникнуть сбой , возможно, из-за деления на ноль или других ошибок, таких как арифметическое переполнение . Если P вызывает Q'' с y= 103, то в случае, если P использует результат в операции деления, может произойти сбой деления на ноль.
Этот пример показывает, как одна программа P1 может быть всегда совместима с другой программой Q1, но могут быть построены другие программы Q1' и Q1'', такие, что P1 и Q1'' иногда несовместимы, а P1 и Q1'' несовместимы всегда.
Несовместимость производительности [ править ]
Иногда программы P и Q могут работать на одном компьютере, и присутствие одной из них будет снижать производительность другой. Это может особенно произойти, если компьютер использует виртуальную память . В результате может произойти перегрузка диска , и производительность одной или обеих программ значительно снизится. Эта форма несовместимости может возникнуть, если P и Q предназначены для взаимодействия, но может также возникнуть, если P и Q совершенно не связаны, но просто работают одновременно. Примером может быть P — программа, которая создает большие выходные файлы, которые хранятся в основной памяти , а Q — антивирусная программа, которая сканирует множество файлов на жестком диске. Если для виртуальной памяти используется кеш-память , то возможно неблагоприятное взаимодействие двух программ, и производительность каждой из них будет резко снижена.
Совместимость производительности некоторых программ P и Q может зависеть от среды, в которой они выполняются. Они могут быть существенно несовместимы, если запускаются на компьютере с ограниченной оперативной памятью, однако их можно удовлетворительно запустить на компьютере с большим объемом памяти. Некоторые программы могут быть несовместимы по производительности практически в любой среде.
См. также [ править ]
Ссылки [ править ]
- К. М. Кришна, К. Г. Шин, Системы реального времени, McGraw-Hill, 1997 г.