Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2семестр / Лаб_1.doc
Скачиваний:
11
Добавлен:
15.02.2015
Размер:
171.52 Кб
Скачать

Группа 2

Лабораторна робота №1 Розробка інтерфейсу в середовищі Delphi для заданого процесу.

Мета роботи: Оволодіння навиками розробки інтерфейсу в середовищі Visual Fortran обо Delphi. Знати про методи розробки програмного забезпечення, які допомагають уникнути збоїв в програмній системі.

Короткі теоретичні відомості

Зазвичай відмова систем, керованих за допомогою ПЗ, викликає незручності, але вони не приводять до тривалих наслідків. Проте є системи, відмови яких можуть приводити до значних економічних втрат, фізичним пошкодженням або створювати загрозу людському життю. Такі системи зазвичай називають критичними. Функціональна надійність – необхідна вимога до критичних систем, і всі її складові (працездатність, безвідмовність, безпека і захищеність) дуже важливі. Не менш важливий для критичних систем і високий рівень надійності.

Існує три основні типи критичних систем:

- Системи, критичні по забезпеченню безпеки. Системи, відмова яких приводить до руйнувань, створює загрозу життю людини або завдає шкоди навколишньому середовищу. Як приклад можна привести систему управління виробництвом на хімічному заводі.

- Системи, критичні для цільового призначення. Системи, відмова яких може привести до помилок в діях, направлених на забезпечення певної мети. Прикладом може служити навігаційна система космічного корабля.

- Системи, критичні для бізнесу. Відмова таких систем може завдати шкоди справі, в якій вони використовується. Прикладом є система, обслуговуюча рахунки клієнтів в банці.

Ціна помилки критичної системи часто дуже велика. Вона включає прямі витрати, пов'язані з внесенням змін до системи або її заміною, непрямі витрати, наприклад судові, і витрати, пов'язані з втратами в бізнесі. З високої можливої ціни відмови системи виходить, що якість методів розробки і сам процес створення ПЗ зазвичай важливіші, ніж вартість застосування цих методів.

Тому при створенні критичних систем зазвичай використовуються випробувані методи розробки, а не нові, такі, що ще не мали великого практичного застосування. Тільки порівняно недавно такі відносно нові

методи, як, наприклад, об'єктно-орієнтовані, почали використовуватися для розробки критичних систем, разом з тим до цих пір при розробці багатьох критичних систем все ще застосовуються функціонально-орієнтовані методи.

Процес створення надійного програмного забезпечення переслідує мета розробки безвідмовного ПЗ, тобто такого, яке точно відповідає специфікації системних вимог. Але точна відповідність системи своїй специфікації не гарантує, що ПЗ завжди поводитиметься так, як очікується користувачами. У специфікації можуть бути помилки, які відіб'ються в програмному забезпеченні, або користувачі можуть невірно тлумачити або неправильно експлуатувати систему. Безвідмовне ПЗ не обов'язково гарантує відсутність відмов в роботі системи. Але, з іншого боку, мінімізація помилок програмного забезпечення значно зменшує число відмов системи і повинна виконуватися при розробці критичних систем.

Існує ряд вимог до розробки безвідмовного програмного забезпечення:

- Повинна бути точна (переважно формальна) специфікація системних вимог, що визначає систему, що розробляється.

- Організація – розробник ПЗ повинна мати високу культуру управління якістю, оскільки якість є головною в процесі створення критичних систем. У ідеалі передбачається, що програмісти створюють програми, в яких відсутні помилки.

- Методи проектування і реалізації ПЗ повинні ґрунтуватися на захованні і інкапсуляції інформації. Об'єктно-орієнтовані мови, такі як Java, задовольняють цій умові.

- В процесі реалізації програмної коди повинні використовуватися мови програмування із строгим контролем типів даних, наприклад Jаvа або Ada. У таких мовах багато помилок програмування будуть виявлено на етапі компіляції програм.

- Скрізь, де можливо, слід уникати використання тих програмних конструкцій, які потенційно можуть привести до помилок.

- Повинна бути визначена чітка технологія розробки ПЗ, і розробники повинні бути навчені застосуванню цієї технології.

Помилки в програмах і, як наслідок, збої в роботі систем часто є результатом помилок людини. Програмісти роблять помилки, тому що втрачають зв'язок між взаєминами змінних станів. Вони пишуть програми, які приводять до непередбаченої поведінки і непередбаченої зміни станів системи.

Використання оператора безумовного переходу goto приводить до логічних конструкцій, істотно схильним помилкам програмування. Вони також утрудняють локалізацію змін стану системи. Це спостереження привело до появи так званого структурного програмування. Мова йде про програмуванні без використання оператора goto, що використовує для управління тільки цикли по умові while і умовні оператори if. Перехід до структурного програмування був важливою віхою в розвитку інженерії програмного

забезпечення, оскільки це був перший крок на шляху до наукового підходу в практику розробки ПЗ.

