Преподавание тестирования в вузе

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

Я преподаю курс «Тестирование программного обеспечения» в Поволжском Государственном Технологическом университете бакалаврам и магистрам. Это не основная работа, а скорее помощь родному вузу и местному IT-сообществу. Моя основная работа – старший инженер по тестированию в коммерческой компании. Также я веду двухдневные интенсивные курсы по тестированию в коммерческом обучающем центре.

Вуз я закончил в 2008, преподаю с 2012-го. У меня этого предмета не было, тестированию была посвящена пара лекций в рамках другого курса, но с внедрением очередного обновления ФГОС-ов и переходом на бакалавриат предмет «Тестирование ПО» стал фактически обязательным на специальности 231000 Программная инженерия (см. стр. 15 ФГОСа). Так что тестированию, на самом деле, должны обучать довольно в большом количестве вузов.

Что ждет начинающего преподавателя в вузе

Бюрократия. Это не будет чем-то удивительным для тех, кто уже работал в государственных учреждениях, но меня раздражало обилие документов, справок, заявлений и пр. Еще до начала преподавания вам необходимо написать талмуд на сотню-другую страниц под названием Учебно-методический комплекс. Кроме этого есть отчетность по каждой лекции/практике, ведомости для зачетов и экзаменов. В общем, нельзя просто прийти в вуз и начать преподавать – надо выполнять довольно большое количество внутренних требований вуза.
В состав самого УМК входят расписание лекций и лабораторных, темы каждой лекции, задания для каждой лабораторной работы, критерии оценки, экзаменационные вопросы, краткий конспект лекций, глоссарий, методические указания для студентов и преподавателей, список литературы, список используемого ПО, требования к лекционным и лабораторным аудиториям.

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

Как отличается контингент слушателей в вузе по сравнению с курсами?

Исходный уровень и знания

У студентов есть некоторый общий и обязательный уровень знаний. Те, кто приходят ко мне:

  • Имеют математическую подготовку
  • Умеют логически мыслить
  • В принципе хорошо разбираются в технологиях
  • Умеют программировать и знают как минимум 2 языка программирования (Python, C++)
  • И при необходимости выучат еще один (Java)
  • Знают HTML, CSS, JavaScript, как устроен интернет и браузер
  • Самостоятельно могут разобраться с новым софтом, используя документацию и интернет

Поэтому им можно давать сразу более высокий уровень задач, не требуется объяснять базовые вещи. А если студент не знает что-то из того, что есть в образовательной программе – это уже проблема студента, а не преподавателя :)
Люди, которые приходят на курсы, имеют совершенно разный уровень знаний, и одна и та же задача кому-то кажется крайне легкой, а кому-то — непонятной и нерешаемой

Мотивация

У студентов курсов это, в первую очередь, «морковка спереди», они сами хотят получать новые знания, развиваться, стараться, ведь именно за знаниями и навыками они пришли на курсы тестировщиков.
Для студентов университета основная мотивация – «морковка сзади». Далеко не все из них горят желанием изучать именно тестирование, как бы нам с вами этого ни хотелось.
Соответственно, общая замотивированность группы ниже. Среднестатистическому студенту хочется получить зачет или «хор» за курсач с минимальными трудозатратами :) Это, конечно, не про всех, но не стоит считать, что весь поток должен обязательно любить ваш предмет.

По статистике, не более 15-20% студентов досконально разбираются с задачей, самостоятельно изучают непонятые вещи, делают все сами и стараются заработать максимальный балл. Причем, как показывает практика, это рвение обычно относится не к конкретному предмету, а вообще к учебе. Основная масса студентов, около 50-60% – «середнячки», они подглядывают решения или алгоритмы у «топовых» студентов, но в материале стараются разобраться. Остальные 20-35% пытаются любыми способами схалявить и как-нибудь набрать баллов на зачет, списывают, сдают чужое и мучают преподавателя весь январь/июнь вопросами «когда еще можно пересдать?»

Сплоченность и однородность коллектива

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

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

Что рассказывать? Чему учить?

  1. Что требуют вуз и ФГОС. Это первое, что нужно будет учесть. Без выполнения этих требований вас просто не допустят.
  2. Что требует бизнес, особенно в вашем городе. Для этого можно встретиться с представителями компаний – не обязательно с ген. директорами и прочими CEO, бывает эффективнее пообщаться с руководителями отделов тестирования или разработки.
  3. Что вы знаете и умеете. Передавайте свои знания и реальный опыт молодому поколению.

Не стоит сильно углубляться в теорию. Тестирование — это не философия и не матан. Тестирование – прикладная деятельность. Например, тестировщик должен понимать, в чем заключается суть Pairwise, но не обязан уметь строить таблицы вручную – для этого есть специальный софт. Для тех, кто захочет углубиться в какую-то конкретную область обеспечения качества, есть магистратура и аспирантура. В учебном плане нашего вуза на 1 лекцию приходится 2 практики, и такое соотношение вполне удобно. Тем более, что никто не запрещает давать часть лекционного материала на лабораторных работах :)

