Министерство образования и науки Российской Федерации 
Институт ЮНЕСКО по информационным технологиям в образовании
Институт проблем информатики Российской Академии наук
Федеральный институт развития образования
Академия повышения квалификации и профессиональной переподготовки работников образования
Автономная некоммерческая организация
«Информационные технологии в образовании»
Российский государственный гуманитарный университет
Международный институт новых образовательных технологий
III Международная научно-практическая конференция
«Инновации в информационных технологиях и образовании»
«ИТО-Москва-2014»
4 - 5 декабря 2014 года, г. Москва

Особенности обучения принципам и навыкам командной разработки программного обеспечения студентов направления «Программная инженерия»

Авторы: Лагерев Дмитрий Григорьевич 1, Кандидат технических наук, Доцент, Подвесовский Александр Георгиевич 2, Кандидат технических наук, Доцент, Заведующий кафедрой "Информатика и программное обеспечение".
1 ФГБОУ ВПО Брянский государственный технический университет, 2 ФГБОУ ВПО Брянский государственный технический университет.
Предложен инновационный подход к преподаванию дисциплин профессионального цикла для студентов, обучающихся по направлению «Программная инженерия». В основу данного подхода положена командная разработка программных проектов с использованием матричной ролевой структуры. Подробно описаны особенности его применения в рамках курса «Введение в программную инженерию».

В настоящее время индустрия разработки коммерческого программного обеспечения (ПО) практически полностью ориентирована на групповую (командную) разработку. Авторская разработка ПО составляет весьма незначительный процент, при этом авторы таких программ, как правило, работают над другими проектами в команде. Так, например, Марк Руссинович автор таких известных утилит как ProcessExplorer, ProcessMonitor, TcpView, Desktopsи др., является членом технического совета Microsoft и работает в рамках группы Windows Azure над разработкой облачной операционной системы [2]. Некоторые проекты начинаются как индивидуальные, но по мере развития и популяризации их дальнейший жизненный цикл протекает по одной из групповых схем – ярким примером здесь может служить Minecraft, наиболее известный представитель инди-игр.

В настоящее время известны следующие подходы к организации командной разработки ПО [3]: иерархическая модель, матричная модель (равноправные соисполнители), бригада главного программиста, парное программирование, ядерная модель, общинная модель разработки (часто используется в open source проектах), оффшорное программирование: аутстаффинг и аутсорсинг.

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

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

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

С 2011 года на кафедре «Информатика и программное обеспечение» Брянского государственного технического университета реализуется образовательная программа по направлению «Программная инженерия». Данное направление является наиболее современным и востребованным из всех направлений информационного профиля. При разработке учебного плана были использованы современные международные стандарты программной инженерии и рекомендации по преподаванию программной инженерии в университетах [1, 4].

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

Главная цель дисциплины складывается из двух составляющих:

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

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

  • планирование ПП;
  • сбор и анализ требований к ПП;
  • разработка технического задания (ТЗ) на создание ПП;
  • проектирование ПП;
  • написание программного кода (в рамках курсового проекта по дисциплине «Программирование»);
  • тестирование ПП;
  • отладка ПП;
  • документирование ПП;
  • документирование процесса разработки ПП.

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

Для выполнения командных лабораторных работ студенты делятся на группы численностью от трех до пяти человек. Желательно, чтобы в подгруппу входили студенты, примерно равные по уровню подготовки и ответственности. Каждая группа образует рабочую команду, которая ведет несколько проектов одновременно (по одному на каждого члена группы). Каждый из членов группы в разных проектах последовательно выполняет обязанности менеджера проекта, аналитика, проектировщика, программиста, тестировщика, технического писателя. Пример распределения ролей для группы, состоящей из четырех студентов, приведен в табл.

Таблица

Проекты

Участники

Проект 1 Проект 2 Проект 3 Проект 4
Распределение ролей в команде из четырех студентов
Студент 1 Менеджер проекта; Программист; Технический писатель Тестировщик Аналитик Проектировщик
Студент 2 Проектировщик Менеджер проекта; Программист; Технический писатель Тестировщик Аналитик
Студент 3 Аналитик Проектировщик Менеджер проекта; Программист; Технический писатель Тестировщик
Студент 4 Тестировщик Аналитик Проектировщик Менеджер проекта; Программист; Технический писатель

 

Таким образом, помимо участия в других проектах, каждый студент имеет «собственный» проект, в котором он выполняет обязанности:

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

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

  • Система управления версиями Subversion (SVN), на основе репозитория Google Code (http://code.google.com). Используется для хранения исходного кода и прочих файлов проекта.
  • TortoiseSVN –клиентское приложение для системы контроля версий Subversion. Используется для управления репозиторием.
  • Redmine – открытое серверное веб-приложение для управления проектами и задачами (в том числе для отслеживания ошибок). Используется для планирования, фиксации найденных ошибок, отслеживания текущего состояния проекта и уведомления участников проекта.
  • Ramus – кроссплатформенная система моделирования и анализа бизнес-процессов. Используется на этапе проектирования для создания модели потоков данных.
  • Мастер ТЗ – бесплатное ПО для создания ТЗ на разработку ПП. Обеспечивает поддержку создания профессионального ТЗ в соответствии с ГОСТ.

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

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

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

Список использованных источников
  1. Guide to Software Engineering Base of Knowledge (SWEBOK). IEEE Computer Society, 2004. Режим доступа – http://www.swebok.org/
  2. Mark Russinovich’s Blog. Режим доступа –http://blogs.technet.com/b/markrussinovich/about.aspx
  3. Одинцов, И. Профессиональное программирование. Системный подход / Одинцов И. – БХВ-Петербург, 2006. – 624 с.
  4. Рекомендации по преподаванию программной инженерии и информатики в университетах. – М.: ИНТУИТ.РУ «Интернет-Университет Информационных Технологий», 2007. – 462 с.
Вид представления доклада  Устное выступление и публикация
Уровень  Бакалавриат
Ключевые слова  Программная инженерия, матричная структура, командная работа.

В статусе «Черновик» Вы можете производить с тезисами любые действия.

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

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

Статус «Опубликован» означает, что издана бумажная версия тезиса и тезис изменить нельзя. В некоторых крайне редких ситуацих участник может договориться с Оргкомитетом о переводе тезисов в статус «Черновик».

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