Файл: Методы обеспечения переносимости по.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.10.2023

Просмотров: 17

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

35
строгие, чем требования к клиентской системе. Последние зачастую сводятся к требованию наличия браузера, поддерживающего определенные возможности. Для серверной же части может требоваться вполне конкретная программно-аппаратная платформа.
Использование web-браузера для отрисовки графического интерфейса имеет как преимущества, так и недостатки. К преимуществам, помимо упомянутого выше снижения затрат на разработку, стоит отнести возможность настройки интерфейса пользователем по своему вкусу — изменением шрифтов, масштаба страницы и т.п. Основной недостаток подхода является следствием его достоинств — в разных браузерах одна и та же страница может отображаться по-разному — как вследствие пользовательских настроек, так и из-за особенностей конкретного браузера. Безусловно, существуют различные стандарты на HTML, CSS, JavaScript и прочие элементы, используемые при отображении web-документов, однако разные браузеры соответствуют этим стандартам в разной степени [19]. Поэтому разработчикам приходится либо проводить тестирование на различных браузерах [20], либо ограничиваться поддержкой только некоторых из них. Для автоматизации процесса тестирования существуют различные свободно доступные инструменты — например, сервис BrowserShots [21] позволяет получить снимки экрана с видом заданной страницы в различных браузерах (на данный момент доступно более 80) в Linux, Mac OS и Windows.
Также отметим, необходимость создания больших распределенных систем привела к созданию архитектур, более сложных, чем клиент-серверная, и подразумевающих взаимодействие множества компонентов различной структуры. Исследования проблем разработки сложных программных комплексов привели к разработке парадигм, подразумевающих разбиение системы на отдельные компоненты, которые взаимодействуют друг с другом по строго определенным протоколам. При таком подходе каждый компонент не только может работать на отдельной машине, но также разрабатываться независимо от других. При этом (в идеале) процесс переноса компонента на другую платформу либо замена его на альтернативную реализацию никак не затрагивает других частей системы.
К одной из первых попыток описания механизма взаимодействия компонентов распределенной системы можно отнести спецификацию CORBA
(Common Object Request Broker Architecture), разработанную консорциумом
OMG [22]. Однако CORBA в силу ряда причин не снискала большой популярности, и в настоящее время гораздо больший интерес проявляется к web-сервисам, использующим протоколы обмена сообщениями на базе XML.
При проектировании сложных распределенных программных комплексов используется парадигма сервисно-ориентированной архитектуры (Service- oriented architecture, SOA [23]); при этом программные комплексы часто реализуются как набор web-сервисов.
36
9. Заключение
Если невнимание к проблеме переносимости приводит к негативным последствиям и существует множество путей по ее решению, то возникает вопрос: так почему же ИТ индустрия не переориентируется на разработку переносимого ПО? Несложно догадаться, что разработка переносимого ПО имеет свои недостатки.
Среди рассмотренных видов переносимости приложений очень привлекательным с точки зрения разработчиков является перенос непосредственно бинарных файлов на новую систему, позволяющий при относительно небольших затратах (в основном уходящих на тестирование) получить на новой системе приложение, имеющее всю необходимую функциональность. При этом потери в производительности если и возникают, то совсем небольшие.
Однако для любой ОС число платформ, совместимых с ней на бинарном уровне, достаточно невелико. Использование эмуляторов может расширить их круг, но эмулятор — дополнительный потенциальный источник ошибок, который при этом может и не предоставлять всех необходимых функций.
Потенциально больший охват дает переносимость исходного кода. Сложность портирования в этом случае может варьироваться в зависимости от того, насколько такая возможность учитывалась при разработке приложения; полезной с этой точки зрения является ориентация на различные интерфейсные стандарты, регламентирующие взаимодействие приложения с окружающей средой. Но существующие стандарты охватывают достаточно небольшую функциональность; в ряде случаев может помочь использование кросс-платформенных библиотек, другой же альтернативой является использование интерпретируемых языков.
Спецификации таких языков не привязаны к конкретной платформе и можно полагаться на то, что интерпретаторы на разных системах поддерживают один и тот же набор функций. Среди недостатков подхода можно выделить меньшую производительность по сравнению с бинарным кодом.
Архитектура SOA затрагивает более сложную проблему организации сложных программных комплексов, предлагая строить их в виде набора достаточно изолированных компонентов, каждый из которых может работать на своей собственной платформе и в случае необходимости может быть перенесен на другую (либо заменен на альтернативную реализацию).
Использование виртуальных машин также не требует больших усилий со стороны разработчиков ПО, хотя этот способ достаточно накладен, как в смысле производительности, так и ввиду необходимости иметь лицензии на все используемые операционные системы. Применение виртуализации оправдано в тех случаях, когда перенос приложения каким-то другим способом представляется экономически неэффективным. В частности, это относится ко многим унаследованным системам, для которых портирование


