Известно, что программные продукты создаются не только программистами. ИТ-компании не могут сразу после вуза брать на работу выпускников ИТ-специальностей еще и потому, что запас теоретических знаний, который они получают в институтах, не включает управленческие дисциплины. Выпускники часто не представляют, что такое управление проектом, как строить проектные команды и какой инструментарий должен применяться для ведения проектов, управления временем, версиями, изменениями, требованиями и рисками.

Сегодня во всем мире университеты разрабатывают для своих студентов курсы по программной инженерии, которые дополняют существующие программы по информатике и компьютерной инженерии.

Как известно, американцы создали две крупнейшие профессиональные ассоциации - ACM (Association for Computing Machinery) и IEEE Computer Society (Institute of Electrical and Electronics Engineers), чье влияние даже изначально не ограничивалось территорией США, а теперь уже стало де-факто всемирным. В 1993 году профессиональные сообщества IEEE Computer Society и ACM создали объединенный комитет, перед которым была поставлена цель - «оценивать, планировать и координировать действия, необходимые для становления программной инженерии как самостоятельной профессии».

Чтобы сформулировать принципы составления эффективного учебного плана, специальная объединенная комиссия IEEE Computer Society и ACM разработала в рамках более масштабного проекта Computing Curriculum набор рекомендаций Software Engineering 2004 (SE2004).

SE2004 - один из нескольких документов, совместно подготовленных IEEE и ACM для вычислительных дисциплин, к которым помимо программной инженерии также относятся информатика, компьютерная инженерия, информационные системы и информационные технологии. Например, Computer Science 2001 (CS2001) содержит рекомендации для программ по информатике и является последним из целой серии учебных курсов (предыдущие были созданы в 1977, 1983 и 1991 годах). В обзорном документе описаны различия между отдельными дисциплинами.

SE2004 начинается с обзора программной инженерии, где объясняется, почему его одновременно можно считать как вычислительной, так и инженерной дисциплиной. Затем излагаются принципы, на которых строится документ, и перечисляются предполагаемые результаты, к которым должны стремиться студенты. Затем SE2004 детально описывает знания SEEK (Software Engineering Education Knowledge), которые в процессе обучения должны дать университеты и колледжи в рамках курса по программной инженерии. Кроме рекомендаций, изложены общие принципы преподавания, а также приведены примеры учебных курсов и образцы учебных планов.

Результаты, которых должны добиться студенты

По существу, перефразируя описание результатов, изложенных в документе SE2004, студент, обученный специальности «программная инженерия», должен уметь делать следующее.

1. Показать владение знаниями и навыками программной инженерии, необходимыми для того, чтобы приступить к практической работе.

2. Работать индивидуально или в группе над созданием качественных программ.

3. Искать приемлемые компромиссы в рамках ограничений, накладываемых «затратами, временем, знаниями, существующими системами и организацией».

4. Выполнять проектирование в одной или нескольких предметных областях, используя подходы программной инженерии, объединяющих «этические, социальные, юридические и экономические интересы».

5. Демонстрировать понимание и применение существующих теорий, моделей и методов, необходимых для программной инженерии.

6. Демонстрировать такие навыки, как межличностное общение, эффективные методы работы, лидерство и общение.

7. Изучать новые модели, методы и технологии по мере их появления.

Многие из этих целей применимы также к программам по информатике и программной инженерии. Например, студенты, обучавшиеся во всех трех группах, будут разрабатывать программное обеспечение. Однако основное отличие заключается в знаниях, которые требует пункт 1, а также в моделях и методах, упомянутых в пунктах 5 и 7.

Информатика. Предполагается, что специалисты по информатике должны владеть базовыми методами программного инжиниринга, но не обязаны знать их столь же глубоко, как студенты, получившие специальность «программная инженерия». С другой стороны, они должны обладать значительно более глубокими знаниями в таких областях, как теория вычислений, языки программирования, алгоритмический анализ, и владеть следующими технологиями: базы данных, искусственный интеллект и операционные системы.

Компьютерная инженерия. Студенты должны иметь возможность применять методы программной инженерии. Однако компьютерные инженеры в значительно большей степени будут специализироваться на системах, в том числе на оборудовании. Поэтому им требуется глубокое знание компьютерной архитектуры, электроники, проектирования интегральных схем, проектирования аппаратных систем, программного обеспечения реального времени и систем управления.

Программная инженерия. Специалисты по этой дисциплине должны уметь анализировать требования, проектировать, делать оценку качества и управлять крупными и сложными программными системами. Для того чтобы выполнить эти требования, им необходимо сосредоточиться на изучении материалов, определенных в SEEK (Software Engineering Education Knowledge).