Мои темы
1. Что такое тестирование? Зачем оно нужно?
2. Виды, уровни, методы тестирования.
3. Методы проектирование тестов. Классы эквивалентности, граничные значения.
4. Тестовая документация. Тест-кейсы, чек-листы, тест-планы.
5. Работа с баг-трекерами. Баг-репорты. Жизненный цикл бага.
6. Функциональное тестирование
7. Тестирование интерфейса и юзабилити
8. Нагрузочное тестирование
9. Модульное тестирование. Метрики покрытия кода.
10. Особенности тестирования веб-приложений, десктопных приложений, мобильных приложений. На что обращать внимание.
11. Автоматизация тестирования
12. Инструментарий тестировщика
Я провожу ревью лекций и практик каждый год перед началом очередного семестра, и каждый год что-то удаляется, что-то добавляется как в лекционном, так и в практическом материале.

Особенности организации процесса обучения

В отличие от курсов, не вы задаете сроки и нагрузку

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

У студента есть параллельные курсы

Еще одна особенность курса в вузе – у студента в этом же семестре есть другие предметы, которые могут помочь в изучении тестирования, а могут и мешать – смотря как вы взаимодействуете с другими преподавателями.
Например, курс «Разработка и анализ требований» очень хорошо сочетается с курсом по тестированию в части анализа требований, «ООП» – в части юнит-тестирования, «Человеко-машинное взаимодействие» – в части юзабилити-тестирования.
Что это дает нам как преподавателю – облегчение общей нагрузки, так как она делится с другим преподавателем (у второго преподавателя, соответственно, точно так же), экономия на лекциях и практиках.
Что это дает студентам – понимание взаимосвязи между различными видами деятельности в процессе разработки, снижение общей нагрузки (например, одна лабораторная работа может быть сдана сразу по 2 предметам). Это тоже позволяет делать процесс обучения более эффективным.

На чем студенты тренируются?

На реальных проектах. Никаких листбоксеров, сломанных калькуляторов и прочих извращений. Подобное я практиковал в первый год обучения, но несостоятельность таких «тестовых» приложений стала ясна сразу же.
Откуда берутся эти реальные проекты?
Во-первых, часть студентов уже работает, стажируется или проходит практику в компаниях. И в качестве тренировочных проектов они берут свои рабочие проекты, если, конечно, позволяет состояние проекта и отсутствие соглашений о неразглашении.
Во-вторых, каждый год перед началом семестра я опрашиваю руководителей нескольких компаний, какие проекты они могут предоставить на тестирование студентами. Еще ни разу не отказывали, но просили нагрузку и безопасность на живых проектах не проверять :) Иногда даже на помощь выделяются люди из штата компании, которые также «мониторят» студентов.

В чем плюсы такого подхода:

  • Процесс более приближен к реальности, находятся реально существующие проблемы в реальных продуктах.
  • У каждого студента своя тема работы, списать становится сложнее, и надо думать своей головой (но на самом деле списывают, конечно). Иногда работают в группах, и тогда сразу выделяются потенциальные руководители :)
  • Налаживаются дополнительные связи между студентами и работодателями.
  • Компании получают фидбек по продукту

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

Помогает ли этот курс в будущей работе?

Я очень надеюсь, что да. Выпускники в основном работают программистами, тестировщиков выходит не так уж много, 1-2 человека в год (из 20-30), и они устраиваются на работу без проблем.
Мне, кстати, этот курс тоже помогает быть в тонусе, уходить от ежедневной рутины, прокачивать навыки управления людьми и более критично относиться к самому себе: каждый год находится что-то, чего я еще не знаю или понимаю не до конца.

Дополнение:
С прошлого года в программу добавили курсовой проект. Я построил курсовой таким образом, что он основан на тестируемом продукте и во многом опирается на лабораторные работы. Курсовой проект заключается в комплексном тестировании продукта. Студент пишет тестовую документацию (тест-план, тест-кейсы, чек-листы, персонажи для юзабилити-тестирования и пр.), проводит тестирование, пишет отчеты, автоматизирует тесты. Обязательно берется функциональное тестирование, совместимости, юзабилити/интерфейса, по возможности добавляется нагрузочное.

  • Kim Andrew

    Классный опыт. Очень интересная статья. Вопрос. Практикуете ли вы курсовые работы? Если да, то какого рода задания?

    • Да, с прошлого года курсовые появились в программе.

      На данный момент курсовой — это комплексное тестирование продукта (студент выбирает сам, обычно это что-то web-based)

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

      • Kim Andrew

        Интересно. Пойдем дальше. А был ли опыт сопровождения диплома на тему тестирования?

        • Нет, такие дипломы пока что не писали.