37
на новую платформу означало бы практически полное переписывание приложения.
В таблице 1 приведены примеры использования различных подходов к обеспечению переносимости ПО, которые используются разработчикам для создания программ, функционирующих как в Windows, так и в Linux.
Интересно отметить подход Google, который не побоялся положиться на слой эмуляции wine для запуска Google Picasa в ОС Linux, несмотря на практически полное отсутствие успешных примеров крупных приложений, официально использующих такой метод. Подход с использованием библиотек-медиаторов более традиционен и применяется не один десяток лет.
Подход
Примеры
Ориентация на стандарты
Ряд утилит GNU (tar, wget и др.), написанные с ориентацией на POSIX
Медиаторы сторонних разработчиков
Skype — использование библиотеки Qt для реализации
GUI
Собственные медиаторы
Mozilla Firefox — использование собственных кросс- платформенных библиотек NSS (Network Security
Services) для поддержки различных стандартов безопасности
Эмуляция Google
Picasa
— применение wine для работы в Linux
Виртуализация Linuxgym
— клиент распространяется в виде образа
VMware
Таблица 1. Примеры использования различных подходов к обеспечению
функционирования приложений как в Windows, так и в Linux.
Вопрос обеспечения переносимости следует рассматривать в самом начале проекта, на стадии проектирования и выбора технологий и инструментов, которые будут использованы при его реализации. К сожалению, вряд ли можно сформулировать универсальное правило выбора средств для увеличения переносимости – такой выбор сильно зависит от конкретных требований, предъявляемых к приложению. На взгляд авторов, в настоящее время потенциально наибольший охват дает использование интерпретируемых языков – многие интерпретаторы работают на достаточно большом числе программно-аппаратных платформ.
Естественно, использование таких языков имеет свои недостатки, и для ряда приложений может оказаться неприемлемым.
Следующим по масштабу «охвата», на наш взгляд, идет использование кросс- платформенных библиотек и других медиаторов. Однако медиаторов, реали- зующих нужную функциональность, может и не существовать, а разработка
38
собственных – оказаться достаточно трудоемким процессом. Тем не менее, даже при отказе от поддержки нескольких систем ввиду отсутствия средств и при ориентации на одну конкретную платформу, стоит строить архитектуру приложения таким образом, чтобы по возможности отделить части, использующие специфические для данной платформы интерфейсы и сервисы.
Подводя итоги, отметим, что возможны ситуации, когда отказ от обеспечения переносимости разрабатываемого ПО оправдан; например, с достаточно большой долей вероятности такой выбор будет выгоден в краткосрочной перспективе. Однако при создании продуктов, которые планируется поддерживать в течении достаточно длительного периода, обеспечение переносимости может оказаться одним из ключевых факторов успеха.
Повышение мобильности приложения в общем случае всегда связано с увеличением расходов на его разработку; однако чем раньше об этой проблеме задумаются разработчики и архитекторы, тем меньше будет стоимость переноса приложения на новую платформу.
Литература
[1] James D. Mooney. "Bringing Portability to the Software Process". // Technical Report
TR 97-1, Dept. of Statistics and Computer Science, West Virginia University,
Morgantown WV, 1997.
[2] Ian Sommerville. Software Engineering, 8th Edition, Addison Wesley, 2006.
[3] Wikipedia, the free encyclopedia. IBM System/370. http://en.wikipedia.org/wiki/System/370
[4] Wine - Open Source implementation of the Windows API. http://www.winehq.org/
[5] Borland's Net Loss Desaster. // Архив дискуссионного листа
«borland.public.delphi.non-technical». Август 2005. http://coding.derkeiler.com/pdf/Archive/Delphi/borland.public.delphi.non- technical/2005-08/msg01903.pdf
[6] Ryan Slobojan. Tasktop 1.3: Support Added for Firefox and Linux. // InfoQueue News.
Nov 12, 2008. http://www.infoq.com/news/2008/11/tasktop-13
[7] Apple Rosetta. http://www.apple.com/rosetta/
[8] Андрей Ященко. 64-x битные процессоры. // 3DNews, 7 августа 2003. http://www.3dnews.ru/cpu/cpu-64/index2.htm
[9] Cygwin - Linux-like environment for Windows. http://www.cygwin.com/
[10] Gerald J. Popek, Robert P. Goldberg. Formal Requirements for Virtualizable Third
Generation Architectures. // Communications of the ACM, Volume 17, Issue 7, July
1974, pp. 412-421.
[11] Крис Касперски. Аппаратная виртуализация или эмуляция "без тормозов". http://www.insidepro.com/kk/159/159r.shtml
[12] Virtual Box. http://www.virtualbox.org
[13] VMware. http://www.vmware.com
[14] Matias Zabaljauregui. Hardware Assisted Virtualization. Intel Virtualization
Technology. Buenos Aires, June 2008. http://linux.linti.unlp.edu.ar/kernel/wiki/images/f/f1/Vtx.pdf
[15] AMD Virtualization. http://www.amd.com/us-en/0,,3715_15781,00.html


39
[16] Paul Barham, Boris Dragovic, Keir Fraser, Steven Hand, Tim Harris, Alex Ho, Rolf
Neugebarger, Ian Pratt and Andrew Warfield. Xen and the Art of Virtualization. //
Proceedings of the 19th Symposium on Operating Systems Principles, October 2003.
[17] Daniel J. Magenheimer, Thomas W. Christian. vBlades: Optimized Paravirtualization for the Itanium Processor Family. // Proceedings of the 3rd Virtual Machine Research &
Technology Symposium. May, 2004. pp 73–82, USENIX.
[18] Linuxgym Teaching System. http://www.linuxgym.com/
[19] Tom Dahm. Browser Compatibility Tutorial. http://www.netmechanic.com/products/Browser-Tutorial.shtml
[20] Browser Tests, Services and Compatibility Test Suites. // Smashing Magazine, October
2007. http://www.smashingmagazine.com/2007/10/02/browser-tests-services-and- compatibility-test-suites/
[21] http://browsershots.org/
[22] OMG CORBA 3.0. http://www.omg.org/ technology/documents/formal/corba_2.htm
[23] Ben Margolis, Joseph Sharpe. SOA for the Business Developer: Concepts, BPEL, and
SCA.MC Press, 2007.