Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП_МУ_11.doc
Скачиваний:
24
Добавлен:
08.11.2019
Размер:
484.86 Кб
Скачать

12.2 Использование метрик Чидамбера-Кемерера

Пример расчета метрик для структуры, показанной на рисунке 11.1, представлен в таблице 11.1.

Рисунок 12.1 - Структура классов для расчета метрик Чидамбера-Кемерера

Таблица 12.1

Пример расчета метрик Чидамбера-Кемерера

Имя класса

WMC

DIT

NOC

СВО

RFC

LCOM

Class A

3

0

3

1

4

1

Class В

1

1

0

0

1

0

Class С

1

1

0

0

1

0

Class D

2

1

0

2

3

0

Прокомментируем результаты расчета. Класс Class А имеет три метода (op_al(); ор_а2(), ор_аЗ()), трех детей (Class В, Class С, Class D) и явлется корневым классом. Поэтому метрики WMC, NOC и DIT имеют, соответственно, значения 3, 3 и 0. Метрика СВО для класса Class А равна 1, так как он использует один метод из другого класса (метод ор_е() из класса Class E, он вызывается из метода ор_аЗ()). Метрика RFC для класса Class А равна 4, так как в ответ на прибытие в этот класс сообщений возможно выполнение четырех методов (три объявлены в этом классе, а четвертый метод ор_е() вызывается из ор_аЗ()).

Поскольку в классе три метода, возможны три пары: op_al() и ор_а2(), op_al(); ор_а3(), ор_а2() и ор_аЗ().Общее свойство имеет только третья пара Количество несвязанных пар равно 2, количество связанных равно 1, LCOM=2-1=1.

Для класса Class D метрика СВО равна 2, так как здесь исполь­зуются свойство pal и метод op_f( ) из других классов. Метрика LCOM в этом классе равна 0, поскольку методы op_dl( ) и op_d2( ) связаны по свойству pdl, а отрицательное значение запрещено.

12.3 Порядок выполнения работы

  1. Изучить назначение метрик и пример их расчета.

  2. Выбрать текст программы с использованием ООП. Текст должен содержать не менее 3-х классов, связанных между собой через методы или свойства.

  3. Построить диаграмму связей и рассчитать метрики.

  4. Результаты расчета представить в виде таблицы. Провести анализ результатов исследуемой программы.

12.4 Содержание отчета о выполнении работы

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

  • Структура классов:

  • Результаты расчета;

  • Выводы о качестве программы;

12.5 Список контрольных вопросов

1. Охарактеризуйте класс программ, для которых предложенные метрики являются наиболее эффективными.

2. Приведите недостатки предложенных метрик.

3. Какие свойства ОО-программ не учитывают метрики?

4. Что означают высокие значения метрики LCOM?

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Бутаков Е.А. Методы создания качественного программного обеспечения ЭВМ/ Е.А. Бутаков.– М.: Мир, 1984. – 232 с.

Введение в тестирование программного обеспечения / Пер. с англ. Л.Тамре - М.: Издательский дом «Вильямс», 2003.-368 с.

Дастин Э., Рэшка Д., Пол Д. Автоматизированное тестирование программного обеспечения / Дастин Э.- М.:Издательство "ЛОРИ", 2003.- 567с.

Жоголев Е.А. Технология программирования/ Жоголев Е.А.- М. «Научный мир», 2004. – 296с.

Калбертсон Р., Браун К., Кобб Г. Быстрое тестирование/С.П. Издательский дом "Вильямс", 2002.-384с.

Канер С. Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений: Пер. с англ./Сэм Канер, Джек Фолк, Енг Кек Нгуен. — К.: Издательство «ДиаСофт», 2001. — 544 с.

Кулаков А.Ф. Управление качеством программных средств ЭВМ/ А.Ф. Кулаков. – Киев: Техника, 1989. – 216 с.

Иванова Г.С.Технология программирования: Учебник для вузов. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. - 320 с.

Липаев В.В. Тестирование программ/ В.В. Липаев.– М.: Радио и связь, 1986.–296 с.

Лисков Б. Использование абстракций и спецификаций при разработке программ/ Б. Лисков, Дж. Фатэг. – М.: Мир, 1989. – 424 с.

Майерс Г. Надежность программного обеспечения/ Г. Майерс. – М.: Мир, 1980. – 360 с.

