Во время кодирования программы появляется потребность в тестировании написанного кода. И с увеличением способности программиста писать сложный код, процесс тестирования начинает потреблять больше времени и сил, чем моделирование и кодирование.
На следующем этапе оказывается пользительнее и выгоднее сначала писать тест для метода, а уже затем сам метод
Возникло желание поручить этап тестирования компьютеру.
Одна из технологий тестирования доступна начинающим программистам: юнит-тестирование (ЮТ).
Чтобы насладиться ЮТ (которое создано для уменьшения затрат на отладку) нужно: освоить объектно-ориентированное мышление в стиле Давида Вэста и его евангелиста Егора Бугаенко.
В вашей программе будут простые, тупые, надёжные исполнители: функции-методы, выполняющие что-то одно, что можно проверить. И для тестирования простых функций придумали ЮТ. Вы автоматически попадаете в зону чистого и ремонтопригодного кода. Для этого не нужно быть хакером.
Наоборот: стремимся разлагать сложность, чтобы Вы сами и любой обычный программист, хотели многократно использовать код. Порядок бьёт класс.
FIND в VBA – полный гайд по поиску в VBA (Серия VBA 26)
Что делает ЮТ? Вызывает функцию с нужными аргументами и проверяет возвращаемое значение.
Программисты-хакеры пишут сложные интеллектуальные функции типа крестьянина-хвата: он и пахарь, и жнец и на дуде игрец. Для такой функции сложно написать юнит-тест.
Программисты-архитекторы, с прицелом на ЮТ, пишут функции-гастарбайтеры. Каждая делает что-то одно: один только зачерпывает воду, другой только несёт воду, третий только выливает воду и т.п.
Вы программируете эти простые надёжные функции с прицелом их дальнейшего использования когда-нибудь потом. Вы будете в них уверены, что если вы попросили функции отнести ведро, то она не пнёт проходящую собаку, которая бросится под ноги другому, который споткнётся об неё и т.п. и т.д.
Во взрослых языках программирования инструменты ЮТ распространены. Для VBA мне известен RubberDuck.
Для себя, под него, я написал код, который анализирует написанный мною код и сам создаёт для него юнит-тесты.
Умелое применение ЮТ экономит интеллектуальные усилия. Чем меньше усилий, тем больше благодати при программировании — тем больше Вы будете хотеть программировать. Синергия.
Задавайте вопросы в комментариях
Источник: inexsu.wordpress.com
Обработка ошибок Приемы тестирования программ VBA
Главный прием обеспечения безошибочной работы программы — это ее тестирование. При создании крупных программных продуктов на их тестирование часто уходит не меньше времени, чем на их создание. Поскольку в наших условиях рассчитывать на то, что тестировать вашу программу будет профессиональный тестер, не приходится, проверять ее придется вам самим. Вот некоторые советы по тестированию:
- попытайтесь запустить программу при работе с большим количеством документов или когда не открыто ни одного документа;
- посмотрите, как работает программа, когда окно документа развернуто, свернуто или размер его изменен;
- проверьте, как работает программа, когда выделены разные элементы или группы элементов;
- если предусматривается ввод информации, попробуйте специально передать программе неверные значения. Например, если программа ожидает числовых значений, попробуйте ввести строковое значение, значение даты или оставить строку пустой;
- попробуйте прервать работу программы в самый неподходящий момент и потом вновь запустить ее;
- проверьте, как ведет себя программа, когда пропадает сеть, заканчивается свободное место на диске, заканчивается бумага в принтере и т.п.
- проверьте работу программы под разными версиями Office и операционных систем (в том числе англоязычных и локализованных);
- попробуйте до запуска программы и во время ее работы переставлять системную дату и время, устанавливая самые невероятные значения.
Если есть возможность, всегда рекомендуется немного поработать, выполняя обязанности пользователя, для которого создается эта программа.
Ячейки в VBA: Как использовать Cells в VBA (Серия VBA 6)
Мне очень нравится «диверсионный» подход при тестировании программ. Представьте себе, что вы — вредитель и диверсант, у которого цель — вывести программу из строя. Потом опробуйте те способы, которые вам пришли в голову. Если способ оказался удачным, придумайте от него защиту. Как ни удивительно, но реальная работа пользователей с вашей программой будет очень похожа на действия таких диверсантов.
Источник: vbastudio.ru
Лабораторная работа №2. Отладка программ и обработка ошибок в vba
Лабораторная работа служит для ознакомления с возможностями VBA по отладке программ и обработке ошибок и приобретения практических навыков по их использованию при отладке программ.
Основные сведения о средствах отладки и обработки ошибок
Отладка программ — это проверка и внесение исправлений в программу при ее разработке.
В процессе отладки программы возможны три вида ошибок:
- ошибки компиляции, возникающие при неправильном использовании синтаксиса инструкций, свойств и методов объектов. Эти ошибки выявляются на уровне компиляции и легко исправляются;
- ошибки выполнения, возникающие при выполнении программы. Причиной таких ошибок может быть отсутствие данных, неправильные данные, неготовность устройства и так далее. Для устранения возникновения этих ошибок целесообразно использовать имеющиеся в VBA средства обработки ошибок.
Обработка ошибок — это задание реакции на ошибки, которые возникают во время выполнения программы. Целесообразно в программе создать подпрограмму — обработчик ошибок, тех которые могут возникнуть в данной программе на этапе выполнения;
- логические ошибки, являющиеся причиной неправильной работы программы. Для нахождения таких ошибок предназначены средства отладки. Средства отладки позволяют обнаружить логические ошибки и ошибки периода выполнения, а также наблюдать за выполнением программы.
К средствам обработки ошибок относятся операторы On Error, Resume. Оператор On Error осуществляет передачу управления на подпрограмму обработки ошибок. Возможны три варианта синтаксиса оператора:
On Error GoTo метка — | передача управления на подпрограмму, идентифицирующуюся меткой; |
On Error Resume Next — | ошибка игнорируется, и управление передается следующему оператору за тем, при выполнении которого возникла ошибка; |
On Error GoTo 0 — | отключает обработку ошибок для данной процедуры. |
Оператор Resume передает управление из обработчика ошибок в программу, возможны следующие варианты синтаксиса оператора:
Resume [0] — | повторное выполнение оператора, вызвавшего ошибку; |
Resume Next — | выполнение следующего оператора за тем, при выполнении которого возникла ошибка; |
Resume метка — | выполнение оператора, помеченного меткой. |
Объект Err, через свойства и методы которого можно получить о последней ошибке выполнения. Свойства объекта Err:Number — номер возникшей ошибки; Source — имя проекта, в котором возникла ошибка; Description — строка с описанием ошибки; HelpFile — полное имя файла справки; HelpContext — идентификационный номер ошибки в файле справке; LastDLLError — содержит код системной ошибки для последнего вызова DLL. Методы объекта Err:Clear — очищает значения всех свойств объекта Err; Raise — генерирует ошибку во время выполнения программы. Используется для проверки работы обработчика ошибок, или создания собственных ошибок при выполнении программы. Средства отладки VBA дают возможность прервать выполнение программы в точке останова (точка останова — это специальная инструкция в процедуре VBA, на которой работа процедура приостанавливается), обеспечивают возможность пошагового выполнения процедуры, позволяют в процессе работы процедуры отслеживать значения ее переменных, выражений, свойств объектов, и если нужно изменять их. В VBA имеется три режима работы с программой:
- режим конструктора (режим работы с текстом программы);
- режим выполнения (текст программы не доступен для изменения работы, его можно только просматривать);
- режим прерывания (приостановка работы программы, режим позволяет просматривать значения переменных, продолжать или прекращать работу программы, вносить изменения в текст программы).
Команды отладки доступны из меню Отладка или через панель Отладка. VBA имеет следующие средства отладки:
![]() |
Запуск/ Продолжение | Переключение из режима конструктора в режим выполнение, или из режима прерывания в режим выполнения |
![]() |
Прервать | Переключение в режим прерывания |
![]() |
Сброс | Переключение из режима прерывания или выполнения в режим конструктора |
![]() |
Точка останова | Устанавливает / удаляет в текущей строке точку останова |
![]() |
Шаг с заходом | Выполняет следующую строку с заходом в процедуры |
![]() |
Шаг с обходом | Выполняет следующую строку без захода в процедуру, процедура выполняется полностью |
![]() |
Шаг с выходом | Выполняет оставшуюся часть процедуры и останавливается на следующем после вызова процедуры операторе |
![]() |
Окно локальных переменных | Открывает окно с текущими значениями всех локальных переменных процедуры |
![]() |
Окно отладки | Открывает окно, в котором можно выполнить нужные операторы |
![]() |
Окно контрольного значения | Открывает окно, в котором можно просматривать текущие значения переменных, выражений |
![]() |
Стек вызова | В режиме прерывания открывает диалоговое окно со списком всех работающих процедур |
Выполнение лабораторной работы
- Открыть новый документ EXCEL или WORD.
- Добавить в проект модуль с именем Отладка.
- Добавить в модуль процедуру, подсчитывающую отношение суммы элементов массива и их произведения, а также нахождение среднего арифметического элементов массива, значение которых являются четными числами:
Public Sub pr_Otl1() Dim b(10) As Integer Dim s As Single Dim p As Integer Dim s1 As Single Dim k As Integer p = 1 For i = 1 To 10 b(i) = InputBox(«Введите число») If b(i) Mod 2 = 0 Then s1 = s1 + b(i): k = k + 1 s = s + b(i): p = p* b(i) Next s = s / p : MsgBox s s1 = s1 / k : MsgBox s1 End Sub
- Выполнить отладку процедуры. Запустить процедуру на выполнение и ввести значения элементов массива 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 .
VBA выдает ошибку выполнения № 6 — «переполнение» (Overflow). В окне с сообщением об ошибке нажать кнопку Debug(Отладка). Цветом выделяется оператор, выполнение которого привело к возникновению ошибки.
- Просмотреть значения переменных, влияющих на результат в режиме прерывания. Для этого в VBA имеется несколько средств:
- для просмотра значения конкретной переменной, установить на ее имя указатель мыши и значение переменной отобразится во всплывающей подсказке. Если этого не произошло, следует установить флажок AutoDataTips на вкладке Editop в окне команды Tools/Options. Просмотреть значение переменных p и b(i);
- для просмотра значений всех локальных переменных выполнить команду ViewLocalsWindow(ВидОкно локальных переменных);
- для просмотра значений нужных переменных и выражений использовать окно Watches(Контрольные значения).
Просмотреть в контрольном окне значение переменных p и b(i), а также выражения p*b(i). Для добавления переменной (выражения) в контрольное окно, следует выделить ее имя (выражение) в операторе и выполнить команду AddWatch(ОтладкаДобавить контрольное значение). Просмотр окна Watches позволяет сделать вывод, что тип переменной p не соответствует помещаемому значению. Тип переменной р необходимо изменить на Long (Длинное целое). Внести изменение в текст процедуры. Закрыть окно Watches. Повторно выполнить программу.
- Продолжить отладку программы. Запустить программу на выполнение и ввести значения 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. VBA выдает ошибку выполнения №11 — «деление на 0» (Division by zero). Просмотреть значение переменных, участвующих в вычислениях в операторе, выполнение которого привело к возникновению ошибки.
- Перейти из режима прерывания программы в режим конструктора. Для этого выполнить команду RunReset(ЗапускСброс) или нажать кнопку Сброс на панели Стандарт.
- Продолжить отладку программы. Запустить ее на выполнение и ввести значения 1,3,5,7,9,11,13,15,17, 19. VBA выдает ошибку выполнения № 6 — «переполнение». Просмотреть значение переменных, участвующих в вычислениях в операторе, выполнение которого привело к возникновению ошибки.
- Добавить в процедуру обработчик ошибок. Для этого отредактировать процедуру в соответствии с приведенным ниже текстом:
Public Sub pr_Otl1() Dim b(10) As Integer Dim s As Single Dim p As Long Dim s1 As Single Dim k As Integer On Error GoTo MyErrHandler p = 1 Vvod: For i = 1 To 10 b(i) = InputBox(«Введите число») If b(i) Mod 2 = 0 Then s1 = s1 + b(i): k = k + 1 s = s + b(i): p = p * b(i) Next s = s / p MsgBox s s1 = s1 / k MsgBox s1 Exit Sub MyErrHandler: Select Case Err.Number Case 6 MsgBox «среди элементов массива нет четных чисел, повторите ввод» Err.Clear: s1 = 0: p = 1 Resume Vvod Case 11 MsgBox «Один из элементов массива равен нулю,» отношение суммы к произведению элементов найти нельзя» Resume Next Case Else Dim err_num As Integer err_num = Err.Number MsgBox «Ошибка выполнения»
- запустить процедуру на выполнение;
- после прерывания работы процедуры просмотреть значение переменных s,s1,p,k;
- продолжить выполнение процедуры в режиме трассировки;
- удалить точку останова.
Источник: studfile.net