Лекция 2. Введение в системную инженерию

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

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

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

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

Такие взаимоотношения между компонентами системы означают, что система представляет собой больше, чем простая сумма ее частей — она имеет свойства, принадлежащие только системе в целом. Такие свойства называют производными или возникающими (emergent).

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

Для системных программистов необходимо какое-то знание вопросов CBSE, так как ПО приобретает все большее и большее значение в реальных системах. Например, в американском проекте Apollo 1969 года потребовалось всего 10 мегабайт кода для того, чтобы поддержать аппаратуру при полете на Луну. Сегодня же программное обеспечение американского орбитального комплекса составляет 100 мегабайт. Поэтому системное программирование становится критичным для успеха всей системы.

Производные свойства системы

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

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

При этом на надежность системы влияет целый ряд факторов:

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

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

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