Опубликован: 03.02.2016 | Доступ: свободный | Студентов: 1332 / 259 | Длительность: 07:40:00
Лекция 3:

Разработка архитектуры программного обеспечения. Аналитический синтез информации

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Аннотация: В лекции будет продолжено подробное рассмотрение функциональных и не функциональных требований к архитектуре программных продуктов и характеристик, которые мы получим в результате фиксации, анализа и представления требований в процессе архитектурного проектирования. Захватим обзор требований, не учтенных нами до сих пор, но важных для конечного программного продукта. Установим зависимости и связи между освещенными группами требований. Также в конце лекции мы планируем рассказать о рисках, возникновение которых возможно в процессе разработки программного продукта. Их потенциальное появление будет непосредственно связано с выбранной реализацией функционала. Информация, изложенная в данной лекции, важна с точки зрения синтеза накопленной к текущему моменту информации по архитектуре и архитектурному проектированию. Способность целостно взглянуть на имеющиеся данные и связать разнородные куски информации в единую картину будущего решения, позволяет создать по-настоящему качественную и оптимальную архитектуру программного приложения.

Цель: мы планируем подвести итоги рассмотрения области требований и их таксономии, подытожив их комплексной информацией по данной активности.

Изложенная информация будет являться базисом для тех коллег, которые затем изъявят желание расширить свои компетенции в направлении инженерии требований.

Сегодняшняя лекция будет способствовать развитию навыков, которые обеспечат будущим системным архитекторам и заинтересованным коллегам необходимые профессиональные качества для управления процессами создания обоснованных и оптимальных архитектур программных продуктов.

Введение

Сегодняшняя тема выдвигает особые требования к содержанию лекции. С одной стороны, надлежащее представление обозначенного содержания является довольно трудной и амбициозной задачей, но с другой, ради поставленных целей, каждому из нас придется соответствующим образом взглянуть на имеющийся у него информационный багаж, профессиональные навыки и, при необходимости, переосмыслить и пересмотреть их.

Что же планируем изучить?

На сегодня мы накопили определенный объем данных, который должен быть использован на благо домену информационных технологий в области проектирования и разработки архитектур программных продуктов (а может и не только). Но, пока что мы рассуждали только о различных активностях, объектах, связях по отдельности.

Настала стадия курса, когда накопленная информация должна перейти на качественно новый виток. Под этим переходом подразумевается возможность и желание взглянуть на имеющиеся данные с точки зрения их комплексного рассмотрения в виде единой системы неразрывных причинно-следственных связей, каждая из которых оказывает определенное влияние не только на смежные с ней части информационной системы, а на архитектуру в целом.

Подобное "рабочее" мировоззрение формирует не только целостно-комплексное отношение к любой задаче, но и делает возможным профессионально, с адекватными экспертными оценками, выполнять управление соответствующей деятельностью.

Как мы отмечали ранее, документирование архитектуры - это не просто формальная активность в процессах создания программных продуктов, а направление, в ходе которого создаются артефакты программного продукта, позволяющие сопровождать весь жизненный цикл программного продукта и создавать архитектуру и функциональность заданного качества, в соответствии с ресурсами, выделенными на это. Надлежащее документирование информационных систем является определенным показателем продуманности, а соответственно и эффективности по сравнению с недокументированными решениями в силу того, что сам процесс документирования архитектуры ведет к комплексному обдумыванию того, что находится в фокусе работы.

Если программная архитектура не подкреплена актуальными документами, а её реальные характеристики существуют только в виде "устных преданьев", то доказать адекватность характеристик, разработанных на базе требований, представляется затруднительным и неблагодарным трудом.

Влияние стандартов на процессы архитектурного проектирования

Осмысленная разработка программных продуктов - комплексное понятие, состоящее из множества высокоинтеллектуальных и взаимосвязанных процессов, таких как:

  • Анализ требований;
  • Проектирование;
  • Кодирование;
  • Тестирование;
  • И т. д;

