- •Анализ кода программ:
- •1)Анализ кода с точки зрения размера программы по Холстеду:
- •2)Анализ программы с точки зрения сложности потока управления по МакКейбу:
- •3)Анализ кода с точки зрения сложности потока данных по Чепину
- •4)Анализ программы с точки зрения ее интеллектуальности по Холстеду:
- •5)Анализ кода программы с точки зрения стилистики и коментированности:
- •1)Анализ кода с точки зрения размера программы по Холстеду:
- •2)Анализ программы с точки зрения сложности потока управления по МакКейбу:
- •3)Анализ кода с точки зрения сложности потока данных по Чепину
- •4)Анализ программы с точки зрения ее интеллектуальности по Холстеду:
- •Cводная таблица метрик по 2 програмам
Федеральное агентство железнодорожного транспорта
_____________________
Московский государственный университет путей сообщения
(МИИТ)
____________________
Институт управления и информационных технологий
___________________
отчет по лабораторной работе №2
по дисциплине "Метрология, стандартизация и сертификация"
Выполнил: студент группы УВМ-211 Соколов А. В.
Проверил: Малинский С.В.
Москва - 2012 г.
Описание задания и программы.
В ходе выполнения этой лабораторной работы мною были выполнены:
2 программы на разных языках программирования (язык высокого уровня - Microsoft Visual Studio 2010 C# и язык низкого уровня – Borland Turbo Assembler), выполняющие следующие идентичные для обоих программ действия:
Вывод на экран приглашения ввести первое число: «введите 1 число»
Считывание и сохранение с отображением на экране вводимых символов первого числа в оперативную память компьютера
Вывод на экран приглашения ввести второе число: «введите 2 число»
Считывание и сохранение с отображением на экране вводимых символов второго числа в оперативную память компьютера
Сложение полученных чисел и сохранения результата в оперативной памяти
Вывод на экран сообщения « сумма получилась »
Вывод на экран полученной суммы
Вывод на экран сообщения «для завершения нажмите любую клавишу…»
При нажатии на любую из клавиш клавиатуры или мыши программа закрывается
анализ кода этих программ с точки зрения метрологии программного обеспечения:
Размер программы высчитанный по метрики Холстеда:
Обозначения:
n1 – словарь операндов – число уникальных оператдов программы включая имена процедур и знаки операндов
n2 - словарь операндов – число уникальных операндов программы
N1 – общее число операторов в программе
N2 – общее число операндов в программе
n=n1+n2 – оценка словаря программы
N=N1+N2 – оценка длины программы
V=N*log2n – объем программы
Ň=n1*log2n1+n2*log2n2 – теоретическая длина прграммы
Сложность потока управления по методу МакКейба, предполагающему что любую программу можно представить в виде графа:
Обозначения:
l – число дуг
v – число вершин
p – количество мер связности
z=l-v+2p – цикломатическое число МакКейба
сложность потока данных по метрике Чепина:
Обозначения:
P – количество переменных, вводимых для расчетов и обеспечения вывода
M – модифицируемые переменные- то что нужно дополнительно
C – управляющие переменные
Т - количество паразитных переменных – которые не используются
Q=α1*P+α2*M+α3*C+α4*T – метрика Чепина
αn – коэффициенты, для этой работы используются: 1;2;3;0.5 и формула становиться:
Q=P+2*M+3*C+ 0.5*T
интеллектуальность по Холстебу:
L= – оценка уровня программирования
I=L*V – интеллектуальность программы
E=Ň*log2 - оценка интеллектуальных усилий для написания программы
Ʌ=L2*V – оценка уровня языка программирования
метрики стилистики и коментированности
F= - метрика коментируемости
каждая программа должна быть разбита на n фрагментов и в каждом фрагменте:
Fi+sign* – метрика коментрованности в i-том фрагменте
F= =n
Анализ кода программ:
программа на Borland Turbo Assembler:
текст программы:
.386
data segment use16
boof1 db 4
db ?
db 4 dup(0);под коды символов первого числа
boof2 db 4
db ?
db 4 dup(0);под коды симвлов второго числа
chislo1 dw ?
chislo2 dw ?
rez db 7 dup(0),0dh,0ah,'$'
summ dw ?
nad1 db 'ўўҐ¤ЁвҐ 1 зЁб«® $';надпись введите 1 число в dos кодировке
nad2 db 'ўўҐ¤ЁвҐ 2 зЁб«® $';надпись введите 2 число
nad3 db 'б㬬 Ї®«гзЁ« бм $';надпись сумма получилась
nad4 db '¤«п ўл室 ¦¬ЁвҐ «оЎго Є« ўЁиг...$';надпись для выхода нажмите любую клавишу...
data ends
cod segment use16
assume ds:data, cs:cod
m1: mov cx,data
mov ds,cx
;выведем на экран 1 надпись
call pr3;зачистим экран
;установим курсор на 0-ю строчку
mov ah,2;номер прерывания
mov bh,0;0-я страница
mov dh,0;0-я строчка
mov dl,0;0-ой столбец
int 10h
lea dx,ds:nad1;занесем в dx адресс 1 надписи
call pr2;выведем надпись на экран
;считаем 3 нажатия клавиш клавиатуры для первого числа
lea dx,ds:boof1;занесем в dx адресс начала массива байт первого числа
call pr1;считаем нажатия клавиш
;переведем полученное число в 16-ричный код
movzx cx,ds:boof1+1;занесем в cx колличество символов в первом числе
lea di,ds:boof1+2;адресс символа младшей цифры
call pr4;преобразуем число в 16-ричный код
mov ds:chislo1,bx;сохраним полученое число в память
;выведем на экран 2 надпись
;установим курсор ниже на 2 строчки
mov ah,2;номер прерывания
mov bh,0;0-я страница
mov dh,3;3-я строчка
mov dl,0;0-ой столбец
int 10h
lea dx,ds:nad2
call pr2
;считаем 3 нажатия клавиш клавиатуры для второго числа
lea dx,ds:boof2
call pr1
movzx cx,ds:boof2+1
lea di,ds:boof2+2
call pr4
mov ds:chislo2,bx
;сложим первое и второе число
mov ax,ds:chislo1;скопируем в al первое число
add ax,ds:chislo2;словим al и второе число
mov ds:summ,ax;сохраним поученную сумму в память
;выведем на экран полученную сумму
mov ah,2;выведем на экран 3 надпись еще на 2 строчки ниже
mov bh,0
mov dh,5
mov dl,0
int 10h
lea dx,ds:nad3
call pr2
;функция вывода
lea di,ds:rez+6;в di адресс последнего символа в области rez
mov bx,10;делитель
mov ax,ds:summ; в ax запишим исходный код
m4: xor dx,dx;обнулим dx
div bx;поделим на 10,в dx-остаток
add dx,30h;превратим в ascii код
mov ds:[di],dx;заменим число его ascii кодом
dec di;переведем указатель на предыдущее число
dec di
cmp ax,10;сравним частное с 10
jge short m4;продолжим цикл если частное >= 10
;преобразуем цифру частного в символ
add ax,30h
mov ds:[di],ax
;выведем полученное число на экран
mov ah,9
;lea dx,ds:rez
int 21h
;выведем 4 надпись на экран и ждем нажатия клавиши для завершения программы
mov ah,2
mov bh,0
mov dh,7
mov dl,0
int 10h
lea dx,ds:nad4
call pr2
mov ah,8
int 21h
mov ah,4ch
int 21h
pr1 proc;процедура считывания нажатий клавиш
mov ah,0ah
int 21h
ret
endp
pr2 proc;процедура вывода надписей на экран
mov ah,9
int 21h
ret
endp
pr3 proc;процедура зачистки экрана
mov ah,06h
mov al,0
mov bh,7
mov cx,0
mov dh,40
mov dl,79
int 10h
ret
endp
pr4 proc
dec cx;уменьшим количество цифр
mov bp,1;сомножитель
xor bx,bx;обнулим будущее число
add di,cx;получим адресс последнего байта числа
;из каждого символа сделаем цифру и прибавим к bx
m3: mov al,ds:[di];скопируем в al символ с адрессом di
sub al,30h;вычтим 30 для получения числовой цифры
;умножим числовую цифру на сомножитель
movzx ax,al;перешлем цифру в ax с расширением для применения команды умножения
mul bp;умножим цифру на сомножитель
add bx,ax;произведение добавим в bx
;сомножитель bp домножаем на 10
mov ax,bp
mov dx,10
mul dx
mov bp,ax
;получим адресс следующего символа цифры(более старшей)
dec di
loop m3
ret
endp
cod ends
end m1