Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Оценка качества программного обеспечения: Практикум

Покупка
Основная коллекция
Артикул: 186600.07.01
Доступ онлайн
от 484 ₽
В корзину
Рассмотрены вопросы опенки характеристик и измерения метрик программного обеспечения по наиболее известным методикам, охватывающим лексический анализ программ, оценку структурной сложности, процедурно- и объектно-ориентированные метрики, надежность программ, опенку характеристик при стандартизации и сертификации программного обеспечения. Приведены теоретические сведения, необходимые для решения задач, рекомендации по решению типовых задач при оценке качества программного обеспечения. Предложены наборы задач для самостоятельного решения. Для студентов, преподавателей, разработчиков программного обеспечения, а также специалистов и менеджеров широкого профиля.
Черников, Б. В. Оценка качества программного обеспечения. Практикум : учебное пособие / Б. В. Черников, Б. Е. Поклонов ; под ред. Б. В. Черникова. — Москва : ФОРУМ : ИНФРА-М, 2022. — 400 с. : ил. — (Высшее образование). - ISBN 978-5-8199-0516-6. - Текст : электронный. - URL: https://znanium.ru/catalog/product/1843633 (дата обращения: 29.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Б.В. Черников, Б.Е. Поклонов

ОЦЕНКА КАЧЕСТВА 

ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 

Практикум 

Под редакцией Б.В. Черникова

Рекомендовано УМО в области 

экономики, менеджмента, логистики и бизнес-информатики 

в качестве учебного пособия для студентов 

высших учебных заведений, обучающихся по направлению 

 «Бизнес-информатика» 
38.03.05

ÌÎÑÊÂÀ

ÈÄ «ÔÎÐÓÌ» — ÈÍÔÐÀ-Ì

2022

УДК [681.3.068](075) 
ББК 32.973 
Ч49 

РЕЦЕНЗЕНТЫ: 

Кафедра «Архитектура программных систем» 

Научно-исследовательского университета «Высшая школа экономики»; Кафедра

«Информатика и программное обеспечение» 

ГОУ ВПО «Московский государственный институт  электронной техники

(технический университет)»; А.М. Карминский,  

доктор технических наук, доктор экономических наук, профессор,  профессор

Научно-учебного комплекса  «Инженерный бизнес и менеджмент» 

Московского государственного технического университета 

им. Н.Э. Баумана (технического университета) 

Черников Б.В. 

Ч49         Оценка качества программного обеспечения: Практикум: учебное пособие

/ Б.В. Черников, Б.Е. Поклонов ; Под ред. Б.В. Черникова. - Москва: ИД
«ФОРУМ»: ИНФРА-М, 2022. - 400 с: ил. - (Высшее образование). 

ISBN 978-5-8199-0516-6 (ИД «ФОРУМ») 
ISBN 978-5-16-005654-8 (ИНФРА-М) 

Рассмотрены вопросы оценки характеристик и измерения метрик программного

обеспечения по наиболее известным методикам, охватывающим лексический анализ
программ, оценку структурной сложности, процедурно- и объектно-ориентированные
метрики, надежность программ, оценку характеристик при стандартизации и сертификации
программного обеспечения. Приведены теоретические сведения, необходимые для решения
задач, рекомендации по решению типовых задач при оценке качества программного
обеспечения. Предложены наборы задач для самостоятельного решения. 

Для студентов, преподавателей, разработчиков программного обеспечения, а также

специалистов и менеджеров широкого профиля. 

УДК [681.3.068](075) 

ББК 32.973 

ISBN 978-5-8199-0516-6 (ИД «ФОРУМ»)  
ISBN 978-5-16-005654-8 (ИНФРА-М) 

© Черников Б.В., Поклонов Б.Е., 2014  
© ИД «ФОРУМ», 2014 

Оглавление 

Предисловие …………………………………………………………… 
9 

Практическое занятие 1 
 
 
ОЦЕНКА ХАРАКТЕРИСТИК ПРОГРАММ НА ОСНОВЕ 
ЛЕКСИЧЕСКОГО АНАЛИЗА ………………………….….……….. 
11 

 
1.1. Метрики Холстеда …………………………………..….……… 
11 
 
 
1.1.1. Теоретические сведения ………………………………... 
11 
 
 
 
