- •З курсу
- •З курсу
- •Содержание
- •Часть I. Инженерные основы программного обеспечения 10
- •Часть II. Требования к программному обеспечению 33
- •Часть III. Моделирование программного обеспечения 52
- •Часть IV. Технологии разработки программного обеспечения 124
- •Часть V. Письменная коммуникация. Документирование проекта Программного обеспечения 145
- •Часть VI. Управление проектом программного обеспечения 192
- •Предисловие
- •Часть I. Инженерные основы программного обеспечения
- •1. Введение в программную инженерию
- •1.1. Вопросы и ответы об инженерии программного обеспечения
- •1.2. Профессиональные и этические требования к специалистам по программному обеспечению
- •2. Системотехника вычислительных систем
- •2.1. Интеграционные свойства систем
- •2.2. Система и ее окружение
- •2.3. Моделирование систем
- •2.4. Процесс создания систем
- •2.5. Приобретение систем
- •3. Процесс создания программного обеспечения
- •3.1. Модели процесса создания программного обеспечения
- •3.2. Итерационные модели разработки программного обеспечения
- •3.3. Спецификация программного обеспечения
- •3.4. Проектирование и реализация программного обеспечения
- •3.5. Эволюция программных систем
- •3.6. Автоматизированные средства разработки программного обеспечения
- •4. Технологии производства программного обеспечения
- •Часть II. Требования к программному обеспечению
- •5. Требования к программному обеспечению
- •5.1. Функциональные и нефункциональные требования
- •5.2. Пользовательские требования
- •5.3. Системные требования
- •5.4. Документирование системных требований
- •6. Разработка требований
- •6.1. Анализ осуществимости
- •6.2. Формирование и анализ требований
- •6.3. Аттестация требований
- •6.4. Управление требованиям
- •7. Матрица требований. Разработка матрицы требований
- •Часть III. Моделирование программного обеспечения
- •8. Архитектурное проектирование
- •8.1. Структурирование системы
- •8.2. Модели управления
- •8.3. Модульная декомпозиция
- •8.4. Проблемно-зависимые архитектуры
- •9. Архитектура распределенных систем
- •9.1. Многопроцессорная архитектура
- •9.2. Архитектура клиент/сервер
- •9.3. Архитектура распределенных объектов
- •9.4. Corba
- •10. Объектно-ориентированное проектирование
- •10.1. Объекты и классы объектов
- •10.2. Процесс объектно-ориентированного проектирования
- •10.2.1. Окружение системы и модели ее использования
- •10.2.2. Проектирование архитектуры
- •10.2.3. Определение объектов
- •10.2.4. Модели архитектуры
- •10.2.5. Специфицирование интерфейсов объектов
- •10.3. Модификация системной архитектуры
- •11. Проектирование систем реального времени
- •11.1. Проектирование систем реального времени
- •11.2. Управляющие программы
- •11.3. Системы наблюдения и управления
- •11.4. Системы сбора данных
- •12. Проектирование с повторным использованием компонентов
- •12.1. Покомпонентная разработка
- •12.2. Семейства приложений
- •12.3. Проектные паттерны
- •13. Проектирование интерфейса пользователя
- •13.1. Принципы проектирования интерфейсов пользователя
- •13.2. Взаимодействие с пользователем
- •13.3. Представление информации
- •13.4. Средства поддержки пользователя
- •13.5. Оценивание интерфейса
- •Часть IV. Технологии разработки программного обеспечения
- •14. Жизненный цикл программного обеспечения: модели и их особенности
- •14.1. Каскадная модель жизненного цикла
- •14.2. Эволюционная модель жизненного цикла
- •14.2.1. Формальная разработка систем
- •14.2.2. Разработка программного обеспечения на основе ранее созданных компонентов
- •14.3. Итерационные модели жизненного цикла
- •14.3.1 Модель пошаговой разработки
- •14.3.2 Спиральная модель разработки
- •15. Методологические основы технологий разработки программного обеспечения
- •16. Методы структурного анализа и проектирования программного обеспечения
- •17. Методы объектно-ориентированного анализа и проектирования программного обеспечения. Язык моделирования uml
- •Часть V. Письменная коммуникация. Документирование проекта Программного обеспечения
- •18. Документирование этапов разработки программного обеспечения
- •19. Планирование проекта
- •19.1 Уточнение содержания и состава работ
- •19.2 Планирование управления содержанием
- •19.3 Планирование организационной структуры
- •19.4 Планирование управления конфигурациями
- •19.5 Планирование управления качеством
- •19.6 Базовое расписание проекта
- •20. Верификация и аттестация программного обеспечения
- •20.1. Планирование верификации и аттестации
- •20.2. Инспектирование программных систем
- •20.3. Автоматический статический анализ программ
- •20.4. Метод "чистая комната"
- •21. Тестирование программного обеспечения
- •21.1. Тестирование дефектов
- •21.1.1. Тестирование методом черного ящика
- •21.1.2. Области эквивалентности
- •21.1.3. Структурное тестирование
- •21.1.4. Тестирование ветвей
- •21.2. Тестирование сборки
- •21.2.1. Нисходящее и восходящее тестирование
- •21.2.2. Тестирование интерфейсов
- •21.2.3. Тестирование с нагрузкой
- •21.3. Тестирование объектно-ориентированных систем
- •21.3.1. Тестирование классов объектов
- •21.3.2. Интеграция объектов
- •21.4. Инструментальные средства тестирования
- •Часть VI. Управление проектом программного обеспечения
- •22. Управление проектами
- •22.1. Процессы управления
- •22.2. Планирование проекта
- •22.3. График работ
- •22.4. Управление рисками
- •23. Управление персоналом
- •23.1. Пределы мышления
- •23.1.1. Организация человеческой памяти
- •23.1.2. Решение задач
- •23.1.3. Мотивация
- •23.2. Групповая работа
- •23.2.1. Создание команды
- •23.2.2. Сплоченность команды
- •23.2.3. Общение в группе
- •23.2.4. Организация группы
- •23.3. Подбор и сохранение персонала
- •23.3.1. Рабочая среда
- •23.4. Модель оценки уровня развития персонала
- •24. Оценка стоимости программного продукта
- •24.1. Производительность
- •24.2. Методы оценивания
- •24.3. Алгоритмическое моделирование стоимости
- •24.3.1. Модель сосомо
- •24.3.2. Алгоритмические модели стоимости в планировании проекта
- •24.4. Продолжительность проекта и наем персонала
- •25. Управление качеством
- •25.1. Обеспечение качества и стандарты
- •25.1.1. Стандарты на техническую документацию
- •25.1.2. Качество процесса создания программного обеспечения и качество программного продукта
- •25.2. Планирование качества
- •25.3. Контроль качества
- •25.3.1. Проверки качества
- •25.4. Измерение показателей программного обеспечения
- •25.4.1. Процесс измерения
- •25.4.2. Показатели программного продукта
- •26. Надежность программного обеспечения
- •26.1. Обеспечение надежности программного обеспечения
- •26.1.1 Критические системы
- •26.1.2. Работоспособность и безотказность
- •26.1.3. Безопасность
- •26.1.4. Защищенность
- •26.2. Аттестация безотказности
- •26.3. Гарантии безопасности
- •26.4. Оценивание защищенности программного обеспечения
- •27. Совершенствование производства программного обеспечения
- •27.1. Качество продукта и производства
- •27.2. Анализ и моделирование производства
- •27.2.1. Исключения в процессе создания по
- •27.3. Измерение производственного процесса
- •27.4. Модель оценки уровня развития
- •27.4.1. Оценивание уровня развития
- •27.5. Классификация процессов совершенствования
26.1.4. Защищенность
Это способность системы защищать себя от внешних случайных или преднамеренных воздействий. Примером внешних воздействий на систему могли бы быть компьютерные вирусы, несанкционированное использование системы, несанкционированное изменение системы или данных и т.д. Защищенность важна для всех критических систем. Без приемлемого уровня защищенности работоспособность, безотказность и безопасность системы теряют смысл, поскольку причиной повреждения системы могут быть внешние воздействия.
Это связано с тем, что все методы подтверждения работоспособности, безотказности и защищенности полагаются на неизменность системы при эксплуатации и на соответствие ее параметров первоначально установленным. Если установленная система была повреждена каким-то образом (например, если программное обеспечение было изменено в результате проникновения в систему вируса), то параметры надежности и безопасности, которые первоначально были заложены, не могут больше поддерживаться. В этом случае программное обеспечение может вести себя непредсказуемо.
Имеются определенные типы критических систем, для которых защищенность – наиболее важный показатель надежности системы. Военные системы, системы для электронной торговли и системы, включающие создание и обмен конфиденциальной информацией, должны разрабатываться с очень высоким уровнем защищенности. Например, если система резервирования билетов авиакомпании недоступна, это причиняет неудобство в связи с некоторой задержкой продажи билетов, но если система не защищена и может принимать поддельные заказы, то авиакомпания может понести большие убытки.
Существует три типа повреждений системы, которые могут быть вызваны внешними воздействиями.
1. Отказ в предоставлении системных сервисов. Система может быть переведена в такое состояние, когда нормальный доступ к системным сервисам становится невозможным. Очевидно, это отражается на работоспособности системы.
2. Разрушение программ и данных. Компоненты программного обеспечения системы могут быть несанкционированно изменены. Это может повлиять на поведение системы, а следовательно, на надежность и безопасность. Если повреждение серьезно, система может стать не пригодной к эксплуатации.
3. Раскрытие конфиденциальной информации. Информация, находящаяся под управлением системы, может быть конфиденциальной, внешнее проникновение в систему может сделать ее публично доступной. В зависимости от типа данных, это может повлиять на безопасность системы и вызвать дальнейшие изменения в системе, которые скажутся на ее работоспособности и безотказности.
Как и в случае с другими составляющими надежности, есть специальная терминология, связанная с защищенностью систем. Некоторые термины, приведены в табл. 26.3.
Таблица 26.3. Терминология защищенности
Термин |
Описание |
Внешнее воздействие |
Воздействие, в результате которого возможна потеря данных и/или повреждение системы |
Уязвимость |
Дефект системы, который может стать причиной потери данных или ее повреждения |
Атака |
Использование уязвимости системы |
Угрозы |
Обстоятельства, которые могут привести к потере данных или повреждению системы |
Контроль |
Защитные меры, уменьшающие уязвимость системы |
В терминологии защищенности есть много общего с терминологией безопасности. Так, внешнее воздействие аналогично аварии (несчастному случаю), а уязвимость – опасности. Следовательно, существуют аналогичные подходы, увеличивающие защищенность системы.
1 Предотвращение уязвимости. Система разрабатывается таким образом, чтобы ее уязвимость была как можно ниже. Например, система не соединяется с внешней сетью, чтобы избежать воздействия из нее.
2. Обнаружение и устранение атак. Система разрабатывается таким образом, чтобы обнаружить предпринятую на нее атаку и устранить ее, пока она не привела к повреждениям и потерям. Пример обнаружения атак и их устранения - использование антивирусных программ, которые анализируют поступающую информацию на наличие вирусов и устраняют их в случае проникновения в систему.
3. Ограничение последствий. Система разрабатывается таким образом, чтобы свести к минимуму последствия внешнего воздействия. Например, регулярная проверка системы и возможность переустановить ее в случае повреждения.
Защищенность становится еще более актуальной при подключении системы к Internet. И хотя Internet-связь обеспечивает дополнительные функциональные возможности системы (например, клиент может получить удаленный доступ к своему банковскому счету), такая система может быть разрушена злоумышленниками. При подключенности к Internet уязвимые места системы становятся доступными для большого количества людей, которые могут воздействовать на систему.
Очень важным атрибутом систем, подключенных к Internet, является их жизнеспособность т е. способность системы продолжать работать, в то время как она подвергается внешним воздействиям и часть ее повреждена. Жизнеспособность, конечно, связана и с защищенностью и с работоспособностью. Для обеспечения жизнеспособности следует определить основные ключевые компоненты системы, которые необходимы для ее функционирования. Для повышения жизнеспособности используется три стратегии: противодействие внешним воздействиям, распознавание их и восстановление системы после атаки. Здесь нет возможности охватить эту тему, но на Web-странице данной книги имеются ссылки на источники с информацией относительно исследования жизнеспособности систем.