Оценка качества программного обеспечения: Практикум
Покупка
Основная коллекция
Тематика:
Прикладное программное обеспечение
Издательство:
Издательский Дом ФОРУМ
Год издания: 2022
Кол-во страниц: 400
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-8199-0516-6
ISBN-онлайн: 978-5-16-110116-2
Артикул: 186600.07.01
Доступ онлайн
В корзину
Рассмотрены вопросы опенки характеристик и измерения метрик программного обеспечения по наиболее известным методикам, охватывающим лексический анализ программ, оценку структурной сложности, процедурно- и объектно-ориентированные метрики, надежность программ, опенку характеристик при стандартизации и сертификации программного обеспечения. Приведены теоретические сведения, необходимые для решения задач, рекомендации по решению типовых задач при оценке качества программного обеспечения. Предложены наборы задач для самостоятельного решения.
Для студентов, преподавателей, разработчиков программного обеспечения, а также специалистов и менеджеров широкого профиля.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 38.03.05: Бизнес-информатика
- ВО - Магистратура
- 02.04.03: Математическое обеспечение и администрирование информационных систем
- 38.04.05: Бизнес-информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Б.В. Черников, Б.Е. Поклонов ОЦЕНКА КАЧЕСТВА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ Практикум Под редакцией Б.В. Черникова Рекомендовано УМО в области экономики, менеджмента, логистики и бизнес-информатики в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению «Бизнес-информатика» 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 и им подобные, осуществляющие блочную группировку операторов, при этом рассматриваются как единые операторы (то же относится и к парам скобок).
Доступ онлайн
В корзину