Особенности формирования словаря программы ……… 11 
 
 
 
Измеряемые свойства программ ………………………… 13 
 
 
 
Оптимизация количества и длины модулей в программе ... 19 
 
 
 
Оценка уровня языков программирования …………….. 
20 
 
 
 
Метрика числа ошибок в программе …………………… 
23 
 
 
1.1.2. Задача «Расчет значений функции» ……………….…… 
25 
 
 
 
Реализация программы ………………………………….. 
25 
 
 
 
Словарь программы ……………………………………… 
26 
 
 
 
Оценка характеристик программы ……………………… 32 
 
 
1.1.3. Задача «Зеркальное число» ……………….……………. 
34 
 
 
 
Реализация программы ………………………………….. 
34 
 
 
 
Словарь программы ……………………………………… 
35 
 
 
 
Оценка характеристик программы ……………………… 37 
 
 
1.1.4. Задача «Вычисление суммы элементов массива» …….. 
38 
 
 
 
Реализация программы …………………………………... 38 
 
 
 
Словарь программы ……………………………………… 
40 
 
 
 
Оценка характеристик программы ……………………… 42 
 
 
1.1.5. Задача «Замена строк таблицы» …… 
43 
 
 
 
Реализация программы …………………………………... 44 
 
 
 
Словарь программы ……………………………………… 
45 
 
 
 
Оценка характеристик программы ……………………… 48 
 
 
1.1.6. Задача «Заправка бака топливом» ……………….…...... 
49 
 
 
 
Реализация программы ………………………………….. 
50 
 
 
 
Словарь программы ……………………………………… 
52 
 
 
 
Оценка характеристик программы ……………………… 54 
 
 
1.1.7. Задачи для самостоятельного решения ………………... 
55 
 
1.2. Метрики Джилба ………………………………………………. 
58 
 
 
1.2.1. Теоретические сведения ……………………………….. 
58 
 
 
1.2.2. Задача «Вычисление значений функции» ...…………… 
59 
 
 
 
Реализация программы ………………………………….. 
60 
 
 
 
Словарь программы ……………………………………… 
61 
 
 
 
Оценка характеристик программы ……………………… 62 

Оглавление 
4 

 
 
1.2.3. Задача «Функция копирования элементов массива» …. 
63 
 
 
 
Реализация программы …………………………………... 63 
 
 
 
Словарь программы ……………………………………… 
65 
 
 
 
Оценка характеристик программы ……………………… 67 
 
 
1.2.4. Задача «Дополнение массива» …………………………. 
68 
 
 
 
Реализация программы ………………………………….. 
68 
 
 
 
Словарь программы ……………………………………… 
70 
 
 
 
Оценка характеристик программы ……………………… 71 
 
 
1.2.5. Задача «Сложение элементов матриц» (вариант 1) …... 
72 
 
 
 
Реализация программы ………………………………….. 
72 
 
 
 
Словарь программы ……………………………………… 
74 
 
 
 
Оценка характеристик программы ……………………… 76 
 
 
1.2.6. Задача «Сложение элементов матриц» (вариант 2)  ….. 
76 
 
 
 
Реализация программы ………………………………….. 
77 
 
 
 
Словарь программы ……………………………………… 
78 
 
 
 
Оценка характеристик программы ……………………… 80 
 
 
1.2.7. Задачи для самостоятельного решения ………………... 
81 
 
1.3. Метрика Чепина …………………………………………..……. 
85 
 
 
1.3.1. Теоретические сведения ………………………………... 
85 
 
 
1.3.2. Задача «Простые числа в матрице» ...………………….. 
87 
 
 
 
Реализация программы ………………………………….. 
87 
 
 
 
Оценка характеристик программы ……………………… 89 
 
 
1.3.3. Задача «Сортировка строк в матрице» ………………… 
90 
 
 
 
Реализация программы ………………………………….. 
91 
 
 
 
Оценка характеристик программы ……………………… 93 
 
 
1.3.4. Задача «Формирование вещественной матрицы» …….. 
94 
 
 
 
Реализация программы ………………………………….. 
94 
 
 
 
Оценка характеристик программы ……………………… 96 
 
 
1.3.5. Задача «Заправка топливных баков» …………………... 
97 
 
 
 
