Файл: Отладка и тестирование программ: основные подходы и ограничения.pdf
Добавлен: 06.04.2023
Просмотров: 287
Скачиваний: 1
Ведение протокола работы программы
В ряде случаев бывает неудобно или невозможно пользование пошаговой отладкой программ. В таких ситуациях могут помочь контрольные точки, не прерывающие работу программы, а лишь помещающие некоторую информацию в специальный файл трассировки. Для реализации такой точки нужно раскрыть окно Run|Add Breakpoint|Source Breakpoint, убрать флажок в переключателе Break и написать сообщение в строке Log message. Можно также в строке Eval expression указать выражение, которое будет вычислено и вместе с сообщением помещено в протокол работы программы. Возможен просмотр этого протокола в любой момент (в том числе и после завершения прогона программы) с помощью опции View|Debug Windows|Event Log. [19]
Кроме того, при отладке программ можно вставлять печать промежуточных переменных в разных частях программ для того, чтобы определить, какие части программы выполнялись и какие значения принимали переменные. Этим приемом пользуются программисты при отладке программ.
1.3. Тестирование программ
Под тестированием понимают процесс выполнения программного обеспечения с целью обнаружения мест некорректной работы программы. Для достижения наилучшего результата намеренно конструируются трудные и разнообразные наборы входных данных, учитывающих всевозможные случаи. Главная цель проверяющего в создании оптимальных возможностей для отказа программного продукта. Хотя иногда тестирование разработанной программы может быть упрощено до обычной проверки работоспособности и выполнения функций. Это сэкономит время, но ведет к ненадежности программного обеспечения, недовольству пользователей и так далее. [19]
Необходимо, чтобы ошибок в программном обеспечении не было с самого начала. Для этого нужно грамотно проектировать архитектуру, четко составить техническое задание, а также важно не вносить коррективы в связи, когда работа над проектом уже начата.
Чтобы контролировать правильность приложения, составляются тесты. Они состоят из начальных данных и значений, которые должны получиться как результирующие (или промежуточные). Для более успешного выявления проблем и несоответствий, тесты необходимо составлять после того, как был разработан алгоритм, но не началось программирование. Причем желательно использовать несколько подходов при расчете необходимых данных. В таком случае больше вероятность обнаружения ошибки благодаря тому, что можно исследовать код с другой точки зрения. Комплексно тесты должны обеспечивать проверку внешних эффектов готовой программной системы, а также ее алгоритмов работы. [18]
Как правило, тестирование программ происходит в объемах, необходимых для минимальной проверки функциональности в ограниченных пределах. Деятельность ведётся с изменением параметров, а также условий их работы. Процесс тестирования можно разделить на три этапа:
- Проверка в обычных условиях. В данном случае проводится тестирование основного функционала разработанного программного обеспечения. Полученный результат должен соответствовать ожидаемому. [18]
- Проверка в чрезвычайных условиях. В этих случаях подразумевается получение граничных данных, могущих негативно повлиять на работоспособность созданного программного обеспечения. В качестве примера можно привести работу с чрезвычайно большими или малыми числами, или вообще, полное отсутствие получаемой информации.
- Проверка при исключительных ситуациях. Она предполагает использование данных, лежащих за гранью обработки. В таких ситуациях очень плохо, когда программное обеспечение воспринимает их как пригодные к расчету и выдаёт правдоподобный результат. Необходимо позаботиться, чтобы в подобных случаях происходило отвержение любых данных, которые не могут быть корректно обработаны. Также необходимо предусмотреть информирование об этом пользователя. [19]
Выводы по 1 главе
В главе кратко рассмотрены 8 этапов процесса проектирования и разработки программ. Для выявления и устранения программных ошибок производится отладка и тестирование программ. Данные процессы рассмотрены более подробно на примере среды Дельфи.
2. Процесс проектирования и разработки программы на практике, отладка и тестирование программы
2.1. Постановка задачи, ее алгоритмизация
Нужно ввести квадратную матрицу 3х3, состоящую из целых положительных и отрицательных элементов. Посчитать количество отрицательных элементов, определить и вывести наименьшее отрицательное число, т.е. наибольшее по абсолютной величине; сумму и произведение положительных элементов матрицы.
Алгоритмизацию задачи проведем, используя схему структурного программирования «сверху-вниз». Нарисуем укрупненную блок-схему алгоритма (рис. 5). [17]
начало
Ввод массива А[3,3]
Аij>0
нет да
Определение количества K отрицательных чисел и миним. отрицат. числа MO
Определение суммы S и произведения P положительных чисел
Печать S и P
Печать К и МО
конец
Рисунок 5 – Укрупненная блок-схема [9]
По блок-схеме на рис. 5 определим блоки, используя принцип модульного программирования:
- Ввод массива А[3,3] – процедура VvodA;
- Определение минимального отрицательного (наибольшего по абсолютной величине) числа MO и числа отрицательных элементов массива kk;
- Определение суммы и произведения положительных элементов массива.
Представим теперь блок-схемы каждого блока, оформляемого в виде процедуры на рис. 6 - 8. [7]
j=1;
i=1;
начало
Ввод элемента аij
J<5
j=j+1;
да
i<5
i=i+1;
да
конец
Рисунок 6 – Блок-схема алгоритма ввода массива А [9]
начало
k=0; kk=0
i=1;
j=1;
Аi,j<0
да
kk=kk+1;
MО>Аij
k=1
нет да да
j=j+1;
MО=Аij
k=1; MO=Aij
да
j<=5
нет
i=i+1;
i<=5
да
нет
Вывод МО и kk
конец
Рисунок 7 – Блок-схема алгоритма нахождения минимального отрицательного элемента массива [9; 13]
начало
S=0; P=1
i=1;
j=1;
Аi,j>0
да
S=S+aij;
P=P*aij
нет
j=j+1;
да
j<=5
нет
i=i+1;
i<=5
да
нет
Вывод S и P
конец
Рисунок 8 – Блок-схема алгоритма нахождения суммы и произведения положительных элементов массива [7; 9]
Теперь приступим к программированию задачи на языке Delphi 7.
2.2. Составление программы
Программу составим на языке высокого уровня Delphi 7. Для простоты отладки программы возьмем массив 3х3, состоящий из 9 элементов. Программу назовем Primer.pas. В основной программе сначала вызывается процедура VvodA, вводящая элементы матрицы 3х3 по нажатию кнопки Ввод. Затем введенный массив печатается поэлементно. Если элемент массива отрицательный, определяется минимальное отрицательное число и количество отрицательных элементов массива.
Если элемент массива положительный – считается сумма и произведение положительных элементов массива.
// ввод двумерного массива, определение миним. отрицат. числа, количество отрицат. чисел, суммы и произведения положительных чисел массива , вывод результатов
unit Primer;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure VvodA(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
A: array[0..5,0..5] of integer;
i,j,k,k1,MO,m,l: Integer;
S,P: Integer;
str1: string; [1]
implementation
{$R *.dfm}
procedure TForm1.VvodA(Sender: TObject);
// ввод массива чисел
var
A: array[0..5,0..5] of integer;
i,j,k,k1,S,P: integer;
str1: string; [15; 16]
begin
k:=1;
for i:=1 to 3 do
for j:=1 to 3 do
begin
str1:=Memo1.Lines[k-1];
A[i,j]:=StrToInt(str1);
k:=k+1;
end; [4; 3; 2]
S:=0; P:=1;
k1:=0; l:=0;
for i:=1 to 3 do
for j:=1 to 3 do begin
if A[i,j]>=0 then begin
S:=S+A[i,j]; //подсчет суммы положительных элементов
P:=P*A[i,j]; //подсчет произведения положительных элементов
end
else begin //отрицательные элементы
if k1=1 then if MO>A[i,j] then MO:=A[i,j]
else
else begin k1:=1; MO:=A[i,j]; end;
str1:='MO='+IntToStr(MO);
ShowMessage(str1);
l:=l+1;
end;
end; [1; 2; 3]
str1:='Количество отрицательных элементов='+IntToStr(l);
ShowMessage(str1);
str1:='Минимальный отрицательный элемент='+IntToStr(MO);
ShowMessage(str1);
str1:='Сумма положительных элементов='+IntToStr(S);
ShowMessage(str1);
str1:='Произведение положитeльных элементов='+IntToStr(P);
ShowMessage(str1);
end; [10; 11; 12; 14]
END.
2.3. Отладка и тестирование программы
При отладке программы были установлены точки останова и окно наблюдения за переменными str1 и A[I,j], что облегчило отладку и позволило обнаружить ошибки в программе. Также для отладки программы была вставлена печать в разные части программы для того, чтобы обнаружить, какие блоки программы были выполнены.
При тестировании программы брался набор чисел:
1, 2, -3, 4, 5, -6, 7, 8, -9.
В конце программы печатается следующая информация:
- Количество отрицательных элементов, подсчет количества производился в переменной l (рис. 9); [18, 19]
- Минимальный отрицательный элемент, сохраненный в переменной МО (рис. 10);
- Сумма положительных элементов S (рис. 11);
- Произведение положительных элементов Р (рис. 12).
Рисунок 9 – Сообщение о количестве отрицательных элементов
Рисунок 10 – Результат выполнения программы Primer.pas с сообщением о минимальном отрицательном элементе
Рисунок 11 – Результат выполнения программы Primer.pas с сообщением о сумме положительных элементов
Проверим вручную правильность: 1+2+4+5+7+8 = 27. Результат совпадает.
Рисунок 12 – Результат выполнения программы Primer.pas с сообщением о произведении положительных элементов
1*2*4*5*7*8 = 2240. Результат также совпадает, следовательно, алгоритм и программа составлены правильно.
Второй набор чисел при тестировании программы:
-11, 22, -33, 44, 55, -66, 77, 88, -99. [21]
Результат выполнения программы для этого набора приведен на рис. 13-15. [10; 15; 16]
Рисунок 13 – Результат выполнения программы Primer.pas с сообщением о минимальном отрицательном элементе
Рисунок 14 – Результат выполнения программы Primer.pas с сообщением о сумме положительных элементов
22+44+55+77+88 = 286. Результат также совпадает. [18]
Рисунок 12 – Результат выполнения программы Primer.pas с сообщением о произведении положительных элементов [16; 19]
22+44+55+77+88 = 360 754 240. Результат также совпадает, что свидетельствует о правильной работе программы.
Вывод по 2 главе
Во 2-ой главе поставлена задача ввода массива целых чисел 3х3, подсчета количества отрицательных элементов массива, определение наименьшего отрицательного элемента; подсчета суммы и произведения положительных элементов массива и вывод их. При написании программы использованы методы структурного программирования программирование «сверху-вниз», модульное программирование. При отладке программы использовались точки останова, окно наблюдения за переменными, что облегчило отладку и позволило обнаружить ошибки в программе.
При тестировании программы брались разные наборы данных, результаты работы программы сравнивались с подсчитанными вручную результатами. Результаты совпали, что свидетельствует о правильности составления алгоритма и корректности работы программы.
ЗАКЛЮЧЕНИЕ
Проектирование и разработка программ состоит из следующих последовательных этапов: