
- •Анотація
- •1.Технологічна частина
- •1.1. Призначення та область застосування програмного продукту
- •1.2 Функціональні вимоги до програмного продукту
- •1.3. Кваліфікаційні вимоги до програмного продукту
- •1.4. Вимоги до умов експлуатації програмного продукту
- •2. Спеціальна частина
- •2.1. Вхідні та вихідні дані програмного продукту
- •2.2. Структура програмного продукту
- •2.3. Опис інтефейсу програмного продукту з користувачем
- •2.4. Тестування програмного продукту
- •Висновки
- •Перелік використаних джерел та літератури
- •Програмний код
2.4. Тестування програмного продукту
На етапі тестування визначаються споживчі властивості програмного продукту. Успішне проведення повномасштабного тестування програмного продукту є запорукою його якості та ефективного використання під час експлуатації.
План тестування програмного продукту складено з наступних міркувань:
визначення повноти реалізації всіх функціональних вимог;
перевірка виконання критеріїв безпеки;
доведення його працездатності, стійкого виконання та коректного завершення всіх операцій незалежно від дій користувача.
Тестування прововодилося в три етапи для різних вхідних даних.
Кількість команд – 16, кількість груп – 4. Результати представлені на рис.8-10 п.2.3.
Кількість команд – 15, кількість груп – 3. Кінцевий результат представлений на рис.11.
Кількість команд – 12, кількість груп – 2. Кінцевий результат представлений на рис.12.
Р
ис.11.
Реультати другого етапу тестування
Р
ис.12.
Реультати третього етапу
тестування
Висновки
Програмний продукт «Електронне жеребкування» розроблено на основі індивідуального завдання до курсової роботи. Він здійснює автоматизацію процесу розподілу команд на групи шляхом проведеннякомпютерного жеребкування з використанням генератора псевдовипадкових чисел.
Програмний продукт розроблено з використанням в якості інструментального засобу візуального інтерактивного об’єктно-орієнтованого середовище програмування Delphi 7, що відповідає сучасним тенденціям розвитку технологій розробки програмного забезпечення.
Випробування програмного продукту продемонстрували його працездатність та відповідність заданим функціональним та кваліфікаційним вимогам.
Перелік використаних джерел та літератури
Митчелл К.Керман. Программирование и отладка в Delphi. Учебный курс. Москва – Санки-Петербург – Киев, 2003, - 669с.
Орлов С.А. Технологии разработки программного обеспечения. Учебник для ВУЗов. Москва-… 2002, - 623с.
Проектування інформаційних систем. Посібник під ред.. Д.е.н., професора В.С.Пономаренка. – К., ВЦ «Академія», 2002, - 542с.
Фленов. М. Библия Delphi. Санкт-Петербург, 2005, - 865с.
ДОДАТОК
Програмний код
unit UnitMain;
//Електронне жеребкування - головний модуль
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, AdvMenus, StdCtrls, Mask, AdvSpin, AdvGlowButton;
type
TFormMain = class(TForm)
EditK: TAdvSpinEdit;
EditG: TAdvSpinEdit;
AdvMainMenu1: TAdvMainMenu;
NK: TMenuItem;
NG: TMenuItem;
NV: TMenuItem;
ButtonU: TAdvGlowButton;
function grup(kil: integer): string;
procedure IntefaceControl;
procedure FormActivate(Sender: TObject);
procedure ButtonUClick(Sender: TObject);
procedure NKClick(Sender: TObject);
procedure NGClick(Sender: TObject);
procedure NVClick(Sender: TObject);
end;
var FormMain: TFormMain;
y: boolean;
implementation
uses UnitK, UnitG;
{$R *.dfm}
//Відмінювання слова "групи" згідно з їх кількістю
function TFormMain.grup(kil: integer): string;
//kil - кількість груп
//grup - слово "групи" у відміну, відповідному їх кількості
var s: string; //рядкове представлення кількості груп
c: char; //остання цифра кількості груп
begin
if (kil>10) and (kil<20)
then grup:=' груп'
else begin
s:=inttostr(kil);
c:=s[length(s)];
case c of
'1' : grup:=' група';
'2'..'4': grup:=' групи';
else grup:=' груп';
end;
end;
end;
//Керування параметрами інтерфейсу головного вікна
procedure TFormMain.IntefaceControl;
begin
NK.Enabled:=y;
NG.Enabled:=(y) and (FormK.ListK.Count=FormMain.EditK.Value);
end;
//Встановлення початкових значень параметрів інтерфейсу головного вікна
procedure TFormMain.FormActivate(Sender: TObject);
begin
y:=false;
IntefaceControl;
end;
//Контроль коректності визначення умов жеребкування
procedure TFormMain.ButtonUClick(Sender: TObject);
begin
if EditK.Value mod EditG.Value<>0
then showmessage('Неможливо поділити порівну '+inttostr(EditK.Value)+
' команд на '+inttostr(EditG.Value)+ grup(EditG.Value));
if EditK.Value <= EditG.Value
then showmessage('Кількість команд не може бути менше або дорівнювати кількості груп');
y:=(EditK.Value mod EditG.Value=0) and (EditK.Value>EditG.Value);
IntefaceControl;
end;
//Команди
procedure TFormMain.NKClick(Sender: TObject);
begin
FormK.ShowModal;
end;
//Групи
procedure TFormMain.NGClick(Sender: TObject);
begin
FormG.ShowModal;
end;
//Вихід
procedure TFormMain.NVClick(Sender: TObject);
begin
close;
end;
end.
unit UnitK;
//Електронне жеребкування - модуль формування списку команд
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, editlist, Menus, AdvMenus;
type
TFormK = class(TForm)
AdvMainMenu1: TAdvMainMenu;
NLoadFile: TMenuItem;
NSaveFile: TMenuItem;
NClose: TMenuItem;
ListK: TEditListBox;
NList: TMenuItem;
NFile: TMenuItem;
NNewItem: TMenuItem;
NEditItem: TMenuItem;
NDeleteItem: TMenuItem;
NClearList: TMenuItem;
procedure IntefaceControl;
procedure FormActivate(Sender: TObject);
procedure NLoadFileClick(Sender: TObject);
procedure NSaveFileClick(Sender: TObject);
procedure NNewItemClick(Sender: TObject);
procedure NEditItemClick(Sender: TObject);
procedure NDeleteItemClick(Sender: TObject);
procedure NClearListClick(Sender: TObject);
procedure NCloseClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
var FormK: TFormK;
implementation
uses UnitMain;
{$R *.dfm}
//Керування параметрами інтерфейсу вікна "Команди"
procedure TFormK.IntefaceControl;
begin
NNewItem.Enabled:=ListK.Items.Count<FormMain.EditK.Value;
NSaveFile.Enabled:=ListK.Count>0;
NEditItem.Enabled:=ListK.Count>0;
NDeleteItem.Enabled:=ListK.Count>0;
NClearList.Enabled:=ListK.Count>0;
end;
//Встановлення початкових значень параметрів інтерфейсу вікна "Команди"
procedure TFormK.FormActivate(Sender: TObject);
begin
IntefaceControl;
end;
//Завантажити з файлу
procedure TFormK.NLoadFileClick(Sender: TObject);
begin
if not fileexists('Команди.txt')
then showmessage('Файл списку команд відсутній')
else begin
ListK.Items.LoadFromFile('Команди.txt');
if ListK.Items.Count>FormMain.EditK.Value then
while ListK.Items.Count>FormMain.EditK.Value do
ListK.Items.Delete(ListK.Items.Count-1);
IntefaceControl;
end;
end;
//Зберегти в файлі
procedure TFormK.NSaveFileClick(Sender: TObject);
begin
ListK.Items.SaveToFile('Команди.txt')
end;
//Нова команда
procedure TFormK.NNewItemClick(Sender: TObject);
var Str:String;
begin
Str:='';
if InputQuery('Нова команда', '', Str) and (Str<>'')
then begin
ListK.Items.Add(str);
IntefaceControl;
end;
end;
//Редагування назви команди
procedure TFormK.NEditItemClick(Sender: TObject);
var Str:String;
begin
if ListK.ItemIndex<0
then showmessage('Оберіть команду')
else begin
Str:=ListK.Items[ListK.ItemIndex];
if InputQuery('Нова нава команди', '', Str) and (Str<>'')
then ListK.Items[ListK.ItemIndex]:=str;
end;
end;
//Видалення команди
procedure TFormK.NDeleteItemClick(Sender: TObject);
begin
if ListK.ItemIndex<0
then showmessage('Оберіть команду')
else if Application.MessageBox('Підтвердіть необхідність або скасуйте видалення команди!','Увага!',MB_YESNO)=6
then begin
ListK.Items.Delete(ListK.ItemIndex);
IntefaceControl;
end
else showmessage('Операцію скасовано користувачем');
end;
//Очищення списку
procedure TFormK.NClearListClick(Sender: TObject);
begin
ListK.Items.Clear;
IntefaceControl;
end;
//Закрити вікно
procedure TFormK.NCloseClick(Sender: TObject);
begin
close;
end;
//Автоматичне збереження списку команд у файлі під час закриття вікна
procedure TFormK.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ListK.Count>0 then ListK.Items.SaveToFile('tmp.txt');
FormMain.IntefaceControl;
end;
end.
unit UnitG;
//Електронне жеребкування - модуль розподілу команд по групах шляхом жеребкування
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Shader, AdvCircularProgress, AdvGlowButton, StdCtrls,
editlist, Grids, AdvObj, BaseGrid, AdvGrid;
type
TFormG = class(TForm)
Panel2: TPanel;
ButtonBegin: TAdvGlowButton;
Panel3: TPanel;
Circular: TAdvCircularProgress;
Panel1: TPanel;
Grup: TShader;
ListK: TEditListBox;
Grid: TAdvStringGrid;
TimerG: TTimer;
TimerK: TTimer;
procedure FormActivate(Sender: TObject);
procedure ButtonBeginClick(Sender: TObject);
procedure TimerGTimer(Sender: TObject);
procedure TimerKTimer(Sender: TObject);
end;
var FormG: TFormG;
k,kk, g: integer;
implementation
uses UnitK, UnitMain;
{$R *.dfm}
//Встановлення початкових значень параметрів інтерфейсу вікна "Розподіл команд по групах шляхом жеребкування"
procedure TFormG.FormActivate(Sender: TObject);
var i: integer;
begin
ListK.Items:=FormK.ListK.Items;
Grid.ColCount:=FormMain.EditG.Value+1;
kk:=FormMain.EditK.Value div FormMain.EditG.Value;
Grid.RowCount:=kk+1;
ButtonBegin.Caption:='Розпочати жеребкування';
Grup.caption:='';
Grup.Visible:=false;
ButtonBegin.Enabled:=true;
Grid.Rows[0].Clear;
For i:=1 to Grid.RowCount-1 do
begin
Grid.Rows[i].Clear;
Grid.Cells[0,i]:=inttostr(i);
end;
end;
//Розпочати жеребкування
procedure TFormG.ButtonBeginClick(Sender: TObject);
begin
ButtonBegin.Caption:='Відбувається жеребкування';
ButtonBegin.Enabled:=false;
Grup.Visible:=true;
g:=0;
randomize;
TimerG.Enabled:=true;
end;
//Перехід до формування наступної групи
procedure TFormG.TimerGTimer(Sender: TObject);
begin
inc(g);
if g<=FormMain.EditG.Value
then begin
Grup.Caption:=inttostr(g)+' група';
Grid.Cells[g,0]:=Grup.Caption;
circular.Position:=1;
circular.Enabled:=true;
TimerK.Enabled:=true;
k:=0;
end;
if g>FormMain.EditG.Value then
begin
ButtonBegin.Caption:='Жеребкування завершено';
Grup.Visible:=false;
end;
TimerG.Enabled:=false;
end;
//Вибір наступної команди групи
procedure TFormG.TimerKTimer(Sender: TObject);
var x: integer;
begin
inc(k);
if k<=kk then begin
x:=random(ListK.Count-1);
Grid.Cells[g,k]:=ListK.Items[x];
ListK.Items.Delete(x);
end;
if k=kk then begin
TimerK.Enabled:=false;
circular.Enabled:=false;
TimerG.Enabled:=true;
end;
end;
end.