Реализация программы ………………………………….. 
98 
 
 
 
Оценка характеристик программы ……………………… 99 
 
 
1.3.6. Задача «Расчет платежей за электроэнергию» ………... 101 
 
 
 
Реализация программы ………………………………….. 101 
 
 
 
Оценка характеристик программы ……………………… 103 
 
 
1.3.7. Задачи для самостоятельного решения ………………... 104 

Практическое занятие 2 
 
 
ОЦЕНКА СТРУКТУРНОЙ СЛОЖНОСТИ ПРОГРАММ …….... 110 

 
2.1. Теоретические сведения ………………………………………. 110 
 
 
2.1.1. Критерии структурной сложности программ …………. 110 
 
 
 
Понятие структурной сложности программ …………… 110 
 
 
 
Критерии выделения маршрутов ………………...……… 112 

Оглавление 
5 

 
 
 
Критерий 1 ……………………………………………….. 113 
 
 
 
Критерий 2 ……………………………………………….. 114 
 
 
 
Критерий 3 ……………………………………………….. 117 
 
 
 
Метрика Маккейба ……………………….……………… 118 
 
 
2.1.2. Особенности построения управляющих графов ……… 121 
 
 
 
Линейная последовательность операторов ………..…… 122 
 
 
 
Простое ветвление (оператор if)………………...…..…... 123 
 
 
 
Переключатель с множественным выбором …..……….. 124 
 
 
 
Программы с операторами цикла ……………………….. 126 
 
2.2. Задача «Расчет значений функции» …………………………... 134 
 
 
 
Реализация решения ……………….…………………….. 135 
 
 
 
Оценка алгоритмической сложности …………………… 136 
 
2.3. Задача «Замена строк матрицы» …………………….………... 140 
 
 
 
Реализация решения ……………….…………………….. 141 
 
 
 
Оценка алгоритмической сложности …………………… 142 
 
2.4. Задача «Объединение аргументов командной строки» ……... 148 
 
 
 
Реализация решения ……………….…………………….. 149 
 
 
 
Оценка алгоритмической сложности …………………… 150 
 
2.5. Задача «Проверка простого числа» …………………………… 154 
 
 
 
Реализация решения ……………….…………………….. 154 
 
 
 
Оценка алгоритмической сложности …………………… 154 
 
2.6. Задача «Сортировка массива» ………………………….……... 159 
 
 
 
Реализация решения ……………….…………………….. 159 
 
 
 
Оценка алгоритмической сложности …………………… 161 
 
2.7. Задача «Поиск максимального числа» ……………………….. 165 
 
 
 
Реализация решения ……………….…………………….. 165 
 
 
 
Оценка алгоритмической сложности …………………… 166 
 
2.8. Задачи для самостоятельного решения ………..……………... 169 
 
 
2.8.1. Задачи с разработкой программы ……….……………... 169 
 
 
2.8.2. Задачи по оценке алгоритмической сложности 
          на основе управляющих графов ………………………... 171 

Практическое занятие 3 
 
 
ОЦЕНКА ХАРАКТЕРИСТИК ПРОГРАММ НА ОСНОВЕ 
ПРОЦЕДУРНО-ОРИЕНТИРОВАННЫХ МЕТРИК ……………... 
 
175 

 
3.1. Теоретические сведения ………………………………………. 175 
 
 
3.1.1. Метрики на основе функциональных указателей …….. 175 
 
 
3.1.2. Связность модулей ……………………………………… 179 
 
 
3.1.3. Сцепление модулей ……………………………………... 185 
 
3.2. Задача «Сортировка строк массива»…………..……………… 190 
 
 
 
Реализация программы ………………………………….. 190 
 
 
 
Оценка характеристик программы ……………………… 192 

Оглавление 
6 

 
3.3. Задача «Заполнение массива в шахматном порядке» …..…… 196 
 
 
 
Реализация программы ………………………………….. 197 
 
 
 
Оценка характеристик программы ……………………… 198 
 
3.4. Задача «Замена цифр на символ»……………………………… 202 
 
 
 
Реализация программы ………………………………….. 202 
 
 
 
Оценка характеристик программы ……………………… 203 
 
3.5. Задачи для самостоятельного решения ………..……………... 206 

Практическое занятие 4 
 
 