Майерс Г. Искусство тестирования программ. – М.:Финансы и статистика, 1982. – 176 с.

Макгрегор Джон, Сайкc Девид. Тестирование объектно-ориентированного программного обеспечения. Практическое пособие: Пер. с англ./Джон Макгрегор, Девид Сайкc. -К.: ООО «ТИД «ДС», 2002. - 432 с.

Макконнелл С. Совершенный код. Мастер-класс / Пер. с англ. — М. : Издательско- торговый дом «Русская Редакция» ; СПб.: Питер, 2005. — 896 стр.: ил.

Объектно-ориентированное проектирование с примерами применения. / Буч Г. – М.: Конкорд, 1992.-519 с.

Орлов С. Технологии разработки программного обеспечения: Учебник/ С. Орлов. — СПб.: Питер, 2002. — 464 с.:

Тампе Л. Тестирование программного обеспечения/ Тампе Л. –М.: Издательский дом «Вильямс», 203. – 368с.

Технология разработки программного обеспечения: Учебник / Орлов С. - СПб.: Питер, 2002.-464 с.

Холстед М. Начала науки о программах/ М. Холстед.: Финансы и статистика, 1981. – 128 с.

Шнейдерман Б. Технология программирования/Б. Шнейдерман.– М.: Радио и связь,1984. – 304 с.

ДСТУ 2844-94. Программные средства ЭВМ. Обеспечение качества. Термины. – Киев: 1994.

ДСТУ 2850-94. Программные средства ЭВМ. Показатели и методы оценки качества. – Киев: 1994. – 20 с.

ДСТУ 2853-94. Программные средства ЭВМ. Подготовка и проведение испытаний. – Киев: 1994. – 18 с.

ПРИЛОЖЕНИЕ

Варианты заданий

Вариант 1

Обработка одномерного массива.

Определить количество положительных , количество отрицательных и количество нулевых чисел массива.

Program z1;

const nn=7;

var h:array [1..nn] of integer;

var i,pol,nul,otr: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

nul:=0;

for i:=1 to nn do readln(h[i]);

for i:=1 to nn do

begin

if h[i]<0 then otr:=otr+1

else if h[i]>0 then pol:=pol+1

else nul:=nul+1;

end;

writeln(‘количество отрицательных чисел=’,otr);

writeln(‘количество положительных чисел=’,pol);

writeln(‘количество нулей=’,nul);

end.

Вариант 2

Обработка одномерного массива.

Преобразовать массив, поменяв местами минимальное и первое числа массива.

Program z2;

const nn=7;

var h:array [1..nn] of integer;

var i,m,k,t: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

m:=h[1];

k:=1;

for i:=1 to nn do

if h[i]<=m then begin

m:=h[i];

k:=i;

end;

t:=h[1]; h[1]:=h[k]; h[k]:=t;

writeln(‘Результат’);

for i:=1 to nn do write(h[i],’ ‘);

end.

Вариант 3

Обработка одномерного массива.

Найти максимальный положительный элемент массива и его порядковый номер.

Program z3;

const nn=7;

var h:array [1..nn] of integer;

var i,m,k: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

m:=-1;

k:=0;

for i:=1 to nn do

if h[i]>0 then

if h[i]>m then

begin

m:=h[i];

k:=i;

end;

writeln(‘Результат:’,’m=’,m,’ k=’,k);

end.

Вариант 4

Обработка одномерного массива.

Преобразовать массив, расположив сначала все отрицательные, затем все положительные числа (порядок следования чисел внутри группы не изменять)..

Program z4;

const nn=7;

var h,r:array [1..nn] of integer;

var i,k: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

k:=1;

for i:=1 to nn do

if h[i]<0 then begin

r[k]:=h[i];

k:=k+1;

end;

for i:=1 to nn do

if h[i]>=0 then begin

r[k]:=h[i];

k:=k+1;

end;

writeln(‘Результат’);

for i:=1 to nn do write(r[i],’ ‘);

end.

Вариант 5

Обработка одномерного массива.

Преобразовать массив, поменяв местами минимальное и максимальное числа массива..

Program z5;

const nn=7;

var h:array [1..nn] of integer;

var i,m,k,t,w,u: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

m:=h[1];

k:=1;

w:=h[1];

u:=1;

for i:=1 to nn do

if h[i]<=m then begin

m:=h[i];

k:=i;

end;

for i:=1 to nn do

if h[i]>w then begin

