Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

volkov / лабораторная1

.doc
Скачиваний:
71
Добавлен:
18.04.2015
Размер:
118.27 Кб
Скачать

Ульяновский государственный университет

Факультет Математики и информационных технологий

Кафедра Информационных технологий

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

по предмету:

«Методы разработки программного обеспечения»

Тема: «Метрическая оценка ПО»

Выполнил: студент гр. ПРИ – 31,

Иванов И.И.

Проверил: Волков М.А.

Ульяновск – 2013

Постановка задачи

Написать программу на языке Паскаль выполняющую следующие функции:

  • Ввод данных о студентах группы

  • Запись в файл на диске

  • Поиск записи

  • Вывод на экран найденных записей

Программу необходимо написать в трех вариантах:

  • Линейный (весь текст в одном модуле)

  • С использованием модулей для каждой функции

  • С использованием переменных ссылочного типа

Вариант 1: Линейный

program Laba1_1;

{$APPTYPE CONSOLE}

uses

SysUtils;

type

TStudent = record

FirstName, SecondName, Group: string[20];

end;

var

SecondName: string[20];

Student: TStudent;

Students: file of TStudent;

begin

AssignFile(Students, 'Students.dat');

Reset(Students);

repeat

Write('Enter name (Empty for quit):');

Readln(Student.FirstName);

if Student.FirstName <> '' then

begin

Write('Enter secondname:');

Readln(Student.SecondName);

Write('Enter group:');

Readln(Student.Group);

Write(Students, Student)

end;

until Student.FirstName = '';

CloseFile(Students);

Write('Enter secondname for search:');

Read(SecondName);

AssignFile(Students, 'Students.dat');

Reset(Students);

while not Eof and (Student.SecondName <> SecondName) do

Read(Students, Student);

CloseFile(Students);

if Eof then

Writeln('Not found')

else

begin

Writeln('name:', Student.FirstName);

Writeln('secondname:', Student.SecondName);

Writeln('group:', Student.Group);

end;

end.

Вариант 2: Модули для каждой функции

program Laba1_2;

{$APPTYPE CONSOLE}

uses

SysUtils,

Unit2_1 in 'Unit2_1.pas',

Unit2_2 in 'Unit2_2.pas';

begin

EnterData;

SearchData;

end.

unit Unit2_1;

interface

procedure EnterData;

implementation

type

TStudent = record

FirstName, SecondName, Group: string[20];

end;

var

Student: TStudent;

Students: file of TStudent;

procedure EnterData;

begin

AssignFile(Students, 'Students.dat');

Reset(Students);

repeat

Write('Enter name (Empty for quit):');

Readln(Student.FirstName);

if Student.FirstName <> '' then

begin

Write('Enter secondname:');

Readln(Student.SecondName);

Write('Enter group:');

Readln(Student.Group);

Write(Students, Student)

end;

until Student.FirstName = '';

CloseFile(Students);

end;

end.

unit Unit2_2;

interface

procedure SearchData;

implementation

type

TStudent = record

FirstName, SecondName, Group: string[20];

end;

var

SecondName: string[20];

Student: TStudent;

Students: file of TStudent;

procedure SearchData;

begin

Write('Enter secondname for search:');

Read(SecondName);

AssignFile(Students, 'Students.dat');

Reset(Students);

while not Eof and (Student.SecondName <> SecondName) do

Read(Students, Student);

CloseFile(Students);

if Eof then

Writeln('Not found')

else

begin

Writeln('name:', Student.FirstName);

Writeln('secondname:', Student.SecondName);

Writeln('group:', Student.Group);

end;

end;

end.

Вариант 3: Переменные ссылочного типа

program Laba1_3;

{$APPTYPE CONSOLE}

uses

SysUtils;

type

PStudent = ^TStudent;

TStudent = record

FirstName, SecondName, Group: string[20];

end;

var

SecondName: string[20];

Student: PStudent;

Students: file of TStudent;

begin

New(Student);

AssignFile(Students, 'Students.dat');

Reset(Students);

repeat