ОЦЕНКА ХАРАКТЕРИСТИК ПРОГРАММ НА ОСНОВЕ 
ОБЪЕКТНО-ОРИЕНТИРОВАННЫХ МЕТРИК …………….…... 
 
209 

 
4.1. Метрики Мартина ……………………..………………………. 209 
 
 
4.1.1. Теоретические сведения ………………………………... 209 
 
 
4.1.2. Задача «Платеж за электроэнергию» ………………….. 211 
 
 
 
Реализация программы …………………………………. 212 
 
 
 
Оценка характеристик программы …………………...… 214 
 
 
4.1.3. Задача «Геометрия окружности и прямоугольника» … 216 
 
 
 
Реализация программы …………………………………. 217 
 
 
 
Оценка характеристик программы ……………………… 219 
 
 
4.1.4. Задачи для самостоятельного решения ………………... 221 
 
4.2. Метрики Чидамбера и Кемерера ……………………………… 223 
 
 
4.2.1. Теоретические сведения ………………………………... 223 
 
 
4.2.2. Задача «Платеж за электроэнергию» ………………….. 227 
 
 
 
Реализация программы …………………………………. 228 
 
 
 
Оценка характеристик программы ……………………… 228 
 
 
4.2.3. Задача «Геометрия окружности и прямоугольника» … 232 
 
 
 
Реализация программы …………………………………. 232 
 
 
 
Оценка характеристик программы …………………….. 233 
 
 
4.2.4. Задачи для самостоятельного решения ……………….. 236 
 
4.3. Метрики Лоренца и Кидда ……………………….…………… 239 
 
 
4.3.1. Теоретические сведения ……………………………….. 239 
 
 
4.3.2. Задача «Платеж за электроэнергию» ………………….. 243 
 
 
 
Реализация программы ………………………………….. 244 
 
 
 
Оценка характеристик программы ……………………… 244 
 
 
4.3.3. Задача «Геометрия окружности и прямоугольника» … 250 
 
 
 
Реализация программы ………………………………….. 251 
 
 
 
Оценка характеристик программы ……………………… 251 
 
 
4.3.4. Задачи для самостоятельного решения ………………... 258 
 
4.4. Метрики Абреу …….…………………..………………………. 261 
 
 
4.4.1. Теоретические сведения ………………………………... 261 

Оглавление 
7 

 
 
4.4.2. Задача «Платеж за электроэнергию» ………………….. 267 
 
 
 
Реализация программы …………………………………. 268 
 
 
 
Оценка характеристик программы ……………………… 268 
 
 
4.4.3. Задача «Геометрия окружности и прямоугольника» … 270 
 
 
 
Реализация программы ………………………………….. 271 
 
 
 
Оценка характеристик программы ……………………… 271 
 
 
4.4.4. Задачи для самостоятельного решения ………………... 277 

Практическое занятие 5 
 
 

ОЦЕНКА НАДЕЖНОСТИ ПРОГРАММНЫХ СРЕДСТВ ……… 285 

 
5.1. Модель Джелински – Моранды ………………………………. 285 
 
 
5.1.1. Теоретические сведения ……………………………… 
285 
 
 
5.1.2. Задачи по применению модели Джелински – Моранды  287 
 
 
 
Определение количества ошибок до начала  
тестирования ……………………………………………… 287 
 
 
 
Определение количества ошибок в программе, 
не устраненных после проведения тестирования ……… 288 
 
 
5.1.3. Задачи для самостоятельного решения ………………... 289 
 
5.2. Статистическая модель Миллса ………………………………. 291 
 
 
5.2.1. Теоретические сведения ………………………………... 291 
 
 
5.2.2. Задачи по применению модели Миллса ………………. 292 
 
 
 
Задача 1 …………………………………………………… 292 
 
 
 
Задача 2 …………………………………………………… 293 
 
 
 
Задача 3 …………………………………………………… 294 
 
 
 
Задача 4 …………………………………………………… 295 
 
 
 
Задача 5 …………………………………………………… 295 
 
 
 
Задача 6 …………………………………………………… 297 
 
 
5.2.3. Задачи для самостоятельного решения ………………... 300 
 
