Рассмотрим следующий фрагмент кода:
//умножение вектора на вектор
for(int i=0;i<g_N;i++)
{
temp+= _x[i]*x[i];
temp1+= x[i]*x[i];
x[i] = _x[i];
_x[i] = 0;
}
//непосредственно расчет максимального
//собственного числа матрицы
g_l=temp/temp1;
fl = FABS(_l-g_l);
Рассчитаем для него метрики размера программ, метрику Мак-Кейба и метрику комментированности. Расчеты с пояснениями приведены ниже.
Метрики размера программ
Измерение первичных понятий
Приведем перечень операторов (Таблица 3) и операндов (Таблица 4.) для данного фрагмента кода.
Таблица 3.
Число вхождений операторов
Оператор | i | f1i |
for | ||
= | ||
< | ||
++ | ||
(),{} | ||
[] | ||
+= | ||
* | ||
/ | ||
FABS | ||
Ŋ1=10 | N1=24 |
Таблица 4.
Число вхождений операндов
Операнд | i | f2i |
i | ||
g_N | ||
temp | ||
temp1 | ||
x | ||
_x | ||
g_l | ||
_l | ||
Ŋ2=9 | N2=27 |
Таким образом, длина приведенного фрагмента программы составляет:
|
|
N=N1+N2=24+27=51.
Метрика длины
Теоретическая длина рассматриваемого фрагмента кода составляет:
Метрика объема
Рассчитаем реальный объем данного фрагмента кода:
Теперь рассчитаем потенциальный объем данного фрагмента кода:
Метрика уровня реализации
Метрика качества программирования равна:
Определим уровень программы с помощью аппроксимальной оценки:
Метрика интеллектуального содержания
Определим метрику интеллектуального содержания:
Определим количество элементарных решений необходимых для написания данного фрагмента кода:
Метрика Мак-Кейба
Построим граф для данного фрагмента кода.
Рисунок 4. Граф для рассматриваемого фрагмента кода
Вычислим цикломатическое число Мак-Кейба:
,
где е – число дуг ориентированного графа,
v – число вершин графа,
p – число компонентов связности графа.
Для графа (рис.4) е = 13, v = 11, p = 1. В таком случае число Мак-Кейба равно
Полученное число означает, что количество тестовых прогонов программы, необходимых для исчерпывающего тестирования по критерию “работает каждая ветвь”, равно 4.
Рассмотрим тестовые прогоны программы, соответствующие полученному цикломатическому числу Мак-Кейба:
1) N=2, Mas = {4 1; 2 -1}, x0={1 1}, E=0,01.Данные введены с клавиатуры. Вывод результата осуществляется на экран. В основной функции, вычисляющей максимальное собственное число, цикл while пройден несколько раз.
2) N=2, Mas = {4 1; 2 -1}, x0={1 1}, E=0,01. Данные введены из файла. Вывод результата осуществляется на экран. В основной функции, вычисляющей максимальное собственное число, цикл while пройден несколько раз.
|
|
3) N=2, Mas = {4 1; 2 -1}, x0={1 1}, E=10. Данные введены с клавиатуры. Вывод результата осуществляется в файл. В основной функции, вычисляющей максимальное собственное число, цикл while пройден 1 раз.
4) N=2, Mas = {4 1; 2 -1}, x0={1 1}, E=10. Данные введены из файла. Вывод результата осуществляется в файл. В основной функции, вычисляющей максимальное собственное число, цикл while пройден 1 раз.