Интервью с Виктором Куляминым о научных исследованиях в области тестирования |
04.10.2009 20:31 |
Я обещал немного приоткрыть завесу, которая разделяет мир промышленного тестирования и мир научных исследований в этой области, и вот наконец я делаю в этом направлении первый шаг. Сегодня мы публикуем интервью с Виктором Куляминым, старшим научным сотрудником ИСП РАН, автором многочисленных публикаций о тестировании на основе моделей, членом программного комитета ряда научных конференций по тестированию и программной инженерии, преподавателем ВМК МГУ, читающим студентам среди прочих курс лекций по тестированию. Вот вопросы, которые мы задали Виктору:
Ниже более подробная биографическая информация о Викторе и его ответы на наши вопросы. Виктор Кулямин окончил мехмат МГУ в 1995 году, аспирантуру мехмата в 1998 году, там же защитил диссертацию кандидата физико-математических наук в 2000 году. Что вообще можно исследовать в области тестирования программного обеспечения? Исследуют всегда что-нибудь загадочное, не согласующееся с какими-то представлениями на уровне здравого смысла. На первый взгляд в тестировании ничего такого нет. Однако, если внимательно приглядеться к тому, что происходит при тестировании ПО, становится непонятно, как оно вообще возможно. Тестирование служит для того, чтобы находить ошибки и оценивать качество программ. При этом оно проводится в виде некоторого набора испытаний или экспериментов — мы смотрим, как ПО поведет себя в этих испытаниях, выделяем ошибки и на основании полученной информации судим о том, достаточно ли оно хорошо работает в целом или нет. Если же подсчитать количество хоть как-то различающихся состояний современной программной системы, количество разнообразных ее функций и количество различных условий, влияющих на ее поведение, количество возможных ошибок в ее коде, получающиеся числа значительно, на много порядков превосходят так называемые астрономические. Каким образом можно выбрать исчезающе малый по сравнению с общим числом всех мыслимых ситуаций набор тестов, чтобы находить с его помощью важные ошибки и уверенно судить о качестве ПО? Это, собственно, и есть основная проблема тестирования. В большинстве случаев она более-менее успешно решается, несмотря на «загадочность» происходящего. Исследователям важно понять, почему, из-за каких особенностей устройства ПО или применяемых техник тестирования, это становится возможным. Какая польза от подобных исследований для коммерческой разработки ПО? Я пока сказал лишь о главной внутренней задаче исследователя — достичь понимания происходящего, уметь не только себе, но и другим внятно объяснить, как устроен мир и почему он ведет себя именно так. На основе этого понимания, даже когда оно неполное, уже можно пытаться решать более прикладные задачи — обеспечивать более высокую эффективность тестирования в смысле нахождения наибольшего количества ошибок и получения наиболее адекватных оценок качества в целом при минимуме усилий, затрачиваемых на придумывание и выполнение тестов. Естественно, при этом необходимо учитывать особенности проекта, технологии создания тестируемого ПО, его архитектуру и сложность, особенности его кода, нужный уровень качества и пр. Таким образом, в итоге исследователи нацеливаются, в общем-то, на нужные бизнесу вещи — создать методы тестирования, позволяющие получать как можно большие технические результаты при минимуме затрат с учетом ряда внешних ограничений. Почему бизнес ничего не знает об исследованиях в тестировании ПО? Не думаю, что бизнес об этом ничего не знает. Это, может быть, как-то и относится к фрилансерам и небольшим компаниям, пытающимся все познать на собственном опыте. Крупные компании активно интересуются результатами исследований, их представители постоянно участвуют в научных конференциях, где обсуждаются работы в этой области. Самые большие фирмы — Microsoft, IBM, HP, Intel. и пр. — уже давно содержат собственные исследовательские подразделения, куда приглашают наиболее заметных ученых, и где разрабатываются новые технологии и инструменты, интегрирующие идеи, появляющиеся в исследовательском сообществе, с практическими нуждами таких компаний. Можно посмотреть хотя бы на деятельность Microsoft Research — http://research.microsoft.com/en-us/um/redmond/groups/rise/ — в последние несколько лет они очень активно ведут исследования в области тестирования и обеспечения качества ПО. Есть ли разница между подходами к тестированию ПО в бизнесе и науке? Наверно, разница в основных целях. Главная цель бизнеса — заработать денег, поэтому всякое тестирование в рамках бизнес-проектов, в конечном счете, нацелено на это, хотя и с учетом возможностей долгосрочного развития, т.е. отношений с заказчиками и поставщиками, репутации на рынке, и пр. В результате деятельность тестировщиков и проектировщиков тестов не сводится к решению чисто технических задач, она должна учитывать, в первую очередь, бюджет и временные ограничения, договоренности и отношения с клиентами, потребности клиентов и рынка в целом в определенном уровне качества тестируемого ПО. Главная цель исследователя — понять законы, по которым развивается мир. Те методы и технологии тестирования, которые рождаются на базе понимания основных принципов функционирования программных систем, могут учитывать, а могут и не учитывать какие-либо внешние ограничения, и в любом случае не могут создаваться в расчете на ровно ту уникальную ситуацию, которая сложилась в определенном проекте. Они всегда имеют некоторый обобщенный вид, какие-то параметры и неопределенности, которые нужно устанавливать и уточнять в рамках конкретного проекта. Можно сказать, что исследователи имеют дело с обобщениями, с общим случаем, а разработчики тестов в бизнесе — с конкретными деталями, хотя это и не всегда так, а лишь в большинстве случаев. Каковы последние наиболее важные достижения в науке о тестировании? На такой вопрос можно ответить только субъективно, поэтому расскажу о том, что мне кажется наиболее важным, хотя и не только мне. В последние 20 лет появилось довольно много работ по так называемому тестированию на основе моделей. От обычного тестирования оно отличается, фактически, более четкой постановкой задачи — имея заданные модели, описывающие, во-первых, правильное поведение тестируемой системы, и, во-вторых, структуру возможных ситуаций при ее работе и оценку их важности, построить набор тестов, проверяющих правильность работы системы в наиболее важных ситуациях. Откуда берутся такие модели, по сути, не важно, хотя именно их создание и есть самая трудная задача. Большая часть практически значимых исследовательских результатов за последние 10 лет связана именно с тестированием на основе моделей. В повседневную практику коммерческой разработки ПО этот подход еще не вошел, хотя он уже используется при создании телекоммуникационных систем и системного ПО, а сейчас начинает понемногу внедряется и в разработку прикладного ПО некоторых видов. В этой области уже есть достаточно зрелые и мощные инструменты, например, SpecExplorer у Microsoft Research, Conformic Qtronic, LERIOS от SmartTesting, UniTESK, к разработке которого причастны и я, и Алексей Баранцев. Несмотря на значительные достижения, в этом направлении еще есть куда развиваться. Более свежие исследования, проводимые в последние 3-5 лет, нацелены на интеграцию тестирования с техниками формальной верификации ПО, т.е. со строгой проверкой выполнения тех или иных свойств программ, в основном, при помощи автоматического анализа кода. Эти идеи пока лишь очень редко находят применения в бизнес-проектах, хотя у них большие перспективы. В той же Microsoft Research многие исследовательские проекты (SLAM, Pex, SAGE) связаны с этой темой. Можно назвать еще одно направление, появившееся в последние 5-10 лет — расширяемые каркасы для автоматизации тестирования. Предком таких каркасов является JUnit — вообще-то, SUnit, сделанный Беком еще раньше на Smalltalk, но об этом мало кто помнит, поэтому лучше отталкиваться от наиболее известного представителя этого семейства инструментов. Дальше появились такие инструменты, как TestNG и NModel, имеющие гораздо больше функций при почти той же простоте использования, и на этом, я думаю, развитие не остановится. Можно ли в числе этих достижений упомянуть test driven development? Да, автоматизация тестирования сейчас нередко ассоциируется с test driven development, разработкой на основе тестов. Однако, как говорит само название, это прежде всего метод разработки ПО, а не его тестирования. Он, конечно, внес весьма значимый вклад в программную инженерию в целом, при его использовании качество ПО существенно повышается. Однако, с точки зрения тестирования для оценки качества программ и поиска ошибок в них, тесты, сделанные перед разработкой, бесполезны. Все ошибки, обнаруживаемые ими, были фактически устранены заранее. Но это не значит, что в полученной программе нет других, иногда тоже достаточно значимых ошибок. Только искать их нужно уже на основе каких-то других идей, а не тех, которыми руководствовались при создании предварительных тестов. Для тестирования, впрочем, хорошо то, что можно использовать те инструменты, которые были созданы для разработки на основе тестов, хотя и с другими целями. Где можно найти информацию об исследовательских работах в области тестирования? К сожалению, нет никаких сайтов или мест, где бы информация такого рода систематически собиралась и можно было бы найти резюме о наиболее важных достижениях. Приходится следить за конференциями, большинство из которых проходят раз в год, за журналами, за сайтами авторитетных исследовательских организаций. Наиболее известные исследовательские конференции — TESTCOM/FATES, ISSTA, QSIC, MBT, недавно организованная ICST, более общие ISSRE, ICSE. Из журналов, для доступа к которым, правда, нужна подписка, можно упомянуть IEEE Software, IEEE Transactions on Software Engineering, ACM Computing Surveys, ACM Transactions on Software Engineering and Methodology, Journal of Systems and Software, и т.д. Исследовательских групп в области тестирования довольно много, я их перечислять не решусь. Если кому действительно интересно и не жалко времени, потраченного на просмотр десятков сайтов, можно заглянуть на страничку Tao Xie http://people.engr.ncsu.edu/txie/ — он собрал там огромное количество ссылок на журналы, конференции, сайты лабораторий или ученых, на отдельные статьи, не только по тестированию. Часть из этих ссылок уже не работает, но в целом они дают достаточно адекватное представление о текущем состоянии исследований в области тестирования ПО. |