5.3. Эвристическая модель …………………………….…………… 302 
 
 
5.3.1. Теоретические сведения ………………………………... 302 
 
 
5.3.2. Задачи по применению эвристической модели ……….. 302 
 
 
 
Задача 1 …………………………………………………… 302 
 
 
 
Задача 2 …………………………………………………… 303 
 
 
 
Задача 3 …………………………………………………… 304 
 
 
 
Задача 4 …………………………………………………… 304 
 
 
5.3.3. Задачи для самостоятельного решения ………………... 305 
 
5.4. Модель Нельсона ………………………………………………. 307 
 
 
5.4.1. Теоретические сведения ………………………………... 307 
 
 
5.4.2. Задачи по применению модели Нельсона ……….……. 309 

Оглавление 
8 

 
 
 
Задача 1 …………………………………………………… 309 
 
 
 
Задача 2 …………………………………………………… 310 
 
 
 
Задача 3 …………………………………………………… 311 
 
 
 
Задача 4 …………………………………………………… 311 
 
 
5.4.3. Задачи для самостоятельного решения ………………... 312 

Практическое занятие 6 
 
 

СТАНДАРТИЗАЦИЯ ПРОГРАММНЫХ СРЕДСТВ ………...….. 317 

 
6.1. Теоретические сведения ………………………………..……... 317 
 
6.2. Задачи по определению показателей качества …..…………... 340 
 
 
6.2.1. Задача по оценке надежности ………………………….. 340 
 
 
6.2.2. Задача по оценке надежности и корректности ………... 345 
 
 
6.2.3. Задача по оценке эффективности и универсальности ... 352 
 
6.3. Задачи для самостоятельного решения …………..…………... 363 

Практическое занятие 7 
 
 

СЕРТИФИКАЦИЯ ПРОГРАММНЫХ СРЕДСТВ ……………….. 379 

 
7.1. Теоретические сведения ………………………………..……... 379 
 
7.2. Задачи по применению модели бесприоритетного  
       обслуживания …………………………………………….......... 381 
 
 
7.2.1. Задача 1 ……………………………………...................... 381 
 
 
7.2.2. Задача 2 ……………………………………...................... 382 
 
 
7.2.3. Задача 3 ……………………………………...................... 383 
 
 
7.2.4. Задачи для самостоятельного решения ………………... 385 
 
7.3. Задачи по применению модели обслуживания  
       с относительными приоритетами ……………………………... 386 
 
 
7.2.1. Задача 1 ……………………………………...................... 387 
 
 
7.2.2. Задача 2 ……………………………………...................... 388 
 
 
7.2.3. Задачи для самостоятельного решения ………………... 390 
 
7.4. Задачи по применению модели обслуживания  
       с абсолютными приоритетами ………………………………... 392 
 
 
7.3.1. Задача 1 ……………………………………...................... 392 
 
 
7.3.2. Задача 2 ……………………………………....................... 394 
 
 
7.3.3. Задачи для самостоятельного решения ………………... 396 

Рекомендуемая литература ………………..………………………… 399 
 

Предисловие 

Разработка программного обеспечения представляет собой процесс, в который вовлечено множество разработчиков. Непрерывное 
повышение сложности функций, реализуемых программами в информационных системах, приводит к увеличению их объема и требует большей трудоемкости создания. Соответственно сложности программ возрастает количество выявляемых и остающихся в них дефектов и ошибок, что отражается на их качестве. Достаточно часто 
разрабатываются комплексы программ объемом в миллионы строк 
текста, которые принципиально не могут быть безошибочными. Поэтому проблема оценки качества созданных программных средств 
всегда была и остается очень важной задачей, решение которой позволяет на ранних стадиях жизненного цикла определить характеристики создаваемой программы. 
Ряд существующих методик направлены на оценку параметров 
будущих программ, что позволяет адекватно оценить трудозатраты и 
стоимость разработки. Многие ошибки, обусловленные неопределенностью или некорректностью технических заданий и спецификаций требований, могут и должны быть выявлены на ранних 
стадиях проектирования, что способствует его ускорению и повышению качества. Стратегической задачей в жизненном цикле современных информационных систем стало обеспечение качества программных средств и баз данных. Для решения такой задачи необходимо применение специализированных методик, разработанных в 
различное время. Разнообразие таких методик позволяет применять 
их на различных стадиях жизненного цикла программ – от начала 
разработки до сертификации программного обеспечения.  
Данное издание посвящено практической части процесса оценки 
качества программных средств, что актуально при изучении учебной 
дисциплины «Стандартизация, сертификация и управление качеством 
программного обеспечения». Разделы книги организованы по тематическому принципу таким образом, чтобы их было удобнее применять в 
процессе проведения практических занятий, продолжающих процесс 
изучения курса. В каждом разделе приведены краткие теоретические 
сведения, касающиеся той или иной методики, рассмотрены примеры 
решения типовых задач по каждой из них. Предложен набор задач, 
предназначенных для самостоятельного решения. 

