Пример отладки программы
Рассмотрим процесс отладки программы, решающей уравнение вида АХ+В=0 без сохранения данных в файле (постановку задачи см. в гл. 3). Будем считать, что форма содержит только элементы, помещенные на вкладке "Данные" (рис. 3.5), и имеет вид (рис. 8.6). Имена текстовых окон для ввода коэффициентов TBA и TBB, а также имя метки для вывода корня LBX, помещены внутри графических изображений указанных объектов. Имена СВ1, СВ2 и СВ3 присвоены командным кнопкам. Имена данных А,В,Х для коэффициентов a,b и корня Х соответственно. Входные и выходные данные
Рис. 8.6. Форма отлаживаемого | хранятся в свойствах TBA.Text, TBB.Text и LBX.Caption. Р-граф программы показан на рис. 8.7, условные обозначения к рис. 8.7 приведены в табл. 8.1. Структура программы показана на рис. 8.8 и включает в себя три процедуры, одну функцию вычисления корня и три обработчика событий, обрабатывающих нажатия командных кнопок CB1_Click(), CB2.Click() и CB3_Click(). Вместо текста процедур на рис. 8.8 показаны "заглушки", имитирующие работу процедур. |
![]() |
|
|
|
Рис. 8.7. Р-граф программы
Таблица 8.1 Условные обозначения к рис. 8.7 | Реализующая процедура (функция) | Условия | Действия | Процедура InDan() | Реализуется объектами управления формой | То же | То же | ||||
Соответствующее действие или условие | Нажата кнопка завершения программы | Нажата кнопка СВ2 "Корень" | Нажата кнопка СВ1 "Очистить" | Введен символ, который можно рассматривать как допустимый при вводе чисел | Инициализация данных (присвоение им начальных значений) | Нажатие доступной кнопки, щелчок мыши или ввод символа | Выбор объекта ТВА | Выбор объекта ТВВ | |||
Обозначение | Выход | Корень | Очистить | Введен символ числа | Init | Ввод команды | Активизация TBА | Активизация TBB |
Продолжение табл. 8.1 | Реализующая процедура (функция) | Функция MessX и оператор присваивания | Реализуется объектом Text Box | Реализуется объектом Text Box | Процедура ProgEnd | Состояния | ||||
Соответствующее действие или условие | Расчет корня уравнения и вывод в метку LBX | Добавление символа в ТВА.Техt | Добавление символа в ТВВ.Техt | Завершение программы | Начата работа программы, на экране видна форма, ожидается ввод команды или символа | На экране видна форма, введена команда | Вычислены коэффициенты и корень, сформировано сообщение о корне | В буфер клавиатуры введен произвольный символ | ||
Обозначение | LBX.Caption=MessX | Simb® TBA.Text | Simb® TBB.Text | Зав. прог | Вход, 1 |
Структура программы
Имя модуля, объекта, секции | Содержание |
OpDan | Описание данных a,b,x Public a as single: Public b as single: Public x as single |
Форма Form1 | |
Секция General | Sub InDan() 'Инициализация данных I=MsgBox("Инициализируются данные", vbOkOnly,"") End sub Sub NullDan() 'Очистка формы и данных I=MsgBox("Очистка формы и данных", vbOkOnly,"") End sub Function MessX() 'Вычисление корня I=MsgBox("Вычислено а=10, b=5, x=-2", vbOkOnly,"") MessX= "-2" End function Sub EndProg() 'Завершение программы I=MsgBox("Программа завершена", vbOkOnly, "") End sub |
Form1 | Sub Form1_Load() 'Загрузка формы Call InDan End sub Sub Form1_Unload 'Выгрузка формы из памяти Call EndProg() End sub |
CB1 | Sub CB1_Click() 'Нажатие кнопки Очистить Call NullDan End sub |
CB2 | Sub CB1_Click() 'Нажатие кнопки Корень LBX.Caption=MessX() End sub |
CB3 | Sub CB3_Click() 'завершение программы Call EndProg End End sub |
Рис. 8.8. Структура программы
При данном коде программы происходит тестирование интерфейса. Программа должна реагировать на нажатия кнопок появлением соответствующих сообщений, щелчки по объектам Text Box должны устанавливать внутрь объектов курсор, ввод символа должен изменять содержимое активного объекта Text Box. Карта тестирования интерфейса приведена в табл. 8.2.
Таблица 8.2
Карта тестирования интерфейса
Название теста | Действия программиста | Реакция программы |
Пуск | Запуск программы | Появление на экране формы и окна с сообщением "Инициализируются данные" |
Инициализация ТВА | "Щелчок" мышью по текстовому окну TBA | Курсор ставится в ТВА |
Инициализация ТВА | "Щелчок" мышью по текстовому окну TBB | Курсор ставится в ТВВ |
Ввод символов | Нажимать алфавитно-цифровые клавиши | К содержимому активного текстового окна добавляются вводимые символы. При нажатии клавиши "Забой" правый символ в окне стирается |
Очистка | "Щелчок" мышью по кнопке "Очистить" | Появляется сообщение "Очистка формы" |
Расчет | "Щелчок" мышью по кнопке "Корень" | Появляется сообщение "Вычислено а=10, b=5, x= -2" |
Завершение программы | "Щелчок" мышью по кнопке "Выход" или по кнопке "Х" | Появляется сообщение "Программа завершена" |
Тестирование программы на уровне процедур и функций программиста происходит по мере написания кода процедур и функций. Для такого тестирования можно создать специальную отладочную форму с кнопками вызова процедур и сделать ее стартовой. В данном случае такой необходимости нет, т.к. основная форма вполне подходит для этой цели.
Sub InDan() 'Инициализация данных OpDan.a=0: OpDan.b=0: OpDan.x=0 TBA.Text="": NBB.Text="" LBX.Caption="" I=MsgBox("Инициализируются данные"+str(OpDan.a)+" "+str(OpDan.b) +" "+str(OpDan.x), vbOkOnly,"") end sub Рис. 8.9. Текст процедуры InDan() в период отладки | Начинаем с процедуры InDan. Назначение процедуры – обнуление данных и очистка формы. Текст процедуры в период отладки приведен на рис. 8.9. В результате тестирования процедуры должны быть достигнуты результаты: переменные a,b,x модуля OpDan должны принять значение нуль, текстовые окна и метка LBX должны быть пустыми. | |
Sub NullDan() 'Очистка формы и данных OpDan.a=0: OpDan.b=0: OpDan.x=0 TBA.Text="": NBB.Text="" LBX.Caption="" I=MsgBox("Очистка формы и данных" +str(OpDan.a)+""+str(OpDan.b)+"" +str(OpDan.x), vbOkOnly,"") End sub Рис. 8.10. Текст процедуры NullDan() в момент отладки | Далее отлаживаем процедуру очистки формы. Ее текст в момент отладки приведен на рис. 8.10. Текст процедуры можно скопировать из процедуры InDan, т.к. она выполняет аналогичное назначение. В данном случае вполне можно вместо двух процедур иметь одну. Результат отладки процедуры – нулевые значения данных, описанных в модуле OpDan и пустые текстовые окна и метка LBX. | |
Процесс отладки обеих процедур одинаков. Запустив программу на исполнение можно по сообщениям проконтролировать правильность выполнения процедур. В случае появления неверных результатов можно перейти в пошаговый режим и, наводя указатель мыши на имена данных, контролировать результаты вычислений. Возможно и применение пошагового режима с включением окна Watches, в которое следует добавить имена перечисленных выше переменных. | ||
Function MessX() 'Вычисление корня Dim S as String OpDan.a=val(TBA.Text) OpDan.b=val(TBB.Text) If a<>0 then S=str(-b/a) Elseif ((a=0) and (b=0)) then S="Неопределенный корень" Elseif ((a=0) and (b=0)) then S="Корень не существует" End if MessX= S TBA.Text = str(OpDan.a) TBB.Text = str(OpDan.b) LBX.Caption = str(OpDan.b) I=MsgBox("Вычислены а, b, x", vbOkOnly,"") End function Рис. 8.11. Текст функции MessX в момент отладки | Отладка функции MessX (рис. 8.10) выполняется в пошаговом режиме с установкой курсора на первый оператор текста функции. Целесообразно включить окна Watches и Locals и добавить в первое из них имена переменных из модуля OpDan, а во второе будет выводиться значение переменной S. Для отладки используются три набора данных: · a=10.6, b=31.8; · a=0, b=0; · a=0, b=10. Программа запускается командой "Debug/Run to Cursor". Наборы данных вводятся через окна формы. Выполнение программы прерывается на операторе OpDan.a=val(TBA.Text). Далее, применяя команду "Debug/Step Into", выполняем программу в пошаговом режиме и отслеживаем значения переменных. | |
Первый набор данных инициирует выполнение оператора S=str(-b/a), второй – оператора S="Неопределенный корень", третий – оператора S="Корень не существует". В первом случае значение корня равно (– 3). Вычисленные значения коэффициентов и корня можно наблюдать на форме в текстовых окнах и метке LBX[22].
Тестирование завершенного кода программы выполняется в соответствии с картой тестирования программы (табл. 8.3).
Таблица 8.3
Карта тестирования программы
Название теста | Действия программиста | Реакция программы |
Пуск | Запуск программы | Появление на экране формы и окна MsgBox с сообщением "Инициализируются данные" |
Инициализация ТВА | "Щелчок" мышью по текстовому окну TBA | Курсор ставится в ТВА |
Инициализация ТВА | "Щелчок" мышью по текстовому окну TBB | Курсор ставится в ТВВ |
Ввод набора данных | Ввести набор данных · a=10.6, b=31.8; · a=0, b=0; · a=0, b=10.2 | В активном текстовом окне (ТВА или ТВВ) появляются вводимые данные. Должна действовать клавиша "Забой2 |
Очистка | "Щелчок" мышью по кнопке "Очистить" | Появляется сообщение "Очистка формы", далее очищаются текстовые окна и метка LBX |
Расчет | "Щелчок" мышью по кнопке "Корень" | Появляется сообщение "Вычислены а, b, x", на форме появляются вычисленные значения коэффициентов и корней |
Возврат | Повторить один за другим тесты "Очистка", "Ввод данных" и "Расчет" | Очищается форма, вводятся данные, вычисляется корень, выводятся коэффициенты (повторно) и корень |
Завершение программы | "Щелчок" мышью по кнопке "Выход" или по кнопке "Х" | Появляется сообщение "Программа завершена" |
Далее из текста процедур и функции удаляем операторы, показанные нормальным шрифтом, и производим повторное тестирование программы в соответствии с картой тестирования программы. Результаты должны быть идентичными, но должны отсутствовать отладочные сообщения.
8.2. Создание инсталляционного комплекта
программного средства
После завершения работы по отладке программного средства достаточно легко получить ее исполняемый код. Он может быть построен в двух формах: как независимый исполняемый код и как P-cod (псевдокод), для исполнения которого необходим файл, входящий в комплект поставки Visual Basic и обеспечивающий выполнение программы. Первый код длиннее, но может работать без всяких добавок системы Visual Basic, второй код короче, но требует наличия указанного файла. Обычно предпочитают первый вариант. Способ компиляции указывается в окне "Свойства проекта".
Для построения инсталляционного комплекта (дистрибутива) запускается специальное приложение (Application SetupWizard для Visual Basic 5 и Package and Deployment Wizard для Visual Basic 6). Процесс создания дистрибутива происходит в диалоговом режиме в несколько шагов. Общий вид окон приложения (мастера) Application Setup Wizard приведен на рис. 8.12.
| В первом окне Application Setup Wizard выводятся различные сообщения, в частности, о назначении программы и основных действиях, выполняемых ею. Это окно здесь не показано. Следующим шагом является выбор проекта для создаваемого инсталляционного комплекта и настройка работы приложения. Для этой цели служит окно "Выбор проекта и настройка" (рис. 8.12,а). В этом окне устанавливается путь к файлу проекта и опции, позволяющие открыть программу установки с созданием или без создания зависимого файла, создать комплект поставки для распространения через Internet и просто создать зависимый файл. В следующем окне "Метод распространения" (рис. 8.12,б) выбирается способ размещения комплекта на носителях: на одной дискете, в одном каталоге на жестком диске для копирования на CD-Rom или в нескольких каталогах с именами Disk1, Disk2, … для создания комплекта дискет. |
| В следующем окне делается выбор каталога-приемника, который будет содержать создаваемый инсталляционный комплект. В этом окне указывается диск и путь к файлам инсталляционного комплекта. Дерево папок позволяет выбрать нужный путь к указанным файлам. В следующем окне мастера указываются серверные и локальные компоненты ActiveX. Это окно на рисунке не показано. В предпоследнем окне приложения "Итоговый файл" (рис. 8.13,б) показаны файлы, присоединяемые к файлам проекта. Как правило, это библиотеки *.dll. Приложение Application Setup Wizard автоматически составляет список файлов, которые необходимо добавить в комплект. Имеется возможность добавить свои файлы, кроме добавляемых приложением автоматически. В последних двух окнах выводятся сообщения о том, что комплект собран, и работа приложения завершена. Эти окна |
ничем не примечательны и в пособии не показаны.