- •Список рисунков
- •Список таблиц
- •Предисловие
- •Лекция 1. Проблемы разработки сложных программных систем
- •Программы «большие» и «маленькие»
- •Принципы работы со сложными системами
- •Литература к Лекции 1
- •Лекция 2. Жизненный цикл и процессы разработки ПО
- •Понятие жизненного цикла ПО
- •Стандарты жизненного цикла
- •Группа стандартов ISO
- •Группа стандартов IEEE
- •Группа стандартов CMM, разработанных SEI
- •Модели жизненного цикла
- •Литература к Лекции 2
- •«Тяжелые» и «легкие» процессы разработки
- •Унифицированный процесс Rational
- •Экстремальное программирование
- •Литература к Лекции 3
- •Лекция 4. Анализ предметной области и требования к ПО
- •Анализ предметной области
- •Выделение и анализ требований
- •Варианты использования
- •Литература к Лекции 4
- •Лекция 5. Качество ПО и методы его контроля
- •Качество программного обеспечения
- •Методы контроля качества
- •Тестирование
- •Проверка на моделях
- •Ошибки в программах
- •Литература к Лекции 5
- •Лекция 6. Архитектура программного обеспечения
- •Анализ области решений
- •Архитектура программного обеспечения
- •Разработка и оценка архитектуры на основе сценариев
- •UML. Виды диаграмм UML
- •Статические диаграммы
- •Динамические диаграммы
- •Литература к Лекции 6
- •Лекция 7. Образцы проектирования
- •Образцы человеческой деятельности
- •Образцы анализа
- •Архитектурные стили
- •Каналы и фильтры
- •Многоуровневая система
- •Литература к Лекции 7
- •Лекция 8. Образцы проектирования (продолжение)
- •Данные–представление–обработка
- •Образцы проектирования
- •Подписчик
- •Идиомы
- •Шаблонный метод
- •Образцы организации и образцы процессов
- •Инспекция программ по Фагану
- •Литература к Лекции 8
- •Удобство использования программного обеспечения
- •Психологические и физиологические факторы
- •Человеку свойственно ошибаться
- •Скоростные показатели деятельности человека
- •Внимание человека
- •Понятность
- •Память человека
- •Разные категории пользователей
- •Методы разработки удобного программного обеспечения
- •Контроль удобства программного обеспечения
- •Литература к Лекции 9
- •Лекция 10. Основные конструкции языков Java и C#
- •Платформы Java и .NET
- •Лексика
- •Целочисленные типы
- •Типы чисел с плавающей точкой
- •Инструкции и выражения
- •Выражения
- •Наследование
- •Шаблонные типы и операции
- •Дополнительные элементы описания операций
- •Описание метаданных
- •Средства создания многопоточных программ
- •Библиотеки
- •Основные понятия компонентных технологий
- •Общие принципы построения распределенных систем
- •Синхронное и асинхронное взаимодействие
- •Транзакции
- •Литература к Лекции 12
- •Лекция 13. Компонентные технологии разработки Web-приложений
- •Web-приложения
- •Расширяемый язык разметки XML
- •Платформа Java 2 Enterprise Edition
- •Связь
- •Именование
- •Процессы и синхронизация
- •Целостность
- •Отказоустойчивость
- •Защита
- •Работа с XML
- •Платформа .NET
- •Связь
- •Именование
- •Процессы и синхронизация
- •Целостность
- •Отказоустойчивость
- •Защита
- •Работа с XML
- •Литература к Лекции 13
- •Общая архитектура Web-приложений
- •Уровень бизнес-логики и модели данных в J2EE
- •Компоненты данных и сеансовые компоненты
- •Компоненты, управляемые сообщениями
- •Дескрипторы развертывания компонентов EJB
- •Уровень модели данных в .NET
- •Протокол HTTP
- •Уровень пользовательского интерфейса в J2EE
- •Сервлеты
- •Серверные страницы Java
- •Уровень пользовательского интерфейса в .NET
- •Литература к Лекции 14
- •Лекция 15. Развитие компонентных технологий
- •Развитие технологий J2EE
- •Jakarta Struts
- •Java Server Faces
- •Управление данными приложения. Hibernate
- •Java Data Objects
- •Enterprise Java Beans 3.0
- •Среда Spring
- •Ajax
- •Web-службы
- •Описание интерфейса Web-служб
- •Связь
- •Именование
- •Процессы
- •Синхронизация и целостность
- •Отказоустойчивость
- •Защита
- •Литература к Лекции 15
- •Лекция 16. Управление разработкой ПО
- •Задачи управления проектами
- •Окружение проекта
- •Структура организации-исполнителя проекта
- •Организационная культура
- •Заинтересованные в проекте лица
- •Виды деятельности, входящие в управление проектом
- •Управление содержанием проекта и качеством
- •Метрики ПО
- •Управление ресурсами
- •Специфика управления персоналом
- •Управление рисками
- •Управление коммуникациями и информационным обеспечением
- •Литература к Лекции 16
Предисловие
Предлагаемый вниманию читателей курс лекций построен на основе специального курса, читающегося на факультете Вычислительной математики и кибернетики МГУ им. М. В. Ломоносова. Он был задуман как замена и некоторая модернизация курса по технологии
программирования, долгое время читавшегося на ВМиК ныне покойным Е. А. Жоголевым и являвшегося введением в инженерию программного обеспечения (ПО).
Но, кроме введения в программную инженерию, автор посчитал необходимым в рамках этого же курса дать слушателям базовый набор знаний по современным компонентным технологиям разработки Web-приложений.
Таким образом, данные лекции преследуют две цели — введение в инженерию ПО в целом как инженерную дисциплину, рассматривающую методы построения сложных программных систем вообще, и введение в современные технологии разработки наиболее широко востребованного сейчас вида компонентных распределенных программных систем. Автор глубоко убежден в необходимости такого объединения. Компонентные технологии, хотя и продолжают активно развиваться, уже сейчас являются стержневым элементом современной программной инженерии. Они не только лежат в основе методов разработки прикладного ПО, но проникают и в системное программирование. Знание основных принципов работы широко используемых систем промежуточного уровня (middleware) и умение строить приложения на их основе в настоящий момент становится таким же необходимыми элементом образования профессионального разработчика программ, как и знания в области операционных систем, компиляторов и систем управления базами данных.
Данный курс не претендует на полное изложение знаний в области программной инженерии. Это скорее попытка обзора основных технологических элементов, из которых складывается процесс промышленной разработки сложных программ в современной практике. Рассматриваются модели жизненного цикла ПО в целом, деятельности, связанные с анализом предметной области и требований, обеспечением качества ПО, разработкой архитектуры ПО и отдельных компонентов, разработкой пользовательского интерфейса, а также современные языки компонентноориентированной разработки и проблемы управления проектами разработки ПО.
Вкаждой из этих областей представлены основные задачи, встающие перед участниками разработки, и одна-две техники, используемые для их решения на практике. Кроме того, рассматриваются такие важные элементы системы знаний опытного разработчика программ, как образцы анализа, проектирования и процессов, компонентные технологии разработки, техники создания распределенных приложений.
Врезультате кому-то может показаться, что представленный материал чересчур велик, а комуто — что он слишком поверхностно освещает перечисленные области. И то, и другое может быть близко к истине, поскольку не все задуманное удается. Однако, по мнению автора, такая структура курса хорошо отражает современное состояние инженерии программного обеспечения — бурно развивающейся инженерной дисциплины, активно впитывающей в себя и использующей результаты множества смежных областей, от математики и системного анализа до микроэкономики, когнитивной психологии и социологии малых сообществ. Вместить материал всех ее отдельных областей в одну книгу уже невозможно — любой из них можно посвятить отдельный курс. Читателям, желающим более глубоко ознакомиться с их содержанием, автор советует обратиться к литературе, списками которой он постарался дополнить каждую лекцию.
Схема зависимостей между лекциями курса представлена на Рис. 1. Сплошными стрелками показано, на материал каких лекций опирается данная, а пунктирные стрелки изображают более слабые связи, которые могут быть проигнорированы при первом изучении лекций.
Автор желает читателям, приступающим к изучению инженерии ПО для использования полученных знаний на практике, успехов на этом поприще, а тем, кто просто интересуется этим предметом, — чтобы их интерес не был остужен разочарованием, а принес бы достойные плоды в каком угодно виде.
7
Лекция 1 |
|
Лекция 2 |
|
Лекция 3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Лекция 4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Лекция 5 |
|
Лекция 9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Лекция 6 |
|
Лекция 7 |
|
Лекция 8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Лекция 16 |
|
Лекция 12 |
|
|
|
Лекция 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Лекция 13 |
|
|
|
Лекция 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Лекция 15 |
|
Лекция 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Рисунок 1. Схема зависимостей между лекциями.
Автор хотел бы также поблагодарить за разнообразную помощь в создании этого курса следующих людей: А. К. Петренко за саму идею курса, его же и В. П. Иванникова за предоставленную возможность сделать такой курс и поддержку при работе над ним, А. В. Баранцева за ценные советы по содержанию отдельных лекций, О. Л. Петренко за собранные ею материалы для Лекции 4 и многочисленные полезные замечания по другим лекциям,
А. А. Сортова за вычитывание всех лекций, множество замечаний и устранение огромного количества ошибок, представителя издательства А. В. Шкреда за проявленное понимание и терпение, с которым он относился к постоянным задержкам со стороны автора при подготовке курса.
8