Во всем мире университеты разрабатывают для своих студентов курсы по программной инженерии, которые дополняют существующие программы по информатике и компьютерной инженерии. Чтобы сформулировать принципы составления эффективного учебного плана, IEEE Computer Society и ACM разработали в рамках более масштабного проекта Computing Curriculum набор рекомендаций Software Engineering 2004 (SE2004) [1].
SE2004 — один из нескольких документов, совместно подготовленных IEEE и ACM для вычислительных дисциплин, к которым помимо программной инженерии также относятся информатика, компьютерная инженерия, информационные системы и информационные технологии. Например, CS2001 [2] содержит рекомендации для программ по информатике и является последним из целой серии учебных курсов. Предыдущие учебные курсы были созданы в 1977, 1983 и 1991 годах. В обзорном документе описаны различия между отдельными дисциплинами [3].
SE2004 начинается с обзора программной инженерии, где объясняется, что тот является одновременно и вычислительной, и инженерной дисциплиной. Затем излагаются принципы, на которых строится документ, и перечисляются предполагаемые результаты, которых должны добиться студенты. Затем SE2004 детально описывает знания (Software Engineering Education Knowledge, SEEK), которые в процессе обучения должны дать университеты и колледжи в рамках курса по программной инженерии. Кроме рекомендаций изложены общие принципы преподавания, а также приведены примеры учебных курсов и образцы учебных планов.
Результаты, которых должны добиться студенты
По существу, перефразируя описание результатов, изложенных в документе SE2004, студент, обученный специальности «Программная инженерия», должен уметь делать следующее.
- Показать владение знаниями и навыками программной инженерии, необходимыми для того, чтобы приступить к практической работе.
- Работать индивидуально или в группе над созданием качественных программ.
- Искать приемлемые компромиссы в рамках ограничений, накладываемых «затратами, временем, знаниями, существующими системами и организацией».
- Выполнять проектирование в одной или нескольких предметных областях, используя подходы программной инженерии, объединяющие «этические, социальные, юридические и экономические интересы».
- Демонстрировать понимание и применение существующих теорий, моделей и методов, необходимых для программной инженерии.
- Демонстрировать такие навыки, как межличностное общение, эффективные методы работы, лидерство и общение.
- Изучать новые модели, методы и технологии по мере их появления.
Многие из этих целей применимы также к программам по информатике и программной инженерии. Например, студенты, обучавшиеся во всех трех группах, будут разрабатывать программное обеспечение. Однако основное отличие заключается в знаниях, которые требует пункт 1, а также в моделях и методах, упомянутых в пунктах 5 и 7.
- Информатика. Предполагается, что специалисты по информатике должны владеть базовыми методами программного инжиниринга, но не обязаны знать их столь же глубоко, как студенты, получившие специальность «Программная инженерия». С другой стороны, специалисты по информатике должны обладать значительно более глубокими знаниями в таких областях, как теория вычислений, языки программирования, алгоритмический анализ, и владеть следующими технологиями: базы данных, искусственный интеллект и операционные системы.
- Компьютерная инженерия. Студенты должны иметь возможность применять методы программной инженерии. Однако компьютерные инженеры в значительно большей степени будут специализироваться на системах, в том числе на оборудовании. В силу чего им требуется глубокое знание компьютерной архитектуры, электроники, проектирования интегральных схем, проектирования аппаратных систем, программного обеспечения реального времени и систем управления.
- Программная инженерия. Специалисты по этой дисциплине должны уметь анализировать требования, проектировать, делать оценку качества и управлять крупными и сложными программными системами. Для того чтобы выполнить эти требования, им необходимо сосредоточиться на изучении материалов, определенных в SEEK.
Определение SEEK
Основная глава SE2004 посвящена знаниям программной инженерии, которые должен давать любой учебный курс по данной дисциплине. После тщательного анализа управляющий комитет подготовил материал, получивший название SEEK, и разделил его на десять областей знаний. Каждая такая область знаний делится на несколько модулей, которые, в свою очередь, разбиты на темы. В таблице 1 приводится очень краткое описание содержания каждой области знаний. Разделение на области знаний напоминает деление в SWEBOK [4], но не совпадает с ним.
С каждым модулем знаний связано минимальное число лекционных часов, которое образовательное учреждение должно ему посвятить. Однако, вместо того чтобы точно подсчитывать число часов при разработке учебного плана, намного полезнее для преподавателей рассматривать это просто как руководящий принцип, определяющий, какую часть общего курса посвятить изучению каждого модуля. Фактически в SE2004 утверждается, что совершенно нормально, если образовательные учреждения используют вместо лекций другие методы преподавания.
Общее количество часов, посвященных обучению темам SEEK, составляет около 500, то есть примерно треть лекционных часов обычной учебной программы, рассчитанной на четыре года. Предполагается, что остальные две трети будут посвящены более глубокому изучению материалов SEEK наряду с получением дополнительных технических знаний и широким выбором тем, взятых из науки, искусства, инженерии и других предметных областей.
Помимо десяти фундаментальных областей знаний в SE2004 указан список системных и прикладных специальностей. В частности: сетевые системы; информационные системы и обработка данных; финансовые системы и системы электронной коммерции; отказоустойчивые системы и системы бесперебойной работы; системы с высоким уровнем защиты; системы, критические к безопасности; встроенные системы и системы реального времени; биомедицинские системы; научные системы; телекоммуникационные системы; авиационные и автотранспортные системы; системы управления производством; мультимедиа, игровые и развлекательные системы; системы для небольших и мобильных платформ; системы на базе агентов.
В документе SE2004 в описание этих тем включены возможные варианты дополнительных дисциплин, которые должны изучить студенты. Например, специальность «Сетевые системы» требует знаний Web-технологий и навыков их применения, а также глубокого знания сетей и средств защиты.
Значительная часть из более чем 200 добровольцев и экспертов, участвовавших в подготовке рекомендаций SE2004, — жители США, однако немало среди них было и граждан Великобритании, Канады и Германии. Кроме того, в обсуждении принимали участие специалисты из Австралии, Бразилии, Финляндии, Гонконга, Ирландии, Израиля, Италии, Японии, Иордании, Голландии, Новой Зеландии, Польши, Сингапура, Испании, Швеции, Швейцарии, Тайваня, Таиланда, Турции, Украины и бывшей Югославии [1].
Во время разработки и обсуждения возникали споры, главным образом связанные с тем, какая часть учебного плана должна быть посвящена какой-то конкретной теме. Специалисты, как правило, считают, что именно их конкретной теме должно быть уделено больше внимания, чем другим. Руководящий комитет в основном разрешал эти споры, указывая, что состав ядра курса ограничен жестким бюджетом и что данный документ содержит только минимальные требования: программы по отдельным специальностям могут предусматривать более глубокое изучение тех тем, которые требуются конкретным образовательным учреждениям [5].
Применение принципов разработки учебного плана
Принципы SE2004 призваны помочь и в преподавании курса программной инженерии. В таблице 2 приводится краткое описание этих принципов.
Для того чтобы помочь редакторам эффективно проводить изучение SEEK, в материалах SE2004 приведены примеры полных курсов и учебных планов. В частности, рекомендации SE2004 описывают два подхода к преподаванию программной инженерии. Первый подход заключается в том, чтобы сначала преподавать два вводных курса информатики, а затем уже курс, озаглавленный «Введение в программную инженерию». Второй подход — преподавать предмет «Программная инженерия и компьютеры» в виде трех курсов, которые объединяют введение в обе дисциплины, и в информатику, и в программную инженерию.
Для того чтобы обеспечить достаточную глубину знаний программного инжиниринга в течение второго года учебного плана и дальше в SE2004 предложено два альтернативных курса среднего уровня. Предполагается, что студент, обучающийся специальности «Программная инженерия», изучит все эти курсы в рамках либо одного, либо другого пакета, а студент, обучающийся специальности «Информатика», сможет выбрать один или два индивидуальных курса в любом из пакетов. Конечно, между этими курсами есть априорная связь.
В состав первого пакета входят следующие курсы:
- Создание программного обеспечения.
- Программная инженерия взаимодействия человека и компьютера.
- Проектирование и архитектура программного обеспечения.
- Оценка качества и тестирование программного обеспечения.
- Анализ требований к программному обеспечению;
- Управление проектом разработки программного обеспечения.
В состав второго пакета входят курсы:
- Подход программной инженерии к взаимодействию человека и компьютера.
- Проектирование и архитектура крупных программных систем.
- Тестирование программного обеспечения.
- Низкоуровневое проектирование программного обеспечения.
- Программный процесс и управление.
- Формальные методы в программной инженерии.
Эти два пакета имеют одну и ту же основу, но различаются по группировке материала. Например, пакет 2 выделяет формальные методы в отдельный курс, в то время как пакет 1 распределяет формальные методы по другим курсам. Заметьте, что оба пакета включают в себя курс, посвященный взаимодействию человека и компьютера. Выбор между первым и вторым пакетами зависит от местных предпочтений.
SE2004 предусматривает, что студенты выполняют дипломный проект. Предполагаемый дипломный проект, на который отводится один полный год (т. е. 80 «эквивалентных лекциям» часов), должен помочь студентам объединить весь изученный ими ранее материал.
Рекомендации SE2004 предполагают, что большая часть требуемых материалов по математике, в частности дискретной, изучается в рамках учебного плана, описываемого в Computer Science Volume в составе IEEE/ACM Computing Curriculum, CS2001. Однако для того, чтобы обеспечить требуемую глубину знания эмпирических методов, SE2004 предлагает один новый курс, получивший название «Статистика и эмпирические методы».
Наконец, рекомендации SE2004 включают в себя описание трех курсов, охватывающих тот нетехнический материал, которого требует SEEK. Это следующие курсы: «Экономика инженерии», «Динамика и взаимодействие групп» и «Профессиональное использование программной инженерии». Варианты первого и третьего курсов уже преподаются во многих университетах.
Ничто не мешает университету сформировать содержание SEEK из курсов, отличающихся от тех, что были предложены. Однако использование предлагаемых курсов дает целый ряд преимуществ. Во-первых, дополнение к SE2004 содержит детальное их описание, в том числе, полный список знаний SEEK, которые должны быть получены в рамках этих курсов. Благодаря этому образовательным учреждениям будет намного проще определить, что они должны преподавать. Во-вторых, поскольку курсы опубликованы и приняты в различных университетах, авторы могут ссылаться на них при написании учебников. В-третьих, если эти курсы будут преподаваться во многих университетах, студенты смогут переходить из вуза в вуз без потери кредитов на обучение.
Для каждого курса рекомендации SE2004 предусматривают меньше потенциального максимума в 40 лекционных часов. Это позволяет образовательным учреждениям распределять значительную часть учебного времени в каждом курсе, как им удобно.
Для того чтобы лучше проиллюстрировать способ комплектации курсов в различных контекстах, SE2004 предлагает полную сетку учебного плана, как показано в примерах в табл. 2. Заметьте, что курсы из CS2001 используются для преподавания базовых знаний по компьютерам [2].
Таблица 2а показывает, как лучше подобрать курсы друг к другу для того, чтобы программа соответствовала стилю обучения типичного факультета информатики или инженерии Северной Америки. В таблице 2б приведен пример учебного курса для Японии. SE2004 содержит примеры и для других стран, например, Австралии. Расписания в Таблице 2a и 2б были составлены на основе отзывов, полученных из этих стран. Так, трехгодичный курс для Англии (табл. 2в) составлен с учетом того, что в этой стране большинство университетских программ рассчитано на три года. Поэтому они охватывают меньше материала, чем курсы по специальности «Программная инженерия» или «Компьютерная инженерия». В университетах Англии предполагается, что студенты уже получили широкие знания в других областях в рамках учебного курса средней школы, в то время как программы США и многих других стран, как правило, требуют глубокого изучения этих предметов на уровне университета.
Образцы учебного плана также предложены для того, чтобы показать, как можно преподавать «Введение в программную инженерию» во время второго года обучения (табл. 2a и 2б), второго семестра первого года (табл. 2в) и в течение первого года (табл. 2г). Рекомендации SE2004 также содержат главу, в которой рассказывается о том, как адаптировать учебный план к другим программам колледжа.
SE2004 — результат многолетних усилий в области создания рекомендаций по составлению учебного плана для специальности «Программная инженерия». Управляющий комитет надеется, что этот документ будет способствовать появлению учебников по конкретным разделам программной инженерии, а также даст студентам возможность проще переходить из одного вуза в другой, соблюдая при этом учебный план по программной инженерии.
- Joint Task Force on Computing Curricula, Software Engineering 2004: Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering, tech. report, IEEE CS and ACM, 2004; sites.computer.org/ccse.
- Joint Task Force on Computing Curricula, Computer Science 2001: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science, tech. report, IEEE CS and ACM, 2001; www.computer.org/portal/cms_docs_ieeecs/ieeecs/education/cc2001/cc2001.pdf.
- Joint Task Force for Computing Curricula 2005, Computing Curricula 2005, the Overview Report; tech. report IEEE CS and ACM, 2005; www.acm.org/education/curric_vols/CC2005-March06Final.pdf.
- Guide to the Software Engineering Body of Knowledge, SWEBOK, IEEE CS Press, 2004.
- J. Atlee et al., «Reflections on Software Engineering 2004, the ACM/IEEE-CS Guidelines for Undergraduate Programs in Software Engineering,» to be published, Springer.
Тимоти Летбридж (tcl@site.uottawa.ca) — профессор Университета Оттавы (Канада), руководитель группы Pedagogy Focus Group в проекте SE2004; Ричард Лебланк-мл (rich@cc.gatech.edu) — профессор College of Computing Технологического института штата Джорджия, руководитель управляющего комитета SE2004; Энн Келлей Собел (sobelae@muohio.edu) — доцент университета Майами, входил в состав руководителей группы Software Engineering Education Knowledge; Томас Хилберн (hilburn@erau.edu) — научный сотрудник Университета Карнеги—Меллона. Был одним из редакторов SE2004; Джордж Диас-Херрера (jdiaz@gccis.rit.edu) — профессор Технологического института Рочестера. Входил в состав редколлегии SE2004.
Сравнение SE2004 и SWEBOK
Чем же от него отличается Software Engineering Education Knowledge (SEEK), входящий в состав SE2004? Во-первых, SWEBOK создавался с целью описать те знания, которые, как предполагается, имеет специалист, уже проработавший несколько лет, в то время как SEEK описывает знания, которые необходимо преподавать студентам. Таким образом, предполагается, что SWEBOK предусматривает более глубокие знания. Во-вторых, SE2004 охватывает более широкий диапазон тем, в том числе профессионализм, управление проектами, информатика и математика. В SWEBOK эти темы сознательно оставлены вне поля зрения, чтобы сосредоточиться на основах программной инженерии. В-третьих, SE2004 рассматривал определенные области, например проектирование человеко-машинного интерфейса, как основы программного инжиниринга, в то время как разработчики SWEBOK посчитали эти области смежными дисциплинами. Наконец, области знаний SEEK, несмотря на то, что изначально они походили на SWEBOK, подверглись серьезным изменениям. К примеру, оба документа первоначально содержали раздел «Требования» (Requirements KA), однако после анализа предложений экспертов управляющий комитет SE2004 решил перенести описание требований в более широкий раздел «Моделирование и анализ» (Modeling and Analysis KA).
Timothy Lethbridge, Richard LeBlanc Jr., Ann Kelley Sobel, Thomas Hilburn, Jorge Diaz-Herrera. SE2004: Recommendations for Undergraduate Software Engineering Curricula. IEEE Software, November/December 2006. IEEE Computer Society, 2006. All rights reserved. Reprinted with permission.