Предисловие 
10 

Практическое занятие 1 посвящено изучению оценки характеристик программных средств на основе лексического анализа текста 
программ. Рассматриваются задачи, основанные на применении методик Холстеда, Джилба и Чепина. 
В рамках практического занятия 2 рассматриваются приемы 
оценки структурной сложности программ на основе применения метрики Маккейба. 
Практическое занятие 3 позволяет освоить методы оценки характеристик программных средств на основе процедурно-ориентированных 
метрик, в частности – рассчитывать количество функциональных указателей, оценивать связность и сцепление модулей в программе. 
Оценка характеристик программ на основе применения объектноориентированных метрик осуществляется в материале практического 
занятия 4, где рассматриваются задачи на применение метрик Мартина, Чидамбера и Кемерера, Лоренца и Кидда, Абреу. 
Практическое занятие 5 посвящено освоению приемов оценки 
надежности программ на основе применения моделей Джелинского – 
Моранды, Миллса, Нельсона, эвристической модели. 
Материал практического занятия 6 предназначен для тренировки 
навыков при оценке качества программ на этапе стандартизации. 
Практическое занятие 7 предлагает проведение оценки программ 
на этапе сертификации, т. е. рассматривает процессы, протекающие 
уже после внедрения программных средств в работу информационных систем. 
Книга предназначена, в первую очередь, для студентов специальностей «Программная инженерия» и «Бизнес-информатика» при изучении учебной дисциплины «Стандартизация, сертификация и управление качеством программного обеспечения», для преподавателей при 
подготовке занятий, а также для разработчиков программного обеспечения, которые хотели бы более подробно изучить методы, применяемые при оценке качества программных средств. В то же время и сложившиеся специалисты, развивающие навыки или применяющие свои 
знания для разработки и внедрения программного обеспечения, также 
найдут полезные сведения как в практическом, так и методологическом плане. 

Практическое занятие 1 

ОЦЕНКА ХАРАКТЕРИСТИК ПРОГРАММ 
НА ОСНОВЕ ЛЕКСИЧЕСКОГО АНАЛИЗА 

1.1. Метрики Холстеда 

1.1.1. Теоретические сведения 

Особенности формирования словаря программы 

Любая программа определяет последовательность действий над 
операндами с помощью операторов. Исходный текст программы, записываемой на том или ином языке программирования представляет 
собой набор текстовых строк, которые записываются по специальным правилам, и в том числе имеет свои элементы. Операнд – это 
некоторый объект или величина, обрабатываемая в программе, а оператор представляет собой обозначение конкретного действия, выполняемого по отношению к операнду. 
Если считать, что словарь любой программы состоит только из 
имен операторов и операндов, то тексты программ всегда удовлетворяют следующим условиям: 
• маловероятно появление какого-либо имени оператора или 
операнда много раз подряд – языки программирования, как правило, 
позволяют создавать такие конструкции, в которых подобные фрагменты программы имеют минимальную длину; 
• циклическая организация программ исключает многократное 
повторение какой-либо группы операторов и операндов – более компактные варианты текстов получаются при разумном использовании 
развитых возможностей языков программирования, причем многообразие языков предоставляет богатую палитру инструментов; 
• блоки программ, требующие периодического повторения при 
ее исполнении, обычно оформляются как процедуры или функции, 
поэтому в текстах программ достаточно применения только их имен; 

Практическое занятие 1 
12 

• имя каждого операнда должно появляться в тексте программы 
хотя бы один раз – многие среды программирования обращают внимание программистов на неиспользуемые имена, которые следует 
удалять из текста программ, чтобы сократить объем памяти, используемой при объявлении переменных. 
Схематично эти условия, относящиеся к тексту программ, отображены на рис. 1.1. 

 

