УДК 004.05
М. Ю. Алтуфьев, В. В. Лаптев Астраханский государственный технический университет
РАЗРАБОТКА ЧЕРЕЗ ТЕСТИРОВАНИЕ В АВТОМАТИЗИРОВАННОЙ СИСТЕМЕ УПРАВЛЕНИЯ «ВУЗ»
Введение
Разработка через тестирование (Test Driven Development, TDD) - это способ разработки программного обеспечения, при котором сначала создается тестирующий (тестовый) код, а затем выполняется написание рабочего кода программы, который и проверяется с помощью тестирующего кода.
Технология TDD тесно связана с методикой экстремального программирования [1], поскольку ориентирована на быструю и качественную разработку программного обеспечения небольшой группой людей.
Экстремальное программирование - это методика организации разработки программного обеспечения для небольших и средних по размеру команд специалистов, занимающихся разработкой программного продукта в условиях неясных или быстро меняющихся требований. Характерной чертой экстремального программирования является отсутствие отдельного явно выраженного этапа проектирования. TDD очень хорошо укладывается в эту схему, позволяя угнаться одновременно «за двумя зайцами». Разработчик, не задумываясь о проектировании как об отдельном и сложном процессе, тем не менее выполняет реальное проектирование, разрабатывая тестирующий код. Этот же код используется и на этапе тестирования.
Специфика разработки автоматизированной системы управления (АСУ) «ВУЗ» с использованием TDD
Необходимость создания в короткие сроки приложения, способного заменить и дополнить функциональность уже существующего, хорошо соотносится со схемой экстремального программирования при наличии технического задания. Стандартная схема [2] разработки через тестирование заключается в следующем:
1. Формируется предварительное задание на разработку (которое в дальнейшем может и, скорее всего, будет изменяться).
2. Определяется набор задач, необходимых для достижения поставленной цели.
3. Формируется список первоочередных задач. Величина списка зависит от количества разработчиков в группе - по одной задаче на два человека.
4. Для каждой задачи создается тестирующий код, который обычно называют набором тестов. Код пишется в предположении, что вся нужная функциональность уже реализована, поэтому он должен осуществлять полную проверку как отдельных функций, так и всей задачи как «черного ящика».
5. В соответствии с набором тестов создаются сначала интерфейсы классов, а потом и их реализация.
6. При завершении каждого участка кода, для которого существует тест, весь набор тестов прогоняют заново, чтобы убедиться, что добавление новой функциональности не повлекло изменения существующей.
7. В процессе разработки могут корректироваться и тестирующий, и рабочий код.
Таким образом, все начинается с первого прогона тестирующего кода, на котором ни один
тест не работает, и заканчивается наличием некоторого логически завершенного кода, на котором все тесты выполняются правильно.
Однако есть определенные отличия в применении методики TDD для разработки при наличии хорошо описанной предметной области с уже известными параметрами объектов и потоков информации. В этом случае при создании классов программы имеет смысл использовать сущности в том виде, в каком они участвуют в бизнес-процессе. Это позволяет сразу определиться с основной частью структуры базы данных. Именно такая ситуация складывается при разработке АСУ Астраханского государственного технического университета (АГТУ), поскольку фактически выполняется реинжениринг существующей системы на новую платформу с использованием новых версий программного обеспечения разработки.
Переработка существующей АСУ АГТУ выполняется с использованием программных продуктов и технологий Microsoft. Опытным путем был сформирован эффективный набор программных средств, наилучшим образом подходящий для использования методики разработки через тестирование.
Программный код разрабатывается в среде Visual Studio.NET, на языке C#. База данных разрабатывается в среде СУБД Microsoft SQL Server. Данное сочетание программных продуктов позволяет использовать системы Gentle.NET для отображения реляционных отношений в классы и, соответственно, кортежей в объекты.
Gentle.NET - система, избавляющая разработчика от деталей взаимодействия программы с базой данных. Система позволяет работать непосредственно с классами, представляющими собой отображения таблиц базы данных. Gentle.NET не только обеспечивает выборку, добавление, обновление данных, поддержку создания и представления запросов на языке SQL, но и допускает работу с базой данных (БД) исключительно средствами языка C#.
MyGeneration - программный продукт, позволяющий генерировать классы для работы с таблицами и представлениями БД для различных языков программирования. В том числе MyGeneration поддерживает связку C# + Gentle.NET + SQL Server 2000, т. е. генерирует классы на языке C# с метаданными для Gentle.NET на основе имеющейся базы данных SQL Server 2000. MyGeneration в этом наборе программных продуктов не является ключевым, т. к. не связан с технологией работы, однако он позволяет существенно ускорить процесс работы с Gentle.NET.
Последним и одним из наиболее важных приложений является NUnit. NUnit предназначен для тестирования проектов, созданных в Visual Studio.NET. NUnit позволяет создавать классы и статические методы, которые при наличии минимально необходимого количества метаданных способны обеспечить комплексную проверку правильности работы тестируемых объектов, методов, свойств и т. д. при работе приложения в режиме отладки [3]. Именно наличие такой программы, как NUnit позволяет применить методику TDD для разработки программного обеспечения АСУ АГТУ с использованием Visual Studio.NET. Схема TDD при вышеупомянутых условиях определяется следующим образом.
1. На основе описания предметной области и структур данных создается база данных в SQL Server 2000.
2. Генерируются классы для работы с базой данных (MyGeneration + Gentle.NET).
3. Начинается работа по классической схеме TDD. Разрабатываются тесты для определения адекватности взаимодействия сгенерированных классов при работе в комплексе. Тесты пишутся с применением программного продукта NUnit.
4. Разрабатываются классы, предназначенные для включения классов Gentle.NET в общую схему работы приложения, что, собственно, и является проверкой адекватности их работы.
5. Прогон тестов. После того как все тесты успешно пройдены, наступает следующий этап работы: разбиение на мелкие подзадачи, которые группа из двух программистов способна реализовать в течение одного дня таким образом, чтобы результат реализации представлял собой некоторый законченный элемент программы и позволял проекту компилироваться и успешно проходить все тесты.
Обычно при подобной разработке не раз изменяется структура базы данных, однако благодаря наличию MyGeneration, Gentle.NET и тестов NUnit каждое внесение изменений осуществляется очень быстро. Так, изменение структуры двух таблиц и добавление связанных с ними трех новых может быть выполнено в течение часа, и еще около часа потребуется разработчикам на исправление возникших в коде ошибок, показанных после прогона тестов. При этом классы, представляющие новые таблицы, уже оказываются готовыми к дальнейшей работе.
Заключение
В целом следует признать, что связка программных продуктов MS Visual Studio.NET, MS SQL Server 2000, Gentle.NET, MyGeneration и NUnit служит хорошей основой для быстрой и качественной разработки программного продукта в условиях изменяющихся требований и существенного ограничения временных и человеческих ресурсов.
При этом использование NUnit и технологии TDD служит гарантией не только того, что разработка будет проведена достаточно быстро, но и того, что конечный программный продукт будет качественным и надежным.
СПИСОК ЛИТЕРАТУРЫ
1. Бек К. Экстремальное программирование. Библиотека программиста. - СПб.: Питер, 2002. - 224 с.
2. Бек К. Экстремальное программирование: разработка через тестирование. Библиотека программиста. -СПб.: Питер, 2003. - 224 с.
3. Payne J. E., Alexander R. T., Hutchinson C. D. Design-for-Testability for Object-Oriented Software. Sigs Publications, INC, 1997.
Статья поступила в редакцию 11.09.2006
TEST DRIVEN DEVELOPMENT IN AUTOMATED CONTROL SISTEM "HIGHER LEARNING INSTITUTE”
M. Yu. Altufiev, V. V. Laptev
The given article deals with the analysis of Test Driven Development methodology in application with fast and qualified software development in the evolving environment and considerable shortage of the resources. The use of the methodology is examined by the example of ACS development of Astrakhan State Technical University.