Язык ДРАКОН, тестирование и литературное программирование27 октября 2010, 12:57
1 файл
Владимир Данилович!
Меня зовут Сергей Новиков. Я занимаюсь разработкой Дракон-редактора с 2005 года. Цель письма – установить с вами личный контакт и проинформировать вас о проводимой мною работе.
Я применил созданный мною редактор для тестирования программ. Также разработал прототип для программирования в литературном стиле. Предлагаю вам ознакомиться с полученными результатами.
1. ДРАКОН И ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯВ настоящий момент я работаю на предприятии Сигнатек, г. Новосибирск. Предприятие занимается разработкой программного обеспечения. Занимаю должность руководителя отдела тестирования. Основная трудовая функция – руководство процессом тестирования программ.
Для повышения продуктивности тестировщиков я применил Дракон-редактор. Идея была в том, чтобы записывать тесты в виде схем на Драконе. Это возможно, поскольку тест – не что иное, как алгоритм воздействия на тестируемую программу и контроль отклика.
Тесты снабжаются дополнительным текстовым описанием и комментариями. Пакеты тестов объединяются в методики тестирования.
В настоящий момент нами накоплено солидное число тестов (порядка 500). И теперь мы думаем о сетевом варианте редактора, чтобы было удобно обслуживать наш пакет тестов. А также работать совместно.
Особенность – тестировщики применяют Дракон-редактор не только для записи тестов, но и для их интерактивного исполнения.
Предусмотрено два способа исполнения шагов алгоритма – ручной и автоматический.
При ручном исполнении действие осуществляет тестировщик. При автоматическом – Дракон-редактор. Автоматизация стала возможной благодаря новым интерфейсам программирования для Windows.
С помощью этих технологий вполне возможно буквально в одиночку создавать программы, управляющие другими программами вместо человека.
Если все шаги теста автоматизированы – такой тест может быть исполнен полностью автоматически, без участия тестировщика. Неавтоматические шаги теста надо выполнять вручную.
Таким образом, мы получили возможность шаг за шагом автоматизировать тесты. В процессе автоматизации мы можем в любой момент исполнить тест в полуавтоматическом режиме, не дожидаясь полного завершения процедуры.
На мой взгляд, удалось воплотить в жизнь идею «Автоматизация без программистов» (перефразируя лозунг «Программирование без программистов»).
Дело в том, что для автоматизации тестирования требуется очень высокая квалификация тестировщика. Фактически, все современные среды автоматизации тестирования требуют, чтобы тестировщик знал тот или иной язык программирования и рассматривают автоматизацию как вариант программирования.
В моём же случае, тестировщик средней квалификации, без знания языка программирования, способен составлять полностью автоматические тесты в виде схем на Драконе, да ещё и записанные по-русски.
Дальнейшие планы:1. Создать завершённый продукт.
2. Открыть сайт.
3. Представить его на конференции тестировщиков. Рассчитываю успеть к июню 2011, когда будет проходить очередная конференция TestLabs.
2. ДРАКОН И ЛИТЕРАТУРНОЕ ПРОГРАММИРОВАНИЕНекоторое время назад я ознакомился с концепцией литературного программирования Дональда Кнута. Основной источник:
http://www.literateprogramming.com.
Я нашёл, что Дракон и литературное программирование дополняют и усиливают друг друга.
Суть литературного программирования:
1. Программы надо составлять так, как пишется книга. Кусочки программы надо выстраивать в последовательности, удобной для чтения человеком, поскольку основная масса времени программиста тратится именно на чтение, а не на кодирование.
2. С помощью специальной утилиты из кусочков программы формируется код, предназначенный для компилятора.
3. С помощью другой утилиты из тех же самых кусочков собирается аккуратно оформленный текст, предназначенный для прочтения человеком.
В течении октября я внёс изменения в свой Дракон-редактор. И реализовал прототип для составления программ на языке С++ в литературном стиле с использованием Дракона.
Как Дракон стыкуется с литературным программированием:1. Декларативная часть программы – функции, переменные, классы, файлы – представлена в виде карточек (литературных секций в терминологии Кнута). Каждая карточка содержит текстовое описание, паспорт (объявление в соответствиями с требованиями языка программирования) и, если надо, Дракон-схему.
2. Алгоритмическая часть программы – код функций – изображается Дракон-схемами.
3. Функции можно дробить на логически завершённые фрагменты – вставки – это делается для разделения алгоритмов на простые, понятные кусочки. Кроме того, один и тот же кусочек можно использовать в двух разных функциях, но это редкость.
4. По команде пользователя Дракон-редактор собирает кусочки как надо и формирует из них цельный код на языке С++. Компилятор С++ создает из него исполняемую программу.
5. По другой команде пользователя Дракон-редактор генерирует текст на языке HTML. Этот электронный документ можно открыть в обозревателе Интернета, распечатать и проанализировать.
Важно, что Дракон-редактор не использует литературную разметку, которую предложил Кнут. Если этой разметкой маркировать текст программы на С++, получается тихий ужас! На мой взгляд, идея литературного программирования очень хороша, но реализация плоха из-за этой разметки. Вместо облегчения интеллектуальной деятельности программист получает усложнение процесса кодирования. Этим перечёркиваются преимущества подхода. Кнут не отказался от текста. А Дракон-редактор вместо разметки использует карточки и схемы.
Привожу несколько иллюстраций.
А) Обозреватель фрагментов программы и вид на объявление функции. В правой части окна Дракон-редактора находится обозреватель фрагментов. В нем все фрагменты программы представлены в виде упорядоченного дерева.
Логически связанные кусочки программы размещаются рядом друг с другом. Так их проще осмыслить. Во главу угла поставлено удобство для человека, а не компилятора.
В левой (основной) части окна Дракон-редактора находится область редактирования. На рисунке показана карточка, содержащая объявление функции. Функция снабжена текстовым описанием. Показан прототип функции на языке С++. А также приведена Дракон-схема.
Дракон-программа – это структурированный набор карточек. Карточки устроены также, как и статьи в открытой энциклопедии Wikipedia.
Любую карточку можно открыть для просмотра или внесения изменений. Для правки карточки необходимо щёлкнуть по ссылке «править».
Любые изменения можно отменить. Текст в карточках макетируют с помощью разметки. Применяется специальная разметка текста, которая позволяет создавать списки, ссылки и выделять текст различным начертанием.
При этом разметка оптимизирована так, чтобы было максимально удобно набирать текст на русском языке и поменьше переключать раскладку.
Выноска 2 (с границей): Объявление функции – содержит текстовое описание, прототип и схему функции.
Б) Вид на редактор схемы.
Щёлкнули по ссылке «править» и попали в этот редактор. Чтобы сохранить изменения схемы, надо щёлкнуть кнопку «Готово».
Редактирование осуществляется практически также, как в редакторе Геннадия Тышова – в валентной точке схемы надо вызывать контекстное меню и выбрать в нём икону – действие, условие и т.п.
К настоящему моменту не реализованы такие макроиконы, как Переключатель и Цикл Для. Просто до настоящего момента мы обходились и без них.
Остальные макроиконы реализованы. В том числе конструкции Примитив и Силуэт. Их возможно преобразовывать друг в друга. Не реализованы операция заземления и пересадки лианы.
В отличие от редактора Геннадия Тышова я реализовал автоматическое построение (макетирование) схемы. Пользователю не надо вручную выравнивать иконы. Это дело редактора. Это позволяет сконцентрироваться исключительно на логике алгоритма, а не отвлекаться на рутину с выравниванием икон.
Я потратил много времени на разработку алгоритма выравнивания. И как мне кажется, это самая трудная часть в Дракон-редакторе.
Начало и конец алгоритма изображаются не вполне «канонически», но я ещё не брался за оптимизацию внешнего вида схемы. Со временем, это обязательно будет сделано.
Также в отличие от редактора Геннадия в моём варианте нет ограничения на размер схемы. Можно рисовать схемы любых размеров, от миниатюрных до гигантских.
Редактор Геннадия изначально является разновидностью графического редактора. Мой же работает на более высоком уровне – на уровне языка Дракон.
Также я прилагаю электронный текст, сгенерированный Дракон-редактором. Для просмотра распакуйте прилагаемый архив и откройте файл Demo.html.
Дальнейшие планы:
1. Довести до ума, когда не стыдно будет показать сообществу на OberonCore.
2. Презентовать и далее улучшать по отзывам.
Намереваюсь развивать это направление следующим образом. Перепишу Дракон-редактор на языке С++ (исходно он написан на Visual Basic 2008 с использованием .NET Framework 3.5).
В процессе переписывания пойму плюсы и минусы связки литературного подхода с Драконом. Смогу убедиться в правильности пути. Пойму, что реально необходимо в редакторе, а что не нужно.
К тому же, мне уже давно хочется отказаться от .NET Framework, т.к. в ряде случаев я был вынужден бороться с этим каркасом, подстраиваться под него.
3. КАК ДРАКОН ПОВЛИЯЛ НА МОЮ СУДЬБУВладимир Данилович, хотел бы выразить вам искреннюю благодарность за вашу работу по популяризации Дракона!
Лично на меня ваши идеи оказали самое непосредственное влияние. Впервые я познакомился с Драконом в 2000 году, когда прочитал «Как улучшить работу ума».
Тогда же задумался о создании Дракон-редактора. Примерно в 2003 скопил немного денег, уволился с работы и занялся разработкой.
Первый вариант Дракон-редактора я составлял на языке Java. Но забуксовал на алгоритме автоматического макетирования схемы. Через полгода закончились деньги, и мне пришлось искать новую работу.
Одновременно я прекратил разработку, поскольку зашёл в тупик. Зато открыл для себя теорию автоматов и понял, что это может быть решением задачи макетирования.
Я начинал свою карьеру, работая программистом. По зрелом размышлении я решил, что эта работа чересчур меня изматывает, и не оставляет сил на разработку Дракон-редактора.
Я решил найти что-то попроще. Поэтому, в 2004-м я перебрался из Томска в Новосибирск и устроился на работу тестировщиком.
Через год я стал руководителем отдела тестирования и у меня появилось и время, и силы на продолжение работы по Дракон-редактору.
Вторую попытку я предпринял, наняв себе в помощь ещё одного разработчика. Но через полгода работы дела снова зашли в тупик, и второй вариант Дракон-редактора пришлось выбросить на свалку. Второй вариант я разрабатывал на языке Delphi.
В это время я также активно экспериментировал с хронометражём (система Любищева А.А.). Целью было научиться распределять дела и время так, чтобы оставались силы на Дракон-редактор. И стал большим поклонником этой системы. Занимаюсь хронометражом уже более 3-х лет.
Несмотря на две подряд неудачи с Дракон-редактором, я попробовал снова. И видимо, к третьей попытке у меня уже накопилось достаточно опыта и знаний, чтобы решить все ключевые технические проблемы.
Как только сделал базовый вариант редактора, возникла положительная обратная связь от применения его для задач тестирования. Это придало мне дополнительный мотив.
По моим расчетам, мне нужно ещё около полугода, чтобы поднять уровень разработки до приемлемого, опубликовать свою работу и влиться, наконец, в число участников Дракон-сообщества.
У меня масса идей по улучшению проекта (около 1000 карточек). Все их я тщательно записываю и структурирую. Надеюсь, мне удастся внести определённый вклад в развитие Дракона.
С уважением, Сергей Новиков.
Все файлы проверены, вирусов нет
1 файл
Demo.zip