Рис. 1.1. Условия образования словаря программы 

В настоящем издании будут в основном рассматриваться примеры программ, разработанных на языках программирования С, С++ и 
С#, поэтому описание будет проводиться именно для них. 
В рассматриваемых языках программирования добавление к набору символов, являющихся выражением, знака «;» превращает его в 
оператор. Так, набор символов «i++» является выражением, а конструкция «i++;» уже является оператором (или statement по терминологии Кернигана и Ритчи [3]). 
При разработке программ существует ряд особенностей, связанных со скобками: круглыми, фигурными и квадратными.  
Одним из действий, которые могут быть записаны в исходном 
тексте программ, является вызов функций, записываемый в формате 

Имя_функции(). 

В словаре операторов и операций, которые будут формироваться 
далее в примерах, будем различать вызов функции по появлению пары круглых скобок и следующим перед ними именем. Следует обра
Лексический анализ программ  
13 

тить внимание, что при этом нужно отличать пару круглых скобок, 
используемых с другими языковыми конструкциями (например, с 
операторами if или for). 
При формировании словаря операторов и операций учитываются 
еще и фигурные скобки. Они, казалось бы, не вызывают никаких действий, но связаны с ограничением области видимости переменных. 
Операции, которые связаны с квадратными скобками, это обращение к элементам массива. Действия, связанные с их интерпретацией, обеспечивают доступ к элементам массивов.  
Операторы и операции связаны с объектами, над которыми они 
выполняются. Таким объектами являются, прежде всего, константы, 
простые переменные, массивы и структуры, однако подобными объектами (операндами) являются и функции, а также классы и методы.  
Сделаем еще одно важное замечание. При формировании словарей будем учитывать элементы, используемые в разделах описаний, 
поскольку эти элементы также можно рассматривать как операнды 
или операторы.  

Измеряемые свойства программ 

При разработке программы формируется ее текст на каком-либо 
языке программирования, реализующий алгоритм получения искомого результата на основании обработки заданной совокупности данных. В тексте программы можно идентифицировать все операнды, 
определенные как переменные или константы, используемые в данной реализации. Аналогичным образом идентифицируются все операторы, определенные как символы или комбинации символов, 
влияющие на способ обработки, изменение значения или порядок 
следования и преобразования операндов. Исходя из идентификации 
операторов и операндов, можно определить ряд измеримых категорий, обязательно присутствующих в версиях любого алгоритма. Они 
определяются метриками, с помощью которых могут быть получены 
основные характеристики качества программ. 
В состав измеримых свойств любого представления алгоритма 
(или программы) могут быть включены следующие метрические характеристики: 
• η1 – число простых (уникальных) операторов, появляющихся в 
данной реализации; 

Практическое занятие 1 
14 

• η2 – число простых (уникальных) операндов, появляющихся в 
данной реализации; 
• N1 – общее число всех операторов, появляющихся в данной 
реализации; 
• N2 – общее число всех операндов, появляющихся в данной реализации; 
• f1j – число появлений в программе j-го оператора, где j = 1, 2, 3, 
..., η1; 
• f2j – число появлений в программе j-го операнда, где j = 1, 2, 3, 
..., η2. 
Учитывая эти основные метрические характеристики для программы, в конкретной реализации текста программы можно определить:  
• словарь η = η1 + η2; 
• длину реализации программы N = N1 + N2; 
• длину программы Ñ = (η1 · log2 η1) + (η2 · log2 η2). 
Следует отметить, что помимо своего прямого назначения метрики 
длины программы и длины реализации можно использовать для выявления несовершенств программирования, которые являются следствием применения не самых удачных приемов программирования. Если 
расчетные значения длины программы и длины реализации отличаются более чем на 10 %, то это свидетельствует о возможном наличии в 
программе следующих шести классов несовершенств: 
1. Наличие последовательности дополняющих друг друга операторов к одному и тому же операнду, например А + C – А. Понятно, 
что в подобном случае будет выполнено два совершенно ненужных 
действия, дополняющих переменную С одной и той же величиной, 
взятой с противоположными знаками. 
2. Наличие неоднозначных операндов, например A = D и A = С. 
При выполнении таких действий программа будет поставлена в затруднительное положение, поскольку присвоение осуществляется путем приравнивания значения операнда, указанного в левой части, значению, приведенному в правой части выражения. В лучшем случае 
произойдет ненужное присвоение нового значения уже имеющемуся. 
3. Наличие синонимичных операндов, например А = В и С = В. 
Поскольку одно и то же значение должно быть присвоено разным 
переменным, то для данного примера переменная В вообще может не 
использоваться. Более лаконичным вариантом является простое приравнивание значений переменных А и С. 