Определение SEEK

Основная глава SE2004 посвящена знаниям программной инженерии, которые должен давать любой учебный курс по данной дисциплине. После тщательного анализа управляющий комитет подготовил материал, получивший название SEEK, и разделил его на десять областей знаний. Каждая такая область знаний делится на несколько модулей, которые в свою очередь разбиты на темы.

1. Основы вычислений.

2. Основы математики и инженерии.

3. Профессиональная практика.

4. Моделирование и анализ программного обеспечения.

5. Проектирование программного обеспечения.

6. Проверка корректности программного обеспечения.

7. Эволюция программного обеспечения.

8. Процесс программного обеспечения.

9. Качество программного обеспечения.

10. Управлением программным обеспечением.

Кроме того, в феврале 2004 года была завершена работа над Руководством к своду знаний по программной инженерии (The Guide to the Software Engineering Body of Knowledge, SWEBOK). Знакомство с ним должно представлять интерес для многочисленных представителей этой профессии. Сейчас ясно, что нужны продуманная система процесса базовой подготовки и непрерывная профессиональная переквалификация специалистов по разработке как инженерной дисциплине, дабы восполнить недостаток кадров, возникший в условиях современной ИТ-индустрии. В SWEBOK можно почерпнуть весьма разумные рекомендации, на какой основе выстроить такой процесс.

Содержание SWEBOK

Профессия инженера подразумевает обязательное начальное профессиональное образование в соответствии с аккредитованным учебным планом, сертификацию, демонстрирующую пригодность специалиста к практической деятельности, и постоянное повышение квалификации. SWEBOK аккумулирует в себе представление сообщества о том, что должен знать и какими навыками владеть инженер-программист. Он задает базу с целью формирования экзаменационных программ для лицензирования специалистов, а также критериев аккредитации этих программ и учебных планов непрерывного образования.

Для того чтобы задать границы программной инженерии как сферы профессиональной деятельности, SWEBOK вводит десять областей знаний, каждой из которых соответствует одна глава руководства:

1. Требования к ПО (Software Requirements).

2. Проектирование ПО (Software Design).

3. Конструирование ПО (Software Construction).

4. Тестирование ПО (Software Testing).

5. Сопровождение ПО (Software Maintenance).

6. Управление конфигурацией ПО (Software Configuration Management).

7. Управление в программной инженерии (Software Engineering Management).

8. Процесс программной инженерии (Software Engineering Process).

9. Инструменты и методы программной инженерии (Software Engineering Tools and Methods).

10. Качество ПО (Software Quality).

С каждым модулем знаний связано минимальное число лекционных часов, которое образовательное учреждение должно ему посвятить. Однако вместо того чтобы точно подсчитывать число часов при разработке учебного плана, для преподавателей намного полезнее рассматривать это просто как руководящий принцип, определяющий, какую часть общего курса посвятить изучению каждого модуля. Фактически в SE2004 утверждается, что совершенно нормально, если образовательные учреждения используют вместо лекций другие методы преподавания.

Помимо десяти фундаментальных областей знаний в SE2004 указан список системных и прикладных специальностей. В частности:

«сетевые системы»;

«информационные системы и обработка данных»;

«финансовые системы и системы электронной коммерции»;

«отказоустойчивые системы и системы бесперебойной работы»;

системы с высоким уровнем защиты;

«системы, критические к безопасности»;

«встроенные системы и системы реального времени»;

«биомедицинские системы»;

«научные системы»;

«телекоммуникационные системы»;

«авиационные и автотранспортные системы»;

«системы управления производством»;

«мультимедиа, игровые и развлекательные системы»;

«системы для небольших и мобильных платформ»;

«системы на базе агентов».

В документе SE2004 в описание этих тем включены возможные варианты дополнительных дисциплин, которые должны изучить студенты. Например, специальность «сетевые системы» требует знаний web-технологий и навыков их применения, а также глубокого знания сетей и средств защиты.

Значительная часть из более чем 200 добровольцев и экспертов, участвовавших в подготовке рекомендаций SE2004, - жители США, однако немало среди них было граждан Великобритании, Канады, Германии и других стран.

Во время разработки и обсуждения возникали споры, главным образом связанные с тем, какая часть учебного плана должна быть посвящена какой-то конкретной теме. Специалисты, как правило, считают, что именно их конкретной теме должно быть уделено больше внимания, чем другим. Руководящий комитет в основном разрешал эти споры, указывая, что состав ядра курса ограничен жестким бюджетом и что данный документ содержит только минимальные требования: программы по отдельным специальностям могут предусматривать более глубокое изучение тех тем, которые требуются конкретным образовательным учреждениям.