Каждая из обозначенных активностей должна основываться на базе соответствующих стандартов и лучших практик. Дело в том, что подобный тип документов создается на основе наиболее успешного опыта применения специфического вида деятельности, рабочей технологии или артефактов, эталонное описание которых он содержит. Стандарт концентрирует все лучшее и наиболее эффективное, с точки зрения практического достижения конечного результата, подтвержденного массивом статистических данных.

Перед тем как внедрять стандарты в процессы конкретной организации, следует соответствующим образом адаптировать их под реалии конкретной организации.

Должны быть учтены такие аспекты, как:

  • Ресурсная база организации;
    • Количество выделенных для деятельности ресурсов, их доступность, квалификация (если речь идет о специалистах), надежность и т.д.
  • Сегмент/домен/направление деятельности компании;
    • Сфера деятельности, с учетом специфических требований к ним со стороны отраслевых/государственных/международных регуляторных органов;
  • Степень влияния информационных технологий на поддержку и развитие бизнеса ;
    • Инновационность компании и степень участия в инновациях информационных технологий;
  • И т. д;

Если тема применения и использования стандартов в целях повышения эффективности деятельности Вас заинтересовала, то мы рекомендуем обратиться к моделям зрелости CMMI, методологии SPICE и другим подобным документам. В настоящей лекции мы больше к данному аспекту, влияющему на качество архитектуры и архитектурного проектирования, возвращаться не будем.

Перечень стандартов и их содержание на конкретном предприятии должно определяться на стадии планирования.

В момент планирования перечня стандартов, который действительно необходим, целесообразно руководствоваться принципом "золотой середины". Чрезмерное количество внедряемых стандартов требует достаточно большого количества ресурсов. Следует осознавать – внедрение стандарта делает процесс более унифицированным и качественным за счет его регламентации, но при этом, в отдельных аспектах, понижает степень его гибкости. Если компания пришла к пониманию необходимости внедрения определенной практики или стандарта эволюционным путем, то это облегчает и упрощает процесс внедрения и использования соответствующего регламента. Если изменения носят революционный характер, то попытка привнести в организацию избыточное количество стандартов может носить катастрофический характер и остаться "на бумаге", что не является целью их внедрения.

Стандартизация должна обеспечить постепенное повышение качества конкретных процессов (анализ, документирование, кодирование и т.д.), обеспечить прозрачность, однозначность и не противоречивость процессов, минимизацию или устранение появления возможных ошибок при разработке архитектур и программных продуктов.

В качестве отступления мы приведем следующий пример.

Требования к процедуре сертификации авиационных продуктов предусматривают, что в процессе разработки специфического (для авиационных нужд) программного обеспечения, должны использоваться как минимум три стандарта:

  • Стандарт на работу с требованиями;

    Должен описывать методы, правила и инструменты, применяемые для сбора, разработки и управления требованиями, их возможные форматы и нотации.

  • Стандарт на разработку архитектуры программного продукта;

    Содержит правила, формирующие архитектуру программного продукта, приемлемые и неприемлемые методы её разработки, описывает возможные функциональные и не функциональные ограничения (запрет на использование рекурсии или максимальная вложенность вызовов).

  • Стандарт процесса кодирования;

    Регламентирует исходный код программы, ссылки на описания используемого языка программирования, его синтаксис, ограничение, желательные и нежелательные конструкции языка и прочие правила, касающиеся разработки кода программы;

Стандарты определяют рабочие принципы, которые должны действовать на всем протяжении жизненного цикла программного продукта. Например, если в стандарте зафиксировано, что нельзя вставлять комментарии в программный код (комментарии следует располагать в строго определенном месте) то, все комментарии, расположенные не в соответствии с этим правилом, должны быть перенесены или удалены. Несоответствие принятым стандартам грозит возникновением потенциальных ошибок. Если стандарт по каким-то причинам не соблюдается, то все "нарушения" должны устраняться. Если стандарт требует доработок в связи с изменившимися первоначальными предпосылками его создания, то его необходимо либо дорабатывать, либо менять. Слепое следование стандартам губительно, так же, как и постоянные попытки обойти их по необоснованным причинам.

Проектирование архитектуры программных продуктов - это одна из активностей, для которых должны быть приняты определенные стандарты деятельности. При этом, современные требования к архитектурам предусматривают создание достаточно гибких и адаптивных архитектур.