Write('Enter name (Empty for quit):');

Readln(Student.FirstName);

if Student.FirstName <> '' then

begin

Write('Enter secondname:');

Readln(Student.SecondName);

Write('Enter group:');

Readln(Student.Group);

Write(Students, Student^)

end;

until Student.FirstName = '';

CloseFile(Students);

Write('Enter secondname for search:');

Read(SecondName);

AssignFile(Students, 'Students.dat');

Reset(Students);

while not Eof and (Student.SecondName <> SecondName) do

Read(Students, Student^);

CloseFile(Students);

if Eof then

Writeln('Not found')

else

begin

Writeln('name:', Student.FirstName);

Writeln('secondname:', Student.SecondName);

Writeln('group:', Student.Group);

end;

Dispose(Student);

end.

Расчет программ с помощью различных моделей

  1. Метрики сложности.

    1. Метрики Холстеда

n1 число различных операций

n2 число различных операндов

N1 общее число всех операций

N2 общее число всех операндов

N = n1 log2 n1 + n2 log2 n2 длина программы

V =N log2 n объем программы

L* = 2 n2 / (n1 N2) оценка реализации

Ec = V / L* трудность понимания

D = (n1 N2) / 2 n2 = 1 / L* трудоемкость кодирования

*= V / D2 уровень языка выражения

I = V / D информационное содержания

M = n2* / 6 оптимальная модульность

Параметр

Программа №1

Программа №2

Программа №3

n1

11

13

13

n2

13

15

13

N2

43

71

46

N1

33

40

35

N

86.16

106.71

96.21

V

395.04

512.99

452.23

L*

0.0716

0.0576

0.0571

Ec

5517.32

8906.08

7919.96

D

13.97

17.36

17.51

2.02

1.70

1.47

I

28.28

29.55

25.83

M

2.17

2.5

2.17

    1. Метрики Джилба

Lloop количество операторов цикла

LIF количество операторов условия

Lmod количество модулей

f = N 4SV / Lmod отношение числа связи м/у модулями к

числу модулей

f * = N *SV / Lmod отношение числа ненормальных выходов к

общему числу операторов

Параметр

Программа №1

Программа №2

Программа №3

Lloop

2

2

2

LIF

2

2

2

Lmod

1

3

1

f

0

2/3

0

f *

0

0

0

    1. Метрики Мак-Кейба

(G) = m – n + p цикломатическое число

(G) = (G) + 1 = m – n + 2 цикломатическая сложность

Параметр

Программа №1

Программа №2

Программа №3

(G)

(G)

24

29

24

    1. Метрика Майерса

[1 ÷ 2] интервальная мера

Параметр

Программа №1

Программа №2

Программа №3

[1 ÷ 2]

2433

2940

2435

  1. Прогноз модели.

    1. Модели Холстеда

P = 3/8 (Ra - 1) 2 Ra прогноз системных ресурсов

B = N log2 n / 3000 прогноз числа ошибок

Параметр

Программа №1

Программа №2

Программа №3

P

B

0.132

0.171

0.151

    1. Модель фирмы IBM

B = 23 МИМ i + 2 ИМ I прогноз числа ошибок

Параметр

Программа №1

Программа №2

Программа №3

МИМ i

0

0

0

ИМ i

3

5

4

B

6

10

8

  1. Оценочные модели.

    1. Джелински – Моранды

R(t) = exp [ - k (B – (i – 1 )) (ti – ti-1)] интенсивность обнаружения ошибок

Параметр

Программа №1

Программа №2

Программа №3

R(t)

B

K

    1. Нельсона

Rj (t) = exp [ ln (1 - Pj)]

Параметр

Программа №1

Программа №2

Программа №3

Pj

Rj (t)

Выводы

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

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

Литература

  • Лекции по Метрологии программного обеспечения

  • Информация из сети Интернет:

http://www.aanet.ru/~web_k46/textbooks/std_pro/face.htm

http://www.iis.nsk.su/preprints/AUTOREF/chern/AUTOREF/AUTOREF.html

Соседние файлы в папке volkov