Метрика Чепина
2.1.
Теоретическое введение
Мерой сложности понимания программ на основе входных и выходных
данных является метрика Н. Чепина (Ned Chapin).
Смысл метода, который предложил Чепин, состоит в оценке информационной
прочности отдельно взятого программного модуля на основе результатов анализа
характера использования переменных, входящих в состав списка ввода и вывода.
Существует несколько модификаций метрики Чепина. Рассмотрим
наиболее простой, но с точки зрения практического использования достаточно
эффективный вариант этой метрики.
Все множество переменных, составляющих список ввода-вывода,
разбивается на четыре функциональные группы:
·
Р - вводимые
переменные для расчетов и для обеспечения вывода. Примером такой переменной
может служить используемая в программах лексического анализатора переменная,
содержащая строку исходного текста программы - в этом случае сама переменная не
модифицируется, а применяется только как контейнер для исходной информации;
·
М -
модифицируемые, или создаваемые внутри программы, переменные. К таким
переменным относится большинство традиционно применяемых переменных,
декларируемых в программных модулях;
·
С - переменные,
участвующие в управлении работой программного модуля (управляющие переменные).
Такие переменные предназначены для передачи управления, изменения логики вычислительных
процессов и т. д.;
·
T - не используемые в программе (так называемые паразитные)
переменные. Такие переменные не принимают непосредственного участия в
реализации процесса обработки информации, ради которого написана анализируемая
программа, однако они заявлены в программном модуле. Такие переменные могут
использоваться для выполнения промежуточных действий и не играют
принципиальной роли в решении основной задачи.
В качестве особенности применения данной метрики следует назвать
необходимость учета каждой переменной в каждой функциональной группе,
поскольку каждая переменная может выполнять одновременно несколько функций.
Исходное выражение для определения метрики Чепина записывается в
следующем виде:
Q
=a1*P+a2*M + a3*C + a4*T
(3)
где a1,
a2,
a3
и a4 ,
- весовые коэффициенты.
Весовые коэффициенты в расчетном выражении значения метрики
применяются для отражения различного влияния на сложность программы каждой
функциональной группы переменных. По мнению автора метрики наибольший вес,
равный 3, должна иметь функциональная группа С, так как она непосредственно
влияет на поток управления программы. Весовые коэффициенты остальных групп
Чепин распределяет следующим образом:
·
a1 =
1;
·
a2 =
2;
·
a4 =
0,5;
Примечательно, что весовой коэффициент группы Т не равен 0,
несмотря на то, что часть используемых переменных может не применяться в
программе. Это объясняется тем, что «паразитные» переменные сами по себе не
увеличивают сложность потока данных программы, но очень часто затрудняют ее
понимание.
С учетом весовых коэффициентов расчетное выражение метрики Чепина
приобретает следующий вид:
Q
= P+2*M
+ 3*C + 0,5*T.
Следует отметить, что метрика сложности программы Чепина также
основана на анализе исходных текстов программ, что обеспечивает единый подход
к автоматизации их расчета и может быть рассчитана с использованием специально
разработанного программного анализатора.
2.2.
Пример: «Простые числа в матрице»
Дана целочисленная матрица размером N*M.
Вычислить и записать в одномерный массив количество простых чисел
в каждом столбце матрицы. Размерность матрицы задается с клавиатуры, заполнение
матрицы осуществляется посредством датчика случайных чисел. Разработать
программу для решения задачи. На основе лексического анализа исходного текста
программы определить значение метрики Чепина.
2.2.1
Реализация программы
Текст программы для реализации возможного алгоритма решения
поставленной задачи представлен в таблице 3.
Таблица 3- Текст программы
Номера
строк
|
Строки
программы
|
1
|
using System;
|
2
|
namespace chapin
|
3
|
{
|
4
|
class Program
|
5
|
{
|
6
|
static void Main(string[] args)
|
7
|
{
|
8
|
int n, m;
|
9
|
|
10
|
int[,] a;
|
11
|
int[] b;
|
12
|
ConsoleKeyInfo
клавиша;
|
13
|
int i, j, k, d;
|
14
|
bool p = false;
|
15
|
Random g;
|
16
|
do
|
17
|
{
|
18
|
Console.Clear();
|
19
|
Console.Write("Введите
количество строк");
|
20
|
n = int.Parse(Console.ReadLine());
|
21
|
Console.Write("Введите
количество столбцов");
|
22
|
m = int.Parse(Console.ReadLine());
|
23
|
g = new Random();
|
24
|
a = new int[n,
m];
|
25
|
for (i =
0; i < n; i++)
|
26
|
for (j =
0; j < m; j++)
|
27
|
{
|
28
|
a[i,j]
= g.Next(0,101);
|
29
|
}
|
30
|
|
31
|
Console.WriteLine("\nИсходная
матрица");
|
32
|
for (i = 0; i
< n; i++, Console.WriteLine())
|
33
|
for (j =
0; j < m; j++)
|
34
|
Console.Write("{0,8:d}", a[i, j]);
|
35
|
b = new int[m];
|
36
|
|
37
|
for (j =
0; j < m; j++)
|
38
|
{
|
39
|
for (i =
k = 0; i < n; i++)
|
40
|
{
|
41
|
p
= true;
|
42
|
for (d =
2; d < a[i, j]; d++)
|
42
|
if (a[i, j] % d
== 0) p = false;
|
44
|
|
45
|
|
46
|
if (p)
k++;
|
47
|
b[j]
= k;
|
48
|
}
|
49
|
}
|
50
|
|
51
|
|
52
|
Console.WriteLine("\nКоличество
простых чисел");
|
53
|
for (i = 0; i
< b.Length; i++)
|
54
|
Console.Write("{0,8:d}", b[i]);
|
55
|
|
56
|
Console.WriteLine("\nДля
выхода нажмите клавишу ESC");
|
57
|
клавиша = Console.ReadKey(true);
|
58
|
} while (клавиша.Key != ConsoleKey.Escape);
|
59
|
}
|
60
|
}
|
61
|
}
|
2.2.2
Оценка характеристик программы
Выполним оценку качества программы с помощью метрики Чепина,
которая позволяет оценить меру трудности понимания программы на основе входных
и выходных данных. Все множество переменных, составляющих список ввода-вывода,
разбивается на четыре функциональные группы:
·
Р - вводимые
переменные для расчетов и для обеспечения вывода;
·
М -
модифицируемые, создаваемые внутри программы переменные;
·
С - переменные, участвующие в управлении
работой программного модуля (управляющие переменные);
·
T - не
используемые в программе переменные.
В
таблице 4 приведен анализ исходного текста программы
Таблица
4 – Анализ исходного кода программы
№ п/п
|
Наименование переменных
|
Номера строк
|
Р ( для расчетов и для обеспечения вывода)
|
1
|
m
|
8
|
2
|
n
|
8
|
3
|
a
|
10
|
М ( модифицируемые или создаваемые внутри программы переменные)
|
1
|
i
|
13
|
2
|
j
|
13
|
3
|
k
|
13
|
4
|
d
|
13
|
5
|
b
|
11
|
C (управляющие переменные)
|
1
|
g
|
15
|
2
|
p
|
14
|
3
|
клавиша
|
12
|
T (не используемые в
программе переменные)
|
|
Отсутствуют
|
|
Переменные
т,п и а используются в качестве исходных данных.
Переменные i, j,
k, d и
b в
процессе выполнения программы создаются и модифицируются.
Переменные g, р и
клавиша используются для управления выполнением программы.
Таким образом, исходя из результатов анализа исходного текста
программы, получаем следующие значения характеристик:
Р =
3 - количество переменных для расчетов;
М = 5
- количество модифицируемых переменных;
С = 3 - количество переменных, используемых в управлении
программой;
Т = 0 - количество неиспользуемых переменных
(такие переменные в программе отсутствуют).
Расчет
метрики Чепина:
Q = P
+ 2M + 3-C
+ 0,ST = 3 +
2-5 + 3-3 + 0,5-0 = 22.
На
основе полученных значений метрики Чепина уровень сложности данного решения
можно считать сравнительно низким, как так в исходном тексте программы
используется незначительное количество переменных, что не затрудняет понимание
программы.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.