Первое, "верхнеуровневое" проектирование, должно удовлетворять цели достаточно свободной и абстрактной реализации архитектуры, но при этом учитывать жесткие требования стандартов. Поэтому требования к программным продуктам принято делить на 2 типа критичности – высокоуровневые (функциональные) и низкоуровневые (нефункциональные) требования. Гибкость архитектур реализуется за счет разной степени принципиальности учета требований и их последующей реализации в программном коде будущих информационных систем. Требования к нефункциональным характеристикам должны быть более четкими и однозначными.

Типы требований мы уже немного обсуждали ранее и будем продолжать это делать по ходу нашего курса, изучая различные аспекты архитектур и архитектурного проектирования. Сейчас отметим, что подход к работе с ним должен быть также соответствующим образом стандартизован. За счет стандартов важно достичь согласованности между типами требований в момент их согласования друг с другом в виде отдельных компонентов архитектуры или программного продукта. Это позволит добиться непротиворечивого результата, в виде оптимальной архитектуры и эффективного программного обеспечения.

Большинство современных стандартов, описывающих работу с требованиями, выдвигают следующие характеристики, которым должен отвечать каждый из них:

  • Конкретность/измеримость;
  • Корректность/обоснованность;
  • Соответствие функциональности программного продукта;
  • Возможность последующей верификации;
  • Уникальность;
  • Последовательность;
  • Непротиворечивость;
  • Возможность декомпозиции;
  • Изменяемость с минимальными затратами;
  • Трассируемость;

На сегодняшний день существует множество программных продуктов, которые позволяют автоматизировать и унифицировать процесс разработки и последующего отслеживания требований. Применение специализированного инструментария, поддерживающего принятые стандарты, в большинстве случаев, положительно сказывается на качестве процессов архитектурного проектирования, разрабатываемых архитектурах и программных продуктов в целом, за счет того, что их использование позволяет выявить те программные компоненты и детали, которые подвержены изменениям меньше остальных. Именно они и составят основу разрабатываемых архитектур, которая будет наименее гибкой, а те требования, которые чаще других изменяются, будут лежать в основе достаточно гибкой функциональности.

Но изменения, иногда вносятся и в "скелет".

Принципиальное следование всем принятым стандартам возможно только тогда, когда речь идет об устоявшихся отлаженных процессах архитектурного проектирования и разработки информационных систем, которые достигли своей наивысшей точки качественного развития. Утопия.

Принципы и темп развития современного мира определяют его черты.

Программные продукты, как часть этих черт должны быть в состоянии поддерживать соответствующую динамику и темпы. Элементы информационных систем и их архитектура предназначены для удовлетворения требований к разрабатываемым продуктам. Стоит понимать, что требования не только могут изменяться, но и качественно трансформироваться, переходя из категории нефункциональных в функциональные и наоборот.

Можно привести следующий пример:

В случае, если речь идет о стадии внедрения ПО, то такая характеристика как сопровождаемость воспринимается пользователями, как некритичная и не значимая с их точки зрения, но как только начинается стадия промышленной эксплуатации программного продукта, затраты на его поддержку и развития сразу дают о себе знать. Хорошо, если компания имеет достаточный для этого ресурс, но если это не так, то поддержка процессов и соответствующего для их выполнения уровня данных "кочует" на плечи бизнес пользователей и сразу переходит в разряд функциональных.

Все вышесказанное явно свидетельствует о значимости и необходимости стандартизированного подхода к созданию новых, инновационных, прорывных информационных продуктов, которые в своей основе будут иметь надежные, качественные, производительные и масштабируемые архитектуры, которые позволят создавать функционально гибкие продукты.

Без четких, ясных требований к выполняемым функциям создать программное обеспечение невозможно. Требования – фундамент каждой разработки.

Процессы разработки должны начинаться с процесса разработки требований и вестись в соответствии с планом, корректируемым по "ходу".

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Геннадий Андреев
Геннадий Андреев
Россия
Артемий Соболев
Артемий Соболев
Россия, Томск, Томский политехнический университет, 2006