На протяжении всего жизненного цикла программного обеспечения может быть выявлено М0 отказов. Так же будут выявлены все N0 ошибок, которые были найдены до начала тестирования.
Общее число отказов M0 взаимосвязано с
первоначальным числом ошибок N0 , соотношением:
, (5.7)
где В - коэффициент уменьшения числа ошибок, либо число, определяющее количество устраненных ошибок, приходящихся на один отказ.
Модель Муса предусматривает два вида времени:
- суммарное время функционирования τ, которое учитывает
чистое время тестирования до контрольного момента, когда проводится оценка
надежности;
- оперативное время t - время выполнения программы, планируемое от контрольного момента и далее при условии, что дальнейшего устранения ошибок не будет (время безотказной работы в процессе эксплуатации).
Суммарное время функционирования τ предполагает:
- интенсивность отказов пропорциональна числу неустраненных ошибок;
- скорость изменения числа устраненных ошибок, измеряемая относительно суммарного времени функционирования, пропорциональна интенсивности отказов.
Один из главных показателей надежности, расчитывающийся по модели Муса -
средняя наработка на отказ. Он определяется как математическое ожидание
временного интервала между последовательными отказами и связан с надежностью.
, (5.8)
где t - время работы до отказа.
Если интенсивность отказов постоянна, то средняя наработка на отказ обратно пропорциональна интенсивности отказов.
Средняя наработка находится по формуле:
, (5.9)
где
- средняя наработка на отказ до начала тестирования;
С - коэффициент сжатия тестов;
τ - суммарное время функционирования.
К
примеру, если 1 ч тестирования равен 8 ч работы в реальных условиях, то
коэффициент сжатия тестов равен 8.
, (5.10)
где f - средняя скорость исполнения программы, отнесенная к числу операторов;
k - является коэффициентом проявления ошибок, который связывает частоту возникновения ошибок со «скоростью ошибок» (скорость, с которой бы встречались ошибки программы, если бы программа выполнялась линейно-последовательно по командам), значение определяют эмпирическим путем по однотипным программам, оно лежит в пределах от 1,54 10-7 до 3,99 · 10-7;
-
начальное число ошибок программы, его можно рассчитать по модели Шумана на
основе статических данных.
Надежность
R для оперативного периода
вычисляется по формуле:
, (5.11)
Предположим, что в системе работают 500 операторов, скорость работы системы равна 106 операторов в час. Система тестировалась 120 часов, за которые было выявлено 30 ошибок и 12 отказов.
По формуле (5.10) найдём среднюю наработку на отказ перед началом тестирования:
Среднюю
наработку на отказ найдём по формуле (5.9):
221,45
Надежность
для оперативного периода
равную 150 часам найдём по формуле (5.10):
.
5.3.2 Модель Коркорэна
Применение модели предполагает знание следующих ее показателей:
- содержание изменяющейся вероятности отказов для различных источников ошибок и разную вероятность их исправления;
- использование таких параметров, как результат только N
испытаний, в которых наблюдается
ошибок i-го типа;
- выявление в ходе N испытаний ошибки i-го типа появляется с
вероятностью
.
, (5.12)
где N0 - число безотказных (или безуспешных) испытаний, выполненных в серии из N испытаний;- известное число типов ошибок.
Параметр Yi вычисляется
из соотношения:
;
.
где
- вероятность выявления при тестировании ошибки i-го типа.
Вероятность αi основывается на оценке данных предшествующего периода функционирования однотипных программ, либо на основе аппаратной информации. Предположим, что при тестировании программного обеспечения из 70 прогонов 4 закончились с отказом.
Требуется найти вероятность безотказного выполнения программы на момент тестирования.
Надежность составляет 95,24%.
. ОБЗОР ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Для более удобного пользования в программе имеется меню навигации. Перед
началом работы требуется подключиться к базе данных, затем выбрать один из
пунктов меню: «Администрирование».
Рисунок 6.1 - Меню программы
Выбрав вкладку меню «DB» → «Connect» отправляется запрос на
подключение к базе данных. Подключение совершается только при правильном
заполнении значений в таблице, пример показан на рисунке 6.2.
Рисунок 6.2 - Таблица значении для подключения к БД
При входе в систему с правами администратора требуется пройти авторизацию
(Рисунок 6.3).
Рисунок 6.3 - Процедура авторизации
Далее открывается форма позволяющая пользователю загружать в базу данных
эталонные изображения. Используя данные эталоны будет производиться сортировка
случайно сгенерированных изображений.
Рисунок 6.4 - Загрузка эталонных изображений
После загрузки эталонов на их основе можно осуществлять анализ и сортировку изображений, которые поступили для распознавания.
В программе имеется возможность самостоятельного выбора изображения для
распознавания, а так же с помощью случайной генерации изображения. (рисунок
6.5).
Рисунок 6.5 - Выбор изображения
Далее идет этап анализа, при этом происходит конвертация загруженного изображения в бинарный код. По завершении анализа на экран выводится сообщение о совпадении загруженного ранее изображения с эталонным изображением, находящимся в базе данных программы и их вычислительных параметров, таких как: периметр и площадь объекта, значение хеша, наличие экстремальных координат и вершин образа объекта.
На рисунке 6.6 представлен результат анализа изображения в графическом
виде.
Рисунок 6.6 - Результат анализа изображения
При отсутствии совпадений высвечивается сообщение об отсутствии в базе класса, к которому мог бы принадлежать исследуемый объект.
Полученные результаты и данные изображений, подвергнутых обработке,
заносятся и хранятся в базе данных.
Рисунок 6.7 - Данные об анализах объектов
Для внесения в программу различных изменений необходимо открыть файл
проекта программы с помощью Borland Delphi 7.0. Кроме
того, для внесения изменений в программный код необходимо зайти в раздел
«Программный код» представленный на рисунке 6.8.
Рисунок 6.8 - Редактирование кода в Borland Delphi 7.0
После изменений кода необходимо откомпилировать программу. При
обнаружении ошибок следует их исправить и повторить компиляцию.
заключение
При выполнении данной выпускной квалификационной работы применялись алгоритмы обработки изображений в системах технического зрения, которые на основании изображений могут вычислить различные данные о реальном объекте исследования. Данная платформа является гибридной, так как используется аналого-цифровая обработка изображений объектов, то есть преобразование аналогового сигнала с видеокамер в цифровое изображение.
В результате этого программно - аппаратная платформа формирует набор неизменных признаков за короткий период времени вычисления. Данные признаки используют для распознавания объектов и причисления их к какому - либо классу.
Подобные системы можно применять на производстве (определение площади или периметра какого - либо объекта, отбор необходимых деталей среди множества различных объектов, например на конвейере).
Программно - аппаратная платформа создана в среде программирования Delphi. Она имеет необходимые средства для работы с базами данных, а так же для обработки и анализа изображений исследуемых объектов. Кроме того в данной среде реализована возможность взаимодействия с периферийными устройствами, в конкретном случае с датчиками систем технического зрения. В дальнейшем эта среда дает возможность расширения функционала программного обеспечения и добавления новых функций, а так же реализовать работу с более новым оборудованием, так как в настоящее время модели технических средств и их возможности обновляются, и прогрессируют с большой скоростью.
В отличие от известных аналогов, данная платформа не требует создания специальных мест для анализа объектов и изменения технологических процессов транспортировки исследуемых объектов. Тем самым она является более мобильной и менее затратной в использовании, что в свою очередь повышает эффективность производства.
Одним из известных методов определения количественно - качественных характеристик исследуемого объекта является использование лазерного и видео сканирования, но он требует обязательного прохождения объекта через специальные площадки.
С помощью бинарного и лазерного сканирования линейных размеров и конфигураций объекта получают его плоское и восстановленное «объемное» изображение.
Использование инфра- и ультра- диапазонов восприятия, для получения объемных изображений и видеообразов, повышает информативность анализируемых образов, однако требуют нахождения на определенных фиксированных позициях.
Все перечисленные выше альтернативные решения являются более сложными и вынуждают применять специальное дорогостоящее оборудование.
При применение данной программно - аппаратной платформы появится
возможность освобождения человека от монотонной, однотипной и опасной работы и
в следствии этого повышение скорости принимаемых решений и качества продукции.
Список использованных источников
1. Бьюли А. Изучаем SQL / А. Бьюли. - Санкт - Петербург - Москва: Символ - Плюс, 2007. - 312 с.
2. Визильтер Ю. В. Обработка и анализ изображений в задачах машинного зрения / Ю. В. Визильтер, С. Ю. Желтов, А. В. Бондаренко. - Москва: Физматкнига, 2010. - 672 с.
. Горелик А. Л. Методы распознавания / А. Л. Горелик, В. А. Скрипкин. - Москва: Высшая школа, 2004. - 264 с.
4. Гридин В. Н. Адаптивные системы технического зрения / В. Н. Гридин, В. С. Титов, М. И. Труфанов. - Санкт - Петербург: Наука, 2009. - 442 с.
5. Ерош, И. Л. Обработка и распознавание изображений в системах превентивной безопасности / И. Л. Ерош, М. Б. Сергеев, Н. В. Соловьев. - Санкт - Петербург , 2005. - 154 с.
6. Коржинский, С. Н. Изучаем Delphi [Электронный ресурс] / С. Н. Коржинский. - SNK Press Online, 2007. - 344 с. Режим доступа: #"896590.files/image086.gif">
Более подробно данная схема рассмотрена в главе 3.
Приложение Б
Структурная
схема программно - аппаратной платформы
Общий
вид структурной схемы программно - аппаратной платформы анализа типоразмерных
характеристик объектов.
Приложение В
Листинг программы
unit Main;
interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, StdCtrls, ComCtrls, Grids, md5Hash, DB, mySQLDbTables,, DBCtrls, mySQLDirectQuery,MySQLBatch, ValEdit, Menus;= class(TForm): TLabel;: TLabel;: TListBox;: TListBox;: TPageControl;: TTabSheet;: TTabSheet;: TStringGrid;: TStringGrid;: TButton;: TButton;: TGroupBox;: TImage;: TButton;: TGroupBox;: TImage;: TStringGrid;: TDBGrid;: TValueListEditor;: TDataSource;: TmySQLTable;: TmySQLDatabase;: TButton;: TLabel;: TButton;: TmySQLQuery;: TmySQLTable;: TDataSource;: TShape;: TLabel;: TShape;: TLabel;: TShape;: TLabel;: TShape;: TLabel;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TLabel;: TDBNavigator;: TMenuItem;: TLabel;FormCreate(Sender: TObject);Button3Click(Sender: TObject);ListBox1DblClick(Sender: TObject);ListBox2Click(Sender: TObject);ListBox1Click(Sender: TObject);StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);Button1Click(Sender: TObject);Button4Click(Sender: TObject);Button5Click(Sender: TObject);Button6Click(Sender: TObject);Connect1Click(Sender: TObject);Disconnect1Click(Sender: TObject);N3Click(Sender: TObject);Image3Click(Sender: TObject);N4Click(Sender: TObject);N5Click(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);DBGrid1CellClick(Column: TColumn);
{ Private declarations }
{ Public declarations };: TForm1;Unit2, tools;
{$R *.dfm}TForm1.FormCreate(Sender: TObject);;('images', form1.ListBox1);;TForm1.Button3Click(Sender: TObject);rnd:integer;.DBGrid1.Enabled:=False;.MainMenu1.Items.Find('Изображение').Find('Анализ').Enabled:=True;.Button6.Enabled:=True;(form1.StringGrid2);(form1.StringGrid1);(form1.StringGrid4);:= Random(Form1.ListBox1.Count);.ListBox2.Clear;.Caption := ExtractFileDir(ParamStr(0)) + '\\' + Form1.ListBox1.Items[rnd];(label9.Caption, form1.Image1);(ExtractFileDir(ParamStr(0)) + '\\area\area.bmp', form1.Image2);(form1.StringGrid1, form1.Image1);.Refresh;;TForm1.ListBox1DblClick(Sender: TObject);p:real;:integer;:string;.Button6.Enabled:=True;(form1.StringGrid2);(form1.StringGrid1);(form1.StringGrid4);.ListBox2.Clear;.Refresh;:= ExtractFileDir(ParamStr(0));(path + '\\area\\area.bmp', form1.Image2);.Label9.Caption := path + '\\' + Form1.ListBox1.Items[form1.ListBox1.ItemIndex];(form1.Label9.Caption, form1.Image1);(form1.StringGrid1, form1.Image1);;TForm1.ListBox2Click(Sender: TObject);Form1.ListBox2.Items.Count = Form1.ListBox1.Items.Count then.ListBox1.Selected[form1.ListBox2.ItemIndex];.ListBox1.ItemIndex:= form1.ListBox2.ItemIndex;.ListBox1.SetFocus;Click(ListBox1);.Refresh;;;TForm1.ListBox1Click(Sender: TObject);;
//выводим массив таблицыTForm1.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);form1.StringGrid1.Cells[ACol,ARow]<>'' thenform1.StringGrid1.Cells[Acol, ARow] = '0' then.StringGrid1.Canvas.Brush.Color:=clYellow;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;Perimeter(form1.StringGrid1, Acol,Arow) = True then.StringGrid1.Canvas.Brush.Color:=clRed;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;Vertex(StringGrid1, Acol, Arow) = True then.StringGrid1.Canvas.Brush.Color:=clBlue;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;Extrema(StringGrid1, Acol, Arow) = True then.StringGrid1.Canvas.Brush.Color:=clPurple;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;Centroid(StringGrid1, Acol, Arow) = True then.StringGrid1.Canvas.Brush.Color:=clGreen;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;.StringGrid1.Canvas.Brush.Color:=clWhite;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;;TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);form1.StringGrid2.Cells[ACol,ARow]<>'' thenform1.StringGrid2.Cells[Acol, ARow] = '0' then.StringGrid2.Canvas.Brush.Color:=clYellow;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;Perimeter(form1.StringGrid2, Acol,Arow) = True then.StringGrid2.Canvas.Brush.Color:=clRed;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;Vertex(StringGrid2, Acol, Arow) = True then.StringGrid2.Canvas.Brush.Color:=clBlue;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;Extrema(StringGrid2, Acol, Arow) = True then.StringGrid2.Canvas.Brush.Color:=clPurple;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;Centroid(StringGrid2, Acol, Arow) = True then.StringGrid2.Canvas.Brush.Color:=clGreen;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;.StringGrid2.Canvas.Brush.Color:=clWhite;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;;TForm1.Button1Click(Sender: TObject);List: TList;.mySQLDatabase1.ConnectionCharacterSet:='cp1251';.mySQLDatabase1.Host := Form1.ValueListEditor1.Values['HOST'];.mySQLDatabase1.UserName := Form1.ValueListEditor1.Values['USER'];.mySQLDatabase1.UserPassword:=form1.ValueListEditor1.Values['PASSWORD'];.mySQLDatabase1.Connect;.mySQLDatabase1.SelectDB(form1.ValueListEditor1.Values['DB']);.mySQLTable1.TableName:='list';.mySQLTable1.Open;form1.mySQLDatabase1.Connected = True then.MainMenu1.Items.Find('DB').Find('Connect').Visible:=False;.MainMenu1.Items.Find('DB').Find('Disconnect').Visible:=True;.MainMenu1.Items.Find('Изображение').Enabled:=True;.ListBox1.Enabled:=True;.Button5.Enabled:=True;.Button3.Enabled:=True;.Label3.Caption:='Connected';.Button1.Enabled := False;;;TForm1.Button4Click(Sender: TObject);.Show;;TForm1.Button5Click(Sender: TObject);.mySQLDatabase1.Disconnect;form1.mySQLDatabase1.Connected = False then.ListBox1.Enabled:=False;.MainMenu1.Items.Find('Изображение').Find('Анализ').Enabled:=False;.MainMenu1.Items.Find('DB').Find('Connect').Visible:=True;.MainMenu1.Items.Find('DB').Find('Disconnect').Visible:=False;.MainMenu1.Items.Find('Изображение').Enabled:=False;.Button5.Enabled:=False;.Label3.Caption:='Disconnected';.Button1.Enabled := True;.Button3.Enabled := False;.Button6.Enabled := False;(ExtractFileDir(ParamStr(0)) + '\\area\\area.bmp', form1.Image1);(ExtractFileDir(ParamStr(0)) + '\\area\\area.bmp', form1.Image2);(form1.StringGrid2);(form1.StringGrid1);;;TForm1.Button6Click(Sender: TObject);st:TStringList;,hash2,p,s,p2,s2,col_v,col_e,col_v2,col_e2:string;,parent:variant;.DBGrid1.Enabled:=True;:= TStringList.Create();.Clear;:= QuotedStr(getValHash(form1.StringGrid1));:= getValP(form1.StringGrid1);:= getValS(form1.StringGrid1);_v := getValVertex(form1.StringGrid1);_e := getValExtrems(form1.StringGrid1);.Add('SELECT * FROM benchmarks WHERE hash=' + hash + ';');.mySQLTable2.TableName := 'benchmarks';.mySQLTable2.Open;.mySQLQuery1.SQL := st;.mySQLQuery1.Active := True;:= form1.mySQLQuery1.FieldValues['path'];:= form1.mySQLQuery1.FieldValues['hash'];.mySQLQuery1.Active := False;path <> Null thenparent <> '-' then(path, form1.Image2);(form1.StringGrid2, form1.Image2);;:= QuotedStr(getValHash(form1.StringGrid2));:= getValP(form1.StringGrid2);:= getValS(form1.StringGrid2);('Совпадение с эталоном' + chr(13) + 'hash (изображения): ' + hash + chr(13) + 'hash (эталона): ' + hash2 + chr(13) + 'P (изображения): ' + p + chr(13)+ 'P (эталона): ' + p2 + chr(13) + 'S (изображения): ' + s + chr(13)+ 'S (эталона): ' + s2);.mySQLDatabase1.Execute('INSERT INTO list VALUES(0,' + hash + ',' + p + ','+ s + ',' + col_v + ',' + col_e + ',' + QuotedStr(parent) + ',' + QuotedStr(StringReplace(form1.Label9.Caption, '\', '\\',[rfReplaceAll, rfIgnoreCase])) + ');');.Clear;.Add('SELECT * FROM benchmarks WHERE p=' + p + ' and s=' + s + ';');.mySQLQuery1.SQL := st;.mySQLQuery1.Active:=True;:= form1.mySQLQuery1.FieldValues['path'];:= form1.mySQLQuery1.FieldValues['hash'];path <> Null thenparent <> '-' then(path, form1.Image2);(form1.StringGrid2, form1.Image2);;:= QuotedStr(getValHash(form1.StringGrid2));:= getValP(form1.StringGrid2);:= getValS(form1.StringGrid2);('Совпадение с эталоном' + chr(13) + 'hash (изображения): ' + hash + chr(13) + 'hash (эталона): ' + hash2 + chr(13) + 'P (изображения): ' + p + chr(13)+ 'P (эталона): ' + p2 + chr(13) +'S (изображения): ' + s + chr(13)+ 'S (эталона): ' + s2);.mySQLDatabase1.Execute('INSERT INTO list VALUES(0,' + hash + ',' + p + ','+ s + ',' + col_v + ',' + col_e + ',' + QuotedStr(parent) + ',' + QuotedStr(StringReplace(form1.Label9.Caption, '\', '\\',[rfReplaceAll, rfIgnoreCase])) + ');');(form1.StringGrid1, form1.Image1);(form1.StringGrid2);('Нет совпадений');.mySQLDatabase1.Execute('INSERT INTO list VALUES(0,' + hash + ',' + p + ',' + s + ',' + col_v + ',' + col_e + ',' + QuotedStr('-') + ',' + QuotedStr(StringReplace(form1.Label9.Caption, '\', '\\',[rfReplaceAll, rfIgnoreCase])) + ');');;;.Free;.mySQLTable1.Refresh;.Button6.Enabled:=False;.mySQLQuery1.Active:=False;;TForm1.Connect1Click(Sender: TObject);.Button1.Click;;TForm1.Disconnect1Click(Sender: TObject);.Button5.Click;;TForm1.N3Click(Sender: TObject);;TForm1.Image3Click(Sender: TObject);.Button3.Click;;