7
Предисловие
Предлагаемый вниманию читателей курс лекций построен на основе специального курса,
читающегося на факультете Вычислительной математики и кибернетики МГУ
им. М. В. Ломоносова. Он был задуман как замена и некоторая модернизация курса по технологии
программирования, долгое время читавшегося на ВМиК ныне покойным Е. А. Жоголевым и
являвшегося введением в инженерию программного обеспечения
(ПО).
Но, кроме введения в программную инженерию, автор посчитал необходимым в рамках этого
же курса дать слушателям базовый набор знаний по современным компонентным технологиям
разработки Web-приложений.
Таким образом, данные лекции преследуют две цели — введение в инженерию ПО в целом как
инженерную дисциплину, рассматривающую методы построения сложных программных систем
вообще, и введение
в современные технологии разработки наиболее широко востребованного
сейчас вида компонентных распределенных программных систем. Автор глубоко убежден в
необходимости такого объединения. Компонентные технологии, хотя и продолжают активно
развиваться, уже сейчас являются стержневым элементом современной программной инженерии.
Они не только лежат в основе методов разработки прикладного ПО, но проникают и в системное
программирование. Знание основных принципов работы широко используемых систем
промежуточного уровня (middleware) и умение строить приложения на их основе в настоящий
момент становится таким же необходимыми элементом образования профессионального
разработчика программ, как и знания в области операционных систем, компиляторов и систем
управления базами данных.
Данный курс не претендует на полное изложение знаний в
области программной инженерии.
Это скорее попытка обзора основных технологических элементов, из которых складывается
процесс промышленной разработки сложных программ в современной практике. Рассматриваются
модели жизненного цикла ПО в целом, деятельности, связанные с анализом предметной области и
требований, обеспечением качества ПО, разработкой архитектуры ПО и отдельных компонентов,
разработкой пользовательского интерфейса, а также
современные языки компонентно-
ориентированной разработки и проблемы управления проектами разработки ПО.
В каждой из этих областей представлены основные задачи, встающие перед участниками
разработки, и одна-две техники, используемые для их решения на практике. Кроме того,
рассматриваются такие важные элементы системы знаний опытного разработчика программ, как
образцы анализа, проектирования и процессов, компонентные
технологии разработки, техники
создания распределенных приложений.
В результате кому-то может показаться, что представленный материал чересчур велик, а кому-
то — что он слишком поверхностно освещает перечисленные области. И то, и другое может быть
близко к истине, поскольку не все задуманное удается. Однако, по мнению автора, такая структура
курса хорошо отражает современное
состояние инженерии программного обеспечения — бурно
развивающейся инженерной дисциплины, активно впитывающей в себя и использующей
результаты множества смежных областей, от математики и системного анализа до
микроэкономики, когнитивной психологии и социологии малых сообществ. Вместить материал
всех ее отдельных областей в одну книгу уже невозможно — любой из них можно посвятить
отдельный курс. Читателям
, желающим более глубоко ознакомиться с их содержанием, автор
советует обратиться к литературе, списками которой он постарался дополнить каждую лекцию.
Схема зависимостей между лекциями курса представлена на Рис. 1. Сплошными стрелками
показано, на материал каких лекций опирается данная, а пунктирные стрелки изображают более
слабые связи, которые могут быть проигнорированы при первом изучении
лекций.
Автор желает читателям, приступающим к изучению инженерии ПО для использования
полученных знаний на практике, успехов на этом поприще, а тем, кто просто интересуется этим
предметом, — чтобы их интерес не был остужен разочарованием, а принес бы достойные плоды в
каком угодно виде.