51062

МОДЕЛИРОВАНИЕ ОЦЕНКИ НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Лабораторная работа

Информатика, кибернетика и программирование

Классическая теория надежности технических систем использовала метод расчленения сложных объектов на элементы расчета. При этом надежность элементов рассчитывалась, в основном, с помощью справочников, в которых приводились значения интенсивностей отказов элементов. Затем оценивалась надежность объекта и принимались меры по ее повышению.

Русский

2014-02-04

956.59 KB

5 чел.

Эмпирическое исследование ПО

ст. гр. ПЗАС-08-2

Швец Дмитрий

Лабораторная работа №4

МОДЕЛИРОВАНИЕ ОЦЕНКИ НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Краткие теоретические сведения.

В настоящее время основными факторами, определяющими ненадежность программного обеспечения считаются человеческий фактор, ошибки данных, программные ошибки, отказы техники. Используются аналитические, статистические методы оценивания и методы моделирования. Несомненно это очень важно и дает определенные положительные результаты для повышения надежности программного обеспечения.

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

Классическая теория надежности технических систем использовала метод расчленения сложных объектов на элементы расчета. При этом надежность элементов рассчитывалась, в основном, с помощью справочников, в которых приводились значения интенсивностей отказов элементов. Затем оценивалась надежность объекта и принимались меры по ее повышению.

Для обеспечения надежности функционирования сложных программных комплексов необходимо идти по подобному пути:

1.Определять основные простейшие операторы, из которых составляются программы.

2.Более ответственно и скурпулезно изучать точность представления различных величин операторов.

3.Исследовать точностные характеристики операторов при полученных распределениях величин.

4.Интенсивнее развивать модели исследования точностных свойств элементарных операторов.

5.Составлять справочники по результатам исследования операторов, в которых приводить инженерные рекомендации по практическому оцениванию точности операторов.

6.Разрабатывать точностные модели сложных программ на основе интегрирования элементарных операторов. Для этого можно использовать разработанные графоаналитические методы и методы моделирования.

7. При построении сложных программ из отдельных операторов необходимо производить весьма тщательное согласование выходов операторов со входами последующих операторов, а именно, областей их задания. Невыполнение этого является источником дополнительных ошибок и потерь информации.

Содержание п.7 хорошо напоминает о том, как важно согласовывать в многокаскадном электронном усилителе один каскад по выходу со входом следующего каскада. Невыполнение этого требования в граничных областях каскадов приводит к неработоспособности усилителя в казалось бы заранее предусмотренной области изменения параметров усилителя. В программах этот эффект менее очевиден, поэтому не всегда учитывается при их отладке.

Осуществление предложенного подхода к оцениванию и повышению надежности функционирования программного обеспечения требует существенных затрат различного вида. Но его осуществление необходимо. Это обусловлено конечной точностью вычислений в современных и перспективных компьютерах и другими факторами, из которых наиболее весомым является лавинообразный рост сложности перспективных программ. Другого пути нет, пока не будут созданы компьютеры с избыточностью, позволяющей организовать оперативный контроль и принятие решений в условиях влияния помех различного вида, адаптирующиеся по точности в процессе вычислений. Возврат к классической теории ошибок и дальнейшее ее развитие весьма необходимы в интересах информатики и информатизации общества. Такой путь может стать источником новых конструктивных решений как в элементной базе, архитектуре вычислительных средств, так и в программном обеспечении. Он также может стимулировать развитие новых методов численной математики.

Листинг:

procedure TForm1.Button1Click(Sender: TObject);

var s:string;

   newmode:TTreenode;

begin

if Edit1.Text=''

then s:='******'

 else s:=Edit1.Text;

Newmode:=TreeView1.items.add(treeview1.Selected,s);

if CheckBox1.Checked

 then

  begin

    P[ii]:=StrToFloat(Edit2.Text);

    Memo1.Lines.Add('№ блока: '+IntToStr(ii)+'    '+'P= '+Edit2.Text+'   '+s);

  end

   else P[ii]:=1;

    inc(ii);

inc(addcounter);

end;

procedure TForm1.Button2Click(Sender: TObject);

var s:string;

   newmode:TTreenode;

begin

if Edit1.Text=''

then s:='******'

 else s:=Edit1.Text;

Newmode:=TreeView1.items.addchild(treeview1.Selected,s);

if CheckBox1.Checked

 then

  begin

    P[ii]:=StrToFloat(Edit2.Text);

    Memo1.Lines.Add('№ блока: '+IntToStr(ii)+'    '+'P= '+Edit2.Text+'   '+s);

  end

   else P[ii]:=1;

    inc(ii);

if treeview1.Selected<>nil then

 begin

   inc(addchildcounter);

   inc(addcounter);

 end

 else

 begin

   inc(addcounter);

 end;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if treeview1.Selected<>nil then

  Treeview1.Items.Delete(Treeview1.selected);

end;

procedure TForm1.Button4Click(Sender: TObject);

var s:string;

begin

s:='';

if not inputquery('Название','Переименовать на',s) then exit;

treeview1.Selected.Text:=s;

end;

procedure TForm1.FormCreate(Sender: TObject);

var i:byte;

begin

ii:=0;

addcounter:=1;

addchildcounter:=1;

treeview1.MultiSelect:=true;

for i:=0 to 2 do

P[i]:=0.9;

P[3]:=1;

P[4]:=0.9;

P[5]:=0.9;

P[6]:=1;

P[7]:=0.9;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

var i,j,k:byte;

   a:array[1..20] of real;

   b:array[1..20] of byte;

   kudalovo:boolean;

   s:real;

begin

kudalovo:=false;

for i:=1 to 20 do begin a[i]:=1; b[i]:=0; end;

for i:=0 to treeview1.SelectionCount-1 do

 begin

   if i=0 then a[i+1]:=a[i+1]*strtofloat(treeview1.Selections[0].Text);

   for j:=1 to treeview1.SelectionCount-1 do

     begin

       kudalovo:=false;

       if treeview1.Selections[i].Parent=treeview1.Selections[j].Parent then

         begin

           for k:=1 to 20 do

           if i<>0 then

           if j=b[k] then kudalovo:=true;

           if kudalovo=false then

           a[i+1]:=a[i+1]*strtofloat(treeview1.Selections[j].Text);

           b[j]:=j;

         end;

     end;

 end;

s:=1;

for i:=1 to 20 do

 begin

   if a[i]<>1 then

   s:=s*(1-a[i]);

 end;

s:=1-s;

treeview1.Selections[0].Text:=floattostr(s);

for i:=treeview1.SelectionCount-1 downto 1  do

treeview1.Selections[i].Delete;

end;

procedure TForm1.Edit3Change(Sender: TObject);

begin

Edit2.Text:=FloatToStr(StrToInt(Edit3.Text)/10);

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

if not (key in ['0'..'9',#8,#45,#13])

then key:=#0

 else

  if Edit2.Text<>''

   then Edit3.Text:=FloatToStr(StrToFloat(Edit2.Text)*10);

end;

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

if CheckBox1.Checked = false

then

 begin

  Edit2.Enabled:=false;

  UpDown1.Enabled:=false;

 end

  else

   begin

    Edit2.Enabled:=true;

    UpDown1.Enabled:=true;

   end;

end;

procedure TForm1.Button7Click(Sender: TObject);

begin

TreeView1.Items.Clear;

end;

Скриншоты: