Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
systems_engineering_thinking_2015.pdf
Скачиваний:
384
Добавлен:
28.03.2016
Размер:
8 Мб
Скачать
☆

Системноинженерное мышление

TechInvestLab, 2 апреля 2015

182

правильно изготовлен «чёрный ящик», приёмки – это насколько использование целевой системы позволяет пользователю добиться целевого поведения от using system. Test driven development – это когда разработка системы начинается с того, что требования разрабатываются сразу в виде тестов (исполняемых!). Увы, качество разработки по TDD получается примерно такое же, как и при любых других видах разработки – что не снижает популярности этого подхода.

Требования как правило разрабатываются с помощью сценариев (use cases), в которых рассказывается, что делает система в ответ на последовательности действий (сценарии) с участием разных стейкхолдеров. Более простая форма – user story, в которых рассказывается, что делают стейкхолдеры с системой (а не что делает система!).

Самая простая форма моделеориентированности – это использовать user story в

формулировках по шаблону (Mike Cohn, 2008, Advantages of the “As a user, I want” user story template, blog post, http://www.mountaingoatsoftware.com/blog/advantages-of-the-as-a-user-i-want-user- story-template): Я как __стейкхолдер__ хочу, чтобы система ___формулировка требования___, для того чтобы ___хотелка-для-using-system___.

Архитектура

Системная архитектура — эта альфа, пожалуй, важнейшая среди подальф определения системы. Она была сформулирована по мотивам строительной архитектуры относительно недавно (лет эдак двадцать назад) и имеет множество определений:

●Из ISO 42010: Архитектура (системы) – основные понятия или свойства системы в её среде, заключающиеся в её элементах, их отношениях и принципах её проектирования и развития (Architecture (of a system) – fundamental concepts or properties of a system in its environment embodied in its elements, relationships, and in the principles of its design and evolution).

●Из книги Garlan et al.: Архитектура системы это набор структур, необходимых для рассуждений о системе, каковые структуры состоят из элементов, отношений и свойств этих элементов и отношений (The architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both).

●Набор из более чем 150 других определений архитектуры, которые предлагались профессионалами системной и программной инженерии: http://www.sei.cmu.edu/architecture/start/glossary/community.cfm

После одной из затяжных интернет-дискуссий по архитектуре в программной инженерии Ralf Johnson выдал альтернативное определение: “Архитектура — это обо всём важном. Что бы это ни было”. А что можно считать важным в инженерной системе? Если представить архитектуру как набор инженерных решений, принимаемых для определения структуры системы, то “важные решения” — это при изменении которых приходится в существенной мере изменять множество других решений, в существенной мере перепроектировать систему. Если вместо двигателя внутреннего сгорания на автомобиль поставить электромоторы, то автомобиль придётся перепроектировать практически заново (хотя что-то из неархитектурных решений может и остаться: оплётка руля, стекло на дверцах, фары). Следовательно, выбор между двигателем внутреннего сгорания и электродвигателем в ходе создания автомобиля — это архитектурное решение.

Системноинженерное мышление

TechInvestLab, 2 апреля 2015

183

Книга Paul Clements, et al. “Documenting Software Architectures” упоминается в литературе к стандарту архитектурных описаний ISO 42010. Она предлагает метафору для понимания того, что такое архитектурное описание и почему его так трудно сделать: как документировать крыло птицы для того, кто не знает, что это такое? Там ведь огромное количество разноуровневых структур, повторения с вариациями, критические для полёта качества элементов и свойства крыла, невыводимые из свойств отдельных его частей. Как записать все эти структуры, в которых каждое перо неповторяемо в его даже самых маленьких деталях, есть множество особенностей костей и мышц, но все они в совокупности дают функцию полёта?

Архитектура — это основные описания “прозрачного ящика”, которые показывают, из каких основных частей (компонент, модулей, размещений и т.д.) состоит система, и как эти описания “прозрачного ящика” обеспечивают функцию “чёрного ящика”.

Итого: важно, какие типы структур системы документируются (например — структуры компонент/принципиальные схемы, модули и их интерфейсы, размещения и т.д.), какие принципы проектирования/конструирования и развития документируются.

Кем и для чего используются архитектурные описания, подготавливаемые практикой инженерии системной архитектуры? Прежде всего — командой проекта для обсуждений системы. Архитектурные описания для инженеров как шахматная доска для игроков в шахматы — это гроссмейстеры могут играть “в уме”, а простые люди предпочитают вести сложные рассуждения не в кортексе (коре головного мозга), а с использованием экзокортекса, тем более при командной работе. Команда поможет также убрать ошибки: эти ошибки трудно заметить, если обсуждаемые важные инженерные решения не задокументированы, если отсутствуют архитектурные описания, а решения только проговариваются вслух (а иногда ведь решения даже не проговариваются — их принимает кто-то один, а другие о принятии этих решений и их важности и не догадываются!).

Особенно полезна архитектура для рассуждений по «требованиям качества» («- ости»: надёжность, ремонтопригодность, безопасность и т.д.). Именно в ходе

Системноинженерное мышление

TechInvestLab, 2 апреля 2015

184

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

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

Архитектурные описания также помогают разъяснять принимаемые по поводу целевой системы инженерные решения для внешних по отношению к команде стейкхолдеров («шахматная доска для зрителей и судей»).

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

Инженерия системной архитектуры

Практика создания системной архитектуры получила название “инженерия системной архитектуры”. Конечно, у этой практики есть и множество других названий: architecturing (архитектурирование — но так по-русски говорят редко), эскизное проектирование (conceptual design). Инженерия системной архитектуры представляет собой часть в архитектурном проектировании (architecturing design), хотя в это проектирование входит создание всего проекта (design), в том числе и неархитектурной его части.

Создание системной архитектуры подразумевает синтез самых разных описаний целевой системы и прямой инженерный творческий процесс (в отличие от реверсинжиниринга, т.е. “обратной инженерии” использующей системы в инженерии требований. Реверс-инжиниринг считается главным образом аналитической практикой — т.е. практикой не придумывания, а выявления/discovery описаний, в чём-то сродного научной работе, а не инженерной).

Как и любое определение системы, архитектура у системы есть всегда, но не всегда при разработке тщательно делаются архитектурные описания. Часто это «устная архитектурная традиция» — и тогда архитектуру называют “заделы”, “опыт”, “наработки” (обычно при произнесении этих слов как раз и имеются ввиду важные инженерные решения, каковы бы они ни были). Часто архитектурные решения передаются из уст в уста, как «народный эпос».

Более того, раньше при наличии требований и существовании этого “народного эпоса” часто переходили непосредственно к проектированию и конструированию, не документируя принятых важнейших решений — особенно, когда эти решения принимались методом “проб и ошибок”. Архитектурное знание не накапливалось, и не обсуждалось, ибо не было документировано. Сейчас же принято документирование архитектурного знания, поэтому “проектирование” всё чаще называют “архитектурным проектированием” (например, в стандарте ISO 15288 практик жизненного цикла системной инженерии нет практики “проектирования”, а есть именно практика “архитектурного проектирования”).

Системноинженерное мышление

TechInvestLab, 2 апреля 2015

185

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

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

Практики архитектурного проектирования

Их множество (см. обзор в первой главе книги М.Левина «Технология поддержки решений для модульных систем»: http://www.mslevin.iitp.ru/Levin-bk-Nov2013- 071.pdf). У всех них один «недостаток»: хорошему инженеру эти методы помогают, плохому инженеру они помочь не могут.

Наиболее известен ТРИЗ

(http://ru.wikibooks.org/wiki/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B _%D0%A2%D0%A0%D0%98%D0%97, можно начинать с проглядывания трёх текстов: АРИЗ-85В http://www.triz-ri.ru/triz/triz02.asp, типовых приёмов разрешения противоречий http://www.triz-ri.ru/triz/triz04.asp и стандартных решений изобретательских задач) как метод совмещения логической и физической архитектур.

DSM (http://www.dsmweb.org/) чаще всего используется как метод разбиения системы на модули.

ТРИЗ и DSM практикуются во многих центрах разработки. Но есть огромное число методов, практикующихся в рамках одного-двух университетских или промышленных исследовательских центров/лабораторий (реже – центров разработки).

Все более и более распространены архитектурные расчёты, в которых принципиальная схема “живая” и по ней можно вести мультифизические расчёты. Вот пример такой архитектурной модели привода на акаузальном языке мультифизического моделирования Modelica (https://modelica.org/ — там тонны материала, разберитесь! Бесплатный софт для Modelica —

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]