- •Методические указания
- •Для студентов специальности 6.050102
- •Всех форм обучения
- •1.Разработка технического задания. Лабораторная работа № 1
- •1.1 Теоретические сведения
- •1.2 Задание на лабораторную работу
- •1.3 Список контрольных вопросов
- •2.Оформление программной документации. Лабораторная работа № 2
- •2.1 Теоретические сведения
- •2.2 Задание на лабораторную работу
- •2.3 Список контрольных вопросов
- •3. Расчет метрик холстеда. Лабораторная работа № 3
- •3.1 Описание метрик Холстеда
- •3.2 Пример определения характеристик программы
- •3.3 Порядок выполнения работы
- •3.4 Список контрольных вопросов
- •4. Оптимизация программ. Лабораторная работа № 4
- •4.1 Теоретические сведения
- •4.2 Порядок выполнения работы
- •4.3 Список контрольных вопросов
- •5. Структурное тестирование. Лабораторная работа № 5
- •5.1 Задачи и методы тестирования
- •5.2 Структурное тестирование
- •5. 3 Выполнение работы
- •5.5 Список контрольных вопросов
- •6. Метод эквивалентных разбиений. Лабораторная работа № 6
- •6.1 Теоретические сведения
- •6.2 Выделение классов эквивалентности
- •6.3 Построение тестов
- •6.4 Порядок выполнения работы
- •6.5 Список контрольных вопросов
- •7. Метод функциональных диаграмм. Лабораторная работа n 7
- •7.1 Особенности метода функциональных диаграмм
- •7.2 Базовые символы для записи функциональных диаграмм
- •7.3 Пример построения функциональной диаграммы
- •7.4 Преобразование функциональной диаграммы в таблицу решений и построение тестов
- •7.5 Порядок выполнения работы
- •7.6 Список контрольных вопросов
- •8. Расстановка контрольных точек. Лабораторная работа №8
- •8.1 Теоретические сведения
- •8.2 Порядок выполнения работы
- •8.3 Список контрольных вопросов
- •9. Мутационный анализ. Лабораторная работа № 9
- •9.1 Теоретические сведения
- •9.2 Описание мутаций
- •9.3 Порядок выполнение работы
- •9.4 Список контрольных вопросов
- •10. Оценка надежности программ. Лабораторная работа № 10
- •10.1 Теоретические сведения
- •10.2 Порядок выполнения работы
- •10.3 Список контрольных вопросов
- •11. Определение показателей качества программного средства. Лабораторная работа № 11
- •11.1 Теоретические сведения
- •11.2 Номенклатура показателей качества
- •11.3 Методы оценки уровня качества пс
- •11.3 Порядок выполнения работы
- •11.5 Содержание отчета
- •11.6 Список контрольных вопросов
- •12. Расчет метрик чидамбера-кемерера. Лабораторная работа № 12
- •12.1 Теоретические сведения
- •12.2 Использование метрик Чидамбера-Кемерера
- •12.3 Порядок выполнения работы
- •12.4 Содержание отчета о выполнении работы
- •12.5 Список контрольных вопросов
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 Порядок выполнения работы
Изучить назначение метрик и пример их расчета.
Выбрать текст программы с использованием ООП. Текст должен содержать не менее 3-х классов, связанных между собой через методы или свойства.
Построить диаграмму связей и рассчитать метрики.
Результаты расчета представить в виде таблицы. Провести анализ результатов исследуемой программы.
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.