w:=h[i];

u:=i;

end;

t:=h[u]; h[u]:=h[k]; h[k]:=t;

writeln(‘Результат’);

for i:=1 to nn do write(h[i],’ ‘);

end.

Вариант 6

Обработка одномерного массива.

Вывести на экран числа, встречающиеся в массиве только один раз.

Program z6;

label m1;

const nn=7;

var h:array [1..nn] of integer;

var i,k: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

for i:=1 to nn do

begin

for k:=1 to nn do

if (h[i]=h[k]) and (i<>k) then goto m1;

writeln(‘Один раз встречено:’,h[i]);

m1:;

end;

end.

Вариант 7

Обработка одномерного массива.

Преобразовать массив, расположив в нем числа в обратной последовательности.

Program z7;

const nn=7;

var h:array [1..nn] of integer;

var i,t: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

for i:=1 to nn div 2 do

begin

t:=h[i]; h[i]:=h[nn-i+1]; h[nn-i+1]:=t;

end;

writeln(‘Результат’);

for i:=1 to nn do write(h[i],’ ‘);

end.

Вариант 8

Обработка одномерного массива.

Преобразовать массив, умножив все положительные числа на максимальное число этого массива.

Program z8;

const nn=7;

var h:array [1..nn] of integer;

var i,m: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

m:=h[1];

for i:=1 to nn do

if h[i]>m then m:=h[i];

for i:=1 to nn do

if h[i]>0 then h[i]:=h[i]*m;

writeln(‘Результат’);

for i:=1 to nn do write(h[i],’ ‘);

end.

Вариант 9

Обработка одномерного массива.

Преобразовать массив, заменив все отрицательные числа на -1, а положительные на +1, нули оставить нулями.

Program z9;

const nn=7;

var h:array [1..nn] of integer;

var i: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

for i:=1 to nn do

if h[i]>0 then h[i]:=1

else

if h[i]<0 then h[i]:=-1;

writeln(‘Результат’);

for i:=1 to nn do write(h[i],’ ‘);

end.

Вариант 10

Обработка одномерного массива.

Найти среднее арифметическое всех положительных чисел массива. Вывести на экран все числа массива, которые больше, чем это среднее арифметическое.

Program z10;

const nn=7;

var h:array [1..nn] of integer;

var i,k: integer;

var s:real;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

s:=0;

k:=0;

for i:=1 to nn do

if h[i]>0 then begin

s:=s+h[i];

k:=k+1;

end;

if k>0 then

begin

s:=s/k;

writeln(‘Результат’);

for i:=1 to nn do

if h[i]>s then write(h[i],’ ‘);

end

else writeln(‘Положительных чисел нет’);

end.

Вариант 11

Обработка одномерного массива.

Преобразовать массив, изменив знак у всех отрицательных чисел. Подсчитать число таких замен.

Program z11;

const nn=7;

var h:array [1..nn] of integer;

var i,k: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

k:=0;

for i:=1 to nn do

if h[i]<0 then begin

h[i]:=-h[i];

k:=k+1;

end;

writeln(‘Результат’,’k=’,k,’ ‘);

for i:=1 to nn do write(h[i],’ ‘);

end.

Вариант 12

Обработка одномерного массива.

Вывести на экран все числа массива кратные 7 или 5.

Program z12;

const nn=7;

var h:array [1..nn] of integer;

var i: integer;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

writeln(‘Результат’);

for i:=1 to nn do

if ((h[i] mod 7)=0) or ((h[i] mod 5)=0) then write(h[i],’ ‘);

end.

Вариант 13

Обработка одномерного массива.

Преобразовать массив, заменив знаки всех элементов, расположенных между первым и последним нулем.

Program z13;

const nn=7;

var h:array [1..nn] of integer;

var i,k2: integer;

var k1:Boolean;

begin

writeln(‘Введите ’,nn,’ целых чисел’);

for i:=1 to nn do readln(h[i]);

writeln(‘Дано’);

for i:=1 to nn do write(h[i],’ ‘);

k1:=false;

k2:=0;

for i:=nn downto 1 do

if h[i]=0 then

begin k2:=i;

break;

end;

for i:=1 to k2 do

begin

if k1 then h[i]:=-h[i];

if h[i]=0 then k1:=true;

end;

writeln(‘Результат’);

for i:=1 to nn do write(h[i],’ ‘);

end.