Лексический анализ программ  
15 

4. Наличие общих подвыражений, например: 

(А + В) · С + D · (А + В).  

Здесь применено совсем не обязательное повторение суммирования переменных А и В, что приводит к дополнительному времени 
выполнения программы. 
5. Ненужное присваивание, например С = А +В, если переменная 
С используется в программе только один раз. При однократном выполнении каких-либо операций над переменной нецелесообразно 
вводить дополнительный операнд, это ведет к увеличению объема 
памяти, резервируемой под переменные программы, и увеличивает 
размер словаря. 
6. Наличие выражений, которые не представлены в свернутом 
виде как произведение множителей, например: 

X · X + 2 · X · Y + Y · Y.  

Данное преобразование можно представить как  
(X + Y) · (X + Y),  
т. е. свернуть выражение до квадрата суммы переменных Х и Y. 
Такое представление окажется более лаконичным и сократит 
время, необходимое для выполнения программы. 
В соответствии с приведенными определениями применяются 
следующие соотношения: 

1
1,
1
;
j
j
N
f

η

=
=∑
                                            (1.1.1) 

2
2,
1
;
j
j
N
f

η

=
=∑
                                       
 (1.1.2) 

2

,
1
1
.
i j
i
j
N
f

η

=
=
=∑∑
                                          (1.1.3) 

Таким образом, длина реализации и объем программы определяются 
исключительно на основе анализа текста программы путем подсчета 
количества операндов и операторов, а также числа их вхождений в текст 
программы, т. е. на основе лексического анализа текста программы. 
Длина программы представляет собой математическое ожидание количества слов в тексте программы при фиксированном словаре.  

Практическое занятие 1 
16 

Другой важной характеристикой программы является ее объем V. 
В отличие от длины программы N объем измеряется не количеством 
слов, а числом двоичных разрядов. Если в словаре имеется η слов, то 
для задания номера любого из них требуется минимум 
2
log η  бит.  

Объем программы определяется следующим образом: 

 
2
2
2
log
log
V
N
=
⋅
η = η⋅
η .                            (1.1.4) 

Тогда с точностью до обозначений полученные соотношения 
окажутся совершенно идентичными, хотя смысл их будет различным: 

2
log
N ≈ η⋅
η ;                                          (1.1.5)  

2
2
log
V = η⋅
η.                                            (1.1.6) 

В первом случае зафиксирована взаимная связь между длиной 
программы N и размером словаря η, во втором – между величиной 
словаря и объемом программы V. Следовательно, по известному размеру словаря η можно найти значения N и V. Идентичность этих выражений говорит о том, что соотношение между величиной словаря и 
длиной текста единственно и взаимно однозначно.  
Выше было отмечено, что словарь программы состоит только из 
операторов и операндов. Учитывая принятые обозначения, соотношение Холстеда примет следующий вид: 

1
2
2
2
1
2
1
2
2
2
1
2
log
log
log
log
N
N
N
= η ⋅
η+ η ⋅
η ≈ η ⋅
η + η ⋅
η =
+
.    (1.1.7) 

Как правило, при проведении статистических исследований текстов программ к словарю операторов относят следующие элементы:  
• имена арифметических и логических операций; 
• присваивания; 
• условные и безусловные переходы; 
• разделители; 
• скобки (парные); 
• имена процедур и функций; 
• выражения типа BEGIN...END, IF...THEN...ELSE, DO...WHILE. 
Выражения типа BEGIN...END, IF...THEN...ELSE, DO...WHILE и 
им подобные, осуществляющие блочную группировку операторов, 
при этом рассматриваются как единые операторы (то же относится и 
к парам скобок). 

Доступ онлайн
от 484 ₽
В корзину