final-report-grechanik-2010 (решения 2010 года)

PDF-файл final-report-grechanik-2010 (решения 2010 года) Практика (63380): Другое - 9 семестр (1 семестр магистратуры)final-report-grechanik-2010 (решения 2010 года) - PDF (63380) - СтудИзба2020-08-20СтудИзба

Описание файла

Файл "final-report-grechanik-2010" внутри архива находится в следующих папках: решения 2010 года, bitmap_shift_right.jessie. PDF-файл из архива "решения 2010 года", который расположен в категории "". Всё это находится в предмете "практика" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

Московский Государственный Университет имени М.В.ЛомоносоваФакультет Вычислительной Математики и КибернетикиОтчёт по практикумуВерификация программного обеспечения. Функцияbitmap_shift_right.Выполнил:студент 528 группыГречаник Сергей АлександровичПреподаватель:доктор физ.-мат. наукПетренко Александр КонстантиновичМосква, 2010Содержание1 Постановка задачи1.1 Задача по работе с алгоритмом . . . . . .

. . . . . . . . . . . . . . . . . . . .222 Тестирование алгоритма2.1 Описание спецификации целевой функции . . . . . . . . . . . . . . . . . . . .2.1.1 Предусловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.1.2 Постусловие . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.2 Обоснование выбранных ветвей функциональности . . . . . . . . . . . . . . .2.3 Характеристики покрытия исходного кода реализации . . . . . . . . . . . . .2.4 Сравнение выбранных ветвей функциональности и ветвей покрытия по исходному коду . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .2.5 Описание принципов выбора тестовых данных и их количественных характеристик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.6 Оценки минимальности набора тестовых данных с точки зрения покрытияветвей функциональности и исходного кода . . . . . . . . . . . .

. . . . . . .2.7 Описание ошибок в реализации, которые были выявлены при помощи тестирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4444443 Верификация алгоритма3.1 Описание спецификации требований в синтаксисе ACSL . . . . . . . . . . .3.2 Ошибки в реализации, которые были выявлены при помощи верификации3.3 Описание инвариантов и вариантов . . .

. . . . . . . . . . . . . . . . . . . .3.4 Количество и классификация сгенерированных лемм . . . . . . . . . . . . .3.5 Преобразование функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3.6 Неисследованные пути . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .3.7 Выводы, сделанные по результатам верификации . . . . . . . . . . . . . . .666677884 Заключение.......55551011Постановка задачиЦелевой алгоритм осуществляет сдвиг вправо битового массива. Битовый массив представлен в виде массива чисел типа unsigned long таким образом, что он является конкатенацией битовых представлений соответствующих чисел.void __bitmap_shift_right(unsigned long *dst,const unsigned long *src, int shift, int bits){int k, lim = BITS_TO_LONGS(bits), left = bits % BITS_PER_LONG;int off = shift/BITS_PER_LONG, rem = shift % BITS_PER_LONG;unsigned long mask = (1UL << left) - 1;for (k = 0; off + k < lim; ++k) {unsigned long upper, lower;if (!rem || off + k + 1 >= lim)upper = 0;else {upper = src[off + k + 1];if (off + k + 1 == lim - 1 && left)upper &= mask;}lower = src[off + k];if (left && off + k == lim - 1)lower &= mask;dst[k] = upper << (BITS_PER_LONG - rem) | lower >> rem;if (left && k == lim - 1)dst[k] &= mask;}if (off)memzero(&dst[lim - off], off);}Алгоритм работает следующим образом:1.

Определяется, какое количество элементов нового массива-представления не будутзаведомо нулевыми.2. Для каждого такого элемента считается его значение как некоторая функция отсдвига, количества бит и двух соседних элементов исходного массива-представления.3. Оставшиеся элементы заполняются нулями.1.1Задача по работе с алгоритмом1.

