Подходы к обучению программной инженерии
В рамках работ по становлению программной инженерии опубликовано ряд учебников и монографий, отображающие разные ее аспекты, и сформировалось несколько подходов к обучению и подготовки соответствующих специалистов [5–13]:
1) введение в программы обучения отдельных элементов программной инженерии;
2) создание самостоятельной специальности «программная инженерия» и обучение ей студентов всех курсов;
3) сертифицированное обучение программной инженерии как профессии на курсах подготовки или переподготовки ИТ–специалистов.
Подход 1. Обучение этой дисциплине фактически уже проводиться на факультетах информатики в виде отдельных курсов, отражающих аспекты программной инженерии: модульное, объектно-ориентированное, компонентное программирование, управление данными, тестирование ПО и др. Дипломированные специалисты, прошедшие изучение некоторых из этих аспектов, не пользуются большим спросом на рынке труда, так как не имеют знаний и опыта в организации планирования и управления деятельностью разработчиков ПО, а также знаний по вопросам распределения ресурсов (людских, аппаратных, программных), оценки трудозатрат, повышения качества и др. важных моментов ведения крупных промышленных проектов. Они могут использоваться как программисты, либо повышать знания до уровня менеджера проекта или инженера в области программной инженерии на курсах повышения квалификации.
Подход 2. Наибольшее развитие в международной практике получил подход, ориентированный на создание самостоятельной специальности «программная инженерия» на факультетах информатики. Данный подход поднимает престиж учебного заведения, требует дополнительных вложений на его оборудование и привлечение соответствующего преподавательского состава. Учебный план факультета информатики предусматривает программы по информатике и программной инженерии. Согласно [24] эти учебные программы относятся как 50:50. При этом треть предметов факультета связаны с программной инженерией, а две трети – с информатикой.
Другая программа обучения СС–2001 [22] рекомендует это соотношение, как 90 к 10. На факультетах информатики курс программной инженерии должен занимать 10%, т.е. 24–30 учебных часов в семестр. При этом 10% преподавателей факультета должны учить студентов дисциплине “программная инженерия”, а 90%– 15 (пятнадцати) базовым курсам по специальности “Информатика” (дискретные системы, основы программирования, алгоритмы и теория сложности, ОС, теория алгоритмов, языки программирования и др.). Отведенный для программной инженерии диапазон часов соответствует не только базовым требованиям СС–2001, но и требованиям к курсам информатики, перечисленных в документах комитета по сертификации учебных заведений [23], готовящих инженерных специалистов. Программная инженерия, как дисциплина изучает теорию, сумму знаний, отображенных в ядре SWEBOK, и практику эффективного построения ПО на всех этапах ЖЦ. Если на факультете информатике работает 30 преподавателей, то по программной инженерии их должно быть не менее 5. СС–2001 рекомендует типовой факультативный учебный план по программной инженерии, включающий 12 тем:
1. Проектирование ПО.
2. Интерфейсы приложений.
3. Программные средства и окружение.
4. Процессы разработки ПО
5. Требования к ПО.
6. Проверка соответствия ПО.
7. Методы эволюции ПО.
8. Управление программными проектами.
9. Компонентно-ориентированная разработка (не обязательная).
10. Формальные методы.
11. Надежность и качество ПО.
12. Подходы к разработке специализированных систем (не обязательная).
Многие из этих тем, нашли отражение в ядре SWEBOK. Темы 2, 9, 12 относятся к важным в проблематике разработки ПО, они обобщают целые эпохи формирования и применения общих методов (от модульного до компонентного) программирования в процессе создания ПО и специализированных систем различного назначения с использованием средств (GUI, CORBA, COM – интерфейсы и др.). По этим темам к настоящему времени накоплен огромный опыт и знания, которые слабо представлены в ядре SWEBOK. Эти темы включены в программу обучения CС–2001 как не обязательные темы, хотя проблемы интерфейса и компонентного подхода сейчас являются перспективными направлениями дальнейшего развития современного программирования и производства ПО.
Подход 3. Обучение сформировавшихся специалистов программной инженерии на специальных курсах повышения квалификации (с отрывом и без отрыва от производства) представляет значительный интерес для действующих компаний, специализирующихся в разработке ПО и крупных программных проектов. Для усовершенствования квалификации персонала фирм объявляются или заказываются отдельные темы программной инженерии или целый курс. Самыми широко распространенными сертифицированными курсами являются: программная инженерия, управление требованиями, повторное использование, управление программными проектами, моделирование в UML и Case Rational Rose и др.
Рассмотренные подходы к преподаванию программной инженерии используются в США, Канаде, Великобритании и других европейских странах. Остановимся на анализе состояния дел по ее преподаванию на факультетах информатики в странах СНГ. До настоящего времени во многих Вузах ведется обучение ЯП ( С++, Паскаль, Бейзик Lava и др.), теории алгоритмов, ОС, СУБД, информационным технологиям и системам и др. Обсуждение предмета программной инженерии как специальности проведено, например, в российской прессе [26-28, 34]. Общее мнение состоит в том, что системное преподавание этой дисциплины в основном отсутствует, в университетах ощущается недостаток профессорско-преподавательского состава и соответствующих учебно-методических пособий.
В частности, в [27] отмечается, что сложившаяся советская система образования в университетах бывшего СССР «постепенно все больше и больше отдаляется от требований современного мира»; программирование представляет фундаментальную науку и прикладную инженерную дисциплину, основанную на применение теоретических знаний в жестких ограничениях реального мира. Тем более, что в информатике отсутствует такие понятия, как ресурсы, трудозатраты, менеджмент, измерения и оценки продуктов, которые в программной инженерии играют ключевую роль. В связи с этим возникает естественная потребность в разносторонних и полноценных программах обучения профессиональных специалистов в области программной инженерии, основу которых может составлять СС-2001 [22 ].
Основу подготовки специалистов по программной инженерии составляют специальные программы обучения и учебники, с помощью которых студенты смогут усвоить суть данной инженерной дисциплины, получать навыки и овладеть методами создания и управления программными проектами с учетом требований индустрии, современных сред и заказчиков.
На основе огромного опыта программирования разных программных систем, преподавания спецкурса по этой дисциплине в Киевском Национальном университете им. Тараса Шевченко и учитывая международный опыт по созданию ядра знаний SWEBOK, разработан и опубликован учебник серии «высшее образование XXI столетия» [8], который рекомендован в качестве учебного пособия для обучения студентов в Вузах. Однако этот учебник вышел небольшим тиражом, его использует авторы при проведении курсов в Национальном университете имени Тараса Шевченко, в Киевском отделении МФТИ, в Национальном авиационном институте.