Стандарты в области программного обеспечения
В Толковом словаре по информатике В.И. Першикова и В.М. Савинкова [52] понятие стандартизация определяется как принятие соглашения по спецификации, производству и использованию аппаратных и программных средств вычислительной техники; установление и применение стандартов, норм, правил и т.п.
Стандарты имеют большое значение - они обеспечивают возможность разработчикам программного обеспечения использовать данные и программы других разработчиков, осуществлять экспорт/импорт данных.
Такие стандарты регламентируют взаимодействие между различными программами. Для этого предназначены стандарты межпрограммного интерфейса, например OLE (Object Linking and Embedding - связывание и встраивание объектов). Без таких стандартов программные продукты были бы "закрытыми" друг для друга.
Стандарты занимают все более значительное место в направлении развития индустрии информационных технологий. Более 250 подкомитетов в официальных организациях по стандартизации работают над стандартами в области информационных технологий. Более 1000 стандартов или уже приняты этими организациями, или находятся в процессе разработки. Процесс стандартизации информационных технологий далеко не закончен (да, по нашему мнению, вряд ли когда-либо будет закончен, так как область информационных технологий постоянно динамично развивается).
Все компании-разработчики должны обеспечить приемлемый уровень качества выпускаемого программного обеспечения (ПО). Для этих целей предназначены стандарты качества программного обеспечения или отдельные разделы в стандартах разработки программного обеспечения, посвященные требованиям к качеству программного обеспечения.
С точки зрения пользователя, все многообразие ПО должно управляться единообразно. Должна быть единообразная навигация - перемещение по программе, единообразные органы управления ПО и единая реакция программного обеспечения на действия пользователя. Для этого разработаны стандарты на пользовательский интерфейс - GUI (Graphical User Interface). Все это регламентируется стандартами, действующими в сфере информационных технологий.
Необходимость стандартизации разработки программного обеспечения наиболее удачно описана во введении в стандарт ISO/ IEC 12207: "Программное обеспечение является неотъемлемой частью информационных технологий и традиционных систем, таких, как транспортные, военные, медицинские и финансовые. Имеется множество разнообразных стандартов, процедур, методов, инструментальных средств и типов операционной среды для разработки и управления программным обеспечением. Это разнообразие создает трудности при проектировании и управлении программным обеспечением, особенно при объединении программных продуктов и сервисных программ. Стратегия разработки программного обеспечения требует перехода от этого множества к общему порядку, который позволит специалистам, практикующимся в программном обеспечении, "говорить на одном языке" при разработке и управлении программным обеспечением. Этот международный стандарт обеспечивает такой общий порядок".
Попробуем внести порядок в многообразие стандартов, действующих в сфере ИТ, и классифицировать их (рис. 1.3).
Как видно, верхняя часть классификации напоминает указанные выше виды стандартов. Однако здесь появляются и свои особенности. Это относится прежде всего к стандартам "де-юре" и "де-факто". Давайте сразу определим эти понятия.
Стандарт "де-факто" - термин, обозначающий продукт какого-либо поставщика, который захватил большую долю рынка и который другие поставщики стремятся эмулировать, копировать или использовать для того, чтобы захватить свою часть рынка.
Одна из главных причин значимости современной программы стандартизации - осознание опасности злоупотребления стандартами "де-факто". В 60-е и 70-е годы XX века создание стандартов "де-факто" ставило пользователей в зависимое от производителей положение при использовании основных средств обработки данных и телекоммуникаций. Важный аспект сегодняшней работы по стандартизации - преодоление этой зависимости через продвижение стандартных интерфейсов. Долгое время такими стандартами были SQL (Structured Query Language) и язык диаграмм Д. Росса SADT (Structured Analysis and Design Technique). Стандарт "де-юре" создается формально признанной стандартизующей организацией. Он разрабатывается при соблюдении правил консенсуса в процессе открытой дискуссии, в которой каждый имеет шанс принять участие. Ни одна группа не может действовать независимо, создавая стандарты для промышленности. Если какая-либо группа поставщиков создаст стандарт, не учитывающий требования пользователей, она потерпит неудачу. То же самое происходит, если пользователи создают стандарт, с которым не могут или не будут соглашаться поставщики, - этот стандарт также не будет успешным. Стандарты "де-юре" не могут быть изменены, не пройдя процесс согласования под контролем организации, разрабатывающей стандарты. Стандарты OSI (Open Systems Interconnection reference model), Ethernet, POSIX, SQL и большинство стандартов языков -- примеры такого рода стандартов. В качестве примера перехода стандарта "де-факто" в стандарт "де-юре" рассмотрим историю развития и стандартизации языка SQL.
Работы по созданию языка SQL были начаты в 70-х годах прошлого столетия в исследовательских лабораториях компании IBM. В настоящее время он стал одним из главных стандартов в области информационных систем и обеспечил технологию базового языка для целого поколения СУБД, основанных на реляционной модели. Несмотря на то, что он был коммерчески реализован в начале 80-х годов лишь для небольшой группы программных продуктов, SQL, бесспорно, получил признание с принятием ANSI и ISO стандарта SQL-86. Позднее, при подготовке стандарта SQL-89, в язык был включен ряд дополнительных возможностей.
Рис. 1.3. Схема классификации стандартов в области информационных технологий
Истоки SQL следует отнести к периоду рождения реляционной модели данных (описанной в статье Э.Ф. Кодда) [65]. Поскольку в течение нескольких последующих лет не появилось никаких языков, подобных SQL, в исследовательских проектах, инициированных компанией IBM после публикации статьи Э.Ф. Кодда, придавалось особое значение необходимости создания языков интерфейса создаваемых СУБД для проверки возможностей реляционной модели. Историю разработки языка SQL иллюстрирует рис. 1.4.
В исследовательских лабораториях IBM в начале 70-х годов 20 века одновременно с работой над будущим языком SQL разрабатывались и другие проекты по созданию и экспериментальной реализации реляционных языков. Вероятно, наиболее известным из них является созданный М. Злуфом из лаборатории IBM в Йорктаун-Хейтс примерно в одно и то же время с SEQUEL (ранней версией SQL) реляционный язык Query-By-Example (QBE). Этот язык используется в настоящее время во многих коммерческих программных продуктах наряду с SQL.
В 1974 г. Дональд Д. Чамберлин из Исследовательской лаборатории IBM в Сан-Хосе предложил спецификации реляционного языка, названного SEQUEL (Structured English QUEry Language). Пересмотренная версия этого языка (SEQUEL/2) была разработана в 1976-1977 годах, и он приобрел свое окончательное название - SQL (Structured Query Language).
Еще перед тем, как коммерческие продукты IBM в начале 80-х годов 20 века вышли на рынок программного обеспечения, компания Relation Software Inc. (называющаяся теперь Oracle Corporation) объявила о выпуске реляционной СУБД, основанной на языке SQL. Эта система в результате ее эволюции стала одной из доминирующих коммерческих систем и носит название ORACLE.
Продукт ORACLE с его языком SQL столкнулся с конкуренцией в сфере средних ЭВМ и мини-ЭВМ со стороны продуктов ряда других разработчиков, в частности СУБД Ingres с языком QUEL компании Relation Technology Inc., а также продукта Rdb/ VMS с языком RDML компании Digital Equipment Corporation.
Одной из причин преуспевания SQL послужило формирование Американским национальным институтом стандартов (American National Standards Institute, ANSI) комитета ХЗН2, учрежденного для разработки стандартов языков баз данных. Представитель IBM предложил использовать в качестве предварительных спецификаций реляционного языка результаты ранее проведенной IBM работы над SEQUEL/2, и разработчики стандарта приступили к работе. Документ, озаглавленный "SQL", представлял собой по большей части трактат о различных формах SQL, используемых в коммерческих программных продуктах.
Международная организация по стандартизации (International Standards Organization, ISO) в рамках технического комитета ТС97 (называемого теперь как ISO/IEC JTC1) также вела работу по созданию стандарта языков реляционных баз данных. В середине 80-х годов как ANSI, так и ISO одобрили стандарты SQL (ANSI -в 1986 г., a ISO - в начале 1987 г.).
Первый стандарт SQL в связи со способом его разработки был весьма неполным в части функциональных возможностей систем баз данных, и многие из поставщиков продолжали вносить в свои программные продукты большой ряд расширений к стандарту. В 1989 г. была принята пересмотренная версия стандарта SQL, которая отличалась от стандарта 1986 г. главным образом именно возможностями поддержки целостности по ссылкам.
Однако еще до 1989 г. как в ANSI, так и в ISO началась работа по радикальным расширениям SQL. Эта работа, первоначально идентифицированная как "SQL2", началась в 1987 г., и ее результаты были спустя пять лет приняты в качестве стандарта SQL-92.
Добавляет путаницы еще и то обстоятельство, что работа над SQL2 перекрывалась работой над SQL3, новой версией стандарта SQL, которая еще до сих пор находится в стадии разработки. Работа над SQL3 началась еще в 1990 г. параллельно с SQL2, главным образом как над "запасным резервуаром" для возможностей, которые предполагалось не включать по тем или иным причинам в SQL2. SQL3 включает объектно-ориентированные расширения языка, а также дополнительные реляционные возможности, которым не нашлось места в SQL2 [53].
Проиллюстрируем на рис. 1.5 с привязкой к оси времени процесс разработки различных стандартов SQL.
Следует отметить, что в области информационных технологий существуют два основных исторически сложившихся подхода к разработке стандартов. Первый - когда назревает проблема, -необходимость в стандарте. В этом случае собирается группа экспертов в каком-то разделе информационных технологий и обсуждает локальные решения, придуманные отдельными компаниями - производителями программного обеспечения и научными организациями, проводит анализ этих решений и разрабатывается единый интегральный стандарт, который включает в себя лучшие идеи и наработки.
Но рынок живет по несколько иным законам. Первый подход обладает инертностью, проблема уже назрела, ее надо решать, и неизвестно, когда соберутся эксперты и разработают необходимый стандарт. Во-втором случае компании - разработчики ПО разрабатывают каждая свое решение, и самое популярное, массовое с точки зрения частоты использования решение обретает статус стандарта (необязательно юридически). Так, SQL стал стандартом языка обращения к базам данных, что называется "де-факто", хотя потом статус стандарта был закреплен юридически.
Недостаток этого подхода состоит в том, что стандартом становится не самое сильное, а самое массовое коммерческое решение.
В качестве еще одного примера появления стандарта можно привести появление ныне популярного UML - Unified Modeling Language. Основные разработки по методам объектно-ориентированного анализа и проектирования появились между 1988 и 1992 гг. К 1994 г. было большое количество неформальных лидеров разработчиков-практиков (около полутора десятков), которые продвигали свои методологии. Все их методы были схожи, при этом зачастую отличия между ними заключались во второстепенных деталях. Назревал разговор о стандартизации. Команда из OMG пыталась рассмотреть проблему стандартизации, но в ответ получила открытое письмо с протестом от всех авторов. В 1996 г. три ведущих специалиста в области объектно-ориентированного анализа и проектирования Джеймс Рамбо (James Rumbaugh), Гра-ди Буч (Grady Booch), Ивар Якобсон (Ivar Jacobson) объединились, и появился на свет Унифицированный метод версии 0.8, в 1996 г. "трое друзей" работали над своим методом, который получил название Unified Modeling Language. В январе 1997 г. различные организации представили свои предложения по стандартизации методов, предусматривающие в первую очередь возможность обмена информацией между различными моделями. В результате сейчас имеется единственное предложение - стандарт UML.