КОМПЬЮТЕРНАЯ ПОДДЕРЖКА РАЗРАБОТКИ И СОПРОВОЖДЕНИЯ ПС
Вопросы лекции: 1. Инструменты разработки программных средств. 2. Инструментальные среды разработки и сопровождения программных средств и принципы их классификации. 3. Основные классы инструментальных сред разработки и сопровождения программных средств. а. Инструментальные среды программирования. б. Понятие компьютерной технологии разработки программных средств и ее рабочие места. в. Инструментальные системы технологии программирования. 1. Инструменты разработки программных средств При разработке программных средств, в той или иной мере, но всегда используется компьютер-ная поддержка процессов разработки и сопровождения ПС. Это достигается путем представления хотя бы некоторых программных документов ПС (прежде всего самих программ) на компьютерных носителях данных (например, на дискетах) и предоставлению в распоряжение разработчика ПС специальных ПС или включенных в состав компьютера специальных устройств, созданных для какой-либо обработки таких документов. В качестве такого специального ПС можно указать компилятор с какого-либо языка программирования. Компилятор избавляет разработчика ПС от необходимости писать программы на языке компьютера, который для разработчика ПС был бы крайне неудобен, вместо этого он составляет программы на удобном ему языке программирования, которые соответствующий компилятор автоматически переводит на язык компьютера. В качестве специального устройства, поддерживающего процесс разработки ПС, можно указать, например, эмулятор какого-либо языка. Эмулятор позволяет выполнять (интерпретировать) программы на языке, отличном от языка компьютера, поддерживающего разработку ПС, например, на языке компьютера, для которого эта программа предназначена. ПС, предназначенное для поддержки разработки других ПС, будем называть программным инст-рументом разработки ПС, а устройство компьютера, специально предназначенное для поддержки разработки ПС, будем называть аппаратным инструментом разработки ПС. Инструменты разработки ПС могут использоваться в течение всего жизненного цикла ПС для ра-боты с разными программными документами. Так текстовый редактор может использоваться для разработки практически любого программного документа. С точки зрения функций, которые инст-рументы выполняют при разработке ПС, их можно разбить на следующие четыре группы: * редакторы, * анализаторы, * преобразователи, * инструменты, поддерживающие процесс выполнения программ. Редакторы поддерживают конструирование тех или иных программных документов на различ-ных этапах жизненного цикла. Для этого можно использовать один какой-нибудь универсальный текстовый редактор. Однако более сильную поддержку могут обеспечить специализированные ре-дакторы: для каждого вида документов свой редактор. В частности, на ранних этапах разработки в документах могут широко использоваться графические средства описания (диаграммы, схемы и т.п.). В таких случаях весьма полезными могут быть графические редакторы. На этапе программиро-вания (кодирования) вместо текстового редактора может оказаться более удобным синтаксически управляемый редактор, ориентированный на используемый язык программирования. Анализаторы производят либо статическую обработку документов, осуществляя различные виды их контроля, выявление определенных их свойств и накопление статистических данных (например, проверку соответствия документов указанным стандартам), либо динамический анализ программ (например, с целью выявление распределения времени работы программы по программным модулям). Преобразователи позволяют автоматически приводить документы к другой форме представления (например, форматеры) или переводить документ одного вида к документу другого вида (например, конверторы или компиляторы), синтезировать какой-либо документ из отдельных частей и т.п. Инструменты, поддерживающие процесс выполнения программ, позволяют выполнять на компь-ютере описания процессов или отдельных их частей, представленных в виде, отличном от машинно-го кода, или машинный код с дополнительными возможностями его интерпретации. Примером такого инструмента является эмулятор кода другого компьютера. К этой группе инструментов следует отнести и различные отладчики. По существу, каждая система программирования содержит программную подсистему периода выполнения, которая выполняет программные фрагменты, наиболее типичные для языка программирования, и обеспечивает стандартную реакцию на возникающие при выполнении программ исключительные ситуации (такую подсистему мы будем называть исполнительной поддержкой). Такую подсистему также можно рассматривать как инструмент данной группы.
2. Инструментальные среды разработки и сопровождения программных средств и принципы их классификации Компьютерная поддержка процессов разработки и сопровождения ПС может производиться не только за счет использования отдельных инструментов (например, компилятора), но и за счет ис-пользования некоторой логически связанной совокупности программных и аппаратных инструмен-тов. Такую совокупность будем называть инструментальной средой разработки и сопровождения ПС. Иногда разработка ПС производится на том же компьютере, на котором оно будет применяться. Это достаточно удобно. Во-первых, в этом случае разработчик имеет дело только с компьютерами одного типа. А, во-вторых, в разрабатываемое ПС могут включаться компоненты самой инструмен-тальной среды. Однако, часто это не возможно. Например, компьютер, на котором должно приме-няться ПС, может быть неудобен для поддержки разработки ПС или его мощность недостаточна для обеспечения функционирования требуемой инструментальной среды. Кроме того, такой компьютер может быть недоступен для разработчиков этого ПС (например, он постоянно занят другой работой, которую нельзя прерывать, или он находится еще в стадии разработки). В таких случаях применяет-ся так называемый инструментально-объектный подход. Сущность его заключается в том, что ПС разрабатывается на одном компьютере, называемым инструментальным, а применяться будет на другом компьютере, называемым целевым (или объектным). Инструментальная среда не обязательно должна функционировать на том компьютере, на котором должно будет применяться разрабатываемое с помощью ее ПС. Совокупность инструментальных сред можно разбивать на разные классы, которые различаются значением следующих признаков: * ориентированность на конкретный язык программирования, * специализированность, * комплексность, * ориентированность на конкретную технологию программирования, * ориентированность на коллективную разработку, * интегрированность. Ориентированность на конкретный язык программирования (языковая ориентированность) по-казывает: ориентирована ли среда на какой-либо конкретный язык программирования (и на какой именно) или может поддерживать программирование на разных языках программирования. В пер-вом случае информационная среда и инструменты существенно используют знание о фиксированном языке (глобальная ориентированность), в силу чего они оказываются более удобным для использования или предоставляют дополнительные возможности при разработке ПС. Но в этом случае такая среда оказывается не пригодной для разработки программ на другом языке. Во втором случае инструментальная среда поддерживает лишь самые общие операции и, тем самым, обеспечивает не очень сильную поддержку разработки программ, но обладает свойством расширения (открытости). Последнее означает, что в эту среду могут быть добавлены отдельные инструменты, ориентированные на тот или иной конкретный язык программирования, но эта ориентированность будет лишь локальной (в рамках лишь отдельного инструмента). Специализированность инструментальной среды показывает: ориентирована ли среда на какую-либо предметную область или нет. В первом случае информационная среда и инструменты сущест-венно используют знание о фиксированной предметной области, в силу чего они оказываются более удобными для использования или предоставляют дополнительные возможности при разработке ПС для этой предметной области. Но в этом случае такая инструментальная среда оказывается не при-годной или мало пригодной для разработки ПС для других предметных областей. Во втором случае среда поддерживает лишь самые общие операции для разных предметных областей. Но в этом слу-чае такая среда будет менее удобной для конкретной предметной области, чем специализированная на эту предметную область. Комплексность инструментальной среды показывает: поддерживает ли она все процессы разра-ботки и сопровождения ПС или нет. В первом случае продукция этих процессов должна быть согла-сована. Поддержка инструментальной средой фазы сопровождения ПС, означает, что она должна поддерживать работу сразу с несколькими вариантами ПС, ориентированными на разные условия применения ПС и на разную связанную с ним аппаратуру, т.е. должна обеспечивать управление кон-фигурацией ПС. Ориентированность на конкретную технологию программирования показывает: ориентирована ли инструментальная среда на фиксированную технологию программирования либо нет. В первом случае структура и содержание информационной среды, а также набор инструментов существенно зависит от выбранной технологии (технологическая определенность). Во втором случае инструмен-тальная среда поддерживает самые общие операции разработки ПС, не зависящие от выбранной тех-нологии программирования. Ориентированность на коллективную разработку показывает: поддерживает ли среда управление (management) работой коллектива или нет. В первом случае она обеспечивает для разных членов этого коллектива разные права доступа к различным фрагментам продукции технологических процессов и поддерживает работу менеджеров по управлению коллективом разработчиков. Во втором случае она ориентирована на поддержку работы лишь отдельных пользователей. Интегрированность инструментальной среды показывает: является ли она интегрированной (и в каком смысле) или нет. Инструментальная среда считается интегрированной, если взаимодействие пользователя с инструментами подчиняется единообразным правилам, а сами инструменты действу-ют по заранее заданной информационной схеме, связаны по управлению или имеют общие части. В соответствие с этим различают три вида интегрированности: * интегрированность по пользовательскому интерфейсу, * интегрированность по данным, * интегрированность по действиям (функциям), Интегрированность по пользовательскому интерфейсу означает, что все инструменты объедине-ны единым пользовательским интерфейсом. Интегрированность по данным означает, что инструменты действуют в соответствии с фиксиро-ванной информационной схемой (моделью) системы, определяющей зависимость друг от друга раз-личных используемых в системе фрагментов данных (информационных объектов). В этом случае может быть обеспечен контроль полноты и актуальности программных документов и порядка их разработки. Интегрированность по действиям означает, что, во-первых, в системе имеются общие части всех инструментов и, во-вторых, одни инструменты при выполнении своих функций могут обращаться к другим инструментам. Инструментальную среду, интегрированную хотя бы по данным или по действиям, будем назы-вать инструментальной системой. При этом интегрированность по данным предполагает наличие в системе специализированной базы данных, называемой репозиторием. Под репозиторием будем понимать центральное компьютерное хранилище информации, связанной с проектом (разработкой) ПС в течение всего его жизненного цикла.
3. Основные классы инструментальных сред разработки и сопровождения программных средств. В настоящее время выделяют три основных класса инструментальных сред разработки и сопрово-ждения ПС (рис.1): • инструментальные среды программирования, • рабочие места компьютерной технологии, • инструментальные системы технологии программирования.
Инструментальная среда программирования предназначена в основном для поддержки процессов программирования (кодирования), тестирования и отладки ПС. Она не обладает рассмотренными выше свойствами комплексности, ориентированности на конкретную технологию программирова-ния, ориентированности на коллективную разработку и, как правило, свойством интегрированности, хотя имеется некоторая тенденция к созданию интегрированных сред программирования (в этом случае их следовало бы называть системами программирования). Иногда среда программирования может обладать свойством специализированности. Признак же ориентированности на конкретный язык программирования может иметь разные значения, что существенно используется для дальнейшей классификации сред программирования. Рабочее место компьютерной технологии ориентировано на поддержку ранних этапов разработ-ки ПС (системного анализа и спецификаций) и автоматической генерации программ по специфика-циям [16.1, 16.4]. Оно существенно использует свойства специализированности, ориентированности на конкретную технологию программирования и, как правило, интегрированности. Более поздние рабочие места компьютерной технологии обладают также свойством комплексности. Что же касает-ся языковой ориентированности, то вместо языков программирования они ориентированы на те или иные формальные языки спецификаций. Свойством ориентированности на коллективную разработ-ку указанные рабочие места в настоящее время, как правило, не обладают. Инструментальная система технологии программирования предназначена для поддержки всех процессов разработки и сопровождения в течение всего жизненного цикла ПС и ориентирована на коллективную разработку больших программных систем с продолжительным жизненным циклом. Обязательными свойствами ее являются комплексность, ориентированность на коллективную разра-ботку и интегрированность. Кроме того, она или обладает технологической определенностью или получает это свойство в процессе расширения (настройки). Значение признака языковой ориентиро-ванности может быть различным, что используется для дальнейшей классификации этих систем.
а. Инструментальные среды программирования. Инструментальная среда программирования включает, прежде всего, текстовый редактор, позво-ляющий конструировать программы на заданном языке программирования, а также инструменты, позволяющие компилировать или интерпретировать программы на этом языке, тестировать и отла-живать полученные программы. Кроме того, могут быть и другие инструменты, например, для статического или динамического анализа программ. Взаимодействуют эти инструменты между собой через обычные файлы с помощью стандартных возможностей файловой системы. Различают следующие классы инструментальных сред программирования (см. рис. 2): • среды общего назначения, • языково-ориентированные среды. Инструментальные среды программирования общего назначения содержат набор программных инструментов, поддерживающих разработку программ на разных языках программирования (напри-мер, текстовый редактор, редактор связей или интерпретатор языка целевого компьютера) и обычно представляют собой некоторое расширение возможностей используемой операционной системы. Для программирования в такой среде на каком-либо языке программирования потребуются дополнительные инструменты, ориентированные на этот язык (например, компилятор).
Языково-ориентированная инструментальная среда программирования предназначена для под-держки разработки ПС на каком-либо одном языке программирования и знания об этом языке суще-ственно использовались при построении такой среды. Вследствие этого в такой среде могут быть доступны достаточно мощные возможности, учитывающие специфику данного языка. Такие среды разделяются на два подкласса: • интерпретирующие среды, • синтаксически-управляемые среды. Интерпретирующая инструментальная среда программирования обеспечивает интерпретацию программ на данном языке программирования, т.е. содержит, прежде всего, интерпретатор языка программирования, на который эта среда ориентирована. Такая среда необходима для языков про-граммирования интерпретирующего типа (таких, как Лисп), но может использоваться и для других языков (например, на инструментальном компьютере). Синтаксически-управляемая инструментальная среда программирования базируется на знании синтаксиса языка программирования, на который она ориентирована. В такой среде вместо текстового используется синтаксически-управляемый редактор, позволяющий пользователю использовать различные шаблоны синтаксических конструкций (в результате этого разрабатываемая программа всегда будет синтаксически правильной). Одновременно с программой такой редактор формирует (в памяти компьютера) ее синтаксическое дерево, которое может использоваться другими инструментами.
б. Понятие компьютерной технологии разработки программных средств и ее рабочие места. Имеются некоторые трудности в выработке строгого определения CASE-технологии (компьютер-ной технологии разработки ПС). CASE это абревиатура от английского Computer-Aided Software Engineering (Компьютерно-Помогаемая Инженерия Программирования). Но без помощи (поддерж-ки) компьютера ПС уже давно не разрабатываются (используется хотя бы компилятор). В действительности, в это понятие вкладывается более узкий (специальный) смысл, который постепенно размывается (как это всегда бывает, когда какое-либо понятие не имеет строгого определения). Первоначально под CASE понималась инженерия ранних этапов разработки ПС (определение требований, разработка внешнего описания и архитектуры ПС) с использованием программной поддержки (программных инструментов). Теперь под CASE может пониматься и инженерия всего жизненного цикла ПС (включая и его сопровождение), но только в том случае, когда программы частично или полностью генерируются по документам, полученным на указанных ранних этапах разработки. В этом случае CASE-технология стала принципиально отличаться от ручной (традиционной) технологии разработки ПС: изменилось не только содержание технологических процессов, но и сама их совокупность. В настоящее время компьютерную технологию разработки ПС можно характеризовать использо-ванием • программной поддержки для разработки графических требований и графических специфика-ций ПС, • автоматической генерации программ на каком-либо языке программирования или в машинном коде (частично или полностью), • программной поддержки прототипирования. Говорят также, что компьютерная технология разработки ПС является "безбумажной", т.е. рассчи-танной на компьютерное представление программных документов. Однако, уверенно отличить руч-ную технологию разработки ПС от компьютерной по этим признакам довольно трудно. Значит, са-мое существенное в компьютерной технологии не выделено. Распространено мнение, что главное отличие ручной технологии разработки ПС от компьютер-ной заключается в следующем. Ручная технология ориентирована на разработку документов, одинаково понимаемых разными разработчиками ПС, тогда как компьютерная технология ориентирована на обеспечение семантического понимания (интерпретации) документов программной поддержкой компьютерной технологии. Семантическое понимание документов дает программной поддержке возможность автоматически генерировать программы. В связи с этим существенной частью компьютерной технологии становится использование формальных языков уже на ранних этапах разработки ПС: как для спецификации программ, так и для спецификации других документов. В частности, широко используются формальные графические языки спецификаций. Именно это позволяет рационально изменить и саму совокупность технологических процессов разработки и сопровождения ПС. Из проведенного обсуждения можно определить компьютерную технологию разработки ПС как технологию программирования, в которой используются программные инструменты для разработки формализованных спецификаций программ и других документов (включая и графические специфи-кации) с последующей автоматической генерацией программ и документов (или хотя бы значитель-ной их части) по этим спецификациям. Теперь становятся понятными и основные изменения в жизненном цикле ПС для компьютерной технологии. Если при использовании ручной технологии основные усилия по разработке ПС дела-лись на этапах собственно программирования (кодирования) и отладки (тестирования), то при ис-пользовании компьютерной технологии на ранних этапах разработки ПС (определения требований и функциональной спецификации, разработки архитектуры). При этом существенно изменился характер документации. Вместо целой цепочки неформальных документов, ориентированной на передачу информации от заказчика (пользователя) к различным категориям раз-работчикам, формируются прототип ПС, поддерживающий выбранный пользовательский интерфейс, и формальные функциональные спецификации (иногда и формальные спецификации архитектуры ПС), достаточные для автоматического синтеза (генерации) программ ПС (или хотя бы значительной их части). При этом появилась возможность автоматической генерации части документации, необходимой разработчикам и пользователям. Вместо ручного программирования (кодирования) автоматическая генерация программ, что делает не нужной автономную отладку и тестирование программ: вместо нее добавляется достаточно глубокий автоматический семантический контроль документации. Появляется возможность автоматической генерации тестов по формальным спецификациям для комплексной (системной) отладки ПС. Существенно изменяется и характер сопровождения ПС: все изменения разработчиком-сопроводителем вносятся только в спецификации (включая и прототип), остальные изменения в ПС осуществляются автоматически. С учетом сказанного жизненный цикл ПС для компьютерной технологии можно представить сле-дующей схемой (рис. 3).
Рис. 3. Жизненный цикл программного средства для компьютерной технологии. Прототипирование ПС является необязательным этапом жизненного цикла ПС при компьютерной технологии, что на рис. 16.3 показано пунктирной стрелкой. Однако использование этого этапа во многих случаях и соответствующая компьютерная поддержка этого этапа является характерной для компьютерной технологии. В некоторых случаях прототипирование делается после (или в процессе) разработки спецификаций ПС, например, в случае прототипирования пользовательского интерфейса. Это показано на рис. 3 пунктирной возвратной стрелки. Хотя воз-врат к предыдущим этапам мы допускаем на любом этапе, но здесь это показано явно, так как прототипирование является особым подходом к разработке ПС (см. лекцию 3). Прототипирование пользовательского интерфейса позволяет заменить косвенное описание взаимодействия между пользователем и ПС при ручной технологии (при разработке внешнего описания ПС) прямым выбором пользователем способа и стиля этого взаимодействия с фиксацией всех необходимых деталей. По существу, на этом этапе производится точное описание пользовательского интерфейса, понятное программной поддержке компьютерной технологии, причем с ответственным участием пользователя. Все это базируется на наличие в программной поддержке компьютерной технологии настраиваемой оболочки с обширной библиотекой заготовок различных фрагментов и деталей экрана. Такое прототипирование, по-видимому, является лучшим способом преодоления барьера между пользователем и разработчиком. Разработка спецификаций ПС распадается на несколько разных процессов. Если исключить на-чальный этап разработки спецификаций (определение требований), то в этих процессах используют-ся методы, приводящие к созданию формализованных документов, т. е. используются формализо-ванные языки спецификаций. При этом широко используются графические методы спецификаций, приводящие к созданию различных схем и диаграмм, которые определяют структуру информацион-ной среды и структуру управления ПС. К таким структурам привязываются фрагменты описания данных и программ, представленные на алгебраических языках спецификаций (например, исполь-зующие операционную или аксиоматическую семантику), или логических языках спецификаций (базирующихся на логическом подходе к спецификации программ). Такие спецификации позволяют в значительной степени или полностью автоматически генерировать программы. Существенной ча-стью разработки спецификаций является создание словаря именованных сущностей, используемых в спецификациях. Автоматизированный контроль спецификаций ПС использует то обстоятельство, что значитель-ная часть спецификаций представляется на формальных языках. Это позволяет автоматически осу-ществлять различные виды контроля: синтаксический и частичный семантический контроль специ-фикаций, контроль полноты и состоятельности схем и диаграмм (в частности, все их элементы должны быть идентифицированы и отражены в словаре именованных сущностей), сквозной контроль сбалансированности уровней спецификаций и другие виды контроля в зависимости от возможностей языков спецификаций. Генерация программ ПС. На этом этапе автоматически генерирует скелеты кодов программ ПС или полностью коды этих программ по формальным спецификациям ПС. Автоматизированное документирование ПС. Предполагает возможность генерации различных форм документов с частичным заполнением их по информации, хранящейся в репозитории. При этом количество видов документов сокращается по сравнению с традиционной технологией. Комплексное тестирование и отладка ПС. На этом этапе тестируются все спецификации ПС и исправляются обнаруженные при этом ошибки. Тесты могут создаваться как вручную, так и автома-тически (если это позволяют используемые языки спецификаций) и пропускаются через сгенериро-ванные программы ПС. Аттестация ПС имеет прежнее содержание. Сопровождение ПС существенно упрощается, так как основные изменения делаются только в спецификациях. Рабочее место компьютерной технологии разработки ПС представляет собой инстру-ментальную среду, поддерживающую все этапы жизненного цикла этой технологии. В этой среде существенно используется репозиторий. В репозитории хранится вся информация, создаваемая в процессе разработки ПС (в частности, словарь именованных сущностей и все спецификации). По существу, рабочее место компьютерной технологии является интегрированным хотя бы по пользовательскому интерфейсу и по данным. Основными инструментами такого рабочего места являются: • конструкторы пользовательских интерфейсов; • инструмент работы со словарем именованных сущностей; • графические и тестовые редакторы спецификаций; • анализаторы спецификаций; • генератор программ; • документаторы.
6. Инструментальные системы технологии программирования. Инструментальная система технологии программирования это интегрированная совокупность программных и аппаратных инструментов, поддерживающая все процессы разработки и сопровож-дения больших ПС в течение всего его жизненного цикла в рамках определенной технологии. Выше уже отмечалось, что она помимо интегрированности обладает еще свойствами комплексности и ори-ентированности на коллективную разработку. Это означает, что она базируется на согласованности продукции технологических процессов. Тем самым, инструментальная система в состоянии обеспе-чить, по крайней мере, контроль полноты (комплектности) создаваемой документации (включая на-бор программ) и согласованности ее изменения (версионности). Поддержка инструментальной сис-темой фазы сопровождения ПС, означает, что она должна обеспечивать управление конфигурацией ПС. Кроме того, инструментальная система поддерживает управление работой коллектива и для раз-ных членов этого коллектива обеспечивает разные права доступа к различным фрагментам продук-ции технологических процессов и поддерживает работу менеджеров по управлению коллективом разработчиков. Инструментальные системы технологии программирования представляют собой дос-таточно большие и дорогие ПС, чтобы как-то была оправданна их инструментальная перегружен-ность. Поэтому набор включаемых в них инструментов тщательно отбирается с учетом потребностей предметной области, используемых языков и выбранной технологией программирова-ния. С учетом обсужденных свойств инструментальных систем технологии программирования можно выделить три их основные компоненты: • репозиторий, • инструментарий, • интерфейсы. Инструментарий набор инструментов, определяющий возможности, предоставляемые систе-мой коллективу разработчиков. Обычно этот набор является открытым и структурированным. Помимо минимального набора (встроенные инструменты), он содержит средства своего расширения (импортированными инструментами). Кроме того, в силу интегрированности по действиям он состоит из некоторой общей части всех инструментов (ядра) и структурных (иногда иерархически связанных) классов инструментов. Интерфейсы разделяются на пользовательский и системные. Пользовательский интерфейс обес-печивает доступ разработчикам к инструментарию. Он реализуется оболочкой системы. Системные интерфейсы обеспечивают взаимодействие между инструментами и их общими частями. Системные интерфейсы выделяются как архитектурные компоненты в связи с открытостью системы их обяза-ны использовать новые (импортируемые) инструменты, включаемые в систему.
Различают два класса инструментальных систем технологии программирования: инструменталь-ные системы поддержки проекта и языково-зависимые инструментальные системы. Инструментальная система поддержки проекта это открытая система, способная поддержи-вать разработку ПС на разных языках программирования после соответствующего ее расширения программными инструментами, ориентированными на выбранный язык. Набор инструментов такой системы поддерживает разработку ПС, а также содержит независимые от языка программирования инструменты, поддерживающие разработку ПС (текстовые и графические редакторы, генераторы от-четов и т.п.). Кроме того, он содержит инструменты расширения системы. Ядро такой системы обес-печивает, в частности, доступ к репозиторию. Языково-зависимая инструментальная система это система поддержки разработки ПС на ка-ком-либо одном языке программирования, существенно использующая в организации своей работы специфику этого языка. Эта специфика может сказываться и на возможностях ядра (в том числе и на структуре репозитория), и на требованиях к оболочке и инструментам. Примером такой системы яв-ляется среда поддержки программирования на Аде (APSE).