Главная страница
Навигация по странице:

  • Состав теста Ожидаемый результат Наблюдаемый результат

  • Сазонова_20ВИ1. Сравнение и анализ алгоритмов сортировки массива прямым выбором


    Скачать 0.88 Mb.
    НазваниеСравнение и анализ алгоритмов сортировки массива прямым выбором
    Дата10.12.2021
    Размер0.88 Mb.
    Формат файлаdoc
    Имя файлаСазонова_20ВИ1.doc
    ТипПояснительная записка
    #298849
    страница7 из 7
    1   2   3   4   5   6   7

    Функциональное тестирование программы


    В курсовой работе было выполнено функциональное тестирование, разработанного программного обеспечения «Сравнение и анализ алгоритмов сортировки массива прямым выбором». Результаты тестирования приведены в таблице 1.

    Таблица 1 – Результаты тестирования

    Состав теста

    Ожидаемый результат

    Наблюдаемый результат

    Проверка сортировки массива методом классического прямого выбора

    Отсортированный массив и вывод корректного времени его сортировки

    Массив отсортирован и выведено корректное время его сортировки. Тест пройден (Рисунок 8)

    Проверка сортировки массива методом прямого выбора с одновременным поиском минимума и максимума

    Отсортированный массив и вывод корректного времени его сортировки

    Массив отсортирован и выведено корректное время его сортировки. Тест пройден (Рисунок 9)


    Продолжение таблицы 1

    Состав теста

    Ожидаемый результат

    Наблюдаемый результат

    Проверка времени сортировок прямым выбором неупорядоченного массива

    Вывод времени сортировок классического прямого выбора и прямого выбора с одновременным поиском минимума и максимума в зависимости от размерности неупорядоченного массива. Время сортировки первым методом должно быть меньше времени сортировки массива вторым методом примерно в 1,5-2 раза.

    Выведено время сортировок классическим прямым выбором и прямым выбором с одновременным поиском минимума и максимума неупорядоченного массива в зависимости от его размерности. Время сортировки первым методом медленнее второго в 1,5-2 раза. Тест пройден (Рисунок 10)

    Проверка времени сортировок прямым выбором упорядоченного массива

    Вывод времени сортировок классического прямого выбора и прямого выбора с одновременным поиском минимума и максимума в зависимости от размерности упорядоченного массива. Время сортировки первым методом должно быть меньше времени сортировки массива вторым методом примерно в 1,5-2 раза.

    Выведено время сортировок классическим прямым выбором и прямым выбором с одновременным поиском минимума и максимума упорядоченного массива в зависимости от его размерности. Время сортировки первым методом медленнее второго в 1,5-2 раза. Тест пройден (Рисунок 11)

    Проверка времени сортировок прямым выбором упорядоченного в обратном порядке массива

    Вывод времени сортировок классического прямого выбора и прямого выбора с одновременным поиском минимума и максимума в зависимости от размерности упорядоченного в обратном порядке массива. Время сортировки первым методом должно быть меньше времени сортировки массива вторым методом примерно в 1,5-2 раза.

    В зависимости от размерности массива выведено время сортировок классическим прямым выбором и прямым выбором с одновременным поиском минимума и максимума массива, упорядоченного в обратном порядке. Время сортировки первым методом медленнее второго в 1,5-2 раза. Тест пройден (Рисунок 12)

    Проверка реагирования программы на создание массива без указания его размерности

    Программа должна вывести окно с сообщением пользователю о том, что необходимо указать размерность массива

    На экране выведено окно с сообщением пользователю о том, что необходимо указать размерность массива. Тест пройден (Рисунок 13)

    Проверка реагирования программы на создание массива без указания его степени упорядоченности

    Программа должна вывести окно с сообщением пользователю о том, что необходимо выбрать степень упорядоченности массива

    На экране выведено окно с сообщением пользователю о том, что необходимо выбрать степень упорядоченности массива. Тест пройден (Рисунок 14)


    Продолжение таблицы 1

    Состав теста

    Ожидаемый результат

    Наблюдаемый результат

    Проверка на построение графиков зависимости времени сортировок от размерности массива

    Программа должна построить графики зависимости времени сортировок массива от его размерности. На оси Y должно быть указано время сортировок, на оси Х – размерность массива. Значения графиков должны совпадать с результатами сортировок, представленными в табличной форме

    Программа построила график зависимости времени сортировок массива от его размерности. На оси Y указано время выполнения сортировок, а на оси Х – размерность массива. Значения графиков совпадают с результатами сортировок, представленными в табличной форме. Тест пройден (Рисунок 15)

    Ниже на рисунках 8-15 представлены скриншоты, отражающие результаты работы программы в ходе ее тестирования.



    Рисунок 8 - Результат тестирования сортировки массива методом классического прямого выбора



    Рисунок 9 – Результат тестирования сортировки массива методом прямого выбора с одновременным поиском минимума и максимума



    Рисунок 10 – Результат тестирования сортировок прямым выбором над неупорядоченным массивом



    Рисунок 11 – Результат тестирования сортировок прямым выбором над упорядоченным массивом



    Рисунок 12 – Результат тестирования сортировок прямым выбором над упорядоченным в обратном порядке массивом



    Рисунок 13 – Результат тестирования программы на сравнение алгоритмов без введения размерности массива



    Рисунок 14 – Результат тестирования программы на сравнение алгоритмов без выбора степени упорядоченности массива



    Рисунок 15 – Результат тестирования программы на построение графика зависимости времени сортировок от размерности массива

    В ходе выполнения тестирования несовпадения ожидаемого и наблюдаемого результата не выявлены. Следовательно, можно сделать вывод, что программа «Сравнение и анализ алгоритмов сортировки массива прямым выбором» работает корректно.

    Приложение А


    КОД ПРОГРАММЫ

    (обязательное)
    unit Unit1;
    interface
    uses

    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, Vcl.ComCtrls,

    VclTee.TeeGDIPlus, VCLTee.TeEngine, Vcl.ExtCtrls, VCLTee.TeeProcs,

    VCLTee.Chart, VCLTee.Series;
    type

    TForm1 = class(TForm)

    PageControl1: TPageControl;

    TabSheet1: TTabSheet;

    TabSheet2: TTabSheet;

    TabSheet3: TTabSheet;

    Label1: TLabel;

    Edit1: TEdit;

    RadioButton1: TRadioButton;

    RadioButton2: TRadioButton;

    RadioButton3: TRadioButton;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    StringGrid1: TStringGrid;

    Chart1: TChart;

    Label2: TLabel;

    Label3: TLabel;

    Series1: TLineSeries;

    Series2: TLineSeries;

    Label4: TLabel;

    Label5: TLabel;

    procedure Button3Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    const n=1000000;

    var

    Form1: TForm1;

    M: array[0..n] of longint;

    M2: array [0..n] of longint;
    implementation
    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);

    var

    i,j,razm,max,min,buf: longint;

    t,t1,t2,t3,t4,q: integer;

    time1: array [0..10] of integer;//Время классической сортировки массива в зависимости от его размерности

    time2: array [0..10] of integer;//Время сортировки массива с одновременным поиском min и max в зависимости от его размерности

    size: array [0..10] of longint; //Массив с размерностями массивов

    begin

    //Проверки на заполненность данных

    //проверка на выбранность степени упорядоченности

    if (RadioButton1.Checked=false) and (RadioButton2.Checked=false) and (RadioButton3.Checked=false) then

    Showmessage ('Необходимо выбрать степень упорядоченности!');
    //Проверка на пустоту размерности массива, если пользователь

    //Не ввел размерность массива, то выводится соответствующее окно

    if length(edit1.text)=0 then Showmessage('Необходимо указать размерность массива!')

    else razm:=strtoint(Edit1.Text); //Присваиваем переменной размерность массива
    //Определяем, какой массив выбран, создаем его и дублируем эти значения во второй массив

    if (RadioButton1.Checked=true) then //Неупорядоченный массив

    begin

    randomize;

    for i:=0 to razm do

    begin

    M[i]:=random(1000000);

    M2[i]:=M[i];

    end;

    end

    else if (RadioButton2.Checked=true) then //Упорядоченный массив

    begin

    M[0]:=random(3);

    for i:=1 to razm do begin

    M[i]:=M[i-1]+random(5)+1;

    M2[i]:=M[i];

    end;

    end

    else if (RadioButton3.Checked=true) then //Упорядоченный в обратном порядке массив

    begin

    M[0]:=999999;

    for i:=1 to n do begin

    M[i]:=M[i-1]-random(10)-1;

    M2[i]:=M[i];

    end;

    end;
    //В зависимости от того, какая выбрана упорядоченность, для удобства записываем это в таблицу

    if (RadioButton1.Checked=true) then

    StringGrid1.Cells[0, 4] := 'Неупорядоченный'

    else if (RadioButton2.Checked=true) then

    StringGrid1.Cells[0, 4] := 'Упорядоченный'

    else if (RadioButton3.Checked=true) then

    StringGrid1.Cells[0, 4] := 'Упорядоченный в обратном порядке';

    //Сортировка классическим прямым выбором
    q:=0;

    while q<>10 do begin //Цикл необходимый для отметки времен и размерностей массивов

    size[q]:=razm; //Присваиваем массиву с размерностями определенные значения

    t1:=GetTickCount;

    for i:=0 to razm do begin //Цикл с выполнением классической сортировки

    min:=i; //Присваивается индекс первой неотсортированной переменной

    for j := i+1 to razm do begin //Среди оставшихся неотсортированных элементов массива находится минимальный

    if M[min]>M[j] then

    min:=j;

    end;

    buf:=M[i]; //Через дополнительную переменную меняем элементы местами

    M[i]:=M[min];

    M[min]:=buf;

    end;

    t2:=GetTickCount;

    time1[q]:=t2-t1; //Заносим полученное время сортировки в массив с временными показателями

    q:=q+1;

    //Уменьшаем размерность массива

    if razm div 100000>=3 then razm:=razm-100000

    else if razm div 100000>=1 then razm:=razm-30000

    else if razm div 10000>=1 then razm:=razm-7000

    else if razm div 1000>=1 then razm:=razm-200;

    //Возвращаем массиву первоначальный вид, но уже с уменьшенной размерностью

    for i:=0 to razm do

    M[i]:=M2[i];

    end;

    razm:=strtoint(Edit1.Text); //Присваиваем максимальную размерность массива

    //Возвращаем массиву первоначальный вид с максимальной размерностью

    for i:=0 to razm do

    M[i]:=M2[i];
    //Сортировка прямым выбором с одновременным поиском минимума и максимума

    q:=0;

    while q<>10 do begin //Цикл необходимый для отметки времен и размерностей массивов

    t3:=GetTickCount;

    for i:=0 to razm do begin //Цикл с выполнением сортировки с одновременным поиском минимума и максимума

    min:=i; //Присваивается индекс первой неотсортированной переменной

    max:=razm-i; //Присваивается индекс последней неотсортированной переменной

    for j := i+1 to razm-i-1 do begin //Среди оставшихся неотсортированных элементов

    if M2[min]>M2[j] then //массива находится минимальный и максимальный соответственно

    min:=j;

    if M2[max]
    max:=j;

    end;

    buf:=M2[i]; //Через дополнительную переменную меняем элементы местами

    M2[i]:=M2[min];

    M2[min]:=buf; //Меняем местами первый неупорядоченный элемент с минимальным

    buf:=M2[razm-i];

    M2[razm-i]:=M2[max]; //Меняем местами последний неупорядоченный элемент с максимальным

    M2[max]:=buf;

    end;

    t4:=GetTickCount;

    time2[q]:=t4-t3; //Заносим полученное время сортировки в массив с временными показателями

    q:=q+1;

    //Уменьшаем размерность массива

    if razm div 100000>=3 then razm:=razm-100000

    else if razm div 100000>=1 then razm:=razm-30000

    else if razm div 10000>=1 then razm:=razm-7000

    else if razm div 1000>=1 then razm:=razm-200;

    //Возвращаем массиву первоначальный вид, но уже с уменьшенной размерностью

    for i:=0 to razm do begin

    M2[i]:=M[i];

    end;
    end;
    // Занесение в таблицу временные показатели сортировок прямым выбором и соответствующие размерности

    for q := 0 to 9 do

    begin

    StringGrid1.Cells[1+q, 0] :=inttostr(size[q]); //Заполняем строчку в таблице с размерностями

    StringGrid1.Cells[1+q, 1] :=inttostr(time1[q]); //Время выполнения классической сортировки

    StringGrid1.Cells[1+q, 2] :=inttostr(time2[q]); //Время выполнения сортировки с одновременныс поиском min и max

    end;
    end;
    procedure TForm1.Button2Click(Sender: TObject); //Создание и выведение графика

    var

    i,n:integer;

    begin

    series1.Clear;

    series2.Clear;

    n:=10;

    for i := 1 to n do

    begin

    //Функция классической сортировка

    series1.AddXY(StrToInt(stringgrid1.Cells[i, 0]), StrToInt(stringgrid1.Cells[i, 1]));

    //Функция сортировки с поиском минимумом и максимумом

    series2.AddXY(StrToInt(stringgrid1.Cells[i, 0]), StrToInt(stringgrid1.Cells[i, 2]));

    end;

    end;
    procedure TForm1.Button3Click(Sender: TObject); //Кнопка закрытия программы

    begin

    close;

    end;
    procedure TForm1.FormCreate(Sender: TObject); //Подписываем все названия строчек в таблице

    begin

    StringGrid1.ColWidths[0] := 350;

    StringGrid1.RowHeights[0] := 40;

    StringGrid1.RowHeights[1] := 40;

    StringGrid1.RowHeights[2] := 40;

    StringGrid1.Cells[0, 0] := 'Размерность массива';

    StringGrid1.Cells[0, 3] := 'Степень упорядоченности массива:';

    StringGrid1.Cells[0, 1] := 'Классическая сортировка прямым выбором';

    StringGrid1.Cells[0, 2] := 'Сортировка с одновременным поиском min и max';

    end;
    end.
    1   2   3   4   5   6   7


    написать администратору сайта