Предисловие
Предлагаемый вниманию читателей курс лекций построен на основе специального курса, читающегося на факультете Вычислительной математики и кибернетики МГУ им. М. В. Ломоносова. Он был задуман как замена и некоторая модернизация курса по технологии
программирования, долгое время читавшегося на ВМиК ныне покойным Е. А. Жоголевым и являвшегося введением в инженерию программного обеспечения (ПО).
Но, кроме введения в программную инженерию, автор посчитал необходимым в рамках этого же курса дать слушателям базовый набор знаний по современным компонентным технологиям разработки Web-приложений.
Таким образом, данные лекции преследуют две цели — введение в инженерию ПО в целом как инженерную дисциплину, рассматривающую методы построения сложных программных систем вообще, и введение в современные технологии разработки наиболее широко востребованного сейчас вида компонентных распределенных программных систем. Автор глубоко убежден в необходимости такого объединения. Компонентные технологии, хотя и продолжают активно развиваться, уже сейчас являются стержневым элементом современной программной инженерии. Они не только лежат в основе методов разработки прикладного ПО, но проникают и в системное программирование. Знание основных принципов работы широко используемых систем промежуточного уровня (middleware) и умение строить приложения на их основе в настоящий момент становится таким же необходимыми элементом образования профессионального разработчика программ, как и знания в области операционных систем, компиляторов и систем управления базами данных.
Данный курс не претендует на полное изложение знаний в области программной инженерии. Это скорее попытка обзора основных технологических элементов, из которых складывается процесс промышленной разработки сложных программ в современной практике. Рассматриваются модели жизненного цикла ПО в целом, деятельности, связанные с анализом предметной области и требований, обеспечением качества ПО, разработкой архитектуры ПО и отдельных компонентов, разработкой пользовательского интерфейса, а также современные языки компонентноориентированной разработки и проблемы управления проектами разработки ПО.
Вкаждой из этих областей представлены основные задачи, встающие перед участниками разработки, и одна-две техники, используемые для их решения на практике. Кроме того, рассматриваются такие важные элементы системы знаний опытного разработчика программ, как образцы анализа, проектирования и процессов, компонентные технологии разработки, техники создания распределенных приложений.
Врезультате кому-то может показаться, что представленный материал чересчур велик, а комуто — что он слишком поверхностно освещает перечисленные области. И то, и другое может быть близко к истине, поскольку не все задуманное удается. Однако, по мнению автора, такая структура курса хорошо отражает современное состояние инженерии программного обеспечения — бурно развивающейся инженерной дисциплины, активно впитывающей в себя и использующей результаты множества смежных областей, от математики и системного анализа до микроэкономики, когнитивной психологии и социологии малых сообществ. Вместить материал всех ее отдельных областей в одну книгу уже невозможно — любой из них можно посвятить отдельный курс. Читателям, желающим более глубоко ознакомиться с их содержанием, автор советует обратиться к литературе, списками которой он постарался дополнить каждую лекцию.
Схема зависимостей между лекциями курса представлена на Рис. 1. Сплошными стрелками показано, на материал каких лекций опирается данная, а пунктирные стрелки изображают более слабые связи, которые могут быть проигнорированы при первом изучении лекций.
Автор желает читателям, приступающим к изучению инженерии ПО для использования полученных знаний на практике, успехов на этом поприще, а тем, кто просто интересуется этим предметом, — чтобы их интерес не был остужен разочарованием, а принес бы достойные плоды в каком угодно виде.
Yandex.RTB R-A-252273-3- Предисловие
- Лекция 1. Проблемы разработки сложных программных систем
- Программы «большие» и «маленькие»
- Принципы работы со сложными системами
- Литература к Лекции 1
- Лекция 2. Жизненный цикл и процессы разработки ПО
- Понятие жизненного цикла ПО
- Модели жизненного цикла
- «Тяжелые» и «легкие» процессы разработки
- Унифицированный процесс Rational
- Экстремальное программирование
- Лекция 4. Анализ предметной области и требования к ПО
- Анализ предметной области
- Выделение и анализ требований
- Литература к Лекции 4
- Лекция 5. Качество ПО и методы его контроля
- Качество программного обеспечения
- Методы контроля качества
- Ошибки в программах
- Лекция 6. Архитектура программного обеспечения
- Анализ области решений
- Архитектура программного обеспечения
- Разработка и оценка архитектуры на основе сценариев
- Литература к Лекции 6
- Лекция 7. Образцы проектирования
- Образцы человеческой деятельности
- Многоуровневая система
- Литература к Лекции 7
- Лекция 8. Образцы проектирования (продолжение)
- Данные–представление–обработка
- Идиомы
- Шаблонный метод
- Образцы организации и образцы процессов
- Литература к Лекции 8
- Понятность
- Методы разработки удобного программного обеспечения
- Лекция 10. Основные конструкции языков Java и C#
- Платформы Java и .NET
- Целочисленные типы
- Инструкции и выражения
- Выражения
- Наследование
- Шаблонные типы и операции
- Описание метаданных
- Средства создания многопоточных программ
- Основные понятия компонентных технологий
- Общие принципы построения распределенных систем
- Лекция 13. Компонентные технологии разработки Web-приложений
- Web-приложения
- Платформа Java 2 Enterprise Edition
- Именование
- Работа с XML
- Отказоустойчивость
- Защита
- Работа с XML
- Литература к Лекции 13
- Уровень бизнес-логики и модели данных в J2EE
- Компоненты, управляемые сообщениями
- Уровень модели данных в .NET
- Уровень пользовательского интерфейса в J2EE
- Уровень пользовательского интерфейса в .NET
- Лекция 15. Развитие компонентных технологий
- Развитие технологий J2EE
- Java Data Objects
- Enterprise Java Beans 3.0
- Среда Spring
- Защита
- Литература к Лекции 15
- Лекция 16. Управление разработкой ПО
- Задачи управления проектами
- Окружение проекта
- Структура организации-исполнителя проекта
- Управление рисками