Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники»
Факультет заочного обучения
Кафедра программного обеспечения информационных технологий
ЛАБОРАТОРНАЯ РАБОТА №2 «МЕТРИКИ ХОЛСТЕДА. МЕТРИКИ СЛОЖНОСТИ ПОТОКА ДАННЫХ»
по дисциплине«Метрология, стандартизация и сертификация в информационных технологиях»
Минск 2015
Задание Для разработанной в лабораторной работе 1 схемы алгоритма написать исходный текст программы. В программе предусмотреть вывод на экран всех входных и выходных данных. Программа должна быть хорошо прокомментирована. На основании разработанного исходного текста программы рассчитать метрики Холстеда: - шесть базовых метрик Холстеда (результат свести в таблицу); - словарь программы; - длина программы; - объём программы. Рассчитать метрики сложности потока данных: - спены идентификаторов и суммарный спен программы (результаты свести в таблицу); - полная метрика Чепина и метрика Чепина ввода/вывода (результаты свести в таблицу);
Вариант 22
Ход работы Исходный текст программы: //--------------------------------------------------------------------------- #include <vcl.h> #include <iostream.h>
#pragma argsused int main(int argc, char* argv[]) { int i, j, n, k, m, l, t, y;// переменные для работы с массивом int imin, min, max, kmax;//переменные для нахождения максимального и //минимального элементов, запоминания их положения int masa[4][5], masb [5][7], masaa[4][5], masbb [5][7] ;//массивы cout<<"Vvedite elementi massiva 1";//ввод элементов массива А cout << endl; for ( i=0; i<4;i++){ for ( j=0; j<5;j++){ cin>>masa[i][j]; }} //первый массив введён cout<<"Vvedite elementi massiva 2";//ввод элементов массива В for ( n=0; n<5;n++){ for ( k=0; k<7;k++){ cin>>masb[n][k]; }} //второй массив введён //ищем минимальный элемент в первом массиве for ( i=0; i<4;i++){ for ( j=0; j<5;j++){ min=0;//присваиваем начальные значения переменной, которая будет содержать //минимальный элемент imin=0;//будет содержать индекс строки с минимальным элементом if (masa[i][j]<min){//если элемент массива <min min=masa[i][j];// то присваиваем min значение этого элемента imin=i;//запоминаем номер строки, содержащей минимальный элемент }}}
//ищем максимальный элемент во втором массиве for ( n=0; n<5;n++){ for ( k=0; k<7;k++){ max=0; //присваиваем начальные значения переменной, которая будет содержать //максимальный элемент kmax=0; //будет содержать индекс строки с максимальным элементом if (masb[n][k]>max){// если элемент массива >max max=masb[n][k]; // то присваиваем max значение этого элемента kmax=k+1; //запоминаем номер столбца, содержащей максимальный элемент }}}
//меняем местами строку и столбец массивов с мин и макс элем for (l=0; l<4;l++){//используем пустые массивы для записи в них for (m=0;m<5;m++){ for (t=0; t<5;t++){ for (y=0;y<7;y++){ masaa[l][m]=masa[i][j];//элементам masaa присваиваем элементы masa masaа[imin][m]=masb[n][kmax]; //строке с индексом минимального элемента //присваиваем значения столбца с индексом максимального элемента masbb[t][y]=masb[n][k];//элементам masbb присваиваем элементы masb masbb[t][kmax]=masa[imin][j]; //столбцу с индексом максимального элемента //присваиваем значения строки с индексом минимального элемента }}}} //выводим полученные значения на экран cout << "Massiv 1" << endl; for ( n=0; n<5;n++){ for ( k=0; k<7;k++) cout << masa[i][j] << " " ; cout << endl; } cout << "Massiv 2" << endl; for ( n=0; n<5;n++){ for ( k=0; k<7;k++) cout << masb[n][k] << " " ; cout << endl; } cout<<”Minimalnyi element”<< min<<"nomer stroky"<<imin<<endl; cout<< “Maximalnyi element”<<max<< "nomer stolbca"<<kmax << endl; cout << " Massiv 1 posle perestonovki” << endl; for (l=0; l<4;l++){ for (m=0;m<5;m++) cout << masaa[l][m] << " " ; cout<< endl;} cout << "Massiv 2 posle perestonovki”<< endl; for (t=0; t<5;t++){ for (y=0;y<7;y++) cout << masaa[t][y] << " " ; cout<< endl; } system("pause"); return 0; } //---------------------------------------------------------------------------
Рисунок 1. Результат работы программы
Рассчитаем Метрики Холстеда. Основу метрик Холстеда составляют 6 базовых метрик программы: 1 – словарь операторов; 2 – словарь операндов; N1 – общее число операторов в программе; N2 – общее число операндов в программе; f1j – число вхождения j-го оператора, j =1,2, …, 1; f2i – число вхождения i-го оператора, i =1,2, …, 2; Словарь программы (общее число уникальных операторов и операндов программы): =1+2 Длина программы (общее количество операторов и операндов программы): N=N1+N2 Объём программы (число логических единиц информации, необходимых для записи программы): V=Nlog2 Расчёт базовых метрик Холстеда для программы по варианту: Таблица1 j Оператор f1j i Операнд f2i 1. ; 54 1. i 10 2. = 20 2. j 10 3. + 2 3. n 10 4. ++ 8 4. k 10 5. > 1 5. m 6 6. < 9 6. l 5 7. >> 2 7. t 6 8. << 34 8. y 5 9. () 10 9. imin 6 10. [] 44 10. kmax 6 11. , 13 11. min 5 12. {} 12 12. max 5 13. If 2 13. masa 7 14. for () 8 14. masb 7 15. msaaa 4 16. masbb 4 17. 0 12 18. 4 4 19. 5 8 20. 7 4 1=14 N1=219 2=20 N2=134
Словарь программы: =14+20=34 Длина программы: N=219+144=363 Объём программы: V=363log234=1847
Рассчитаем метрики сложности потока данных. Спен идентификатора – число повторных появлений идентификатора, после его первого появления, в тексте программы. Метрики Чепина базируются на анализе характера использования переменных в программе. Рассмотрим множество переменных программы, разбив их на четыре функциональные группы: Р – вводимые переменные, содержащие исходную информацию, но не модифицируемые в программе и не являющиеся управляющими переменными; М – вводимые модифицируемые переменные и создаваемые внутри программы константы и переменные, не являющиеся управляющими переменными; С – переменные, участвующие в управлении работой программы (управляющие переменные); Т – не используемые в программе переменные. Значение метрики Чепина определяется по формуле Q=a1p+a2m+a3c+a4t a1=1,a2=2,a3=3,a4=0,5 – весовые коэффициенты. С учётом этого формула примет вид: Q=1p+2m+3c+0,5t
Спен программы Таблица 2 i j n k m l t y imin kmax min max masa masb masaa masbb 10 10 10 10 6 5 6 5 6 6 5 5 7 7 4 4 Суммарный спен программы 106. Метрики Чепина программы Таблица 3 Переменные Полная метрика Чепина Метрика Чепина ввода/вывода Группа переменных Р М С Т Р М С Т Переменные, относящиеся к группе i, j, n, k,l, m, t, y i, j, n, k, l, m, t, y, imin, kmax, masaa, masbb masa, min, masb, max - - imin, kmax, masaa, masbb masa, min, masb, max - Количество переменных в группе P=8 M=12 C=4 T=0 P=0 M=4 C=4 T=0 Метрика Чепина Q=1*8+2*12+3*4+0.5*0=44 Q=1*0+2*4+3*4+0.5*0=20
Выводы: В ходе лабораторной программы был написан исходный код в соответствии с заданием. Так же были изучены и рассчитаны метрики Холстеда и метрики сложности потока данных.