В материалах SE2004 приведены примеры полных курсов и учебных планов. В частности, здесь описаны два подхода к преподаванию программной инженерии. Первый заключается в том, чтобы сначала преподавать два вводных курса информатики, а затем уже курс, озаглавленный «Введение в программную инженерию». Суть второго - преподавание предмета «Программная инженерия и компьютеры» в виде трех курсов, которые объединяют введение в обе дисциплины: и в информатику, и в программную инженерию.

Для того чтобы обеспечить достаточную глубину знаний программного инжиниринга, в течение второго года учебного плана и дальше в SE2004 предложено два альтернативных курса среднего уровня. Предполагается, что студент, обучающийся по специальности «программная инженерия», изучит все эти курсы в рамках либо одного, либо другого пакета, а студент, обучающийся специальности «информатика», сможет выбрать один или два индивидуальных курса в любом из пакетов. Конечно, между этими курсами есть априорная связь.

Состав первого пакета:

Создание ПО.

Программная инженерия взаимодействия человека и компьютера.

Проектирование и архитектура ПО.

Оценка качества и тестирование ПО.

Анализ требований к ПО.

Управление проектом разработки ПО.

Состав второго пакета:

Подход программной инженерии к взаимодействию человека и компьютера.

Проектирование и архитектура крупных программных систем.

Тестирование ПО.

Низкоуровневое проектирование ПО.

Программный процесс и управление.

Формальные методы в программной инженерии.

Эти два пакета имеют одну и ту же основу, но различаются по группировке материала. Например, второй пакет выделяет формальные методы в отдельный курс, в то время как первый распределяет формальные методы по другим курсам. Заметьте, что оба пакета включают в себя курс, посвященный взаимодействию человека и компьютера. Выбор между первым и вторым пакетами зависит от местных предпочтений.

SE2004 предусматривает, что студенты выполняют дипломный проект. Предполагаемый дипломный проект, на который отводится один полный год, должен помочь студентам объединить весь изученный ими ранее материал.

Наконец, рекомендации SE2004 включают в себя описание трех курсов, охватывающих тот нетехнический материал, который требует SEEK. Сюда входят курсы:

«Экономика инженерии».

«Динамика и взаимодействие групп».

«Профессиональное использование программной инженерии».

Варианты первого и третьего курсов уже преподаются во многих университетах.

Университету ничто не мешает сформировать содержание SEEK из курсов, отличающихся от тех, что были предложены. Однако использование предлагаемых курсов дает целый ряд преимуществ. В частности, дополнение к SE2004 содержит детальное их описание, в том числе полный список знаний SEEK, которые должны быть получены в рамках этих курсов. Благодаря этому учреждениям будет намного проще определить, что они должны преподавать. А поскольку курсы опубликованы и приняты в различных университетах, авторы могут ссылаться на них при написании учебников. Наконец, если эти курсы будут преподаваться во многих университетах, студенты смогут переходить из вуза в вуз без потери кредитов на обучение.

Сравнение SE2004 и SWEBOK

Во-первых, SWEBOK создавался с целью описать те знания, которые, как предполагается, имеет специалист, уже проработавший несколько лет, в то время как SEEK, входящий в состов SE2004, описывает знания, которые необходимо преподавать студентам. Таким образом, предполагается, что SWEBOK предусматривает более глубокие знания.

Во-вторых, SE2004 охватывает более широкий диапазон тем, куда входят такие понятия, как профессионализм, управление проектами, информатика и математика. В SWEBOK они сознательно оставлены вне поля зрения, чтобы сосредоточиться на основах программной инженерии.

В-третьих, SE2004 рассматривал определенные области, например проектирование человеко-машинного интерфейса как основы программного инжиниринга, в то время как разработчики SWEBOK посчитали эти области смежными дисциплинами.

Наконец, области знаний SEEK, несмотря на то что изначально они походили на SWEBOK, подверглись серьезным изменениям. К примеру, оба документа первоначально содержали раздел «Требования», однако после анализа предложений экспертов управляющий комитет SE2004 решил перенести описание требований в более широкий раздел «Моделирование и анализ».

SE2004 - результат многолетних усилий в области создания рекомендаций по составлению учебного плана для специальности «программная инженерия». Управляющий комитет надеется, что этот документ будет способствовать появлению учебников по конкретным разделам программной инженерии, а также даст студентам возможность проще переходить из одного вуза в другой, соблюдая при этом учебный план по программной инженерии.

Судаба Эйбалы кызы АБАСОВА, старший научный сотрудник, Институт информационных технологий

Национальной академии наук Азербайджана