Разработка тестов на основе формальных спецификаций.• Разработка формальной спецификации функциональных требований к работеалгоритма на спецификационном расширении языка Си (SeC).2• Разработка тестовых сценариев, обеспечивающих покрытие всех строк кода реализации алгоритма, с помощью инструмента CTesK.2. Аналитическое доказательство корректности алгоритма.• Добавление в исходный файл с реализацией целевой функции– предусловий и постусловий целевой функции в виде комментариев в соответствии с синтаксисом ACSL– инвариантов и вариантов циклов в целевой функции в виде комментариевв соответствии с синтаксисом ACSL• Проверка того, какие из лемм, сгенерированных инструментом Frama-С, могутбыть доказаны автоматически.• Доказательство оставшихся утверждений при помощи инструмента PVS.32Тестирование алгоритма2.1Описание спецификации целевой функцииvoid __bitmap_shift_right(unsigned long *dst,const unsigned long *src,int shift,int bits);2.1.1Предусловие• Входной массив должен быть битовым массивом длины не менее bits.• Длина массива (bits) должна быть неотрицательной.• Величина сдвига (shift) должна быть неотрицательной и не должна превышатьдлину массива.2.1.2Постусловие• i-й элемент результирующего массива должен быть равен (i + shift)-му элементувходного массива, если он существует, и нулю в противном случае.2.2Обоснование выбранных ветвей функциональностиБыли выбраны следующие ветви функциональности:• Длина массива 0, сдвиг 0.• Длина массива ненулевая, сдвиг 0.• Длина массива ненулевая, сдвиг ненулевой и не равен длине массива.• Длина массива ненулевая, сдвиг равен длине массива.Ветви были выбраны на основе структуры множества допустимых входных параметров.2.3Характеристики покрытия исходного кода реализацииПокрытие исходного кода во время тестирования составляет:• 100% строк исходного кода.• 100% ветвей исходного кода.• 100% вызовов функций исходного кода.42.4Сравнение выбранных ветвей функциональности и ветвей покрытия по исходному кодуВыбранные ветви функциональности соответствуют более высокоуровневому взглядуна алгоритм, поэтому практически ортогональны ветвям покрытия по исходному коду.2.5Описание принципов выбора тестовых данных и их количественных характеристикТестовые данные формировались при помощи отображения множества троек целыхчисел (length, prefix , shift) в домен функции следующим образом:• Входной битовый массив имеет длину length, первые prefix его элементов равны 1,остальные 0• bits = length• shift = shiftНабор троек (length, prefix , shift) формировался следующим образом:• length пробегает от 0 до 3 · BITS_PER_LONG с шагом BITS_PER_LONG/2• prefix пробегает от max(0, length−2·BITS_PER_LONG) до length с шагом BITS_PER_LONG/4• shift пробегает от 0 до length с шагом 1(BITS_PER_LONG - количество бит в unsigned long)Выбор тестовых данных был обусловлен тем, что работа алгоритма сильно зависит отвыравнивания по BITS_PER_LONG.2.6Оценки минимальности набора тестовых данных с точки зрения покрытия ветвей функциональности и исходного кодаНабор тестовых данных не является минимальным, так как его мощность превышаетколичество ветвей функциональности или исходного кода.2.7Описание ошибок в реализации, которые были выявлены припомощи тестированияОшибки в реализации не были выявлены.53Верификация алгоритма3.1Описание спецификации требований в синтаксисе ACSLrequires bits >= 0 && shit >= 0 && shit <= bits&& \valid_range(dst, 0, (bits+31)/32)&& \valid_range(src, 0, (bits+31)/32)&& \base_addr(src) != \base_addr(dst)&& bits + 31 <= 2147483647;ensures same_bits(src, dst, shit, 0, bits);Данная спецификация отличается от предыдущей наличием ограничения на максимальное количество бит, чтобы не произошло арифметическое переполнение.Определения вспомогательных функций:logic integer bit_at{L}(unsigned long* a, integer n, integer k) =k < n ? (a[k / BITS_PER_LONG] >> (k % BITS_PER_LONG)) & 1 : 0;predicate same_bits{L}(unsigned long* a, unsigned long* b,integer sa, integer sb, integer n) =\forall integer k;0 <= k < n ==> bit_at(a, n, sa + k) == bit_at(b, n, sb + k);3.2Ошибки в реализации, которые были выявлены при помощиверификацииБыла выявлена ошибка в следующем операторе:dst[k] = upper << (BITS_PER_LONG - rem) | lower >> rem;Если rem равен 0 (т.е.

сдвиг происходит на количество бит кратное BITS_PER_LONG, топроисходит сдвиг влево на BITS_PER_LONG. Это число равно битовой длине значений типарезультата, а поэтому сдвиг на данное число по стандарту может приводить к неопределённому поведению.3.3Описание инвариантов и вариантовИнвариант цикла выглядит следующим образом:loop invariantk >= 0 &&off + k <= 2147483647 &&k <= lim &&k + 1 <= 2147483647 &&off + k >= 0 &&(\forall integer n; (0 <= n < k) ==>(dst[n] == f(src, shit, bits, lim, left, off, rem, mask, n)));Первые 5 инвариантов устанавливают ограничения на итерационную переменную k.Они вводились по мере возникновения трудностей у автоматического прувера.Последний инвариант описывает, какими значениями заполняется массив dst.Вариант цикла очевиден и записывается следующим образом:loop variant lim - k;63.4Количество и классификация сгенерированных леммТолько для функции __bitmap_shift_right было сгенерировано:• Условия верификации: 24• Условия корректности: 91• Условия завершимости: 2Всего (в том числе и для вспомогательных функций) было сгенерировано 197 лемм.Также было введено 26 вспомогательных лемм.3.5Преобразование функцииИсходная функция содержала большое количество выражений типа bool, что приводило к экспоненциальному увеличению количества генерируемых лемм (более тысячи).Из-за этого возрастало время автоматического доказательства лемм, а также время разбора pvs-файла.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5209
Авторов
на СтудИзбе
430
Средний доход
с одного платного файла
Обучение Подробнее