Создание простого тестового задания средствами VBA Excel на конкретном примере. Загрузка вопросов и ответов с помощью массивов. Выставление оценки за тест.
Описание тестового задания
Простое тестовое задание состоит из пяти вопросов с пятью вариантами ответов на каждый. Оценивается пройденный тест от 0 до 5 баллов в зависимости от количества правильных ответов.
Пользователь выбирает на каждый вопрос один ответ из пяти предложенных и нажимает кнопку «Оценить». Результат выполнения тестового задания выводится в информационном окне MsgBox.
Форма и элементы управления
На пользовательской форме VBA Excel расположены пять элементов управления Frame (рамка) для размещения вопросов. В каждой рамке расположены по пять элементов OptionButton (переключатель) для размещения и выбора вариантов ответа.
Рамки нужны для объединения переключателей в группы, в которых только один элемент OptionButton из группы может иметь значение True. Это облегчает пользователю перевыбор ответа.
Кнопка CommandButton1 используется для запуска процедуры расчета оценки за пройденный тест.
Загрузка вопросов и ответов
Вопросы и варианты ответов присваиваются массивам непосредственно в коде VBA Excel. Из массивов информация передается на пользовательскую форму элементам управления Frame и OptionButton.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Private Sub UserForm_Initialize() Dim arr1 As Variant, arr2 As Variant, i As Byte ‘Присваиваем список вопросов массиву arr1 arr1 = Array(«Сколько лапок у мухи?», «На что меняют шило?», _ «5! — это сколько?», «Кто может стать мужем лосихи?», _ «Что в списке цветов лишнее?») ‘Присваиваем вопросы заголовкам рамок ‘из массива arr1 For i = 1 To 5 Controls(«Frame» & i).Caption = arr1(i — 1) Next ‘Присваиваем варианты ответов массиву arr2 arr2 = Array(«2», «4», «6», «8», «10», «на вилы», «на мыло», _ «на силу», «на рыло», «на рынду», «24», «48», «60», «120», _ «240», «Вепрь», «Упырь», «Бугай», «Мизгирь», «Сохатый», _ «Сенполия», «Физалия», «Циния», «Пеларгония», «Аквилегия») ‘Присваиваем варианты ответов надписям ‘переключателей из массива arr2 For i = 1 To 25 Controls(«OptionButton» & i).Caption = arr2(i — 1) Next CommandButton1.Caption = «Оценка» Me.Caption = «Тестовое задание» End Sub |
Выставление оценки за тест
Для расчета оценки за пройденный тест используется свойство Value элемента управления OptionButton, которое равно True, если переключатель выбран. В тексте процедуры свойство Value не указано, так как оно является для OptionButton свойством по умолчанию.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Private Sub CommandButton1_Click() Dim arr3 As Variant, n As Byte, i As Byte ‘Присваиваем порядковые номера правильных ‘ответов массиву arr3 arr3 = Array(«3», «7», «14», «20», «22») ‘Считаем количество правильных ответов For i = 1 To 5 If Controls(«OptionButton» & arr3(i — 1)) Then n = n + 1 End If Next ‘Выводим результат в MsgBox MsgBox «Ваша оценка: « & n End Sub |
Предложенное здесь простое тестовое задание в VBA Excel можно усовершенствовать, организовав загрузку вопросов и ответов в массивы с активного рабочего листа. Тогда на разных листах можно будет создать различные варианты тестов и запускать их одной программой, выбрав нужный лист.
Если ваши ученики освоили в Excel представление и
обработку данных, то можно переходить на
качественно новый уровень работы с Excel –
автоматизировать свою работу. Язык VBA (Visual Basic for
Application) – язык программирования, который
подходит для всех приложений Microsoft Office, это один
из самых простых в изучении и применении языков,
он является версией языка Visual Basic.
Предлагаю задания для создания проектов в виде
тестов в среде MS Excel и VBA.
Задание:
- Откройте Excel.
- Переименуйте Лист1 в Вопросник
и составьте таблицу.
Для каждого вопроса создайте пользовательские
формы и с помощью их заполните таблицу.
Пользовательские формы могут иметь вид:
UserForm1
UserForm2
- При вызове следующего вопроса закрывается
текущая форма, записываются результаты на лист Вопросник,
и открывается форма со следующим вопросом. - В форме с последним вопросом запрограммировано
только закрытие формы и запись результатов. - Спроектируйте на листе Excel Вопросник
кнопку вызова форм:
Примечание. Подумайте, как изменится
программа, если заполнить таблицу по вертикали.
Темы проектов:
1. Подобрать тест, обработать его, результаты
показать через пользовательскую форму.
2. Вопросник по любому предмету, результаты
которого обработать в Excel и выдать через
пользовательскую форму оценку:
3. Вопросник «МОЯ ВСЕЛЕННАЯ, ПОЗНАЙ СЕБЯ»
- Создать кнопку вызова.
- Создать форму Вопрос и ответы к ним:
Вопросы:
- Мое любимое занятие…
- Мой любимый цвет…
- Мое любимое животное…
- Мой лучший друг…
- Мой любимый звук…
- Мой любимый запах…
- Моя любимая игра…
- Моя любимая одежда…
- Моя любимая музыка…
- Мое любимое время года…
- Что я больше всего на свете люблю делать…
- Место, где я больше всего люблю бывать…
- Мой любимый певец или группа…
- Мои любимые герои…
- Я чувствую в себе способности к …
- Человек, которым я больше всего восхищаюсь …
- Лучше всего я умею …
- Я знаю, что смогу …
- Я уверен в себе потому, что …
Вопросник «Мне нравится»
- Мне нравится в школе то, что …
- Мне не нравится в школе то, что …
- Я просто в восторге от того, что …
- Мне не нравится на уроке то, что …
- Вот было бы здорово, если бы на уроке можно было
бы …
Смотри Приложение 1, где
можно определить тип темперамента.
Желаю удачи!!!
Время на прочтение
7 мин
Количество просмотров 14K
Проблема
Есть определенная функциональная область приложения: некая экспертная система, анализирующая состояние данных, и выдающая результат — множество рекомендаций на базе набора правил. Компоненты системы покрыты определенным набором юнит-тестов, но основная «магия» заключается в выполнении правил. Набор правил определен заказчиком на стадии проекта, конфигурация выполнена.
Более того, поскольку после первоначальной приемки (это было долго и сложно — потому, что “вручную») в правила экспертной системы регулярно вносятся изменения по требованию заказчика. При этом, очевидно, неплохо — бы проводить регрессионное тестирование системы, чтобы убедиться, что остальные правила все еще работают корректно и никаких побочных эффектов последние изменения не внесли.
Основная сложность заключается даже не в подготовке сценариев — они есть, а в их выполнении. При выполнении сценариев “вручную», примерно 99% времени и усилий уходит на подготовку тестовых данных в приложении. Время исполнения правил экспертной системой и последующего анализа выдаваемого результата — незначительно по сравнению с подготовительной частью. Сложность выполнения тестов, как известно, серьезный негативный фактор, порождающий недоверие со стороны заказчика, и влияющий на развитие системы («Изменишь что-то, а потом тестировать еще прийдется… Ну его…»).
Очевидным техническим решением было бы превратить все сценарии в автоматизированные и запускать их регулярно в рамках тестирования релизов или по мере необходимости. Однако, будем ленивыми, и попробуем найти путь, при котором данные для тестовых сценариев готовятся достаточно просто (в идеале — заказчиком), а автоматические тесты — генерируются на их основе, тоже автоматически.
Под катом будет рассказано об одном подходе, реализующим данную идею — с использованием MS Excel, XML и XSLT преобразований.
Тест — это прежде всего данные
А где проще всего готовить данные, особенно неподготовленному пользователю? В таблицах. Значит, прежде всего — в MS Excel.
Я, лично, электронные таблицы очень не люблю. Но не как таковые (как правило — это эталон юзабилити), а за то, что они насаждают и культивируют в головах непрофессиональных пользователей концепцию «смешивания данных и представления» (и вот уже программисты должны выковыривать данные из бесконечных многоуровневых «простыней», где значение имеет все — и цвет ячейки и шрифт). Но в данном случае — мы о проблеме знаем, и постараемся ее устранить.
Итак, постановка задачи
- обеспечить подготовку данных в MS Excel. Формат должен быть разумным с точки зрения удобства подготовки данных, простым для дальнейшей обработки, доступным для передачи бизнес пользователям (последнее — это факультативно, для начала — сделаем инструмент для себя);
- принять подготовленные данные и преобразовать их в код теста.
Решение
Пара дополнительных вводных:
- Конкретный формат представления данных в Excel пока не ясен и, видимо, будет немного меняться в поисках оптимального представления;
- Код тестового скрипта может со временем меняться (отладка, исправление дефектов, оптимизация).
Оба пункта приводят к мысли, что исходные данные для теста необходимо предельно оделить и от формата, в котором будет осуществляться ввод, и от процесса обработки и превращения в код автотеста, поскольку обе стороны будут меняться.
Известная технология превращения данных в произвольное текстовое представление — шаблонизаторы, и XSLT преобразования, в частности — гибко, просто, удобно, расширяемо. В качестве дополнительного бонуса, использование преобразований открывает путь как к генерации самих тестов (не важно на каком языке программирования), так и к генерации тестовой документации.
Итак, архитектура решения:
- Преобразовать данные из Excel в XML определённого формата
- Преобразовать XML с помощью XSLT в финальный код тестового скрипта на произвольном языке программирования
Конкретная реализация на обеих этапах может быть специфична задаче. Но некоторые общие принципы, которые, как мне кажется, будут полезны в любом случае, приведены ниже:
Этап 1. Ведение данных в Excel
Здесь, честно говоря, я ограничился ведением данных в виде табличных блоков. Фрагмент файла — на картинке.
- Блок начинается со строки, содержащей название блока (ячейка “A5″). Оно будет использовано в качестве имени xml-элемента, так что содержание должно соответствовать требованиям. В той же строе может присутствовать необязательный “тип” (ячейка “B5″) — он будет использовано в качестве значения атрибута, так что тоже имеет ограничения.
- Каждая колонка таблицы содержит помимо “официального” названия, представляющего бизнес-термины (строка 8), еще два поля для “типа” (строка 6) и “технического названия” (строка 7). В процессе подготовки данных технические поля можно скрывать, но во время генерации кода использоваться будут именно они.
- Колонок в таблице может быть сколько угодно. Скрипт завершает обработку колонок как только встретит колонку с пустым значением “тип” (колонка D).
- Колонки со “типом”, начинающимся с нижнего подчеркивания — пропускаются.
- Таблица обрабатывается до тех пор, пока не встретиться строка с пустым значением в первой колонке (ячейка “A11”)
- Скрипт останавливается после 3 пустых строк.
Этап 2. Excel -> XML
Преобразование данных с листов Excel в XML — несложная задача. Преобразование производится с помощью кода на VBA. Тут могут быть варианты, но мне так показалось проще и быстрее всего.
Ниже приведу лишь несколько соображений — как сделать финальный инструмент удобнее в поддержке и использовании.
- Код представлен в виде Excel add-in (.xlam) — для упрощения поддержки кода, когда количество файлов с тестовыми данными более 1 и эти файлы создаются/поддерживаются более чем одним человеком. Кроме того — это соответствует подходу разделения кода и данных;
- XSLT шаблоны размещаются в одном каталоге с файлом add-in — для упрощения поддержки;
- Генерируемые файлы: промежуточный XML и результирующий файл с кодом, — желательно помещать в тот же каталог, что и файл Excel с исходными данными. Людям создающим тестовые скрипты будет удобнее и быстрее работать с результатами;
- Excel файл может содержать несколько листов с данными для тестов — они используются для организации вариативности данных для теста (например, если тестируется процесс, в котором необходимо проверить реакцию системы на каждом шаге): откопировал лист, поменял часть входных данных и ожидаемых результатов — готово. Все в одном файле;
- Поскольку все листы в рабочей книге Excel должны иметь уникальное имя — эту уникальность можно использовать в качестве части имени тестового скрипта. Такой подход дает гарантированную уникальность имен различных подсценариев в рамках сценария. А если включать в имя тестового скрипта название файла, то достичь уникальности названий скриптов становится еще проще — что особенно важно в случае если тестовые данные готовят несколько человек независимо. Кроме того, стандартный подход к именованию поможет в дальнейшем при анализе результатов теста — от результатов исполнения к исходным данным будет добраться очень просто;
- Данные из всех листов книги сохраняются в один XML файл. Для нас это показалось целесообразным в случае генерации тестовой документации, и некоторых случаях генерации тестовых сценариев;
- При генерации файла с данными для теста удобно оказалось иметь возможность не включать в генерацию отдельные листы с исходными данными (по разным причинам; например, данные для одного из пяти сценариев ещё не готовы — а тесты прогонять пора). Для этого мы используем соглашение: листы, где название начинается с символа нижнего подчёркивания — исключаются из генерации;
- В файле удобно держать лист с деталями сценария по которому создаются тестовые данные («Documentation») — туда можно копировать информацию от заказчика, вносить комментарии, держать базовые данные и константы, на которые ссылаются остальные листы с данными, и так далее. Разумеется, данный лист в генерации не участвует;
- Чтобы иметь возможность влиять на некоторые аспекты генерации финального кода тестовых скриптов, оказалось удобным включать в финальный XML дополнительную информацию «опции генерации», которые не являются тестовыми данными, но могут использоваться шаблоном для включения или исключения участков кода (по аналогии с pragma, define, итп.) Для этого мы используем именованные ячейки, размещённые на негенерируемом листе «Options»;
- Каждая строка тестовых данных должна иметь уникальный идентификатор на уровне XML — это здорово поможет при генерации кода и при обработке кросс-ссылок между строками тестовых данных, которые при этом необходимо формулировать в терминах как раз этих уникальных идентификаторов.
Фрагмент XML который получается из данных в Excel с картинки выше
<MasterRecord type="Type1">
<columns>
<column>
<type>Field</type>
<name>TechName1</name>
<caption>Business Name 1</caption>
</column>
<column>
<type>Field</type>
<name>TechName2</name>
<caption>Business Name 2</caption>
</column>
<column>
<type>Field</type>
<name>TechName3</name>
<caption>Business Name 3</caption>
</column>
</columns>
<row id="Type1_1">
<Field name="TechName1">A</Field>
<Field name="TechName2">123</Field>
<Field name="TechName3">2016-01-01</Field>
</row>
<row id="Type1_2">
<Field name="TechName1">B</Field>
<Field name="TechName2">456</Field>
<Field name="TechName3">2016-01-01</Field>
</row>
</MasterRecord>
Этап 3. XML -> Code
Эта часть предельно специфична задачам которые решаются, поэтому ограничусь общими замечаниями.
- Начальная итерация начинается по элементам, представляющим листы (различные тестовые сценарии). Здесь можно размещать блоки setup / teardown, утилит;
- Итерация по элементам данных внутри элемента сценария должна начинаться с элементов ожидаемых результатов. Так можно логично организовать сгенерированные тесты по принципу «один тест — одна проверка»;
- Желательно явно разделить на уровне шаблонов области, где генерируются данные, выполняется проверяемое действие, и контролируется полученный результат. Это возможно путём использования шаблонов с режимами (mode). Такая структура шаблона позволит в дальнейшем делать другие варианты генерации — просто импортируя этот шаблон и перекрывая в новом шаблоне необходимую область;
- Наряду с кодом, в тот же файл будет удобно включить справку по запуску тестов;
- Очень удобным является выделение кода генерации данных в отдельно вызываемый блок (процедуру) — так чтобы его можно было использовать как в рамках теста, так и независимо, для отладки или просто создания набора тестовых данных.
Финальный комментарий
Через какое-то время файлов с тестовыми данными станет много, а отладка и «полировка» шаблонов генерации тестовых скриптов будет все продолжаться. Поэтому, прийдется предусмотреть возможность «массовой» генерации автотестов из набора исходных Excel файлов.
Заключение
Используя описанный подход можно получить весьма гибкий инструмент для подготовки тестовых данных или полностью работоспособных автотестов.
В нашем проекте удалось довольно быстро создать набор тестовых сценариев для интеграционного тестирования сложной функциональной области — всего на данный момент около 60 файлов, генерируемых примерно в 180 тестовых классов tSQLt (фреймворк для тестирования логики на стороне MS SQL Server). В планах — использовать подход для расширения тестирования этой и других функциональных областей проекта.
Формат пользовательского ввода остается как и раньше, а генерация финальных автотестов можно менять по потребностям.
Код VBA для преобразования Excel файлов в XML и запуска преобразования (вместе с примером Excel и XML) можно взять на GitHub github.com/serhit/TestDataGenerator.
Преобразование XSLT не включено в репозиторий, поскольку оно генерит код для конкретной задачи — у вас все равно будет свой. Буду рад комментариям и pull request’ам.
Happy testing!
Генерация автоматических тестов: Excel, XML, XSLT, далее — везде
Есть определенная функциональная область приложения: некая экспертная система, анализирующая состояние данных, и выдающая результат — множество рекомендаций на базе набора правил. Компоненты системы покрыты определенным набором юнит-тестов, но основная «магия» заключается в выполнении правил. Набор правил определен заказчиком на стадии проекта, конфигурация выполнена.
Более того, поскольку после первоначальной приемки (это было долго и сложно — потому, что “вручную») в правила экспертной системы регулярно вносятся изменения по требованию заказчика. При этом, очевидно, неплохо — бы проводить регрессионное тестирование системы, чтобы убедиться, что остальные правила все еще работают корректно и никаких побочных эффектов последние изменения не внесли.
Основная сложность заключается даже не в подготовке сценариев — они есть, а в их выполнении. При выполнении сценариев “вручную», примерно 99% времени и усилий уходит на подготовку тестовых данных в приложении. Время исполнения правил экспертной системой и последующего анализа выдаваемого результата — незначительно по сравнению с подготовительной частью. Сложность выполнения тестов, как известно, серьезный негативный фактор, порождающий недоверие со стороны заказчика, и влияющий на развитие системы («Изменишь что-то, а потом тестировать еще прийдется… Ну его. »).
Очевидным техническим решением было бы превратить все сценарии в автоматизированные и запускать их регулярно в рамках тестирования релизов или по мере необходимости. Однако, будем ленивыми, и попробуем найти путь, при котором данные для тестовых сценариев готовятся достаточно просто (в идеале — заказчиком), а автоматические тесты — генерируются на их основе, тоже автоматически.
Под катом будет рассказано об одном подходе, реализующим данную идею — с использованием MS Excel, XML и XSLT преобразований.
Тест — это прежде всего данные
А где проще всего готовить данные, особенно неподготовленному пользователю? В таблицах. Значит, прежде всего — в MS Excel.
Я, лично, электронные таблицы очень не люблю. Но не как таковые (как правило — это эталон юзабилити), а за то, что они насаждают и культивируют в головах непрофессиональных пользователей концепцию «смешивания данных и представления» (и вот уже программисты должны выковыривать данные из бесконечных многоуровневых «простыней», где значение имеет все — и цвет ячейки и шрифт). Но в данном случае — мы о проблеме знаем, и постараемся ее устранить.
Итак, постановка задачи
- обеспечить подготовку данных в MS Excel. Формат должен быть разумным с точки зрения удобства подготовки данных, простым для дальнейшей обработки, доступным для передачи бизнес пользователям (последнее — это факультативно, для начала — сделаем инструмент для себя);
- принять подготовленные данные и преобразовать их в код теста.
Решение
Пара дополнительных вводных:
- Конкретный формат представления данных в Excel пока не ясен и, видимо, будет немного меняться в поисках оптимального представления;
- Код тестового скрипта может со временем меняться (отладка, исправление дефектов, оптимизация).
Известная технология превращения данных в произвольное текстовое представление — шаблонизаторы, и XSLT преобразования, в частности — гибко, просто, удобно, расширяемо. В качестве дополнительного бонуса, использование преобразований открывает путь как к генерации самих тестов (не важно на каком языке программирования), так и к генерации тестовой документации.
Итак, архитектура решения:
- Преобразовать данные из Excel в XML определённого формата
- Преобразовать XML с помощью XSLT в финальный код тестового скрипта на произвольном языке программирования
Этап 1. Ведение данных в Excel
Здесь, честно говоря, я ограничился ведением данных в виде табличных блоков. Фрагмент файла — на картинке.
- Блок начинается со строки, содержащей название блока (ячейка “A5″). Оно будет использовано в качестве имени xml-элемента, так что содержание должно соответствовать требованиям. В той же строе может присутствовать необязательный “тип” (ячейка “B5″) — он будет использовано в качестве значения атрибута, так что тоже имеет ограничения.
- Каждая колонка таблицы содержит помимо “официального” названия, представляющего бизнес-термины (строка 8), еще два поля для “типа” (строка 6) и “технического названия” (строка 7). В процессе подготовки данных технические поля можно скрывать, но во время генерации кода использоваться будут именно они.
- Колонок в таблице может быть сколько угодно. Скрипт завершает обработку колонок как только встретит колонку с пустым значением “тип” (колонка D).
- Колонки со “типом”, начинающимся с нижнего подчеркивания — пропускаются.
- Таблица обрабатывается до тех пор, пока не встретиться строка с пустым значением в первой колонке (ячейка “A11”)
- Скрипт останавливается после 3 пустых строк.
Этап 2. Excel -> XML
Преобразование данных с листов Excel в XML — несложная задача. Преобразование производится с помощью кода на VBA. Тут могут быть варианты, но мне так показалось проще и быстрее всего.
Ниже приведу лишь несколько соображений — как сделать финальный инструмент удобнее в поддержке и использовании.
- Код представлен в виде Excel add-in (.xlam) — для упрощения поддержки кода, когда количество файлов с тестовыми данными более 1 и эти файлы создаются/поддерживаются более чем одним человеком. Кроме того — это соответствует подходу разделения кода и данных;
Этап 3. XML -> Code
Эта часть предельно специфична задачам которые решаются, поэтому ограничусь общими замечаниями.
- Начальная итерация начинается по элементам, представляющим листы (различные тестовые сценарии). Здесь можно размещать блоки setup / teardown, утилит;
Финальный комментарий
Через какое-то время файлов с тестовыми данными станет много, а отладка и «полировка» шаблонов генерации тестовых скриптов будет все продолжаться. Поэтому, прийдется предусмотреть возможность «массовой» генерации автотестов из набора исходных Excel файлов.
Заключение
Используя описанный подход можно получить весьма гибкий инструмент для подготовки тестовых данных или полностью работоспособных автотестов.
В нашем проекте удалось довольно быстро создать набор тестовых сценариев для интеграционного тестирования сложной функциональной области — всего на данный момент около 60 файлов, генерируемых примерно в 180 тестовых классов tSQLt (фреймворк для тестирования логики на стороне MS SQL Server). В планах — использовать подход для расширения тестирования этой и других функциональных областей проекта.
Формат пользовательского ввода остается как и раньше, а генерация финальных автотестов можно менять по потребностям.
Код VBA для преобразования Excel файлов в XML и запуска преобразования (вместе с примером Excel и XML) можно взять на GitHub github.com/serhit/TestDataGenerator.
Преобразование XSLT не включено в репозиторий, поскольку оно генерит код для конкретной задачи — у вас все равно будет свой. Буду рад комментариям и pull request’ам.
Проектирование тестов в среде MS Excel и VBA
Если ваши ученики освоили в Excel представление и обработку данных, то можно переходить на качественно новый уровень работы с Excel – автоматизировать свою работу. Язык VBA (Visual Basic for Application) – язык программирования, который подходит для всех приложений Microsoft Office, это один из самых простых в изучении и применении языков, он является версией языка Visual Basic.
Предлагаю задания для создания проектов в виде тестов в среде MS Excel и VBA.
- Откройте Excel.
- Переименуйте Лист1 в Вопросник и составьте таблицу.
Для каждого вопроса создайте пользовательские формы и с помощью их заполните таблицу.
Пользовательские формы могут иметь вид:
UserForm1
UserForm2
- При вызове следующего вопроса закрывается текущая форма, записываются результаты на лист Вопросник, и открывается форма со следующим вопросом.
- В форме с последним вопросом запрограммировано только закрытие формы и запись результатов.
- Спроектируйте на листе Excel Вопросник кнопку вызова форм:
Примечание. Подумайте, как изменится программа, если заполнить таблицу по вертикали.
Темы проектов:
1. Подобрать тест, обработать его, результаты показать через пользовательскую форму.
2. Вопросник по любому предмету, результаты которого обработать в Excel и выдать через пользовательскую форму оценку:
Данная работа является контрольно-обучающим пособием по теме «Практическое применение табличного электронного редактора EXCEL », а именно создание интерактивных тестов.
Работу можно использовать на уроках информатики в 9-11 классах технического профиля, а также для пользователей начинающего уровня.
Microsoft Excel — программа для работы с электронными таблицами, созданная корпорацией Microsoft для Microsoft Windows, Windows NT и Mac OS. Она предоставляет возможности экономико — статистических расчетов, графические инструменты и, за исключением Excel 2008 под Mac OS X, язык макропрограммирования VBA (Visual Basic для приложений). Microsoft Excel входит в состав Microsoft Office и на сегодняшний день Excel является одним из наиболее популярных приложений в мире.
Также в Microsoft Excel можно создавать интерактивные тесты с помощью стандартных функций или макросов.
Создание интерактивных тестов в программе MS Excel.
(инструкция для изучения возможностей и применения MS Excel по созданию интерактивных тестов для учащихся старших классов)
Разработка состоит из трех разделов. В первом – основные сведения по MS Excel – даются лишь самые основные сведения по MS Excel, которые необходимо знать при создании тестов, опытным пользователям можно пропустить этот раздел. Во втором показана возможность создания интерактивного теста с помощью стандартных функций Excel, а в третьем с помощью макросов – набора команд, используемых для автоматического выполнения некоторых операций, что позволяет автоматизировать переход к следующему вопросу теста и возврат к началу теста.
Интерактивные тесты можно применять на различных этапах урока (вводный, текущий, заключительный инструктаж), на различных этапах контроля (входной, текущий, рубежный, итоговый). В моей практике тесты с удовольствием создают сами учащиеся. Наполняют ими свои курсовые проекты. Они привлекают внимание учащихся своим разнообразием, яркостью, возможностью самостоятельно создать мини программу для компьютера, которая не только считает оценку, но и будет применяться на уроках, приобретая практическую значимость для учащихся.
Для создания таких тестов не требуется специального программного обеспечения. Пакет MS Office (Excel в частности) имеется на каждом персональном компьютере. Этим объясняется доступность предлагаемой информации.
Создание интерактивных тестов не требует специальных знаний и умений. Простота изготовления тестов дает возможность пробовать свои силы как опытным, так и начинающим пользователям.
Основные сведения по MS Excel
Для создания теста необходимо знать несколько особенностей программы MS Excel, на которые имеются ссылки в данной разработке.
Перечень команд, которые управляют работой Excel, находится в основном меню (рис.1,1) Здесь Вы найдете команду Вставка, Данные, Сервис.
Пункты основного меню содержат раскрывающийся список команд, открыть который можно щелкнув левой кнопкой мыши на пункте меню. Так Вы найдете команды Проверка (пункта меню Данные), Лист (пункта меню Вставка), Макрос (пункта меню Сервис).
Каждая ячейка Excel имеет уникальный адрес, состоящий из названия столбца и строки (рис.1,2).
Столбцы таблицы Excel обозначаются латинскими буквами (рис.1,3), строки цифрами (рис.1,4). Обратите внимание, если будете вводить формулы с клавиатуры.
Формулы вводим в строку формул (рис.1,5), начиная со знака = (равенства).
Для создания фигуры к тесту воспользуемся панелью инструментов Рисование (находится в нижней части окна Excel), либо пунктом меню Вставка-Рисунок-Автофигуры
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
1 |
|
08.12.2013, 19:41. Показов 17116. Ответов 32
Приветствую уважаемые форумчане! У меня курсовая работа по VBA, которую нужно сдать на предстоящей неделе, в связи с чем вынужден просить помощи, так как сам мягко говоря — ничего в этом не смыслю. (теорию выучил неплохо, написание кодов парализовано напрочь). 1. По кнопке вызывается титульная форма с приветствием (Небольшой рисунок, разные цвета, некоторый текст и кнопка «Начать тест») Иными словами нечто похожее на онлайн тестирование. Я понимаю что прошу слишком много, но помимо представления должного вида работы, я не смыслю как это дело осуществить. Если есть нечто похожее, прошу — дайте ссылочку на тему или помогите разобраться с этим делом. Буду благодарен за самую простейшую работу, для примера, которую потом переделаю под себя. Заранее спасибо! Очень выручите
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
08.12.2013, 20:05 |
2 |
Уважаемый LaDav, для решения необходимы входные данные, ну так создайте, например в Excel, базу данных вопросов, возможных ответов, и определите бальность ответов. Но
(теорию выучил неплохо начни с чего нибудь, тогда может и помогут.
1 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
08.12.2013, 20:42 [ТС] |
3 |
Уважаемый LaDav, для решения необходимы входные данные, ну так создайте, например в Excel, базу данных вопросов, возможных ответов, и определите бальность ответов. Но начни с чего нибудь, тогда может и помогут. Сейчас, я создал 2 формы и на листе введу необходимые данные. Минут 15, я быстро. Добавлено через 35 минут
Уважаемый LaDav, для решения необходимы входные данные, ну так создайте, например в Excel, базу данных вопросов, возможных ответов, и определите бальность ответов. Но начни с чего нибудь, тогда может и помогут. В общем вот. Все данные для ввода на листе Excel. В VBA 4 формы. (Приветствие, переход к началу теста, форма результата выводящаяся после всех вопросов и прощальная, с благодарностью за прохождение). В общем вариант ответа должен быть только 1, баллы в конце подсчитываться автоматически. Номер вопроса в форме выводится по мере ответа на вопросы (Вопрос № 1… Далее 1 меняется на 2 и т.д.) Очень прошу вас, если что то сможете сделать — я буду безмерно благодарен. Или хотя бы помогите с заготовкой, а я допишу (вставлю) оставшиеся варианты. Для кода у меня идей 0.
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
08.12.2013, 21:38 |
4 |
Примерно так:
1 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
08.12.2013, 21:49 [ТС] |
5 |
Примерно так: Я даже не знаю как вас отблагодарить… Огромное спасибо. Я визуально подредактирую и это то, что мне в принципе нужно. Мои знания ограничились переходом между формами, за то по вашему примеру я почерпну для себя много нового. У меня крайне мало практики. Читать код в принципе могу и понимаю, что написано, а вот взять и самому настрочить — из головы вылетает, путаюсь и не могу собраться с мыслями. Еще раз спасибо! Прошу модераторов тему пока не закрывать, могут появиться вопросы, лучше тут сразу и спрошу.
0 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
12.12.2013, 00:45 [ТС] |
6 |
Примерно так: Простите за беспокойство, это снова я. У меня возникла пара вопросов о работе, с которой вы мне помогли. Хочу снова обратиться к вам. 1. Можно ли сделать возврат на предыдущий вопрос? (добавив еще 1 кнопку по вторую форму) Я прикрепил файл с почти готовой работой, ее сдавать послезавтра, а к этим пунктам могут придраться. Если вас не затруднит, помоги еще разок, или хотя бы напишите код, которым можно воспользоваться. Заранее, большое спасибо!
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
12.12.2013, 17:27 |
7 |
А зачем возврат назад? Думал же человек когда отвечал. Думаю возврат не нужен, а вот ограничить переход можно.
1 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
12.12.2013, 19:07 [ТС] |
8 |
А зачем возврат назад? Думал же человек когда отвечал. Думаю возврат не нужен, а вот ограничить переход можно. Еще раз огромное спасибо! А если меня все же попросят подправить и сделать переход назад, то какой для этого потребуется код? Создаю 3-ю кнопку перед «Продолжить», так и назовем «Возврат» и что пропишем? Если конечно так можно, мне для себя было бы полезно! Чрезмерно благодарен!
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
12.12.2013, 19:23 |
9 |
А если меня все же попросят подправить и сделать переход назад, то какой для этого потребуется код? Думаю не попросят. Для решения необходимо много изменений, в т.ч. и хранение значений всех ответов, чтобы пересчитывать количество балов. Как вариант могу предложить создать кнопку «Начать сначала», хотя Завершить и Запустить тест тоже самое.
1 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
12.12.2013, 20:18 [ТС] |
10 |
Думаю не попросят. Для решения необходимо много изменений, в т.ч. и хранение значений всех ответов, чтобы пересчитывать количество балов. Как вариант могу предложить создать кнопку «Начать сначала», хотя Завершить и Запустить тест тоже самое. Хорошо, еще раз спасибо! Надеюсь устроит такой вариант. Во всяком случае если попросят переделать, у меня будет больше времени и там уже постараюсь сам разобраться, воспользовавшись руководствами.
0 |
LaDav 2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
||||||||||||||||||
12.12.2013, 23:13 [ТС] |
11 |
|||||||||||||||||
Ребят, у меня еще такой вопрос (toiai ушел спать видимо, не могу у него спросить). Проблема в прочтении кода, мне нужно будет рассказать собственно как сделал работу, а я не все понимаю. Вы можете мне объяснить, что означают строки: 1.
Dim — переменная, Double — двойная, с плавающей точкой, а вот bal и nVopros что такое? Баллы и номер Вопроса? 2.
Не пойму что означают данные строки и для чего они прописаны 3.
Так же не пойму, что означает эта строка. Cells вроде указывает на диапазон, а что в скобках? 4.
Этот код так же вызывает затруднения. Пожалуйста, если кто может написать, что это значит, отпишитесь. Файлик с прописанными кодами прикрепил, на всякий случай. Вложения
0 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
13.12.2013, 19:17 [ТС] |
12 |
Вопрос выше не актуален, я разобрался, но появились новые нюансы. Прошу пока не закрывать тему. Очень нужна будет ваша помощь, скорее всего завтра.
0 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
15.12.2013, 20:15 [ТС] |
13 |
Думаю не попросят. Для решения необходимо много изменений, в т.ч. и хранение значений всех ответов, чтобы пересчитывать количество балов. Как вариант могу предложить создать кнопку «Начать сначала», хотя Завершить и Запустить тест тоже самое. Здравствуйте! Я показал задание с которым вы мне помогли и преподавателю понравилось, но есть некоторые нюансы, в связи с чем вновь хотелось бы к вам обратиться (прошу прощения за назойливость). Меня попросили внести некоторые коррективы, которые я сам вряд ли смогу сделать. В общем меня попросили осуществить вот что: 1. Вопросы, количество баллов для них сделать на отдельном от кнопки листе и скрыть его (чтобы пользователь их не видел) Если я вам опять сделаю шапку с формами и примерным представлением того, как все должно быть, сможете помочь с кодами? Я надеюсь это последние замечания преподавателя и уже будет зачет по этому предмету, а после я постараюсь на каникулах разобраться с этим языком (по болезни пропускал много пар и ужасно усвоил практику).
0 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
18.12.2013, 19:07 [ТС] |
14 |
Примерно так: Здравствуйте еще раз! Я накидал шапку к новым требованием для моего теста, нужна срочно ваша помощь, очень прошу помочь с кодом. На 1-м листе я оставил только кнопку. Я создал 5-ю форму, которую нужно вставить между после 1-й и перед 2-й, она должна служить для ввода данных (фамилии, имени, пола и даты прохождения теста), затем далее и переходим к самим вопросам из листа 2. После завершения вопросов, выводится на 3-й форме результат, который должен быть внесен вместе с информацией из 5-й формы на 3-й лист в соответствующие поля. Пожалуйста, если у вас есть время сегодня/завтра, помогите мне с этим решить. Навалилось перед сессией работы, не успеваю и не соображаю в данном предмете, но за каникулы надеюсь освою.
0 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
19.12.2013, 11:17 [ТС] |
15 |
Ребята, кто может помочь с кодом, просмотрите пожалуйста темку! Очень срочно. Возможна оплата за вашу работу. Добавлено через 12 часов 52 минуты
0 |
6076 / 1320 / 195 Регистрация: 12.12.2012 Сообщений: 1,023 |
|
19.12.2013, 17:40 |
17 |
LaDav, пришлось попотеть, но получилось у меня вроде неплохо. Вариант, который выношу на ваше рассмотрение — в приложении. С уважением,
2 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
19.12.2013, 18:04 [ТС] |
18 |
Времени совсем нет, занят, посмотри здесь Добавление данных через UserForm
LaDav, пришлось попотеть, но получилось у меня вроде неплохо. Огромное спасибо ребята, я честно не знаю, что бы без вас делал. У самого полнейший завал, просто не продохнуть, а программирование упустил на 1-м курсе из за болезни, пропустив практически весь семестр. Сейчас на каникулах буду разбираться и надеюсь у меня получится. Я готов вам заплатить за работу, правда только на qiwi кошелек, вы меня действительно очень выручили.
0 |
6076 / 1320 / 195 Регистрация: 12.12.2012 Сообщений: 1,023 |
|
19.12.2013, 22:08 |
19 |
LaDav, спасибо, но платить не надо — сделал эту работу не ради денег, а потому, что мне понравился ваш психологический тест. А вот ваше стремление посвятить часть каникул восполнению пробелов в познаниях VBA — это похвально! Желаю успехов в изучении языка, и может быть, вы даже расскажете нам что-нибудь интересное из того, что узнаете. С уважением,
0 |
2 / 2 / 0 Регистрация: 01.11.2013 Сообщений: 56 |
|
19.12.2013, 22:12 [ТС] |
20 |
Еще раз огромное вам спасибо! Я безусловно буду стараться!
0 |
Управление образования Администрации
города Екатеринбурга
Муниципальное
автономное образовательное учреждение гимназия №120
Проект
Компьютерное тестирование. Создание теста на VBA.
Екатеринбург
2018
Цели:
1. Изучить понятие
«тестирование»
2. Создать тест на языке VBA
Задачи:
1. Найти материал о тестировании
2. Найти материал о
программировании
3. Изучить основы языка VBA
4. Создать тест на VBA в программе Excel
Гипотеза:
Данная тема актуальна в современном
мире, потому что находит применение во всех сферах деятельности, сокращает
сроки и себестоимость работы.
Объект:
Программирование на VBA
Тестирование
Тест — это метод изучения глубинных
процессов деятельности человека. Тесты позволяют получить объективные оценки
уровня знаний, умений, навыков и представлений, выявить проблемы в подготовке.
История
возникновения тестирования:
История развития тестов корнями
уходит далеко в древность. Еще в Древнем Египте, Греции, Китае проводились
испытания различных умений, навыков, способностей и знаний. Эти испытания были
связаны с определенными измерениями тех или иных качественных результатов
деятельности человека. Их с полным правом можно считать предысторией
тестов. По мере развития общества и общественных отношений совершенствовались и
количественные методы измерения знаний человека. Выделяют несколько этапов
развития тестов.
Первый этап:
Период с 80-х гг.
XIX в. по 20-е гг. XX в — это период зарождения и становления
тестирования. Теоретические основы тестирования были заложены английским
психологом и естествоиспытателем Фрэнсисом Гальтоном. Он предположил, что с помощью
тестов удастся разделить факторы наследственности и влияния среды
в психике человека. Самым важным вкладом Гальтона было определение трех
основных принципов, которые используют по сей день:
1. применение серии одинаковых испытаний
к большому количеству испытуемых,
2. статистическая обработка результатов,
3. выделение эталонов оценки.
Огромный вклад в развитие тестологии
внес французский психолог Альфред Бине. Он является родоначальником современных
тестов, которые были предназначены для диагностики уровня развития интеллекта.
В первом десятилетии XX в. в практику внедряется известный тест Бине, основной
задачей которого являлось выявление умственно отсталых детей. Длительное время
тесты развивались как инструмент индивидуальных измерений. Массовость
тестирования вызвала необходимость перейти к групповым тестам. В 1917—1919 гг.
в США появились первые групповые тесты.
Второй этап:
Период с 20-х по 60-е гг. XX века. В это время американец Макколл
разделил психологические и педагогические тесты. Основной задачей
педагогических тестов являлось измерение успешности учащихся по тем или иным
школьным дисциплинам за определенный период обучения. Основоположником
педагогических измерений является американский психолог Эдвард Ли Торндайк.
Первым педагогическим тестом, появившимся под его руководством, был тест Стоуна
на решение арифметических задач. Именно в США тесты успешности знаний и умений
учащихся по отдельным предметам нашли особенно широкое распространение.
Третий этап:
Период с 60-х по 70-е гг. XX века. Значительный толчок
к дальнейшему совершенствованию тестов дали реформы по преподаванию ряда
предметов, развитие программированного обучения. В это же время начинает
внедряться тестирование с помощью компьютеров, а создатели тестов взяли на вооружение
принцип, сущность которого заключается в следующем: если испытуемый отвечает
правильно, то следующим шагом ему дается вопрос сложнее, и наоборот.
Новый этап:
С начала 80-х годов начался новый
этап развития тестирования. Самым главным отличительным признаком этого этапа
является работа с компьютером как во время тестирования, так и при обработке
полученных результатов. На ряду с этим в некоторых западных странах, особенно в
США, тестирование становится ведущей формой контроля. Такие страны, как Нидерланды,
Англия, Израиль, Канада, Япония, Дания, Австралия, создали службы разработки
тестов, занимаются организацией массового тестирования.
Виды
тестов:
Психологический тест
Психологические тесты нужны для того,
чтобы узнать о психофизиологических и личностных свойствах (чертах,
способностях, состояниях) испытуемого. Тесты, по которым судят о знаниях,
умениях и навыках испытуемого. Признаками таких тестов являются:
кратковременность, стандартизованность, не требует сложных технических
приспособлений.
Вербальный тест
Вербальный тест- тест, построенный на
использовании языка, когда тестируемый, выполняя задание, должен не совершать
действия, а описать их словами. В таких тестах основным содержанием работы
испытуемых являются операции с понятиями, мыслительные действия, осуществляемые
в словесно-логической форме.
Стандартизованный тест
Стандартизованный тест-
психологический тест с четко определенными неизменным списком вопросов,
инструкцией, методами обработки результатов и подсчета баллов.
Тесты личности
Тесты личности —
тесты психологического тестирования, направленные на изучение характера,
способностей, эмоций, потребностей и других свойств человеческой личности.
Личностные тесты подразделяются на:
1. проективные
тесты,
2. личностные опросники,
3. тесты деятельности
(ситуационные тесты).
Тест имитации
Тест имитации- психологический тест,
состоящий в том, что человеку предлагается выполнить задание, хотя ситуация, в
которой предстоит выполнить задание, не воссоздается. Тест имитации
используется в процессе отбора претендентов на работу.
Тест на профессиональную пригодность
Тест на профессиональную пригодность-
психологический тест, направленный на выявление индивидуальных интересов и
предпочтений. Такие тесты помогают определить работу наиболее предпочтительную
для конкретного человека.
Большая часть современных
психодиагностических методик компютеризирована.
Компьютерный тест
Компьютерный тест — компьютерная
программа, предназначенная для измерения обученности учащегося, состоящая из
системы тестовых заданий и блок интерфейса.
Компьютерное
тестирование хорошо тем, что оно является средством автоматизации массового
тестирования, сокращающее сроки и себестоимость работы, а также средством
повышения информационной безопасности (достоверности) результатов тестирования.
Переход человечества к
информационному обществу ставит глобальную проблему- повышение качества знаний
в пределах того же времени. Одним из способов решения этой проблемы является
применение тестирования (компьютерное тестирования), как части многих
педагогических инноваций.
Программирование
Программирование — процесс создания
компьютерных программ.
В более широком смысле под понятием
«программирование» понимают весь спектр деятельности, связанный с созданием и
поддержанием в рабочем состоянии программ.
В узком смысле под понятием
«программирование» понимается написание инструкций (программ) на конкретном
языке программирования.
История развития
программирования:
Программирование возникло
одновременно с появлением первых вычислительных машин, поэтому развитие
программирования нужно рассматривать параллельно с появлением и развитием самих
компьютеров.
До 1940-х годов программирование,
если его вообще можно было так назвать, было очень тяжелой, кропотливой
работой. Машины были чем-то вроде прототипов, изобретениями отдельных людей.
Еще не были сформированы основные принципы электронной вычислительной машины
(ЭВМ) и не были достаточно развиты технологии. Однако основные идеи зародились
уже тогда.
Этапы развития ЭВМ
I этап (1940-е – середина 50-х годов)
Для первых ЭВМ, созданных по
принципам фон Неймана, программы приходилось писать на машинном языке, то есть
в кодах, непосредственно воспринимаемых компьютером. Решением этой проблемы
стало изобретение ассемблеров- языков символического кодирования. Ассемблеры
недалеко шагнули от машинных команд, просто вместо непонятных кодов стали использоваться
легко запоминаемые обозначения.
Программирование на данном этапе –
трудоемкий процесс, где необходимо знать все команды ЭВМ и ее структуры, с
непосредственной работой математика-программиста за пультом машины.
II этап (середина 50-х – середина 60-х)
На этом этапе были созданы более
совершенные языки программирования. Такие языки- это набор символов и терминов,
который описывает алгоритм решения задачи. Правилами написания этот язык, с
одной стороны, близок к математическому выражению задачи, а с другой стороны,
содержит такие выражения, которые близки к естественному языку, чаще
английскому.
Языки высокого уровня позволили
значительно упростить процесс написания программ, так как они ориентированы на
удобство описания решаемых с их помощью задач. Разумеется, для каждой программы
на языке высокого уровня программист может написать более компактную и
быстродействующую программу на ассемблере, но из-за трудоемкости процесса
обычно этого не делают.
Языки высокого уровня и на
сегодняшний момент являются основными инструментами, при помощи которых
составляют программы.
Тогда же, из-за введения понятия
языков высшего уровня, ассемблеры стали называть языками низкого уровня.
На этом этапе развития ЭВМ появились
более совершенные алгоритмические языки, теперь не требовалось присутствия
программистов в зале.
III этап (середина 60-х – середина 70-х)
С этого времени интерес к компьютерам
среди широкой массы людей стал очень быстро расти.
Этот этап знаменателен также
появлением нескольких новых языков высокого уровня. Первым стал Паскаль,
созданный в 1970 году ведущим в то время специалистом в области
программирования Виртом. Это очень простой и компактный язык, его понятия
близки к фундаментальным понятиям математики. Благодаря этому он завоевал свою
популярность, и даже по сей день используется для обучения специалистов
программированию.
Другой новинкой стал Basic —
универсальный код символических инструкций для начинающих. Он был разработан в
1965 году и предназначался для вводного курса по информатике. Благодаря своей
простоте и возможности работы в диалоговом режиме этот язык быстро нашел
призвание среди пользователей.
В 1972 году Денисом Ричи и Кеном
Томпсоном был изобретен язык Си. Он похож на Паскаль, но исправляет его
некоторые ошибки и содержит новые элементы. Си разрабатывался как мощный и
гибкий язык. Он не так легко читается как Паскаль. Тем не менее, пользователям
он понравился, и был сделан переход от Паскаля к Си. Это ознаменовало собой
переход от языков предыдущего поколения к сегодняшним языкам программирования.
На данном этапе технология
программирования аналогична применявшейся на предыдущем этапе, однако в самих
ЯВУ наблюдается тенденция к упрощению, попытки вывести программирование на
новый уровень, лишить его статуса удела лишь избранных профессионалов.
IV
этап (середина 70-х – настоящее время)
На этом этапе на смену чипам приходят
БИС – большие интегральные схемы. Стали появляться многопроцессорные
вычислительные системы. Также стали производиться дешевые и компактные мини- и
персональные ЭВМ. На этом нового в программировании не было
Языки
программирования
Язык программирования — знаковая система,
предназначенная для записи компьютерных программ. Язык программирования
определяет набор лексических, синтаксических и семантических правил, задающих
внешний вид программы и действия, которые выполнит компьютер под её
управлением.
Со времени создания первых
программируемых машин человечество придумало более двух с половиной тысяч
языков программирования. Каждый год их число увеличивается. Язык программирования
отличается от естественных языков тем, что предназначен для передачи команд и
данных от человека к компьютеру, в то время как естественные языки служат для
общения людей между собой.
К программированию
существует два подхода структурный и объектно-ориентированный.
Структурное
программирование
Структурное программирование –
методология разработки программирования, базирующаяся на системном подходе к
анализу, проектированию и реализации программного обеспечения. Структурное программирование
предполагает точно обозначенные управляющие структуры, программные блоки.
Основу этой технологии составляют
следующие положения:
1. Сложная задача разбивается на более мелкие, лучше
управляемые задачи. Каждая задача имеет один вход и один выход.
2. Простота управляющих структур, используемых в
задаче. Логически задача должна состоять из минимальной, функционально полной
совокупности достаточно простых управляющих структур.
3. Разработка программы должна вестись поэтапно. На
каждом этапе должно решаться ограниченное число четко поставленных задач с
ясным пониманием их значения и роли в контексте всей задачи.
Достоинства структурного
программирования:
1. Структурное программирование позволяет значительно
сократить число вариантов построения программы, что значительно снижает
сложность программы и облегчает понимание её другими разработчиками.
2. В структурированных программах логически связанные
операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет
обходиться без блок-схем и других графических форм изображения алгоритмов.
3. Сильно упрощается процесс тестирования и отладки
структурированных программ.
Объектное-ориентированное
программирование
Объектно-ориентированное
программирование (ООП) — это результат естественной эволюции более ранних
методологий программирования.
Главным понятием в ООП является
понятие объекта. Объект – это программная конструкция, которой можно посылать
сообщения, и которая может на них реагировать, используя свои данные. Данные
объекта скрыты от остальной программы. Сокрытие данных называется
инкапсуляцией.
Инкапсуляция – это механизм, который
объединяет данные и методы, манипулирующие этими данными, и защищает и то и
другое от внешнего вмешательства или неправильного использования. Когда методы
и данные объединяются таким способом, создается объект.
Объекты, свойства, методы
Объект в ООП имеет свойства и методы.
Свойства – это характеристики объекта, предназначенные для хранения информации
о текущем состоянии некоторого аспекта рассматриваемого объекта. Для изменения
характеристики объекта необходимо изменить значения его свойств. Доступ к
каждому свойству, характеризующему некоторый аспект объекта, возможет только с
помощью методов доступа именно к данному конкретному свойству. Свойства бывают
доступными для чтения и записи, когда при необходимости их можно изменять во
время работы с проектом, и доступными только для чтения, когда свойства
позволяют выяснить свои значения, но не предоставляют возможности эти значения
изменять.
Как говорилось выше, доступ к
свойствам возможен только с помощью собственных методов – команд обработки
именно этих свойств. Методы выполняют действия над данными, хранимыми в
объектах. Обратиться к методам можно только через соответствующий объект. Метод
считается частью объекта.
События и их обработка
События – это действия пользователя
или действия других функционирующих в системе программ, распознаваемых
объектом. Многие объекты могут откликаться на событие, для которого можно
запрограммировать процедуры обработки. События могут быть вызваны системой или
возникать в результате действий пользователя. Например, щелчок левой клавишей
мыши-CLICK,
Этапы создания
проекта
I Создание интерфейса:
1.
На форму
наносим объекты.
2.
Определяем
свойства этих объектов
II Написание процедур обработки событий.
Visual basic for applications
В MS Office есть встроенный язык Visual Basic for Application
(VBA), который является
объектно-ориентированным языком. VBA обладает встроенным набором элементов управления. Элемент управления –
это специализированный объект, который можно размещать на формах VBA или в документах и который
используется для организации взаимодействия с пользователем.
1
Для перехода в среду Microsoft Visual
Basic необходимо в меню приложения
выбрать
Меню
сервис- меню макрос- редактор VBA.
2
Создание форм:
Insert – Useform Появится окно формы.
3 Расположение элементов и определение их свойств:
На панели ToolBox выбираем элемент и
перетаскиваем на форму. Для определения свойств необходимо выделить элемент и
на панели Properties определить значение нужных
свойств. Например, для кнопки CommandButton можно определить Caption, Font, Enabled, для
4
Для написания процедуры обработки события
Щелкнуть левой клавишей мыши на элементе, в окне кода
появится шаблон процедуры. Необходимо набрать тело процедуры.
5 Для запуска процедуры можно нажать на кнопку Run Sub в
главном меню среды VBA или создать кнопку на листе
документа, для которой написать процедуры вызова формы
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Проект был создан в программе MS Excel
Excel
Excel позволяет одновременно работать с
одной или несколькими рабочими книгами. Каждая книга состоит из одного или
более листов. Бывают: рабочие листы, диаграммы, модули, листы макросов.
Наиболее используемый – рабочий лист, который состоит из совокупности ячеек.
Написанные процедуры
Dim n, kp, i
Private Sub
CommandButton1_Click()
CommandButton2.Enabled = True
If OptionButton1.Value = True Then
nom = 1
If OptionButton2.Value = True Then
nom = 2
If OptionButton3.Value = True Then
nom = 3
If nom = Worksheets(2).Cells(i — 1,
5).Value Then
MsgBox «Âñå ïðàâèëüíî»
kp = kp + 1
Else
MsgBox «íå ïðàâèëüíî»
End If
TextBox1.Text = kp
n = n — 1
TextBox2.Text = n
CommandButton1.Enabled = False
End Sub
Private Sub
CommandButton2_Click()
CommandButton1.Enabled = True
Label4.Caption =
Worksheets(2).Cells(i, 1).Value
OptionButton1.Caption =
Worksheets(2).Cells(i, 2).Value
OptionButton2.Caption =
Worksheets(2).Cells(i, 3).Value
OptionButton3.Caption =
Worksheets(2).Cells(i, 4).Value
CommandButton2.Enabled = False
i = i + 1
If i > 12 Then
MsgBox «Тест закончен. Правильных
ответов » + Str(kp) + » из 10″
If kp <= 4 Then Label5.Caption =
«2»
If (kp > 4) And (kp <= 6) Then
Label5.Caption = «3»
If (kp >= 7) And (kp <= Then
Label5.Caption = «4»
If (kp >= 9) And (kp <= 10)
Then Label5.Caption = «5»
Label5.Visible = True
Label6.Visible = True
CommandButton1.Enabled = False
CommandButton2.Enabled = False
End If
End Sub
Private Sub
CommandButton3_Click()
Label5.Visible = False
Label6.Visible = False
CommandButton1.Enabled = True
CommandButton2.Enabled = False
Label4.Caption =
Worksheets(2).Cells(2, 1).Value
OptionButton1.Caption =
Worksheets(2).Cells(2, 2).Value
OptionButton2.Caption =
Worksheets(2).Cells(2, 3).Value
OptionButton3.Caption =
Worksheets(2).Cells(2, 4).Value
n = 10
kp = 0
i = 3
End Sub
Private Sub
UserForm_Activate()
CommandButton1.Enabled = False
CommandButton2.Enabled = False
Label5.Visible = False
Label6.Visible = False
End Sub
Webxcel, the first webserver written in plain Visual Basic macros in Microsoft Excel, is getting more and more mature. Last time I blogged about getting PHP support going, this time we’ll look into increasing webxcel’s stability — through unit testing.
This is what it looks like:
Figure 1.1: Running VBA unit tests from PowerShell
Why are you still doing this?
You’re right, I didn’t invent unit testing in VBA and why should anyone even bother? Rubberduck already built tooling for people to improve their VBA workflow, however it requires you to install their add-in, and I think we can do testing in a semi-automated way without even interacting with a GUI.
Also, I decided to take a course called «Peer-To-Peer Systems and Security» at my university, which allowed students to build a predefined project in any language on any platform.
Obviously, I chose Microsoft Word, since enterprise environments need P2P systems and I take course work very seriously (I passed the course with an A+, but from what I heard, the instructors now consider limiting it to more «conservative» platforms). One of the project requirements however was (unit) testing, so I had to come up with something.
How it works
Similar to the build script introduced in the first post about automating version control for VBA projects, unit testing can be achieved by utilising Microsoft Office interop functionality.
Testing can be broken down to:
1) Identify test suites and tests
2) Setup tests (i.e. run beforeAll
and beforeEach
methods before all or individual tests)
3) Run tests
4) Tear down tests (i.e. run afterAll
and afterEach
)
Let’s look into these steps in detail.
Identifying test suites and tests
.NET supports accessing the VBA document model, so we can list all modules and modify their code (i.e. importing and exporting). For simplicity and also developer experience, let’s assume our test suites all have to start with «Test», since we can’t annotate modules or declare them «testable» without parsing VBA ourselves. For instance, inheritance like JUnit’s TestCase
class would require us to understand VBA’s inheritance from our unit testing tooling; checking whether a module starts with «Test» is a lot easier:
Figure 1.2: A list of modules (green background) and their corresponding test suites (blue background).
After identifying our test suites, we need to find our tests. Again we can take the naming shortcut, to only test functions starting with «Test» rather than parsing docstrings. With our test cases in place, we can start setting up and running our tests.
Fun fact: the interop code to access the individual lines of a VBA module looks a lot like Visual Basic. To access an individual module, one has to call modules.Item(index)
, and index
starts at 1, which is typical to VB. Similarly, modules expose a module.CodeModule.Lines(fromIndex, toIndex)
function, whose indices start at 1 once again. It might be a coincidence, however it looks a lot like that code has not been touched in a long time.
Setup and tear down tests
It might be helpful for tests to share some setup, e.g. when a module needs an instance of a class in all tests, it might be a good idea to create it once and share it among all tests.
To do so, we’ll also search for BeforeAll
, BeforeEach
, AfterEach
and AfterAll
functions in our test suites and call them before our actual tests.
Running tests
Running a test is rather easy: interop provides an app.Run(macroName, arg1, arg2, ...)
method, which we can use to call macros. We can even pass arguments or get its return value if it’s an instance of a class. Note that VBA has something similar to structs, i.e. custom types, which can only be used inside VBA. Accessing a custom type returned via app.Run
will not work.
To find out whether a test was run successfully, we’ll need to signal our result to the test script somehow. Since we can return arbitrary objects, we can create an Assert
class, which has two properties:
-
AssertSuccessful
: indicates whether the test assertion was ok -
AssertMessage
: a helpful message to indicate test failure or success
By also providing a factory method to create such Assert
objects like AreEqual
, special messages like «expected ‘foo’, got ‘bar'» can be crafted in case of a failure:
Figure 1.3: A failed assertion, indicating the expected and actual value
Conclusion
VBA projects can now be unit tested without running tests from a GUI.
I’m still looking for a way to run tests on a CI server for a «Build: Passing» badge on GitHub, so if you happen to know a CI provider offering preinstalled Microsoft Office for FOSS projects, let me know.