Окрім операторів безумовного переходу, існують інші мовні конструкції і методи програмування, схильні до помилок:

- числа з плаваючою комою;

- вказівники;

- динамічний розподіл пам'яті;

- паралельність процесів;

- рекурсія;

- переривання;

- спадкоємство;

- поєднання імен;

- введення даних без перевірки.

Деякі стандарти проектування систем, критичних по забезпеченню безпеки, повністю забороняють використання перерахованих програмних конструкцій.

Завдання: написати програму і створити для неї інтерфейс для проходження тестування.

Виконання лабораторної роботи

Інтерфейс програми

1

2

3

4

Рисунок 1.1

1) Поле для вибору теста

2) Поле для виведення питання

3) Поле для вибору відповіді

4) Перейти до наступного питання

Рисунок 2.1

Текст програми

unit Unit4;

interface

uses

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

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type

TForm4 = class(TForm)

Button1: TButton;

AnswerGroup: TRadioGroup;

GroupBox1: TGroupBox;

TestBox: TComboBox;

Button2: TButton;

Question: TLabel;

procedure Button1Click(Sender: TObject);

procedure TestBoxCloseUp(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure LoadQuestion(Index: integer);

procedure LoadTest(Index: integer);

private

{ Private declarations }

public

{ Public declarations }

end;

const

TestName='Test_'; // имя файла теста

max=1000; // максимальное количесво вопросов

var

Form4: TForm4;

QuestionText: array [0..max] of string; // текст вопроса

AnswerQuestion: array [0..max] of byte; // правильный вариант ответа

QuestionText1: array [0..max] of string;// первый вопрос

QuestionText2: array [0..max] of string;// второй вопрос

QuestionText3: array [0..max] of string;// третий вопрос

Ball: integer=0; // оценка

now: integer=0;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);

begin

if AnswerQuestion[now]=AnswerGroup.ItemIndex+1 then // сравниваем значение ответа и выбранного значения

inc(ball);

AnswerGroup.ItemIndex:=-1; // убираем выдаление с группы ответов

inc(now); // увеличиваем вопрос на 1+

LoadQuestion(now); // загружаем его

end;

procedure TForm4.LoadQuestion(Index: integer);

begin

if QuestionText[Index]<>'' then// если выбранный вопрос существует то грузим его

begin

AnswerGroup.Items.Clear;// очищаем поле ответов

Question.Caption:=QuestionText[Index];// задаем запрос

AnswerGroup.Items.Add(QuestionText1[index]);// добавляем ответ

AnswerGroup.Items.Add(QuestionText2[index]); // добавляем ответ

AnswerGroup.Items.Add(QuestionText3[index]); // добавляем ответ

end

else // иначе сообщаем что тест завершен

begin

showmessage('Тест завершен'+#13+'Правильных ответов: '+inttostr(ball)); // сообщение что тест окончен и выдаем количесво правильных ответов

button1.Enabled:=false; // делаем неактивной кнопку

button2.Enabled:=true; // включаем справку

end;

end;

procedure TForm4.Button2Click(Sender: TObject);

begin

Form4.ShowModal;

end;

procedure TForm4.FormCreate(Sender: TObject);

var

s: Tstrings;

i: Integer;

begin

i:=0;

while FileExists(ExtractFilePath(application.ExeName)+TestName+inttostr(i)+'.txt') do // проверяем файлы тестов

begin

application.ProcessMessages; // что б не тормозило

s:=tstringlist.Create; // создаем переменную

s.LoadFromFile(ExtractFilePath(application.ExeName)+TestName+inttostr(i)+'.txt'); // загружаем файл

if s.Text<>'' then // если не пуст то

TestBox.Items.Add(s.Strings[0]); // добавляем в группу тестов название теста

s.Free; // уничтожаем переменную

inc(i); // увеличиваем счетчик

end;

end;

procedure TForm4.LoadTest(Index: integer);

var

s: Tstrings;

j, h: Integer;

begin

h:=0;

s:=tstringlist.Create; // создаем переменную

s.LoadFromFile(ExtractFilePath(application.ExeName)+TestName+inttostr(Index)+'.txt'); // загружаем

if s.Text<>'' then // если не пустая то

begin

form4.Caption:=s.Strings[0]; // название теста

for j := 1 to s.Count - 1 do // начинаем присваивать значения

begin

if s.Strings[j]='__________' then // это разделитель который мы ищем

begin

QuestionText[h]:=s.Strings[j+1]; // текст вопроса

QuestionText1[h]:=s.Strings[j+2];// текст первого вариант ответа

QuestionText2[h]:=s.Strings[j+3];// текст второго варианта ответа

QuestionText3[h]:=s.Strings[j+4];// текст третьего варианта ответа

AnswerQuestion[h]:=strtoint(s.Strings[j+5]); // номер ответа

Соседние файлы в папке 2семестр