Курс посвящен технологическим проблемам разработки крупномасштабных
программных систем и методам решения этих проблем. В нем
рассказывается о современных способах организации разработки таких
систем на основе компонентных технологий на примере Web-приложений
с использованием технологий Java и .NET, а также дается введение в
эти технологии. Читатели получат хорошее представление о методах
разработки сложного программного обеспечения, об использовании
современных подходов к промышленной разработке программ и о
способах построения качественных и гибких программ в условиях
жестких ограничений на проекты разработки. Читатели также
познакомятся с элементами технологий создания распределенных
приложений на платформах J2EE и .NET.
Предлагаемый вниманию читателей курс лекций построен на основе специального курса, читающегося на факультете Вычислительной математики и кибернетики МГУ им. М. В. Ломоносова. Он был задуман как замена и некоторая модернизация курса по технологии программирования, долгое время читавшегося на ВМиК ныне покойным Е. А. Жоголевым и являвшегося введением в инженерию программного обеспечения (ПО).
Но, кроме введения в программную инженерию, автор посчитал необходимым в рамках этого же курса дать слушателям базовый набор знаний по современным компонентным технологиям разработки Web-приложений.
Таким образом, данные лекции преследуют две цели — введение в инженерию ПО в целом как инженерную дисциплину, рассматривающую методы построения сложных программных систем вообще, и введение в современные технологии разработки наиболее широко востребованного сейчас вида компонентных распределенных программных систем. Автор глубоко убежден в необходимости такого объединения. Компонентные технологии, хотя и продолжают активно развиваться, уже сейчас являются стержневым элементом современной программной инженерии. Они не только лежат в основе методов разработки прикладного ПО, но проникают и в системное программирование. Знание основных принципов работы широко используемых систем промежуточного уровня (middleware) и умение строить приложения на их основе в настоящий момент становится таким же необходимыми элементом образования профессионального разработчика программ, как и знания в области операционных систем, компиляторов и систем управления базами данных.
Данный курс не претендует на полное изложение знаний в области программной инженерии. Это скорее попытка обзора основных технологических элементов, из которых складывается процесс промышленной разработки сложных программ в современной практике. Рассматриваются модели жизненного цикла ПО в целом, деятельности, связанные с анализом предметной области и требований, обеспечением качества ПО, разработкой архитектуры ПО и отдельных компонентов, разработкой пользовательского интерфейса, а также современные языки компонентно-ориентированной разработки и проблемы управления проектами разработки ПО.
В каждой из этих областей представлены основные задачи, встающие перед участниками разработки, и одна-две техники, используемые для их решения на практике. Кроме того, рассматриваются такие важные элементы системы знаний опытного разработчика программ, как образцы анализа, проектирования и процессов, компонентные технологии разработки, техники создания распределенных приложений.
В результате кому-то может показаться, что представленный материал чересчур велик, а кому-то — что он слишком поверхностно освещает перечисленные области. И то, и другое может быть близко к истине, поскольку не все задуманное удается. Однако, по мнению автора, такая структура курса хорошо отражает современное состояние инженерии программного обеспечения — бурно развивающейся инженерной дисциплины, активно впитывающей в себя и использующей результаты множества смежных областей, от математики и системного анализа до микроэкономики, когнитивной психологии и социологии малых сообществ. Вместить материал всех ее отдельных областей в одну книгу уже невозможно — любой из них можно посвятить отдельный курс. Читателям, желающим более глубоко ознакомиться с их содержанием, автор советует обратиться к литературе, списками которой он постарался дополнить каждую лекцию.
Содержание лекционного курса:
Лекция
1. Проблемы разработки сложных программных систем.
Рассматривается понятие сложной программы и отличия сложных программ от простых. Приводятся основные проблемы разработки сложных программ. В приложении к программной инженерии формулируются основные принципы работы со сложными системами, применимые к широкому кругу задач.
Лекция
2. Жизненный цикл и процессы разработки ПО.
Вводятся понятия жизненного цикла ПО и технологических процессов его разработки. Рассматриваются различные способы организации жизненного цикла ПО, каскадные и итеративные модели жизненного цикла, а также набор стандартов, регулирующих процессы разработки ПО в целом.
Лекция
3. Унифицированный процесс разработки и экстремальное программирование.
Рассматриваются в деталях модели разработки ПО, предлагаемые в рамках унифицированного процесса разработки Rational (RUP) и экстремального программирования (ХР).
Лекция
4. Анализ предметной области и требования к ПО.
Рассматриваются вопросы, связанные с анализом предметной области и выделением требований к разрабатываемой программной системе, а также основные графические модели, используемые в этих деятельностях диаграммы потоков данных и вариантов использования.
Лекция
5. Качество ПО и методы его контроля.
Рассматривается понятие качества ПО, характеристики и атрибуты качества, связь атрибутов качества с требованиями. Дается краткий обзор различных методов контроля качества ПО, с более детальным рассмотрением тестирования и проверки свойств на моделях.
Лекция
6. Архитектура программного обеспечения.
Рассматривается понятие архитектуры ПО, влияние архитектуры на свойства ПО, а также методы оценки архитектуры. Рассказывается об основных элементах унифицированного языка моделирования UML.
Лекция
7. Образцы проектирования.
Рассматривается понятие образца проектирования, классификация образцов проектирования и некоторые широко используемые примеры образцов анализа и архитектурных стилей.
Лекция
8. Образцы проектирования (продолжение).
Рассматриваются дополнительные примеры образцов: архитектурный стиль «данные— представление—обработка», ряд образцов проектирования, идиом и образцов организации работ.
Лекция
9. Принципы создания удобного пользовательского интерфейса.
Рассматриваются основные факторы удобства использования ПО, а также психо-физиологические особенности человека, делающие предметы удобными и неудобными для него. Рассказывается о методике проектирования, ориентированного на удобство использования.
Лекция
10. Основные конструкции языков Java и C# (продолжение).
Рассматриваются базовые элементы технологий Java и .NET и основные конструкции языков Java и C#. Рассказывается о лексике, базовых типах, выражениях и инструкциях обоих языков, а также о правилах описания пользовательских типов.
Лекция
12. Компонентные технологии и разработка распределенного ПО.
Рассматриваются основные понятия компонентных технологий разработки ПО и понятие компонента. Рассказывается об общих принципах разработки распределенного ПО и об организации взаимодействия его компонентов в рамках удаленного вызова процедур и транзакций.
Лекция
13. Компонентные технологии разработки Web-приложений.
Рассматриваются основные элементы компонентных сред Java 2 Enterprise Edition и .NET. Показывается, как в рамках этих технологий решаются основные задачи построения распределенных Web-приложений.
Лекция
14. Разработка различных уровней Web-приложений в J2EE и .NET
Рассматриваются используемые в рамках Java Enterprise Edition и .NET техники разработки компонентов Web-приложений, связывающих приложение с базой данных и представляющих собой элементы пользовательского интерфейса.
Лекция
15. Развитие компонентных технологий.
Рассказывается о некоторых компонентных средах и технологиях, обрисовывающих направления дальнейшего развития стандартных платформ разработки Web-приложений. Также рассматриваются Web-службы, представляющие собой компонентную технологию другого уровня.
Лекция
16. Управление разработкой ПО.
Рассматриваются основные деятельности, входящие в компетенцию руководителей проектов. В общем рассказе о некоторых аспектах управления ресурсами, персоналом, рисками и коммуникациями проекта выделены особенности управления проектами по созданию ПО.
Объем - 315 стр.
Предлагаемый вниманию читателей курс лекций построен на основе специального курса, читающегося на факультете Вычислительной математики и кибернетики МГУ им. М. В. Ломоносова. Он был задуман как замена и некоторая модернизация курса по технологии программирования, долгое время читавшегося на ВМиК ныне покойным Е. А. Жоголевым и являвшегося введением в инженерию программного обеспечения (ПО).
Но, кроме введения в программную инженерию, автор посчитал необходимым в рамках этого же курса дать слушателям базовый набор знаний по современным компонентным технологиям разработки Web-приложений.
Таким образом, данные лекции преследуют две цели — введение в инженерию ПО в целом как инженерную дисциплину, рассматривающую методы построения сложных программных систем вообще, и введение в современные технологии разработки наиболее широко востребованного сейчас вида компонентных распределенных программных систем. Автор глубоко убежден в необходимости такого объединения. Компонентные технологии, хотя и продолжают активно развиваться, уже сейчас являются стержневым элементом современной программной инженерии. Они не только лежат в основе методов разработки прикладного ПО, но проникают и в системное программирование. Знание основных принципов работы широко используемых систем промежуточного уровня (middleware) и умение строить приложения на их основе в настоящий момент становится таким же необходимыми элементом образования профессионального разработчика программ, как и знания в области операционных систем, компиляторов и систем управления базами данных.
Данный курс не претендует на полное изложение знаний в области программной инженерии. Это скорее попытка обзора основных технологических элементов, из которых складывается процесс промышленной разработки сложных программ в современной практике. Рассматриваются модели жизненного цикла ПО в целом, деятельности, связанные с анализом предметной области и требований, обеспечением качества ПО, разработкой архитектуры ПО и отдельных компонентов, разработкой пользовательского интерфейса, а также современные языки компонентно-ориентированной разработки и проблемы управления проектами разработки ПО.
В каждой из этих областей представлены основные задачи, встающие перед участниками разработки, и одна-две техники, используемые для их решения на практике. Кроме того, рассматриваются такие важные элементы системы знаний опытного разработчика программ, как образцы анализа, проектирования и процессов, компонентные технологии разработки, техники создания распределенных приложений.
В результате кому-то может показаться, что представленный материал чересчур велик, а кому-то — что он слишком поверхностно освещает перечисленные области. И то, и другое может быть близко к истине, поскольку не все задуманное удается. Однако, по мнению автора, такая структура курса хорошо отражает современное состояние инженерии программного обеспечения — бурно развивающейся инженерной дисциплины, активно впитывающей в себя и использующей результаты множества смежных областей, от математики и системного анализа до микроэкономики, когнитивной психологии и социологии малых сообществ. Вместить материал всех ее отдельных областей в одну книгу уже невозможно — любой из них можно посвятить отдельный курс. Читателям, желающим более глубоко ознакомиться с их содержанием, автор советует обратиться к литературе, списками которой он постарался дополнить каждую лекцию.
Содержание лекционного курса:
Лекция
1. Проблемы разработки сложных программных систем.
Рассматривается понятие сложной программы и отличия сложных программ от простых. Приводятся основные проблемы разработки сложных программ. В приложении к программной инженерии формулируются основные принципы работы со сложными системами, применимые к широкому кругу задач.
Лекция
2. Жизненный цикл и процессы разработки ПО.
Вводятся понятия жизненного цикла ПО и технологических процессов его разработки. Рассматриваются различные способы организации жизненного цикла ПО, каскадные и итеративные модели жизненного цикла, а также набор стандартов, регулирующих процессы разработки ПО в целом.
Лекция
3. Унифицированный процесс разработки и экстремальное программирование.
Рассматриваются в деталях модели разработки ПО, предлагаемые в рамках унифицированного процесса разработки Rational (RUP) и экстремального программирования (ХР).
Лекция
4. Анализ предметной области и требования к ПО.
Рассматриваются вопросы, связанные с анализом предметной области и выделением требований к разрабатываемой программной системе, а также основные графические модели, используемые в этих деятельностях диаграммы потоков данных и вариантов использования.
Лекция
5. Качество ПО и методы его контроля.
Рассматривается понятие качества ПО, характеристики и атрибуты качества, связь атрибутов качества с требованиями. Дается краткий обзор различных методов контроля качества ПО, с более детальным рассмотрением тестирования и проверки свойств на моделях.
Лекция
6. Архитектура программного обеспечения.
Рассматривается понятие архитектуры ПО, влияние архитектуры на свойства ПО, а также методы оценки архитектуры. Рассказывается об основных элементах унифицированного языка моделирования UML.
Лекция
7. Образцы проектирования.
Рассматривается понятие образца проектирования, классификация образцов проектирования и некоторые широко используемые примеры образцов анализа и архитектурных стилей.
Лекция
8. Образцы проектирования (продолжение).
Рассматриваются дополнительные примеры образцов: архитектурный стиль «данные— представление—обработка», ряд образцов проектирования, идиом и образцов организации работ.
Лекция
9. Принципы создания удобного пользовательского интерфейса.
Рассматриваются основные факторы удобства использования ПО, а также психо-физиологические особенности человека, делающие предметы удобными и неудобными для него. Рассказывается о методике проектирования, ориентированного на удобство использования.
Лекция
10. Основные конструкции языков Java и C# (продолжение).
Рассматриваются базовые элементы технологий Java и .NET и основные конструкции языков Java и C#. Рассказывается о лексике, базовых типах, выражениях и инструкциях обоих языков, а также о правилах описания пользовательских типов.
Лекция
12. Компонентные технологии и разработка распределенного ПО.
Рассматриваются основные понятия компонентных технологий разработки ПО и понятие компонента. Рассказывается об общих принципах разработки распределенного ПО и об организации взаимодействия его компонентов в рамках удаленного вызова процедур и транзакций.
Лекция
13. Компонентные технологии разработки Web-приложений.
Рассматриваются основные элементы компонентных сред Java 2 Enterprise Edition и .NET. Показывается, как в рамках этих технологий решаются основные задачи построения распределенных Web-приложений.
Лекция
14. Разработка различных уровней Web-приложений в J2EE и .NET
Рассматриваются используемые в рамках Java Enterprise Edition и .NET техники разработки компонентов Web-приложений, связывающих приложение с базой данных и представляющих собой элементы пользовательского интерфейса.
Лекция
15. Развитие компонентных технологий.
Рассказывается о некоторых компонентных средах и технологиях, обрисовывающих направления дальнейшего развития стандартных платформ разработки Web-приложений. Также рассматриваются Web-службы, представляющие собой компонентную технологию другого уровня.
Лекция
16. Управление разработкой ПО.
Рассматриваются основные деятельности, входящие в компетенцию руководителей проектов. В общем рассказе о некоторых аспектах управления ресурсами, персоналом, рисками и коммуникациями проекта выделены особенности управления проектами по созданию ПО.
Объем - 315 стр.